2012-03-26 7 views
0

Für die Konfigurationssoftware einer Reihe von Embedded-Geräten müssen wir die Geräte nach IP-Adresse finden. Für jede gegebene IPv4-Adresse, müssen wirPinging/Abrufen von MAC-Adresse von IP, ARP-Cache ignoriert

  • die MAC-Adresse herausfinden (da die MAC-Adresse gefiltert werden kann)
  • herausfinden, ob das Gerät erreichbar ist, das heißt ping es.

Ich bin mir nicht sicher, was der beste Weg ist, dies zu tun ist. Zuerst haben wir versucht, SendARP nur anzurufen, und es funktioniert ganz gut, aber es verwendet nur den Cache, wenn die IP-Adresse bereits dort ist, und es scheint keine Möglichkeit, dies zu umgehen (außer das Löschen des gesamten Caches, die eine privilegierte Operation). Das bedeutet, wir müssen einen zweiten Schritt machen und das Gerät nur anpingen (ich denke, wir sollten es zuerst anpingen und dann SendARP anrufen, wenn es erreichbar war), aber das scheint irgendwie ein Schritt zu viel zu sein, wenn das Gerät erreichbar ist. Oder befindet sich die richtige Adresse bereits im ARP-Cache, wenn der Ping erfolgreich war? Die IP-Adresse kann die entsprechende MAC-Adresse relativ häufig ändern, da verschiedene Geräte in einem separaten Netzwerk angeschlossen sind. Ich denke, wir müssen eine tatsächliche ARP-Anfrage erzwingen.

Die Alternative, die ich mir vorstellen kann, ruft ResolveNeighbor/ResolveIpNetEntry2. Zumindest die Dokumentation der letzteren scheint zu sein, was wir brauchen (Clear ARP Cache für diese IP-Adresse und senden Sie eine tatsächliche Anfrage), aber es ist nur Vista oder später. Unter XP müssten wir ResolveNeighbor anrufen, was zwar einfacher, aber nicht mehr dokumentiert ist. Dies beinhaltet die Überprüfung der richtigen Funktion (oder rufen Sie einfach ResolveNeighbor und wenn es fehlschlägt, was dokumentiert ist auf Vista oder später tun, rufen Sie ResolveIpNetEntry2).

Ich bin nur nicht sicher, was der beste Weg wäre, oder wenn ich etwas verpasse. Was würden Sie empfehlen? Beachten Sie, dass ich auch eine reine .NET-Lösung nehmen würde, wenn es eine gibt;)

aktualisieren:

Es scheint, dass ResolveNeighbor trotz dokumentiert, nicht auf Windows XP nicht vorhanden ist, zumindest nicht in IPhlpapi.dll. Bedeutet das, dass die Funktionalität auf XP nicht verfügbar ist?


Um dies zu verdeutlichen, entwerfe ich weder die Geräte noch den Deployment-Prozess. Für dieses Problem einfach davon ausgehen, dass

  • alle Geräte bereits IP-Adressen und
  • der Computer im selben Subnetz, aber nicht notwendigerweise zu dem Netzwerk gehören (also ein Tech tragbarer Computer ist) und
  • die IP-Adresse ist bekannt, wenn das Tool startet, dh der Benutzer kann sie eingeben oder lesen sie aus einer Konfigurationsdatei und
  • der gleiche Computer, vielleicht sogar ohne Neustart des Tools, wurde nur ein paar Sekunden verwendet, um zu verbinden ein völlig anderes Netzwerk mit den gleichen IP-Adressen, zum Beispiel ein anderes Gebäude, das gleich aufgebaut ist.

Dies bedeutet, dass ich in den Aufbau IP 192.168.0.100 haben A könnte, die MAC-Adresse A ist, und dann den Computer anschließen B zu bauen, die auch eine IP 192.168.0.100 hat, aber dieses Mal ist es die MAC-Adresse B Der Benutzer sagt "connect to 192.168.0.100" und wir müssen sicherstellen, dass 192.168.0.100 nicht nur erreichbar ist, sondern tatsächlich MAC B und nicht MAC A.Ich denke, dass ResolveIpNetEntry2 mich das tatsächlich tun lassen würde, aber es ist unter Windows XP nicht verfügbar und es scheint keine Alternative dafür zu geben.

Ich bin mir nicht sicher, wie sonst kann ich diesen Punkt bekommen. Der Punkt ist nicht, wie man die Geräte entdeckt oder installiert.

+0

Was ist das eingebettete Gerät und erwarten Sie, dass es in der Unternehmensumgebung funktioniert? – MattH

Antwort

1

Die IP-Adresse kann die entsprechende MAC-Adresse relativ oft ändern, da verschiedene Geräte in einem separaten Netzwerk angeschlossen sind. Daher müssen wir eine aktuelle ARP-Anfrage erzwingen.

Huh?

die MAC-Adresse herausfinden (da die MAC-Adresse gefiltert werden kann)

Zu welchem ​​Zweck?

Ich denke, Sie müssen einen Schritt zurück, denn im Moment denke ich, Sie fragen "Ich muss die MAC-Adresse einer IP-Adresse in einem anderen Subnetz". Das ist nicht möglich.

Es scheint, dass Sie versuchen, Software für die Verwaltung von Geräten im Netzwerk zu entwickeln, und Sie suchen nach einer Service Discovery-Lösung.


