2013-03-13 9 views
5

Quindi sto cercando di ottenere l'indirizzo IP LAN della macchina su cui è in esecuzione il programma e confrontarlo con gli indirizzi IP passati tramite UDP.Python Ottenere l'indirizzo IP della LAN della macchina su Ubuntu

Tuttavia quando uso:

print str(socket.gethostbyname(socket.gethostname())) 

Esso restituisce 127.0.0.1 che dovrebbe essere 192.168.1.9.

Ho controllato la macchina Linux e ho ottenuto l'indirizzo IP della porta lo (loopBack)? Non so esattamente cosa sia, ma dovrebbe essere l'indirizzo IP di eth0.

Ho scoperto che posso sottoprocesso il comando bash "ifconfig eth0" ma che restituisce un grosso blocco di una stringa. Posso elaborarlo in base a ciò che mi serve, ma questo verrà eseguito circa 3 volte al secondo su un beaglebone, quindi mi piacerebbe che fosse un po 'più efficace.

C'è un modo più elegante per farlo?

Posso solo modificare l'obiettivo di gethostname?

Perché è il targeting per lo porto?

Grazie per il vostro aiuto.

+0

Se qualcuno sta provando a fare questo e hanno un server che avrà sempre accesso a Internet c'è il sito http://code.activestate.com/recipes/439094-get-the-ip-ad-ress-associate-with-a -network-inter/che ha risolto il problema. Ma il mio server non avrà sempre internet quindi non posso usarlo. – Poodimizer

risposta

1

netifaces sembra un modulo python piuttosto carino che dovrebbe fare il trucco per voi.

+0

Sembra abbastanza promettente. Verificherò sicuramente e tornerò a voi – Poodimizer

4

Prova restituire il nome di dominio completo della macchina:

print str(socket.gethostbyname(socket.getfqdn())) 

/etc/hosts ha probabilmente una voce risolvere nome host a 127.0.0.1, motivo per cui socket.gethostbyname() non restituisce ciò che vi aspettate.

La domanda di carattere originale è stata aperta e ha risposto al numero here, ma la soluzione socket.getfqdn() non si è protratta a prima vista. Ecco lo solution per l'analisi dell'output ifconfig se si decide di seguire quella rotta. La libreria standard sembra più che sufficiente per risolvere il tuo problema.

+0

Ho avuto l'impressione che il file hosts fosse solo una tabella di ricerca dns per server esterni. Lo str print (socket.gethostbyname (socket.getfqdn())) ha restituito la stessa cosa (127.0.1.1). – Poodimizer

+0

@Poodimizer Cosa restituisce 'socket.getfqdn()'? Potrebbe anche essere utile vedere il file 'hosts'. – Bryan

+0

Avevi ragione il file hosts: 127.0.0.1 localhost 127.0.1.1 omap Sto correndo un errore in questo momento quindi non posso eseguire socket.fqdn() in questo momento. riavviare il server. – Poodimizer

Problemi correlati