Über die MAC-Adresse schnell feststellen, ob Entitäten in einem Netzwerk vorhanden sind?

Über die MAC-Adresse schnell feststellen, ob Entitäten in einem Netzwerk vorhanden sind?

Gibt es eine schnelle und zuverlässige Möglichkeit, anhand der MAC-Adresse eines Geräts zu ermitteln, ob es derzeit von einem Windows-PC/-Server aus mit einem Netzwerk verbunden ist? Wenn nicht, dann von einem Ubuntu-Server aus?

  • arp -a funktioniert nicht alleine, da die Elemente zu lange im Cache bleiben.
  • arp -a in Kombination mit dem Leeren des Caches alle 5 Minuten könnte funktionieren, scheint aber ineffizient und funktioniert nur, wenn der Cache innerhalb von 5 Minuten vollständig neu gefüllt wird. Wäre das so?

Hintergrund: Ich hatte keine Lust mehr, bei der Arbeit zu stempeln, und so schrieb ich schnell eine App, die als Windows-Dienst läuft, regelmäßig überprüft, ob mein Telefon mit dem Firmennetzwerk verbunden ist, dies in einer Datenbank protokolliert und dann eine Website hostet, auf der Sie sehen können, wann ich im Büro war, indem Sie die Daten über einen bestimmten Bereich summieren (erstaunlich, was man mit den richtigen Bibliotheken in ein paar Stunden alles anstellen kann).

Es dauerte etwa eine Woche, bis das Unternehmen entschied, dass alle, wenn möglich, die App anstelle unseres Zeiterfassungssystems verwenden sollten.

Ursprünglich habe ich eine DHCP-Reservierung verwendet und in regelmäßigen Abständen mein Android-Telefon angepingt, um es zu erkennen. Bei der Erweiterung stieß ich jedoch schnell auf das Problem, dass iPhones nicht auf Pings reagieren. Abgesehen davon sind Pings langsam. Es dauert etwa eine Sekunde pro Telefon, um per Ping zuverlässig zu bestätigen, dass es da ist.

Ich habe versucht, arp -a auszuführen und das Ergebnis nach MAC-Übereinstimmungen zu durchsuchen, aber die Elemente bleiben praktisch unbegrenzt im ARP-Cache. Ich habe überlegt, den Cache zu lesen und ihn anschließend zu leeren, aber ich weiß nicht, ob er rechtzeitig zuverlässig wieder aufgefüllt wird. Das ist eine mögliche Lösung, wenn es klappt, obwohl mir die Idee, den ARP-Cache alle fünf Minuten zu leeren, nicht gefällt.

Meine aktuelle Lösung besteht darin, eine SNMP-Abfrage an unseren Zugriffspunkten durchzuführen, um die verbundenen Clients zu erfassen und diese dann zu analysieren, um zu sehen, ob ich MAC-Übereinstimmungen finden kann. Das ist schnell und zuverlässig, aber sehr spezifisch für die betreffenden Zugriffspunkte. Wenn wir die Zugriffspunkte austauschen, listen die nächsten ihre verbundenen Clients möglicherweise nicht über SNMP auf. Selbst wenn sie das tun, muss ich die SNMP-Abfragen neu konfigurieren.

Ich denke, wenn es einen bekannten Port gibt, der Verbindungen auf einem beliebigen Telefon akzeptiert, könnte ich eine TCP-Verbindung zu diesem öffnen und sie dann anstelle eines Pings schließen, aber ich habe das Gefühl, dass es hier irgendwo eine schnelle Layer-2-Lösung geben muss.

Antwort1

Verwenden Sie nicht arp. Verwenden Sie arping.

https://en.wikipedia.org/wiki/Arping

Arping ist ein Computersoftwaretool zum Entdecken und Prüfen von Hosts in einem Computernetzwerk. Arping prüft Hosts auf der angeschlossenen Netzwerkverbindung, indem es Link Layer-Frames mit der Anforderungsmethode Address Resolution Protocol (ARP) sendet, die an einen Host adressiert sind, der durch seine MAC-Adresse der Netzwerkschnittstelle identifiziert wird.

Das Dienstprogramm kann ARP verwenden, um eine vom Benutzer angegebene IP-Adresse aufzulösen. Die Funktion von Arping ist analog zum Dienstprogramm Ping zum Prüfen des Netzwerks mit dem Internet Control Message Protocol (ICMP) auf der Internetschicht der Internet Protocol Suite.

