2014-07-10 5 views
0

J'écris un programme de découverte, écrit en C++ qui fonctionnera sous Linux, pour me permettre de déterminer si certains périphériques sont connectés au réseau. J'ai l'adresse Mac des autres appareils et j'ai besoin de résoudre leurs adresses IP.IP résolution d'adresse en utilisant l'adresse MAC

J'ai vérifié/proc/net/arp et les périphériques n'apparaissent pas. J'ai essayé d'envoyer une commande ping à l'adresse de diffusion et cela n'atteint pas la cible et par conséquent le cache ARP n'est pas mis à jour. Cependant, si je ping l'adresse IP directement c'est (mais ce n'est pas une option).

De plus, les périphériques peuvent être configurés avec des ips statiques ou peuvent les obtenir via dhcp.

Est-il possible de déterminer les adresses IP en fonction des adresses Mac?

Répondre

0

Il y a quelques années, j'aurais suggéré d'utiliser RARP mais ce n'est plus supporté par le noyau Linux. -Vous pouvez utiliser les sockets Packet pour implémenter votre propre protocole de couche 2: au lieu d'utiliser IP comme charge utile de la trame Ethernet, vous pouvez sélectionner votre propre protocole. code de protocole (par exemple: au lieu de 0x0800 pour IP utiliser 0xABAB, toujours un nombre supérieur à 1536)

-Dans chaque nœud, vous implémentez un serveur simple qui utilise le socket de paquet pour lire les trames avec ce code de protocole ou vous pouvez utiliser pcap, comme vous préférez. -Quand vous avez besoin de l'adresse IP d'un autre nœud, vous envoyez une trame Ethernet à cette adresse MAC. Le serveur lira la nouvelle trame et répondra avec une autre trame véhiculant sa propre adresse IP.

-Si vous choisissez cette solution, rappelez-vous que la charge utile doit être d'au moins 46 octets, vous devrez donc utiliser un remplissage. Vous pouvez également utiliser le format TLV (type length value) pour votre propre protocole.

Lire ceci:

http://en.wikipedia.org/wiki/Ethernet_frame

http://man7.org/linux/man-pages/man7/packet.7.html

J'espère que cette aide.

Questions connexes