Best way to get ip address

D

Darren Kirby

Hello list:

I am writing a small app in python which tracks the kernel banner at
kernel.org and downloads newer kernel version(s) (if there are any).

I am using GeoIP to set the download to a local mirror if there is one. This
is what I use to get the local IP address:

ip = socket.gethostbyaddr(socket.gethostname())
# returns: ('hostname.domain', ['hostname'], ['192.168.0.2'])
ip = str(ip[2])
# returns: "['192.168.0.2']"
ip = ip[2:-2]
# returns: '192.168.0.2'

This works fine, but seems a little crufty and convoluted, and usually when
things get crufty it means there is a better way to do it...so is there a
preferred way of obtaining a local IP address?

Another issue is that if the user is behind a NAT firewall or somesuch and
uses a private network address then the whole GeoIP code is moot. I was
thinking that if this is the case then the app could check for the default
gateway of the machine and use that IP instead, but of course the gateway may
just be another private network IP address. Does anyone have some ideas on
how I could make this code useful with a private IP address?

Thanks for your time.
--
Part of the problem since 1976
http://badcomputer.no-ip.com
Get my public key from
http://keyserver.linux.it/pks/lookup?op=index&search=bulliver
"...the number of UNIX installations has grown to 10, with more expected..."
- Dennis Ritchie and Ken Thompson, June 1972

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.4 (GNU/Linux)

iD8DBQBBQKoLOrzWcOwL7mwRAq3sAKCT83z/W3nlZF321xlsAonWhorg3gCfTGmy
iyWScjtbCNW1h3ssjnFm2q0=
=Hux5
-----END PGP SIGNATURE-----
 
C

Cameron Laird

-=-=-=-=-=-

Hello list:

I am writing a small app in python which tracks the kernel banner at
kernel.org and downloads newer kernel version(s) (if there are any).

I am using GeoIP to set the download to a local mirror if there is one. This
is what I use to get the local IP address:

ip = socket.gethostbyaddr(socket.gethostname())
# returns: ('hostname.domain', ['hostname'], ['192.168.0.2'])
ip = str(ip[2])
# returns: "['192.168.0.2']"
ip = ip[2:-2]
# returns: '192.168.0.2'

This works fine, but seems a little crufty and convoluted, and usually when
things get crufty it means there is a better way to do it...so is there a
preferred way of obtaining a local IP address?

Another issue is that if the user is behind a NAT firewall or somesuch and
uses a private network address then the whole GeoIP code is moot. I was
thinking that if this is the case then the app could check for the default
gateway of the machine and use that IP instead, but of course the gateway may
just be another private network IP address. Does anyone have some ideas on
how I could make this code useful with a private IP address?
.
.
.
Your instincts are healthy; this *is* convoluted. As it
turns out, though, there's no clearly better answer.

For various reasons--I find it convenient today to blame "sec-
urity"--there is not and will not be a satisfying answer to
this question. You might like to read through, for example, <URL:
http://groups.google.com/groups?frame=left&th=7026ecbc602559e6 >.
 
P

Pierre Fortin

ip = socket.gethostbyaddr(socket.gethostname())
# returns: ('hostname.domain', ['hostname'], ['192.168.0.2'])
ip = str(ip[2])
# returns: "['192.168.0.2']"
ip = ip[2:-2]
# returns: '192.168.0.2'

This works fine, but seems a little crufty and convoluted, and usually
when things get crufty it means there is a better way to do it...so is
there a preferred way of obtaining a local IP address?

When functions return well documented results, I tend to just code like
this:

# returns: ('hostname.domain', ['hostname'], ['192.168.0.2'])
ip = socket.gethostbyaddr(socket.gethostname())[-1][0]

Gets the only list item of the last tuple item -- no calls to str() or
getting cute with the list's "[...]"

Pierre
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,769
Messages
2,569,582
Members
45,057
Latest member
KetoBeezACVGummies

Latest Threads

Top