2008-09-17 36 views
8

Me gustaría buscar una dirección MAC dada en mi red, todo desde una secuencia de comandos de Python. Ya tengo un mapa de todas las direcciones IP activas en la red, pero no puedo encontrar la forma de extraer la dirección MAC. ¿Algunas ideas?Buscar host con dirección MAC usando Python

Respuesta

11

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

1

No creo que haya una forma integrada de obtenerlo de Python.

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

Para obtenerlo desde su máquina local, puede analizar ifconfig (unix) o ipconfig (windows) con poca dificultad.

0

Depende de su plataforma. Si usa * nix, puede usar el comando 'arp' para buscar la dirección MAC para una dirección IP dada (asumiendo IPv4). Si eso no funciona, puede hacer ping al dirección y luego mirar, o si tiene acceso a la red sin procesar (usando BPF o algún otro mecanismo), puede enviar sus propios paquetes ARP (pero eso probablemente sea excesivo).

1

Si quiere una solución de Python pura, Puede echar un vistazo al Scapy para crear paquetes (debe enviar una solicitud ARP e inspeccionar las respuestas). O si no le molesta invocar un programa externo, puede usar arping (en sistemas Un * x, no conozco un equivalente de Windows).

1

Parece que no hay una forma nativa de hacer esto con Python. Su mejor opción sería analizar la salida de "ipconfig/all" en Windows, o "ifconfig" en Linux. Considere usar os.popen() con algunas expresiones regulares.

0

Desea analizar la salida de 'arp', pero la memoria caché ARP del kernel solo contendrá esas direcciones IP si esos hosts se han comunicado con el host donde se ejecuta la secuencia de comandos de Python.

ifconfig se puede utilizar para mostrar las direcciones MAC de las interfaces locales, pero no las de la LAN.

0

Mark Pilgrim describe cómo hacer esto en Windows para la máquina actual con el módulo de Netbios here. Puede obtener el módulo Netbios como parte del paquete Win32 disponible en python.org. Lamentablemente, en este momento no puedo encontrar los documentos en el módulo.

-1

como pitón no estaba destinado a hacer frente a los problemas específicos de OS (se supone que debe ser interpretado y multiplataforma), i ejecutaría un comando externo para hacerlo:

en Unix el comando es ifconfig

si se ejecuta como una tubería se obtiene el resultado deseado:

import os 
myPipe = os.popen2("/sbin/ifconfig","a") 
print(myPipe[1].read()) 
+0

Python tiene módulos específicos del sistema operativo, por lo que creo que su respuesta es engañosa. La manera pitónica de manejar esto sería un módulo para tener una interfaz independiente del sistema operativo que podría ser clasificada por complementos específicos del sistema operativo. – Walter

2

This article, "enviar tramas Ethernet hechos a mano en Python (ARP por ejemplo)", parece ser exactamente lo que busca.

Cuestiones relacionadas