รายการอุปกรณ์ที่เชื่อมต่อในฮอตสปอตผ่านเทอร์มินัล


16

ฉันเชื่อมต่อสปอตของฉันผ่าน AP-ฮอตสปอตและฉันสามารถดูการแจ้งเตือนปรากฏออกมาแสดงอุปกรณ์ใหม่ที่เชื่อมต่อ , อุปกรณ์ตัดการเชื่อมต่อ (เพราะฉันต้องการเรียนรู้เกี่ยวกับสิทธิ์ในการใช้งานหรือไม่ใช้ฮอตสปอต)

ฉันจะแสดงรายการอุปกรณ์ที่เชื่อมต่อผ่านเทอร์มินัลได้อย่างไร

คำตอบ:


28

arp -a ควรคืนรายการอุปกรณ์ที่เชื่อมต่อทั้งหมดให้คุณ


4
ยังarp -anมีประโยชน์ --- เพื่อหลีกเลี่ยงความล่าช้าในการพยายามแก้ไขที่อยู่ IP
Rmano

arp ไม่อัปเดตตามเวลาจริง
Luis

10

หากคุณต้องการรายละเอียดเพิ่มเติมฉันปรับสคริปต์นี้สำหรับap-hotspotสคริปต์ที่มาจาก 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

คัดลอกในไฟล์ใน PATH ของคุณตัวอย่างเช่น~/bin/show_wifi_clientsทำให้มันสามารถใช้chmod +xงานได้และเพลิดเพลิน


เป็นสคริปต์ที่ดีมากขอบคุณสำหรับการแบ่งปัน
:)

1
ตัวแปรในprintf " %-20s %-30s %-20s\n" $ip $host $mac"ต้องถูกยกมาสองครั้งเพื่อพิมพ์อย่างถูกต้อง แก้ไขคำตอบเช่นเดียวกัน ...
Magguu

@Magguu คุณถูกต้องได้รับการยอมรับการแก้ไข
Rmano

8

แสดงรายการอุปกรณ์: (แทนที่<interface>ด้วยชื่ออินเตอร์เฟสของส่วนต่อประสาน wifi ของคุณ)

iw dev <interface> station dump

หากคุณไม่ทราบชื่อของอินเทอร์เฟซ wifi ให้ใช้คำสั่งนี้เพื่อค้นหาชื่ออินเทอร์เฟซ:

iw dev

แม้ว่าคำตอบนี้จะดีในสถานะปัจจุบัน แต่ก็ยังสามารถปรับปรุงได้ บางทีคุณสามารถเพิ่มเอาต์พุตตัวอย่างหรืออธิบายเพิ่มเติมเกี่ยวกับสิ่งที่คำสั่งนี้ทำ
Kaz Wolfe


0

อันนี้ยังได้รับผู้ขาย mac ของอุปกรณ์และยังสามารถติดป้าย mac ของอุปกรณ์ของคุณ

ต้องการ 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)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.