Auflisten der Geräte, die über das Terminal mit dem Hotspot verbunden sind

16

Ich verbinde meinen Hotspot über einen AP-Hotspot und sehe, wie Benachrichtigungen angezeigt werden , wenn ein neues Gerät angeschlossen oder nicht angeschlossen ist . (Weil ich mehr über die Zugriffsrechte erfahren möchte, um den Hotspot zu verwenden oder nicht zu verwenden.)

Wie kann ich das über das Terminal verbundene Gerät auflisten?

TechJhola
quelle

Antworten:

28

arp -a Sie sollten eine Liste aller angeschlossenen Geräte erhalten.

larouxn
quelle
4
Dies arp -anist auch nützlich, um lange Verzögerungen beim Auflösen von IP-Adressen zu vermeiden.
Rmano
arp aktualisiert nicht in Echtzeit
Luis
10

Wenn Sie eine detailliertere Liste wünschen, habe ich dieses Skript für das ap-hotspotSkript von webupd8 angepasst :

#!/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

Kopieren Sie es in eine Datei in Ihrem PATH ~/bin/show_wifi_clients- machen Sie es beispielsweise mit ausführbar chmod +xund genießen Sie es.

Rmano
quelle
Ein schönes und verrücktes Drehbuch, danke fürs Teilen,
:)
1
Die Variablen in printf " %-20s %-30s %-20s\n" $ip $host $mac"müssen in doppelte Anführungszeichen gesetzt werden, um korrekt zu drucken. Bearbeitet die Antwort ebenfalls ...
Magguu
@Magguu du hast recht, bearbeiten akzeptiert.
Rmano
8

Liste der Geräte <interface>anzeigen : (durch den Schnittstellennamen Ihrer WLAN-Schnittstelle ersetzen )

iw dev <interface> station dump

Wenn Sie den Namen Ihrer WLAN-Schnittstelle nicht kennen, verwenden Sie diesen Befehl, um den Namen der Schnittstelle herauszufinden:

iw dev
muru
quelle
Obwohl diese Antwort im aktuellen Zustand gut ist, könnte sie noch verbessert werden. Vielleicht können Sie einige Beispielausgaben hinzufügen oder auf andere Weise erläutern, was dieser Befehl bewirkt.
Kaz Wolfe
0

Dieser bekommt auch die Mac-Anbieter der Geräte und kann auch den Mac Ihrer Geräte beschriften

benötigt 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
quelle