Mendaftarkan perangkat yang terhubung di hotspot melalui terminal


16

Saya menghubungkan hotspot saya melalui ap-hotspot dan saya bisa melihat notifikasi muncul menampilkan perangkat baru yang terhubung , perangkat terputus . (Karena saya ingin belajar tentang hak istimewa untuk menggunakan atau tidak menggunakan hotspot.)

Bagaimana saya bisa mendaftar perangkat yang terhubung melalui terminal?

Jawaban:


28

arp -a akan mengembalikan Anda daftar semua perangkat yang terhubung.


4
juga arp -anberguna --- untuk menghindari penundaan lama mencoba menyelesaikan alamat IP.
Rmano

arp tidak memperbarui waktu nyata
Luis

10

Jika Anda ingin daftar yang lebih rinci, saya mengadaptasi skrip ini untuk ap-hotspotskrip yang berasal dari 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

salin dalam file di PATH Anda --- misalnya ~/bin/show_wifi_clients, membuatnya dapat dieksekusi dengan chmod +x, dan nikmati.


Naskah yang bagus dan gila, terima kasih sudah berbagi,
:)

1
variabel-variabel dalam printf " %-20s %-30s %-20s\n" $ip $host $mac"harus dikutip ganda untuk dicetak dengan benar. Diedit jawabannya juga ...
Magguu

@ Mamguu kamu benar, edit diterima.
Rmano

8

Tampilkan daftar perangkat: (ganti <interface>dengan nama antarmuka antarmuka wifi Anda)

iw dev <interface> station dump

Jika Anda tidak tahu nama antarmuka wifi Anda, gunakan perintah ini untuk mencari tahu nama antarmuka:

iw dev

Meskipun jawaban ini bagus dalam kondisi saat ini, masih bisa ditingkatkan. Mungkin Anda dapat menambahkan beberapa contoh output atau menjelaskan lebih lanjut tentang apa yang dilakukan perintah ini?
Kaz Wolfe


0

Yang ini juga mendapatkan vendor mac perangkat dan juga dapat memberi label mac perangkat Anda

membutuhkan 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)
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.