On 2005-01-05, none <""> wrote:
> I want to determine the outside (non local, a.k.a. 127.0.0.x) ip
> addresses of my host. It seems that the socket module provides me with
> some nifty tools for that but I cannot get it to work correctly it seems.
>
> Can someone enlightened show a light on this:
>
> import socket
> 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]
> return [i for i in ips if i.split('.')[0] != '127'][0]
>
> It does not seem to work on all hosts. Sometimes socket.gethostbyname_ex
> only retrieves the 127.0.0.x ip adresses of the local loopback. Does
> someone has a more robust solution?
>
> Targetted OS'es are Windows AND linux/unix.
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:
import commands
ifconfig = '/sbin/ifconfig'
# name of ethernet interface
iface = 'eth0'
# text just before inet address in ifconfig output
telltale = 'inet addr:'
def my_addr():
cmd = '%s %s' % (ifconfig, iface)
output = commands.getoutput(cmd)
inet = output.find(telltale)
if inet >= 0:
start = inet + len(telltale)
end = output.find(' ', start)
addr = output[start:end]
else:
addr = ''
return 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).
--
http://mail.python.org/mailman/listinfo/python-list