Necesito una forma de extraer direcciones MAC de mi enrutador para un proyecto de "Quién está en casa"

11

Este tipo de proyecto se ha hecho con Bluetooth antes, pero el alcance de 30 pies y el consumo de batería adicional me dan ganas de hacer ping al enrutador en lugar de los teléfonos de las personas. Sé que los enrutadores realizan un seguimiento de las direcciones MAC únicas para cada dispositivo. Esperaba registrar la dirección de cada teléfono y hacer que el PI verifique periódicamente el enrutador para actualizar una página web dinámica para mostrar quién está en casa.

Quiero saber si hay una manera razonable de obtener esta información con el PI.

Codiush
fuente
¿Qué pasa con wifi (haga ping a los nombres de host de los teléfonos)?
user236012
2
También puede asignar direcciones IP estáticas desde el enrutador, luego usar nmap y las direcciones IP para identificar dispositivos.
ArtOfCode
He hecho algo similar en C # en Windows aquí: stackoverflow.com/questions/2567107/… - Estaré encantado de enviarle el código de versión más reciente si lo desea. No sé qué tan útil es C # en una Raspberry Pi, pero debería apuntarlo en la dirección correcta. Detecta de manera confiable que estoy en casa incluso antes de entrar desde el garaje.
Aric TenEyck
Capturo esto + mucha más información colocando un script bash en el enrutador que publica los resultados en un servidor web cada minuto. Con este sistema, monitorizo ​​y administro el tiempo de actividad de Internet, los clientes conectados, las IP de WAN, la atenuación de fibra y el presupuesto de energía, los servicios VOIP, las contraseñas wifi, etc. El kilometraje varía según la potencia de la CPU de su enrutador.
EDP
1
¿Raspado de pantalla en el enrutador? También puede actualizar a un enrutador basado en Linux (openwrt) y simplemente iniciar sesión y buscar en la caché de arp.
Thorbjørn Ravn Andersen

Respuestas:

6

Es posible. Le sugiero que proporcione su script con credenciales de inicio de sesión y lea la página que muestra la información. Luego, podría analizar su contenido y llenar una matriz con los datos que desee. Dado que estas páginas a veces contienen más información, como fechas y horas, puede crear un registro realmente agradable.

Aquí hay un ejemplo rápido de cómo procedería;

En la página de su enrutador puede encontrar algo como lo siguiente;

<div id="flex">
 <div id="dm-name">
  name : Your_device_name
 </div>
 <div id="dm-ip">
  IP : 192.168.x.xxx
 </div>
 <div id="dm-mac">
  <span>MAC:D4:04:CD:FE:5A:17</span>
 </div>
</div>

Entonces sabemos bien que cada dispositivo aparecerá así. Y que todas las direcciones MAC tendrán la misma longitud.

El guión podría ser algo así;

var string_to_parse = "file read from router.html";
cursor = 0;  // The position of your cursor;
i =0;
    while(cursor > 0){

    begin_at = string_to_parse.indeOf('MAC:');
    end_at = length_of_Mac; // this is standard for al mac

    mac[i] = string_to_parse.substring(begin_at, begin_at + end_at);
    cursor = begin_at + end_at;
i++;
    }

Este código necesitará ajustes, pero la idea está ahí. Es un bucle que ejecutará todo el archivo para encontrar todas las direcciones de Mac. hasta que llegue al final del archivo.

MadeInDreams
fuente
Esto es lo que haría. Tiene la ventaja adicional de detectar si su enrutador está muerto.
slebetman
1
El raspado del sitio web de +1 es una opción interesante. Estoy un poco molesto porque no lo pensé.
Jacobm001
@MadeInDreams ¿La página del enrutador a la que hace referencia es la página de arrendamiento DHCP del enrutador? ¿O hay una página de conexión activa del enrutador?
Chetan Bhargava
Depende de su enrutador, pero la mayoría de ellos tienen una página que enumera todos los dispositivos conectados. Este ejemplo es de la página principal de mi red
MadeInDreams
6

Para rastrear direcciones mac únicas en su Raspberry Pi, necesita una herramienta (en lugar de servicio) llamada arpwatch . He usado arpwatch en BSD ampliamente y registra todas las solicitudes de arp y rarp en syslog.

Desde Syslog puede analizar fechas y horas y direcciones mac.

