Bestimmen nächste Hop-MAC-Adresse in C #
-
20-09-2019 - |
Frage
Ich bin eine Anwendung schreiben, dass einspritzt Pakete mit SharpPcap .
Da ich aber die Pakete bin Konstruktion auf meinem eigenen und kenne nur das IP-Adresse des Ziels, ich habe die physikalische Adresse des nächsten Hop zu bestimmen. Ich kann immer einen Ping an den Remote- IP-Adresse senden, es schnuppern und erhalten Sie die MAC-Adresse aus dem schnüffelte Paket. Aber ich hatte gehofft, dass es eine weniger gewundenen Weg so in C # zu tun.
Offensichtlich Adresse des nächsten Hop-IP bekommt auch sehr hilfreich sein, da ich dann SendArp verwenden kann seine MAC-Adresse zu ermitteln.
Ankommen der Routing-Tabelle tun wird. Wie würde ich das mit dem Code erhalten?
Lösung
Ich hatte ein paar Probleme mit WMI (es scheint, dass man nicht Korrelat zwischen einem Interface-Index in Win32_IP4RouteTable mit einem Gerät; MSDN-Dokumentation falsch ist, und andere mehr hackish Techniken versagen auf einigen Computern).
Sie können dann die NIC selbst finden, indem Sie in der Liste für die Kennung der Suche zurück von GetAdaptersInfo .
Hope es hilft ...
Andere Tipps
sind physikalische Adressen aufgelöst durch die Address Resolution Protocol - nur ein ARP senden Reuest mit der IP-Adresse aufzulösen.
Wenn das Ziel nicht im lokalen Netzwerk befindet, muss das Paket sendet an den Standard-Gateway sein und man muss einen ARP-Request für den Standard-Gateway durchführt. Der Standard-Gateway kann mit Methoden aus dem System.Net erhalten werden, .NetworkInformation Namespace.
NetworkInterface.GetAllNetworkInterfaces()[0].GetIPProperties().GatewayAddresses
Der vollständig hackish Weg, es zu tun wäre, den Befehl „arp -a“ auszuführen und die Ergebnisse des Befehls (mit der ARP Cache bereits von Windows-gehalten).
Andernfalls müssen Sie ARP in Ihrem Protokollstapel aufzunehmen. Dies ist, wie Sie Ihr System selbst funktioniert, herauszufinden, wo Frames zu senden. Oder schließlich, wenn Sie nicht besorgt sind über ineffizient, können Sie Ihr Ethernet-Ziel festgelegt als: FF: FF: FF: FF: FF: FF und Flut alle auf dem gleichen LAN wie Sie. Wenn etwas reagiert oder Sie ein Paket erhalten, Cache es sich um die richtige Ziel-MAC-Adresse.
Persönlich, wenn Sie die Flut jeden Ansatz haben in meinem Netzwerk, würde ich dich verletzt, aber je nach Situation kann es eine ziemlich einfache Hack. Um jedoch eine 100% Voll-Stack-Implementierung zu tun ist ziemlich komplex, da es viele Grenzfälle ist, die gut unterstützt werden soll (wie Umgang mit Proxy-ARP, kostenlose ARP-usw.).