Déterminez ensuite l'adresse MAC hop en C #
-
20-09-2019 - |
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?
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
La façon complètement hackish de le faire serait d'exécuter la commande « arp -a » et lire et analyser les résultats de la commande (en utilisant le cache ARP déjà détenue par Windows).
Dans le cas contraire, vous devez inclure ARP dans votre pile de protocoles. Voici comment votre système fonctionne lui-même pour savoir où envoyer des cadres. Ou enfin si vous n'êtes pas inquiet d'être inefficace, vous pouvez définir votre destination Ethernet comme: FF: FF: FF: FF: FF: FF et tout le monde contre les inondations sur le même réseau local que vous. Quand quelque chose répond ou si vous obtenez un paquet, le cache vous-même d'avoir l'adresse MAC de destination appropriée.
Personnellement, si vous avez fait l'approche de tout le monde contre les inondations sur mon réseau, je te fais mal, mais en fonction de votre situation, il peut-être un hack assez facile. Cependant, faire une mise en œuvre complète pile 100% est assez complexe, car il y a beaucoup de cas de pointe qui devraient être bien pris en charge (comme la manipulation proxy ARP, ARP gratuit, etc.).