Liste des appareils connectés dans le hotspot via le terminal

16

Je connecte mon hotspot via ap-hotspot et je peux voir les notifications apparaître affichant un nouvel appareil connecté , un appareil déconnecté . (Parce que je veux en savoir plus sur les privilèges d'accès pour utiliser ou ne pas utiliser le hotspot.)

Comment lister le périphérique connecté via le terminal?

TechJhola
la source

Réponses:

28

arp -a devrait vous renvoyer une liste de tous les appareils connectés.

larouxn
la source
4
arp -anest également utile --- pour éviter de longs retards en essayant de résoudre les adresses IP.
Rmano
arp ne met pas à jour en temps réel
Luis
10

Si vous voulez une liste plus détaillée, j'ai adapté ce script pour le ap-hotspotscript qui vient de webupd8 :

#!/bin/bash

# show_wifi_clients.sh
# Shows MAC, IP address and any hostname info for all connected wifi devices
# written for openwrt 12.09 Attitude Adjustment
# modified by [email protected] from http://wiki.openwrt.org/doc/faq/faq.wireless#how.to.get.a.list.of.connected.clients

echo    "# All connected wifi devices, with IP address,"
echo    "# hostname (if available), and MAC address."
printf  "# %-20s %-30s %-20s\n" "IP address" "lease name" "MAC address"
leasefile=/var/lib/misc/dnsmasq.leases
# list all wireless network interfaces 
# (for MAC80211 driver; see wiki article for alternative commands)
for interface in `iw dev | grep Interface | cut -f 2 -s -d" "`
do
  # for each interface, get mac addresses of connected stations/clients
  maclist=`iw dev $interface station dump | grep Station | cut -f 2 -s -d" "`
  # for each mac address in that list...
  for mac in $maclist
  do
    # If a DHCP lease has been given out by dnsmasq,
    # save it.
    ip="UNKN"
    host=""
    ip=`cat $leasefile | cut -f 2,3,4 -s -d" " | grep $mac | cut -f 2 -s -d" "`
    host=`cat $leasefile | cut -f 2,3,4 -s -d" " | grep $mac | cut -f 3 -s -d" "`
    # ... show the mac address:
    printf "  %-20s %-30s %-20s\n" "$ip" "$host" "$mac"
  done
done

copiez-le dans un fichier dans votre PATH --- par exemple ~/bin/show_wifi_clients, rendez-le exécutable avec chmod +x, et profitez-en.

Rmano
la source
Un joli script fou, merci pour le partage,
:)
1
les variables printf " %-20s %-30s %-20s\n" $ip $host $mac"doivent être entre guillemets pour s'imprimer correctement. Modifié la réponse également ...
Magguu
@Magguu vous avez raison, modification acceptée.
Rmano
8

Afficher une liste d'appareils: (remplacez <interface>par le nom d'interface de votre interface wifi)

iw dev <interface> station dump

Si vous ne connaissez pas le nom de votre interface wifi, utilisez cette commande pour connaître le nom de l'interface:

iw dev
muru
la source
Bien que cette réponse soit bonne dans son état actuel, elle pourrait encore être améliorée. Peut-être pouvez-vous ajouter un exemple de sortie ou expliquer autrement ce que fait cette commande?
Kaz Wolfe
0

Celui-ci obtient également les fournisseurs de mac des appareils et peut également étiqueter le mac de vos appareils

nécessite python3.6

#!/usr/bin/python3.6   
import subprocess
import re
import requests

# Store Mac address of all nodes here
saved = {
    'xx:xx:xx:xx:xx:xx': 'My laptop',
}

# Set wireless interface using ifconfig
interface = "wlp4s0"

mac_regex = re.compile(r'([a-zA-Z0-9]{2}:){5}[a-zA-Z0-9]{2}')


def parse_arp():
    arp_out = subprocess.check_output(f'arp -e -i {interface}', shell=True).decode('utf-8')
    if 'no match found' in arp_out:
        return None

    result = []
    for lines in arp_out.strip().split('\n'):
        line = lines.split()
        if interface in line and '(incomplete)' not in line:
            for element in line:
                # If its a mac addr
                if mac_regex.match(element):
                    result.append((line[0], element))
    return result


def get_mac_vendor(devices):
    num = 0
    for device in devices:
        try:
            url = f"http://api.macvendors.com/{device[1]}"
            try:
                vendor = requests.get(url).text
            except Exception as e:
                print(e)
                vendor = None

        except Exception as e:
            print("Error occured while getting mac vendor", e)

        num += 1
        print_device(device, num, vendor)

def print_device(device, num=0, vendor=None):
    device_name = saved[device[1]] if device[1] in saved else 'unrecognised !!'

    print(f'\n{num})', device_name,  '\nVendor:', vendor, '\nMac:', device[1], '\nIP: ',device[0])

if __name__ == '__main__':
    print('Retrieving connected devices ..')

    devices = parse_arp()

    if not devices:
        print('No devices found!')

    else:
        print('Retrieving mac vendors ..')
        try:
            get_mac_vendor(devices)

        except KeyboardInterrupt as e:
            num = 0
            for device in devices:
                num += 1
                print_device(device, num)
Dev Aggarwal
la source