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?

War es hilfreich?

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

Also, ich wähle die unmanaged GetBestRoute , die mir tatsächlich viel Zeit gespart, weil sie sich selbst von Windows tun, um die Routing-Entscheidung lässt, und gibt die IP-Adresse des nächsten Hop und der NIC-Kennung zu dieser Adresse führt. Es ist auch eine sehr viel schneller als eine Abfrage WMI ausgeführt wird.

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top