Question

Nous analysons actuellement le résultat de la requête arp à partir de la ligne de commande.

string cmd = "arp -n ";
cmd.append(ipaddress);
cmd.append(" | grep ");
cmd.append(ipaddress);
fgets( line, 130, fp);
fgets( line, 130, fp);
ret.append(line);
 ...

Cela fonctionne, mais existe-t-il un moyen de le faire en utilisant une fonction de bibliothèque qui ne dépende pas tellement de l'interface de ligne de commande native? Le projet utilise actuellement libpcap.

Était-ce utile?

La solution

En général, cela dépend de votre système d'exploitation. Il n'y a pas de véritable API standard pour cela.

En supposant que vous soyez sur Linux, ouvrez et analysez / proc / net / arp. Le format est similaire à celui de la sortie de la commande arp. Notez que vous devez envoyer un paquet à l'IP en question au moins une fois récemment pour qu'il soit dans la table ARP. Bien entendu, vous n'obtiendrez rien en dehors de votre segment local.

Obtenir une adresse IP dans ce cache est assez simple: envoyez simplement un paquet UDP sur un port non utilisé, par exemple, puis interrogez-le jusqu'à ce qu'il apparaisse.

Une autre alternative serait d’utiliser une socket crue pour créer et envoyer votre propre paquet arp, mais c’est beaucoup plus complexe :) Si vous souhaitez suivre cette voie, étudiez le code source pour arping (la page est hors service aujourd'hui, mais le git repo est en ligne), ce qui pourrait également vous donner un peu plus de portabilité en utilisant platform-independent-ish des bibliothèques comme libpcap (mais nécessite root)

Autres conseils

Je suis un peu inquiet pour la

  

récupérer l'adresse MAC de l'hôte étranger

une partie de votre question.

J'espère que vous savez que vous n'obtenez des entrées dans la table ARP que pour les machines du même réseau. Si vous vous connectez à une machine via un routeur, vous ne verrez que l'adresse MAC du routeur dans le tableau ARP. Il n’existe donc aucun moyen de connaître l’adresse MAC de l’hôte étranger , sauf s’il s’agit d’un hôte du même réseau (aucun routeur impliqué).

La réponse est donc qu'il est impossible pour les hôtes qui sont atteints via un routeur et que si l'hôte est accessible sur le réseau local, vous ne pouvez utiliser que des méthodes d'accès spécifiques à la plate-forme, car même le résultat de la commande arp peut différer plates-formes.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top