Benötigen Sie eine Möglichkeit, MAC-Adressen von meinem Router für ein "Who's Home" -Projekt abzurufen


11

Diese Art von Projekt wurde bereits mit Bluetooth durchgeführt, aber die Reichweite von 30 Fuß und der zusätzliche Batterieverbrauch veranlassen mich, nur den Router anstelle der Telefone der Leute anzupingen. Ich weiß, dass Router eindeutige MAC-Adressen für jedes Gerät verfolgen. Ich hatte gehofft, die Adresse jedes Telefons zu registrieren und den PI regelmäßig den Router überprüfen zu lassen, um eine dynamische Webseite zu aktualisieren und anzuzeigen, wer zu Hause ist.

Ich möchte wissen, ob es einen vernünftigen Weg gibt, diese Informationen mit dem PI abzurufen.


Was ist mit WLAN (pingen Sie stattdessen die Hostnamen des Telefons)?
user236012

2
Sie können auch statische IP-Adressen vom Router zuweisen und dann nmap und die IP-Adressen verwenden, um Geräte zu identifizieren.
ArtOfCode

Ich habe in C # unter Windows hier etwas Ähnliches getan: stackoverflow.com/questions/2567107/… - Gerne sende ich Ihnen den neuesten Versionscode, wenn Sie möchten. Ich weiß nicht, wie nützlich C # auf einem Raspberry Pi ist, aber es sollte Sie in die richtige Richtung weisen. Es erkennt zuverlässig, dass ich zu Hause bin, bevor ich überhaupt aus der Garage komme.
Aric TenEyck

Ich fange diese + viel mehr Informationen ein, indem ich ein Bash-Skript auf den Router lege, das die Ergebnisse jede Minute auf einem Webserver veröffentlicht. Mit diesem System überwache und verwalte ich die Internet-Betriebszeit, verbundene Clients, WAN-IPs, Glasfaserdämpfung und Strombudget, VoIP-Dienste, WLAN-Passwörter usw. Die Laufleistung hängt von der CPU-Leistung Ihres Routers ab.
EDV

1
Screen Scraping auf dem Router? Sie können auch auf einen Linux-basierten Router (openwrt) aktualisieren und sich einfach anmelden und im Arp-Cache suchen.
Thorbjørn Ravn Andersen

Antworten:


6

Es ist möglich. Ich schlage vor, Sie geben Ihrem Skript Anmeldeinformationen und lesen die Seite, auf der die Informationen angezeigt werden. Dann können Sie den Inhalt analysieren und ein Array mit den gewünschten Daten füllen. Da diese Seiten manchmal mehr Informationen wie Datum und Uhrzeit enthalten, können Sie ein wirklich schönes Protokoll erstellen.

Hier ist ein kurzes Beispiel, wie ich vorgehen würde.

Auf der Seite Ihres Routers finden Sie möglicherweise Folgendes:

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

Wir wissen also genau, dass jedes Gerät so aufgelistet wird. Und dass alle MAC-Adressen die gleiche Länge haben.

Das Skript könnte so etwas sein;

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

Dieser Code muss angepasst werden, aber die Idee ist da. Es ist eine Schleife, die die gesamte Datei ausführt, um alle Mac-Adressen zu finden. bis es das Ende der Datei erreicht.


Das würde ich tun. Es hat den zusätzlichen Vorteil, zu erkennen, ob Ihr Router tot ist.
Slebetman

1
+1 Website-Scraping ist eine interessante Wahl. Ich bin etwas genervt, dass ich selbst nicht daran gedacht habe.
Jacobm001

@MadeInDreams Die Routerseite, auf die Sie verweisen, ist die Router-DHCP-Lease-Seite? Oder gibt es eine aktive Verbindungsseite des Routers?
Chetan Bhargava

Abhängig von Ihrem Router, aber die meisten von ihnen haben eine Seite, auf der alle angeschlossenen Geräte aufgelistet sind. Dieses Beispiel ist von meiner Netzwerk-Hauptseite
MadeInDreams

6

Um eindeutige Mac-Adressen auf Ihrem Raspberry Pi zu verfolgen, benötigen Sie ein Tool (eher einen Dienst) namens arpwatch . Ich habe arpwatch auf BSD ausgiebig verwendet und es protokolliert alle arp- und rarp-Anforderungen in syslog.

In Syslog können Sie Datum und Uhrzeit sowie Mac-Adressen analysieren.

ARP funktioniert und Tabelle existiert nur im physischen Netzwerk (technisches Wort: Kollisionsdomäne). Wenn ein Paket in ein anderes Netzwerk wechselt, wird die Quell-Mac-Adresse durch die Mac-Adresse des Routers ersetzt.

