Liệt kê các thiết bị được kết nối trong hotspot thông qua thiết bị đầu cuối


16

Tôi kết nối điểm phát sóng của mình thông qua điểm nóng ap và tôi có thể thấy các thông báo bật ra hiển thị thiết bị mới được kết nối , thiết bị bị ngắt kết nối . (Vì tôi muốn tìm hiểu về các đặc quyền để truy cập sử dụng hoặc không sử dụng điểm phát sóng.)

Làm cách nào để liệt kê thiết bị được kết nối qua thiết bị đầu cuối?

Câu trả lời:


28

arp -a sẽ trả về cho bạn một danh sách tất cả các thiết bị được kết nối.


4
cũng arp -anhữu ích --- để tránh sự chậm trễ lâu khi cố gắng giải quyết các địa chỉ IP.
Rmano

arp không cập nhật thời gian thực
Luis

10

Nếu bạn muốn có một danh sách chi tiết hơn, tôi đã điều chỉnh tập lệnh này cho ap-hotspottập lệnh xuất phát từ 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

sao chép nó trong một tập tin trong PATH của bạn --- ví dụ ~/bin/show_wifi_clients, làm cho nó có thể thực thi được chmod +xvà thưởng thức.


Một kịch bản tuyệt vời, cảm ơn vì đã chia sẻ, :) ...
George Udosen

1
các biến trong printf " %-20s %-30s %-20s\n" $ip $host $mac"phải được trích dẫn gấp đôi để in chính xác. Chỉnh sửa câu trả lời tương tự ...
Magguu

@Magguu bạn đúng, chỉnh sửa được chấp nhận.
Rmano

8

Hiển thị danh sách các thiết bị: (thay thế <interface>bằng tên giao diện của giao diện wifi của bạn)

iw dev <interface> station dump

Nếu bạn không biết tên giao diện wifi của mình, hãy sử dụng lệnh này để tìm ra tên giao diện:

iw dev

Mặc dù câu trả lời này là tốt trong trạng thái hiện tại của nó, nó vẫn có thể được cải thiện. Có lẽ bạn có thể thêm một số ví dụ đầu ra hoặc giải thích thêm về lệnh này làm gì?
Kaz Wolfe


0

Điều này cũng có được các nhà cung cấp mac của thiết bị và cũng có thể gắn nhãn mac của thiết bị của bạn

yêu cầu 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)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.