Ho bisogno di un modo per estrarre gli indirizzi MAC dal mio router per un progetto "Who's Home"


11

Questo tipo di progetto è già stato realizzato con Bluetooth, ma la portata di 30 piedi e il consumo extra della batteria mi fanno venire voglia di fare un ping al router anziché ai telefoni delle persone. So che i router tengono traccia degli indirizzi MAC univoci per ciascun dispositivo. Speravo di registrare l'indirizzo di ciascun telefono e fare in modo che il PI controllasse periodicamente il router per aggiornare una pagina Web dinamica per visualizzare chi è a casa.

Voglio sapere se esiste un modo ragionevole per estrarre queste informazioni con il PI.


che dire di wifi (ping i nomi host dei telefoni invece)?
user236012

2
È inoltre possibile assegnare indirizzi IP statici dal router, quindi utilizzare nmap e gli indirizzi IP per identificare i dispositivi.
ArtOfCode

Ho fatto qualcosa di simile in C # su Windows qui: stackoverflow.com/questions/2567107/… - Sarei felice di inviarti il ​​codice della versione più recente, se lo desideri. Non so quanto sia utile C # su un Raspberry Pi, ma dovrebbe indirizzarti nella giusta direzione. Rileva in modo affidabile che sono a casa prima ancora di entrare dal garage.
Aric TenEyck,

Catturo questo + molte più informazioni mettendo uno script bash sul router che pubblica i risultati in un server web ogni minuto. Con questo sistema monitoro e gestisco il tempo di attività di Internet, i client connessi, gli IP WAN, l'attenuazione delle fibre e il budget di potenza, i servizi VOIP, le password wifi, ecc. Il chilometraggio varia in base alla potenza della CPU del router.
EDP,

1
Raschiatura dello schermo sul router? Puoi anche eseguire l'aggiornamento a un router basato su Linux (openwrt) e semplicemente accedere e cercare nella cache arp.
Thorbjørn Ravn Andersen,

Risposte:


6

È possibile. Ti suggerisco di fornire al tuo script le credenziali di accesso e di leggere la pagina che visualizza le informazioni. Quindi è possibile analizzarne il contenuto e riempire un array con i dati desiderati. Dato che a volte queste pagine contengono più informazioni come date e ora, potresti creare un registro davvero carino.

Ecco un breve esempio di come procederei;

Sulla pagina del tuo router potresti trovare qualcosa di simile al seguente;

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

Quindi sappiamo perfettamente che ogni dispositivo verrà elencato in questo modo. E che tutti gli indirizzi MAC avranno la stessa lunghezza.

La sceneggiatura potrebbe essere qualcosa del genere;

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++;
    }

Questo codice dovrà essere modificato, ma l'idea è lì. È un ciclo che eseguirà tutti i file per trovare tutti gli indirizzi Mac. fino a raggiungere la fine del file.


Questo è quello che vorrei fare. Ha il vantaggio aggiuntivo di rilevare se il tuo router è morto.
Slebetman,

1
+1 Scraping del sito Web è una scelta interessante. Sono un po 'seccato di non averci pensato da solo.
Jacobm001

@MadeInDreams La pagina del router a cui fai riferimento è la pagina di leasing DHCP del router? Oppure esiste una pagina di connessione attiva del router?
Chetan Bhargava,

Dipende dal router ma la maggior parte di essi ha una pagina in cui sono elencati tutti i dispositivi collegati. Questo esempio è dalla pagina principale della mia rete
MadeInDreams,

6

Per tenere traccia degli indirizzi mac unici su Raspberry Pi, è necessario uno strumento (piuttosto un servizio) chiamato arpwatch . Ho usato ampiamente arpwatch su BSD e registra tutte le richieste arp e rarp in syslog.

Da Syslog puoi analizzare date e orari e indirizzi mac.

L'ARP funziona e la tabella esiste solo sulla rete fisica (parola tecnica: dominio di collisione). Quando un pacchetto parte per un'altra rete, l'indirizzo mac di origine viene sostituito dall'indirizzo mac del router.

