Domanda

Mi piacerebbe cercare un determinato indirizzo MAC sulla mia rete, il tutto da uno script Python.Ho già una mappa di tutti gli indirizzi IP attivi nella rete ma non riesco a capire come ottenere l'indirizzo MAC.Qualche idea?

È stato utile?

Soluzione

Hai bisogno ARP.La libreria standard di Python non include alcun codice per questo, quindi devi chiamare un programma esterno (il tuo sistema operativo potrebbe avere un'utilità 'arp') o devi creare tu stesso i pacchetti (possibilmente con uno strumento come Scapido.

Altri suggerimenti

Questo articolo, "Invia frame Ethernet realizzati a mano in Python (ad esempio ARP)", sembra essere esattamente quello che stai cercando.

Non penso che esista un modo integrato per ottenerlo da Python stesso.

La mia domanda è: come ottieni le informazioni IP dalla tua rete?

Per ottenerlo dal tuo computer locale potresti analizzare ifconfig (unix) o ipconfig (windows) con poca difficoltà.

Se vuoi una soluzione Python pura, puoi dare un'occhiata a Scapido per creare pacchetti (è necessario inviare richieste ARP e controllare le risposte).Oppure, se non ti dispiace invocare un programma esterno, puoi usare arping (sui sistemi Un*x, non conosco un equivalente Windows).

Sembra che non esista un modo nativo per farlo con Python.La soluzione migliore sarebbe analizzare l'output di "ipconfig /all" su Windows o "ifconfig" su Linux.Considera l'utilizzo di os.popen() con alcune espressioni regolari.

Dipende dalla tua piattaforma.Se stai utilizzando *nix, puoi utilizzare il comando 'arp' per cercare l'indirizzo mac per un determinato indirizzo IP (presupponendo IPv4).Se non funziona, potresti eseguire il ping dell'indirizzo e poi controllare, oppure se hai accesso alla rete grezza (usando BPF o qualche altro meccanismo), potresti inviare i tuoi pacchetti ARP (ma probabilmente è eccessivo).

Dovresti analizzare l'output di "arp", ma la cache ARP del kernel conterrà quegli indirizzi IP solo se tali host hanno comunicato con l'host su cui è in esecuzione lo script Python.

ifconfig può essere utilizzato per visualizzare gli indirizzi MAC delle interfacce locali, ma non quelli sulla LAN.

Mark Pilgrim descrive come eseguire questa operazione su Windows per la macchina corrente con il modulo Netbios Qui.Puoi ottenere il modulo Netbios come parte del pacchetto Win32 disponibile su python.org.Purtroppo al momento non riesco a trovare la documentazione sul modulo.

poiché Python non doveva gestire problemi specifici del sistema operativo (dovrebbe essere interpretato e multipiattaforma), eseguirei un comando esterno per farlo:

in Unix il comando è ifconfig

se lo esegui come pipe ottieni il risultato desiderato:

import os
myPipe = os.popen2("/sbin/ifconfig","a")
print(myPipe[1].read())
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top