Es handelt sich im Grunde um das, was arpes tut, jedoch ohne die gesamte ARP-Caching-Sache des Betriebssystems, d. h. es sendet nur wörtliche, einmalige ARP-Anfragen über die Leitung.

PS: Denken Sie daran, dass die gesamte ARP-Sache nur in einem einzigen lokalen Subnetz funktioniert. Wenn Sie eine größere Reichweite benötigen, müssen Sie es auf den Routern ausführen.

PPS Sie könnten einfach kurze DHCP-Leases verwenden (z. B. 1 Minute bis 5 Minuten). Zugegeben, Apple-Geräte sind in der Vergangenheit dafür bekannt, die DHCP-Spezifikationen nicht zu befolgen, aber das sollte heutzutage nicht mehr so ​​schlimm sein. Hoffe ich.

PPPS arpingist nicht einmal 100 % zuverlässig (obwohl es über 99 % sein sollte). Einige Geräte ignorieren unerwünschte eingehende ARP-Anfragen, genauso wie andere Geräte Pings ignorieren. Ja, es verstößt gegen IETF, aber das Ignorieren von Pings verstößt auch gegen die IETF ...

Schuss.

Antwort2

Sie hatten Recht, ARP zu verwenden. Da Sie sich nicht darauf verlassen möchten, dass das Gerät Ihnen mitteilt, dass es im Netzwerk ist, was eine andere Möglichkeit wäre, könnten Sie es selbst tun. ARP kann das erleichtern und gibt Ihnen nicht nur die Mac-Adresse, sondern auch die IP-Adresse, die sie im Netzwerk verwenden. Wenn Sie den Arpcache löschen, wird er bei Bedarf neu aufgefüllt. Das heißt, er füllt den Cache nur mit den Adressen, mit denen er im Netzwerk kommunizieren musste.

Eine bessere Lösung: Wenn Sie die Mac-Adressen der Clients bereits kennen, können Sie ihnen statische IP-Adressen im Netzwerk zuweisen. Dadurch wird Ihr Caching-Problem bis zu einem gewissen Grad gelöst, da der Cache regelmäßig veraltet. Das bedeutet, dass Ihre Netzwerkschnittstelle das nächste Mal, wenn sie mit dem Gerät kommunizieren muss, erneut nachschlägt. Da Sie nun das Problem haben, dass Apple-Geräte nicht zurückpingen, wollte ich vorschlagen, dass Sie immer einen Broadcast Ihres Netzwerks anpingen können. Wenn Ihr Gateway beispielsweise 192.168.1.1 ist, ist der Broadcast 192.168.1.255 und wenn Sie einen Ping dorthin senden, werden Ihnen alle Geräte antworten, die Pings akzeptieren.

Um es noch einmal zusammenzufassen: Sie können einfach den ARP-Cache immer wieder leeren, da er zuverlässig neu gefüllt wird, da er für das TCP/IP-Protokoll zum Austausch von Paketen zwischen Computern und Routern usw. erforderlich ist. Dies belastet jedoch nur Ihre Netzwerkschnittstelle. Oder lassen Sie die App erkennen, wenn eine Verbindung zum Unternehmensnetzwerk hergestellt wird, und einen Ping an Ihren Server über einen anderen Port als den Standard-ICMP senden. Lassen Sie Ihren Server auf diese Pings warten, und Sie können alles dokumentieren, was Sie brauchen. Oder lassen Sie die App Ihren Server einfach von Zeit zu Zeit anpingen. Nur weil das Gerät keine Pings akzeptiert, heißt das nicht, dass es keine senden kann.

Antwort3

Es gibt eine Android-App namens Fing, die im Wesentlichen alle Geräte in einem Netzwerk scannt und Informationen (einschließlich IPs und MACs) zu ihnen anzeigt.

Ich weiß nicht, welche Protokolle es verwendet, aber es erkennt Apple-Geräte. Sie könnten etwas wie Wireshark verwenden, um zu versuchen, die App zurückzuentwickeln, und dieselbe Technik auf Ihrem Tool anwenden. (Jemand hat es bereits versuchtauf einer verwandten Stack Exchange-Site)

verwandte Informationen