2010-07-19 20 views
0

Existe-t-il un moyen d'obtenir l'adresse MAC de destination, si l'adresse IP de destination est connue, en utilisant ANSI C? Je ferais de préférence avec un appel système afin que le noyau traite tout cela et je peux profiter du cache ARP. Je sais que je peux créer et envoyer ma propre requête ARP, mais je n'aurais pas la fonctionnalité de mise en cache, etc., à moins que je ne l'implémente moi-même, donc c'est comme si le noyau le manipulait.Existe-t-il un moyen d'obtenir des adresses MAC de destination dans ANSI C

Répondre

-1

Ce que j'ai décidé de faire était d'envoyer mes propres paquets ARP et de le mettre en cache dans mon application. Si la destination est en dehors de mon réseau local j'analyse /proc/net/route et extrait la passerelle pour l'interface donnée et envoie un paquet arp à la passerelle pour obtenir son adresse macaddress (puisque c'est la destination macaddress des paquets destinés à l'extérieur du réseau local).

+0

Puisque vous avez apparemment accès à '/ proc/net', pourquoi emprunter cette route complexe au lieu de regarder simplement la table arp? – mvds

+0

Beacuse dans ma table arp il y avait plusieurs enteries eth0. 192.168.0.1, 192.168.0.2 et 192.168.0.236. Mais en fait, je n'ai qu'une seule passerelle et c'est 192.168.0.1. Comme c'était la seule listée dans/proc/net/route comme la passerelle par défaut, il était plus sûr de l'utiliser puisque dans/proc/net/arp, il n'y avait aucun signe pour dire quelle était la passerelle par défaut. Dans la table arp j'ai même eu des entrées pour les ordinateurs de collègues sur le réseau. Ce que j'aurais pu faire était d'extraire l'ip vers la passerelle depuis/proc/net/route et d'obtenir le mac depuis/proc/net/arp. – inquam

2

Pas une réponse exacte, car ce n'est pas ANSI C, mais vous pouvez lire la table arp de /proc/net/arp (sous Linux, c'est-à-dire). C'est là que ressemble arp. Pour tout autre OS, le plus simple est d'utiliser strace ou un équivalent sur l'utilitaire arp-cache-show équivalent.