Lee Harr wrote:

I found that the socket solutions only work if your
DNS entries are correct ... which in my case was not
true. So I came up with this:

That is indeed correct, and even if the DNS entries are correct at times it does not give the full list of IPs by gethostbyname or gethostbyaddr.


import commands
ifconfig = '/sbin/ifconfig'
# name of ethernet interface
iface = 'eth0'
# text just before inet address in ifconfig output
telltale = 'inet addr:'

...
>
Basically, it scrapes the output from ifconfig for the
actual address assigned to the interface. Works perfectly
on FreeBSD and Linux (given the correct configuration).

Nice way, have to device something for windows than.

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]
            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.
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to