L'esecuzione del arpcomando su Raspberry Pi elencherà solo gli indirizzi mac + IP degli host che hanno effettuato transazioni (comunicazione IP) con l'host su cui viene eseguito il comando (Raspberry Pi). Sarà Non elencare gli indirizzi MAC di altri host della rete.

Un altro modo avanzato sarebbe usare nmap sul tuo Raspberry Pi per fare una scoperta dell'host. È possibile utilizzare nmap -sPper eseguire il ping di tutti gli host sulla rete. Ti dirà gli indirizzi IP di tutti gli host attivi sulla tua rete. Quindi puoi eseguire il comando arp per scoprire mac di chi è attivo.

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

1
Penso che questo sia probabilmente un metodo molto più robusto e flessibile rispetto a quello del web scraping. Su molti router emessi dall'ISP la pagina che dovrebbe mostrare i dispositivi connessi con le informazioni non sarà affidabile.
Riccioli d'oro

@goldilocks +1, sì, ci ho pensato dopo aver votato a favore della risposta accettata. Presumo che abbiano un router con una pagina per connessioni attive (stato SPI o simili). Bel router che hanno.
Chetan Bhargava,

4

Ho appena giocato con la versione da riga di comando di fing . Fa un lavoro decente nel trovare tutto sulla rete e sputare file CSV contenenti:

  • indirizzo IP
  • Nome personalizzato del nodo (se sono stati assegnati nomi personalizzati nel file .properties)
  • Lo stato (SU / GIÙ)
  • Il timestamp dell'ultima modifica
  • Il nome host (se hai abilitato DNS)
  • L'indirizzo hardware (se stai scoprendo una rete locale)
  • Il fornitore dell'hardware

Per le risposte precedenti, sarebbe necessaria una manipolazione del testo per ottenere il contenuto dei CSV su una pagina Web e fare attenzione a ciò che si sta pubblicando esternamente.

Ho usato la versione di Android abbastanza ampiamente e fa un buon lavoro nel trovare tutto sulla mia rete domestica (e in un certo senso è divertente giocare con il wifi pubblico).


3

Il comando arpti fornirà un elenco di dispositivi collegati alla rete. Dovrai eseguire alcune manipolazioni di base delle stringhe per ottenere i dati desiderati, ma sarebbe sicuramente più semplice che provare a ottenere le informazioni da solo.

Nota di funzionalità :

Alcuni router bloccano questo tipo di funzionalità per impostazione predefinita e il tuo potrebbe essere configurato come tale. Se non funziona, cerca un po 'la documentazione per controllare come permetterlo.

NOTA DI SICUREZZA :

Ci sono alcune implicazioni molto gravi per la sicurezza di avere un sito Web che mostra chi è attualmente a casa. Si prega di riflettere molto attentamente sulla sicurezza in atto e se è abbastanza buona per i rischi connessi.


Buona idea, immagino di ritirare il mio commento precedente.
Ghanima

1
Ci sono un paio di avvertenze interessanti sull'uso di arp per questo qui . Suggeriscono che i dispositivi potrebbero non comparire se non hanno inviato pacchetti al dispositivo in esecuzione arp e che potrebbe essere necessario un ping.
goobering

@goobering +1. semplicemente eseguendo il comando arp non verranno elencati tutti gli host attivi sulla rete. Arpwatch registra tutti i pacchetti arp sulla rete.
Chetan Bhargava,

1

È possibile farlo e altre persone hanno suggerito alcuni buoni metodi. Alcuni anni fa ho scritto una sceneggiatura di Python per schermare queste informazioni da un router netgear e le ho lanciate su Github. Esso può essere trovato qui . È rozzo, e guardandolo ora lo rifarei in modo un po 'diverso, ma ha funzionato praticamente per lo stesso identico scopo che stai cercando per un paio d'anni fino a quando mi sono trasferito.


+1 Il tuo script potrebbe sicuramente essere migliorato, ma è un'ottima soluzione al problema.
Jacobm001
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.