Listado de dispositivos conectados en punto de acceso a través de terminal

16

Conecto mi punto de acceso a través de ap-hotspot y puedo ver las notificaciones emergentes que muestran un nuevo dispositivo conectado , dispositivo desconectado . (Porque quiero obtener información sobre los privilegios de acceso para usar o no el punto de acceso).

¿Cómo puedo enumerar el dispositivo conectado a través del terminal?

TechJhola
fuente

Respuestas:

28

arp -a debería devolverle una lista de todos los dispositivos conectados.

larouxn
fuente
44
También arp -anes útil --- para evitar largas demoras al tratar de resolver las direcciones IP.
Rmano
arp no se actualiza en tiempo real
Luis
10

Si desea una lista más detallada, adapté este script para el ap-hotspotscript que proviene de 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 [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

cópielo en un archivo en su RUTA --- por ejemplo ~/bin/show_wifi_clients, hágalo ejecutable chmod +xy disfrute.

Rmano
fuente
Un guión agradable y loco, gracias por compartirlo
:)
1
las variables printf " %-20s %-30s %-20s\n" $ip $host $mac"deben estar entre comillas dobles para imprimir correctamente. También
edité
@Magguu tienes razón, edición aceptada.
Rmano
8

Mostrar una lista de dispositivos: (reemplazar <interface>con el nombre de la interfaz de su interfaz wifi)

iw dev <interface> station dump

Si no conoce el nombre de su interfaz wifi, use este comando para averiguar el nombre de la interfaz:

iw dev
muru
fuente
Si bien esta respuesta es buena en su estado actual, aún podría mejorarse. ¿Quizás pueda agregar algún resultado de ejemplo o explicar más sobre lo que hace este comando?
Kaz Wolfe
0

Este también obtiene los proveedores de mac de los dispositivos y también puede etiquetar el mac de sus dispositivos

requiere 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
fuente