Jp Calderone wrote:
On Thu, 06 Jan 2005 14:35:16 +0100, J Berends <[EMAIL PROTECTED]> 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.
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to