[PIPython] Ottenere ip locale.

Andrea Manzini amanzini
Ven 19 Nov 2004 15:16:54 CET


At 16.31 05/11/2004, Gianmario Salvetti wrote:
>Ciao a tutti. Domanda:
>Sono connesso ad internet con un modem 56k (quindi protocollo di rete 
>ppp). Tento di scoprire il mio indirizzo ip con python quindi:
>
> >>>socket.gethostbyname(socket.gethostname())
>127.0.0.1
>
>Perche' mi restituisce l'indirizzo di  loopback?

credo sia perche' loopback e' l'unica interfaccia di rete che abbia 
associato un nome risolvibile... Cioe' se fossi connesso in rete con una 
scheda avente indirizzo e nome fisso, e un dns configurato correttamente, 
ti restituirebbe (anche) quello...

Su una macchina multihomed (ovvero con piu' interfacce di rete), quale ip 
dovrebbe restituire ?

vedi a questo proposito:

 >>> print socket.gethostbyname_ex(socket.gethostname())

che ritorna una lista anziche' una singola stringa ;)

>L'unico modo che ho trovato per ottenere sto benedetto local address, e' 
>creare un socket collegandomi ad un sito internet noto sulla porta 80. 
>Dopodiche' utilizzo il metodo getsockname per ottenere sto maledetto ip.
>
>s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
>s.connect(("www.libero.it", 80))
>ip = s.getsockname()
>s.close()
>
>Probabilmente mi perdo in un bicchier d'acqua, ma sto impazzendo....
>..... spiegatemiiiiiii.....ci sara' pure un modo piu' pulito!!!??!!??!!??
>Un pacato grazie.

non credo ci sia un modo standard in puro python, ma mi piacerebbe avere 
una smentita :)

una soluzione che ho trovato io e' "parsificare" l'output di  ifconfig (o 
ipconfig sotto win32), usare le ioctl o leggere in /proc  sotto linux... 
Cose sporche insomma :)


-- 
#!/usr/bin/python
(you,love,me)=('Madein zAr','0-*1+).()-/,-,',len('.signature')<<1)
print ''.join([you[give-me] for give in [ord(er)-me for er in love]])




























More information about the Python mailing list