Update nach Kommentar:
Es ist eine Software zur Konfiguration und vernetzte Gebäudeautomation Controller zu aktualisieren. Viele dieser Geräte werden an den Computer eines Technikers angeschlossen und von ihm entfernt. Es können mehrere Geräte mit derselben IP-Adresse an den Computer des Technikers angeschlossen sein (nacheinander, nicht zur selben Zeit), so dass wir uns nicht auf den ARP-Cache verlassen können, um die MAC-Adresse herauszufinden. Die Geräte befinden sich im selben Subnetz wie der Computer (d. H. Der Computer wird in das Subnetz der Geräte gestellt, um sich mit ihnen zu verbinden). Wenn Sie eine andere Methode kennen, um a) ping das Gerät und b) seine MAC-Adresse zu bekommen, bin ich dankbar :)

So ist Ihr Prozess zwei Schritte?

  • Ein Prozess, bei dem Staging-Geräte an den Steuercomputer angeschlossen sind, werden entdeckt und
  • Zu einem späteren Zeitpunkt, so konfiguriert, werden die Geräte mit dem Steuercomputer zu dem gleichen Teilnetz eingesetzt und befestigt werden.

Die Geräte werden vorkonfiguriert mit der gleichen IP-Adresse ausgeliefert?

Wenn Sie ein Gerät im selben Subnetz anpingen können, sollte der ARP-Cache die richtige MAC-Adresse haben. Wenn das Szenario jedoch bedeutet, dass mehrere Geräte angeschlossen sind, die um die gleiche IP-Adresse konkurrieren, werden Sie Probleme haben.

Wenn Sie diese Geräte in Campusumgebungen verkaufen möchten, können Sie sich nicht darauf verlassen, dass sich alle Geräte im selben Subnetz oder im selben Subnetz wie der Controller befinden. Teilnetze sind möglicherweise nicht zwischen Gebäuden verfügbar.

Mein erster Vorschlag für das Design wäre, dass die Geräte ihre IP-Adressen über DHCP beziehen und den Namen oder die Adresse des Controllers als DHCP-Option angeben. Der Controller wird als "Server" implementiert. Die Geräte könnten ihre Konfigurationen vom Controller übernehmen. Die Geräte könnten sich während des Betriebs bei der Steuerung registrieren.Viele Optionen für die Einführung von Sicherheit beim Signieren von Konfigurationen. Zertifikat authentifizierte Kommunikation usw.


Aktualisierung nach aktualisierter Frage.

Ich bin mir nicht sicher, wie sonst kann ich diesen Punkt herüber bekommen. Das Szenario zu erklären ist ein guter Anfang.

Sagen, dass Viele dieser Geräte werden an einem Computer der Technik angebracht und von ihm entfernt. ist eine besondere Art zu beschreiben, was Sie seither erarbeitet haben.

Ich höre auf zu versuchen, zu raten, was du tust und ich werde aufhören zu versuchen, dich vor dir selbst zu retten.

Ja, wenn Sie eine IP-Adresse im selben Subnetz erfolgreich pingen können, sollte der ARP-Cache die aktuelle MAC-Adresse für diese IP-Adresse enthalten. Ich würde vorschlagen, dass Sie dies für jedes Betriebssystem testen, das Sie verwenden, da es möglicherweise Unwägbarkeiten bezüglich des Zugriffs auf die Caches gibt.

+0

Es ist eine Software zum Konfigurieren und Aktualisieren von vernetzten Gebäudeautomationscontrollern. Viele dieser Geräte werden an den Computer eines Technikers angeschlossen und von ihm entfernt. Es können mehrere Geräte mit derselben IP-Adresse an den Computer des Technikers angeschlossen sein (nacheinander, nicht zur selben Zeit), so dass wir uns nicht auf den ARP-Cache verlassen können, um die MAC-Adresse herauszufinden. Die Geräte befinden sich im selben Subnetz wie der Computer (d. H. Der Computer wird in das Subnetz der Geräte gestellt, um sich mit ihnen zu verbinden). Wenn Sie eine andere Methode kennen, um a) das Gerät zuverlässig zu pingen und b) seine MAC-Adresse zu bekommen, bin ich dankbar :) – OregonGhost

+0

Ich habe meine Frage aktualisiert, vielleicht macht das das Problem deutlicher. Sie sagen jedoch, dass * Wenn Sie in der Lage sind, ein Gerät im selben Subnetz anpingen, sollte der ARP-Cache die richtige MAC-Adresse * haben - bedeutet das, dass, wenn ich einen ICMP-Ping zum Controller mache und danach SendARP anrufe erhalten Sie zuverlässig die richtige MAC-Adresse, auch wenn die IP-Adresse nur wenige Augenblicke zuvor zu einer anderen MAC-Adresse gehörte? (Beachten Sie, dass die Geräte die Adressen nicht zufällig ändern, sondern immer manuell (;) – OregonGhost

+1

Wenn Sie einen Ping zum Controller machen und der Ping erfolgreich ist und Sie anschließend den MAC aus dem ARP-Cache erhalten, wird er den höchsten MAC der Adresse haben das hat der ping geantwortet, also muss es der gute sein –

1

Was ich in der Vergangenheit in einer ähnlichen Situation getan habe, war Ping an die erforderliche Adresse und dann von der C# -Applitacion den Befehl arp ausführen, um die gewünschte MAC zu erhalten.

Jedes Mal, wenn Sie auf einen MAC zugreifen müssen, aktualisieren Sie ihn bei der Ausführung dieses Prozesses.