get the IP address of a host

J Berends j.p.t.j.berends at [N0SP4M].nl
Thu Jan 6 10:26:47 EST 2005


Jp Calderone wrote:
> On Thu, 06 Jan 2005 14:35:16 +0100, J Berends <j.p.t.j.berends@[n0sp4m].nl> wrote:
> 
>> From several approached I came up with the following code:
>>
>>def getipaddr(hostname='default'):
>>     """Given a hostname, perform a standard (forward) lookup and return
>>     a list of IP addresses for that host."""
>>     if hostname == 'default':
>>         hostname = socket.gethostname()
>>     ips = socket.gethostbyname_ex(hostname)[2]
>>     ips = [i for i in ips if i.split('.')[0] != '127']
>>     if len(ips) != 0:
>>         # check if we have succes in determining outside IP
>>         ip = ips[0]
>>     elif len(ips) == 0 and hostname == socket.gethostname():
>>         # when we want to determine local IP and did not have succes
>>         # with gethostbyname_ex then we would like to connect to say... 
>>
>>         # google.com and determine the local ip address bound to the
>>         # local socket.
>>         try:
>>             s = socket.socket()
>>             s.connect(('google.com', 80))
>>             print ('___ connecting to internet to determine local ip')
>>             ip = s.getsockname()[0]
> 
> 
>     s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
>     s.connect(('1.2.3.4', 56))
>     ip = s.getsockname()[0]
> 
> 
> 
>>             del s
>>         except:
>>             print ('*** cannot connect to internet in order to \
>>                    determine outside IP address')
>>             raise Exception
>>     if len(ip) != 0:
>>         return ip
>>     else:
>>         print ('*** unable to determine outside IP address')
>>         raise Exception
>>
>>It returns the IP address with which it connects to the world (not lo), 
>>might be a pvt LAN address or an internet routed IP. Depend on where the 
>>host is.
>>
>>I hate the google trick actually, so any suggestions to something better 
>>is always welcome.
> 
> 
>   Jp
thanks implemented and works like a charm.



More information about the Python-list mailing list