Pregunta

Me gustaría buscar una dirección MAC dada en mi red, todo desde dentro de una secuencia de comandos de Python.Ya tengo un mapa de todos los activos de direcciones IP en la red, pero no puedo averiguar cómo obtener la dirección MAC.Alguna idea?

¿Fue útil?

Solución

Usted necesita ARP.Python biblioteca estándar no incluye ningún código para que, por lo que usted necesita llamar a un programa externo (su sistema operativo puede tener un " arp " utilidad) o que usted necesita para construir los paquetes a sí mismo (posiblemente con una herramienta como Scapy.

Otros consejos

Este artículo, "Enviar a mano las Tramas de Ethernet en Python (ARP, por ejemplo)", parece ser exactamente lo que usted está buscando.

Creo que no hay una construcción en forma de llegar desde el propio Python.

Mi pregunta es, ¿cómo obtienen la información IP de su red?

Para obtener de su máquina local podría analizar ifconfig (unix) o ipconfig (windows) con un poco de dificultad.

Si quieres un puro Python solución, usted puede echar un vistazo a Scapy para elaborar los paquetes (que usted necesita para enviar solicitud de ARP, y de examinar las respuestas).O si no te importa la invocación de un programa externo, puede utilizar arping (en un*x sistemas, no sé de un equivalente en Windows).

Parece que no hay un nativo manera de hacer esto con Python.Su mejor apuesta sería la de analizar la salida de "ipconfig /all" en Windows o "ifconfig" en Linux.Considere la posibilidad de usar el sistema operativo.popen() con algunos regex.

Depende de su plataforma.Si usted está usando *nix, puede utilizar el "arp' comando para buscar la dirección mac de una determinada IP (suponiendo IPv4) dirección.Si eso no funciona, usted podría hacer ping a la dirección y, a continuación, buscar, o si usted tiene acceso a la red bruta (utilizando BPF o algún otro mecanismo), usted puede enviar sus propios paquetes ARP (pero que es probablemente una exageración).

Usted quiere analizar la salida de 'arp', pero el núcleo de la caché de ARP sólo contendrá los de la dirección IP(es) si los anfitriones se han comunicado con el host en el que la secuencia de comandos de Python que se ejecuta.

ifconfig puede ser utilizado para mostrar las direcciones MAC de las interfaces locales, pero no los de la LAN.

Mark Pilgrim se describe cómo hacer esto en Windows de la máquina actual con el módulo de Netbios aquí.Usted puede conseguir el Netbios módulo como parte de la Win32 paquete disponible en python.org.Lamentablemente por el momento no puedo encontrar la documentación en el módulo.

como python no estaba destinado a tratar con OS-cuestiones específicas (que se supone que debe ser interpretado y multiplataforma), me gustaría ejecutar un comando externo para hacerlo:

en unix, el comando es ifconfig

si se ejecuta como un tubo que obtener el resultado deseado:

import os
myPipe = os.popen2("/sbin/ifconfig","a")
print(myPipe[1].read())
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top