Question

J'écris une application qui injecte des paquets en utilisant SharpPcap .

Cependant, depuis que je suis la construction des paquets sur mon propre et seulement connaître l'adresse IP de la destination, je dois déterminer l'adresse physique du saut suivant. Je peux toujours envoyer un ping à la , renifler, et obtenir le adresse MAC du paquet reniflé. Cependant, j'espérais, il y a une manière moins alambiquée de le faire dans C # .

De toute évidence, obtenir l'adresse IP du prochain saut sera également très utile, car je peux alors utiliser SendARP pour déterminer son adresse MAC.

Obtenir la table de routage fera. Comment puis-je obtenir que l'aide du code?

Était-ce utile?

La solution

J'ai eu quelques problèmes avec WMI (il semble que l'on ne peut pas en corrélation entre un indice d'interface Win32_IP4RouteTable avec un périphérique réel, la documentation MSDN est faux, et d'autres techniques plus hackish échouer sur certains ordinateurs).

Alors, j'ai choisi d'utiliser le GetBestRoute , qui en fait m'a sauvé beaucoup de temps, car il permet de faire de Windows la décision de routage sur lui-même, et retourne la prochaine adresse IP hop et l'identifiant NIC menant à cette adresse. Il est également beaucoup plus rapide que l'exécution d'une requête sur WMI.

Vous pouvez alors trouver la carte réseau lui-même, en cherchant cet identifiant dans la liste renvoyée par GetAdaptersInfo .

it helps ...

Autres conseils

Les adresses physiques sont résolus par les Address Resolution Protocol - envoyez un ARP Reuest avec l'adresse IP à résoudre.

Si la destination est pas dans le réseau local, doit être envoyé le paquet à la passerelle standard et il faut effectuer une requête ARP pour la passerelle standard. La passerelle standard peut être obtenue en utilisant des méthodes de la System.Net espace de noms .NetworkInformation.

 NetworkInterface.GetAllNetworkInterfaces()[0].GetIPProperties().GatewayAddresses
scroll top