Elenco dei dispositivi collegati nell'hotspot tramite il terminale


16

Collego il mio hotspot tramite ap-hotspot e riesco a visualizzare le notifiche che visualizzano il nuovo dispositivo collegato , il dispositivo disconnesso . (Perché voglio conoscere i privilegi per l'accesso da utilizzare o meno dall'hotspot.)

Come posso elencare il dispositivo collegato tramite terminale?

Risposte:


28

arp -a dovrebbe restituirti un elenco di tutti i dispositivi collegati.


4
arp -anè anche utile --- per evitare lunghi ritardi nel tentativo di risolvere gli indirizzi IP.
Rmano,

arp non aggiorna in tempo reale
Luis

10

Se vuoi un elenco più dettagliato, ho adattato questo script per lo ap-hotspotscript che proviene da 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 romano@rgtti.com 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

copiarlo in un file nel PERCORSO --- ad esempio ~/bin/show_wifi_clients, renderlo eseguibile con chmod +xe divertiti.


Una bella sceneggiatura folle, grazie per la condivisione,
:)

1
le variabili in printf " %-20s %-30s %-20s\n" $ip $host $mac"devono essere doppie tra virgolette per stampare correttamente. Modificata anche la risposta ...
Magguu,

@Magguu hai ragione, modifica accettata.
Rmano,

8

Mostra un elenco di dispositivi: (sostituisci <interface>con il nome dell'interfaccia della tua interfaccia wifi)

iw dev <interface> station dump

Se non conosci il nome della tua interfaccia wifi, usa questo comando per scoprire il nome dell'interfaccia:

iw dev

Mentre questa risposta è buona nel suo stato attuale, potrebbe comunque essere migliorata. Forse puoi aggiungere qualche output di esempio o spiegare meglio cosa fa questo comando?
Kaz Wolfe,


0

Questo ottiene anche i fornitori di mac dei dispositivi e può anche etichettare il mac dei tuoi dispositivi

richiede 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)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.