ARP funciona y la tabla existe solo en la red física (palabra técnica: dominio de colisión). Cuando un paquete sale para otra red, la dirección mac de origen se reemplaza por la dirección mac del enrutador.

La ejecución del arpcomando en Raspberry Pi solo enumerará las direcciones mac + IP de los hosts que han realizado transacciones (comunicación IP) con el host en el que se ejecuta el comando (Raspberry Pi). Será no listar las direcciones MAC de los otros hosts de la red.

Otra forma avanzada sería usar nmap en su Raspberry Pi para hacer un descubrimiento de host. Puede usar nmap -sPpara hacer ping a todos los hosts en la red. Le indicará las direcciones IP de todos los hosts activos en su red. Luego puede ejecutar el comando arp para averiguar quién está activo.

chetan@Linux:~$ nmap -sP 192.168.100.0/24

Starting Nmap 6.40 ( http://nmap.org ) at 2016-02-23 16:08 PST
Nmap scan report for 192.168.100.4
Host is up (0.0087s latency).
Nmap scan report for 192.168.100.58
Host is up (0.0024s latency).
Nmap scan report for 192.168.100.160
Host is up (0.049s latency).
Nmap scan report for 192.168.100.164
Host is up (0.063s latency).
Nmap done: 256 IP addresses (4 hosts up) scanned in 2.68 seconds
Chetan Bhargava
fuente
1
Creo que este es probablemente un método mucho más robusto y flexible que el de web scraping. En muchos enrutadores emitidos por el ISP, la página que debe mostrar los dispositivos conectados con información no será confiable.
Ricitos de oro
@goldilocks +1, sí, lo pensé después de votar la respuesta aceptada. Supongo que tienen un enrutador que tiene una página para conexiones activas (estado SPI o similar). Buen enrutador que tienen.
Chetan Bhargava
4

Acabo de jugar con la versión de línea de comando de fing . Hace un trabajo decente al encontrar todo en la red y escupir archivos CSV que contienen:

  • dirección IP
  • Nombre personalizado del nodo (si ha asignado nombres personalizados en el archivo .properties)
  • El estado (ARRIBA / ABAJO)
  • La marca de tiempo del último cambio
  • El nombre de host (si ha habilitado DNS)
  • La dirección de hardware (si está descubriendo una red local)
  • El vendedor de hardware

Según las respuestas anteriores, sería necesaria alguna manipulación de texto para obtener el contenido de los CSV en una página web y tener cuidado con lo que está publicando externamente.

He usado la versión de Android de forma bastante extensa y hace un buen trabajo al encontrar todo en mi red doméstica (y es un poco divertido jugar con wifi público).

goobering
fuente
3

El comando arple dará una lista de dispositivos conectados a la red. Tendrá que hacer una manipulación básica de la cadena para obtener los datos que desea, pero sin duda sería más fácil que tratar de obtener la información usted mismo.

Nota de funcionalidad :

Algunos enrutadores bloquean este tipo de funcionalidad de manera predeterminada, y el suyo puede configurarse como tal. Si no funciona, busque un poco en su documentación para verificar cómo permitirlo.

NOTA DE SEGURIDAD :

Hay algunas implicaciones de seguridad muy serias de tener un sitio web que muestre quién está actualmente en casa. Piense detenidamente sobre la seguridad existente y si es lo suficientemente buena para los riesgos involucrados.

Jacobm001
fuente
Buena idea, supongo que retiro mi comentario anterior.
Ghanima
1
Hay un par de advertencias interesantes sobre el uso de arp para esto aquí . Sugieren que los dispositivos podrían no aparecer si no han enviado ningún paquete al dispositivo que ejecuta arp, y que podría ser necesario un ping.
goobering
@goobering +1. simplemente ejecutando el comando arp no se enumerarán todos los hosts activos en la red. Arpwatch registrará todos los paquetes arp en la red.
Chetan Bhargava
1

Es posible hacerlo, y otras personas han sugerido algunos buenos métodos. Hace unos años escribí una secuencia de comandos de Python para eliminar esta información de un enrutador netgear y la arrojé a github. Se puede encontrar aquí . Es tosco, y al mirarlo ahora lo volvería a hacer de manera algo diferente, pero funcionó casi exactamente con el mismo propósito que buscó durante un par de años hasta que me mudé.

Ed.
fuente
+1 Su script ciertamente podría mejorarse, pero esa es una gran solución al problema.
Jacobm001