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