Est-il meilleure façon d'obtenir l'adresse mac de la table arp?
Je veux obtenir une adresse mac dans la table arp en utilisant l'adresse ip. Actuellement, je suis en utilisant cette commande
arp -a $ipAddress | awk '{print $4}'
Cette commande permet d'afficher ce que je veux. Mais je ne suis pas à l'aise avec elle et je me demande si il n'y a aucun moyen intégré ou de façon plus stable pour ce faire.
OriginalL'auteur ibrahim | 2012-12-08
Vous devez vous connecter pour publier un commentaire.
Vous pouvez analyser les
/proc/net/arp
fichier à l'aide deawk
:mais je ne suis pas sûr que c'est plus simple (il sauve une fourchette et un shell interne est exécuté, tout de même).
Si vous voulez un 100% bash solution:
Vous avez absolument raison. Si un jour un mec décide il devrait y avoir quelques changements dans la
/proc/net/arp
fichier, votre code va échouer lamentablement. Maintenant, est-ce susceptible de se produire de sitôt? Qui sait... le moyen Le plus sûr est bien sûr d'utiliser le protocole ARP directement à l'aide d'une bibliothèque d'encapsulation. Mais cela fonctionnera jusqu'à la bibliothèque de l'API est changé par un mec qui décide qu'il doit... de toute façon, je dirais que vous serez en sécurité pendant un certain temps en utilisant soit la méthode.Le noyau linux, les gars aiment garder leur API externe stable -- comme indiqué dans ma réponse, c'est la même source d'information
arp
utilise.OriginalL'auteur gniourf_gniourf
Eh bien, vous pourriez écrire un programme (comme en C) pour vraiment utiliser le protocole ARP (oui, je savoir c'est redondant, comme un distributeur de billets ou de numéro de BROCHE) lui-même pour vous obtenir l'information, mais qui est susceptible d'être beaucoup plus difficile qu'un simple pipeline.
Peut-être vous devriez examiner votre niveau de confort un peu plus critique, car il est susceptible de vous causer des efforts inutiles 🙂
La page de manuel de l'ARP Linux kernel module listes de plusieurs méthodes pour la manipulation ou la lecture de l'ARP tabes,
ioctl
probablement le plus facile.OriginalL'auteur paxdiablo
La sortie de
arp -a
des paramètres régionaux dépendant (c'est à dire qu'il change avec le langage de votre système). Donc, il pourrait être une bonne idée au moins de force pour les paramètres régionaux par défaut:Cependant, je partage votre crainte de la sortie de
arp -a
n'est pas destiné à être analysé. Si votre programme est limitée à un système linux, une autre option consisterait à analyser le fichier/proc/net/arp
. Ce fichier est exporté par le noyau et est ce que l'arp même analyse pour obtenir ses informations. Le format de ce fichier est décrit dans la page de manuel proc(5), voirman 5 proc
.Cela peut être fait facilement avec awk:
OriginalL'auteur Lars Noschinski
Voici un awk + sed solution qui permet de ne pas assumer le numéro de la colonne est toujours de 4.
Il y a encore des hypothèses fragiles, comme la colonne nom, adresse MATÉRIELLE".
OriginalL'auteur ddoxey
Mise à jour, supprimé PIPE
Solution pour les non-colonne fixe;
Explication
^.*
De Match en début de chaîne^
suivie par n'importe quel caractère.*
.[0-9A-Z]\{2\}:
- Correspond à tout caractère numérique alpha-numérique deux fois, suivi par deux points.\([0-9A-Z]\{2\}:\)\{5\}
- Correspondent au modèle entre la( )
cinq fois.[0-9A-Z]\{2\}
- Correspond à tout caractère numérique alphanumérique à deux reprises..*$
- Match tous les caractères zéro ou plusieurs fois.*
jusqu'à la fin de la chaîne$
.\1/p
- Retour de capture modèle 1 /p
imprimer le match.OriginalL'auteur koola
Vous pouvez l'utiliser pour l'écriture de scripts:
ce qu'il n':
1) lire /proc/net/arp (stanart arp sortie)
2) searchig pour les morsures avec [0-9]
3) obtenir le 4ème "colonne" avec les adresses mac
Profitez-en!
OriginalL'auteur Mcgrog