Wenn Sie den arpBefehl auf Raspberry Pi ausführen, werden nur die Mac + IP-Adressen der Hosts aufgelistet, die Transaktionen (IP-Kommunikation) mit dem Host durchgeführt haben, auf dem der Befehl ausgeführt wird (Raspberry Pi). Es werden keine Mac-Adressen anderer Hosts im Netzwerk aufgelistet.

Eine andere fortgeschrittene Möglichkeit wäre, nmap auf Ihrem Raspberry Pi zu verwenden, um eine Host- Erkennung durchzuführen . Sie können nmap -sPalle Hosts im Netzwerk anpingen. Hier erfahren Sie die IP-Adressen aller aktiven Hosts in Ihrem Netzwerk. Anschließend können Sie den Befehl arp ausführen, um herauszufinden, wer aktiv ist.

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
Ich denke, dies ist wahrscheinlich eine viel robustere und flexiblere Methode als die Web-Scraping-Methode. Auf vielen vom ISP ausgestellten Routern ist die Seite, auf der angeschlossene Geräte mit Informationen angezeigt werden sollen, nicht zuverlässig.
Goldlöckchen

@goldilocks +1, ja, ich habe darüber nachgedacht, nachdem ich die akzeptierte Antwort positiv bewertet habe. Ich gehe davon aus, dass sie einen Router haben, der eine Seite für aktive Verbindungen hat (SPI-Status oder ähnliches). Schöner Router, den sie haben.
Chetan Bhargava

4

Ich habe gerade mit der Kommandozeilenversion von fing herumgespielt . Es macht einen anständigen Job, alles im Netzwerk zu finden und CSV-Dateien auszuspucken, die Folgendes enthalten:

  • IP Adresse
  • Benutzerdefinierter Name des Knotens (wenn Sie in der .properties-Datei benutzerdefinierte Namen zugewiesen haben)
  • Der Zustand (UP / DOWN)
  • Der Zeitstempel der letzten Änderung
  • Der Hostname (wenn Sie DNS aktiviert haben)
  • Die Hardwareadresse (wenn Sie ein lokales Netzwerk entdecken)
  • Der Hardwarehersteller

Gemäß den vorherigen Antworten wäre eine gewisse Textmanipulation erforderlich, um den Inhalt der CSVs auf eine Webseite zu bringen, und seien Sie vorsichtig, was Sie extern veröffentlichen.

Ich habe die Android-Version ziemlich ausgiebig benutzt und es macht einen guten Job, alles in meinem Heimnetzwerk zu finden (und es macht Spaß, mit ihm über öffentliches WLAN zu spielen).


3

Der Befehl arpgibt Ihnen eine Liste der mit dem Netzwerk verbundenen Geräte. Sie müssen einige grundlegende Zeichenfolgenmanipulationen durchführen, um die gewünschten Daten zu erhalten, aber das wäre sicherlich einfacher, als zu versuchen, die Informationen selbst abzurufen.

Funktionshinweis :

Einige Router blockieren diese Art von Funktionalität standardmäßig, und Ihre Router sind möglicherweise als solche konfiguriert. Wenn es nicht funktioniert, stöbern Sie ein wenig in der Dokumentation, um zu überprüfen, wie Sie es zulassen.

SICHERHEITSHINWEIS :

Es gibt einige sehr schwerwiegende Auswirkungen auf die Sicherheit, wenn eine Website anzeigt, wer gerade zu Hause ist. Bitte denken Sie sehr sorgfältig über die vorhandene Sicherheit nach und ob sie für die damit verbundenen Risiken gut genug ist.


Gute Idee, ich denke, ich ziehe meinen vorherigen Kommentar zurück.
Ghanima

1
Es gibt ein paar interessante suchen Einsprüche über für diese mit arp hier . Sie schlagen vor, dass Geräte möglicherweise nicht angezeigt werden, wenn sie keine Pakete an das arp-laufende Gerät gesendet haben, und dass möglicherweise ein Ping erforderlich ist.
Goobering

@goobering +1. Durch einfaches Ausführen des Befehls arp werden nicht alle aktiven Hosts im Netzwerk aufgelistet. Arpwatch protokolliert alle Arp-Pakete im Netzwerk.
Chetan Bhargava

1

Es ist möglich, und andere Leute haben einige gute Methoden vorgeschlagen. Ich habe vor ein paar Jahren ein Python-Skript geschrieben, um diese Informationen von einem Netgear-Router zu kratzen und auf Github zu werfen. Es kann hier gefunden werden . Es ist grob und wenn ich es jetzt betrachte, würde ich es etwas anders machen, aber es hat für genau den gleichen Zweck funktioniert, nach dem Sie ein paar Jahre lang gesucht haben, bis ich umgezogen bin.


+1 Ihr Skript könnte sicherlich verbessert werden, aber das ist eine großartige Lösung für das Problem.
Jacobm001
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.