Obtener la dirección IP de MAC usando python

Tengo un dispositivo en mi red local y conozco su dirección MAC. Obtiene su dirección IP automáticamente a través de DHCP. Quiero obtener esta IP.

No quiero usar nmap pero scapy estaría bien, ya que estoy importando desde una aplicación kivy.

Encontré:

from scapy.all import srp, Ether, ARP ans,unans=srp(Ether(dst="ff:ff:ff:ff:ff:ff")/ARP(pdst="192.168.1.0/24"),timeout=2) 

y con

 ans.summary() 

Me sale el siguiente resultado:

 Ether / ARP who has 192.168.43.1 says 192.168.43.92 ==> Ether / ARP is at 3e:f8:d9:45:1b:3d says 192.168.43.1 

Mis dos problemas son:

1: Tengo que ejecutar el script con sudo python y no estoy seguro de los permisos en Kivy.

2: ¿Existe una forma sencilla de obtener las variables para IP / MAC de .summary ()?

Sí, puedes hacerlo usando scapy. Aquí hay un ejemplo de un paquete ARP is-at:

 ###[ Ethernet ]### dst= 08:00:27:fa:25:8e src= 08:00:27:b1:af:68 type= 0x806 ###[ ARP ]### hwtype= 0x1 ptype= 0x800 hwlen= 6 plen= 4 op= is-at hwsrc= 08:00:27:b1:af:68 psrc= 192.168.56.102 hwdst= 08:00:27:fa:25:8e pdst= 192.168.56.101 ###[ Padding ]### load= '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x00' 

Puede asignar los valores hwsrc y psrc a una variable como esta

 srcMAC = pkt[ARP].hwsrc srcIP = pkt[ARP].psrc 

o simplemente imprimirlos como este

 print pkt[ARP].hwsrc print pkt[ARP].psrc 

Espero que ayude.

Si la estructura del resumen es siempre la misma (lo que supongo), entonces puede import re y usar una expresión regular para extraer la dirección IP.

Debería ser algo como:

 re.sub(r'.* says (.*) ==> Ether / ARP is.*', r'\1', ans.summary()) 

Funciona para mi:

 >>> import re >>> x = "Ether / ARP who has 192.168.43.1 says 192.168.43.92 ==> Ether / ARP is at 3e:f8:d9:45:1b:3d says 192.168.43.1" >>> re.sub(r'.* says (.*) ==> Ether / ARP is.*', r'\1', x) '192.168.43.92'