How to find out your IP address in Python

24 November 2007

Interesting Fact for Anoraks

Before Avahi and Zeroconf and so on, the classic way that a computer knows where to find other machines on the network is the hosts file. The /etc directory is the main location for configuration files on Linux/Unix. So the location for the hosts file is /etc/hosts.

BSD had one of the first implementations of an TCP/IP stack, this was then taken by a company called Spider Systems and flogged to Microsoft, who added it to Windows NT. Over time, much of Microsoft's TCP/IP layer has probably been modified and re-factored over time, but there is a continuous line of code from BSD to Windows NT/XP/VISTA.

So in these later Windows systems, where is the hosts file? It is:

C:/WINDOWS/system32/drivers/etc/hosts

Which is pretty interesting (or not if you are without your anorak).

How to find out your hostname

The hostname is the computer's individual name. To find out your hostname on a Linux/Unix system, you can use the coreutils command uname:

uname -n

(There are also various commands called 'hostname' which very according to platform).

There is also a C function gethostname() (in Linux provided by glibc), this makes a call to the system information and returns the name of the system.

The Python Socket Module is a binding to many of these C functions that deal with low-level network programming. So to get the hostname via the socket module, you can run:

> ::import socket > socket.gethostname() >

If you are not used to python, just type this into a terminal:

python -c 'import socket; print socket.gethostname()'

How to find out your IP Address

Now we might like to find out the IP Address of the system. This is slightly more difficult to do cleanly and in a cross-platform fashion.

There was a discussion on the Python mailing list today when someone asked exactly this question.

A common way to get the IP address of the local system is to use the socket module's binding to the C function called gethostbyname() and then feed in the hostname that we discovered above:

> ::import socket > socket.gethostbyname(socket.gethostname()) >

This will work for many systems but not all. Most servers will have a fixed IP address added to their /etc/hosts file. However, desktops often will not have this, especially if they are laptops that move from network to network.

Jean-Paul Calderone replied to the mailing list with a cunning solution; prepare a dummy socket and see what the socket name is:

> ::import socket > s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) > s.connect(('google.com', 0)) > s.getsockname()[0] >

Discuss this post - Leave a comment

1 Zeth says...

Okay this is not cross-platform, but rather cool for how many different text processing tools you can get in there:

import os
os.popen("ifconfig eth0 | grep inet | awk '{print $2}' | sed -e s/.*://", "r")

Posted at 1:02 a.m. on November 25, 2007


2 Zeth says...

In CGI, showing the remote IP of the visitor is simply a matter of getting os.environ['REMOTE_ADDR'] as demonstrated here: http://zeth.me.uk/python/myip.txt

Of course, if the browser has a router then the IP address will come from that.

Posted at 1:16 a.m. on November 25, 2007


3 Arne Babenhauserheide says...

Many thanks for the info!

But the problem is: This doesn't reach out over a NAT.

It would be nice to have it implemented in the standard-module, giving me the option to specify the host to use.

Something like

socket.getlocalip

socket.getexternalip

Posted at 6:51 p.m. on November 25, 2007


4 Shahzad says...

Hi am trying to upload my website by using coffe cup in server option .. it requires 1. server name ,, user name ,and password, well am not able to find my server name can any body help me with this

Posted at 4:03 a.m. on July 6, 2008


5 Serg says...

# -- coding: utf-8 -- #????????? ?????? ip-??????? ?????, ?? ??????? ???????? ?????????

import socket

#?????????? ?????? IP-??????? ?????, ?? ??????? ???????? ????????? # ?????????: # ??? # ???????????? ????????: # ?????? IP-??????? (????? ? ????????? ???? 'a.b.c.d') def GetIP ():

System Message: ERROR/3 (<string>, line 12)

Unexpected indentation.
return socket.gethostbyname_ex(socket.gethostname())[2]

#???????????? if __name__=='__main__':

System Message: ERROR/3 (<string>, line 16)

Unexpected indentation.

print 'IP addresses:' for i in GetIP():

System Message: ERROR/3 (<string>, line 18)

Unexpected indentation.
print i

Posted at 4:02 p.m. on July 6, 2009


6 iki says...

local_ip = set([ i[4][0] for i in socket.getaddrinfo(socket.gethostname(), None) if i[0] == 2 ])

Posted at 7:31 a.m. on November 2, 2009


7 iki says...

or simpler: socket.gethostbyname_ex(socket.gethostname())[2]

Posted at 7:35 a.m. on November 2, 2009


What do you have to say?

Show Editing Help

About

Hello, my name is Zeth, I'll be your host here.

Command Line Warriors is about taking control of your own technology, it looks at our experiences of computing; especially using GNU/Linux, the Python programming language, the command-line and issues such as techno-ethics, best practices and whatever is cool now. If you take control of your technology then you are a Warrior too!

This site is your site too which means that you can contribute and get involved. You can leave comments using the facility provided. For me, the comments and discussions are by far the best part of the site. So please do have your say!

Latest Discussions

Essex Web Design

September 3, 2010
A lot of contract providers give you free internet usage now, but if you have Pay As You Go, then you are going to be paying heavy prices.
Calling time on mobile internet nonsense?

Krasochka

September 2, 2010
Hack again?!
Adding more terminals to your function keys

GenryFlorist

September 2, 2010
<b>Cheap flowers delivery around the world!</b> Celebrate summer with our gorgeous flowers. They?re the perfect gift for any summer occasion. From birthdays to anniversaries, we offer beautiful flowers, lush plants, ...
Burning an iso to CD on Windows

auto-financing.co.cc

September 2, 2010
auto-financing
ReStructuredText tables and doctests

rubaxa

September 1, 2010
FTP = NOT RANDOM software Dominated hands postflop suckout often on all-ins. EX. AK vs. A9 or KQ vs. K6. Both players hit top pair. Bad player goes all in ...
Burning an iso to CD on Windows

empodayaddelm

September 1, 2010
Sorry admin - my post is test
This Week: Heroes and Monsters

increase synthroid dosage

September 1, 2010
Latest world news: 1 <a target="_blank" class="ext" href=http://www.maktabti.org/profiles/blogs/viagra-cialis-buy-no>buy cheap cialis generic levitra viagra</a> Viagra 2 <a target="_blank" class="ext" href=http://www.maktabti.org/profiles/blogs/buy-viagra-online-at-lowest>rainbowpush discussion board buy viagra</a> Viagra 3 <a target="_blank" class="ext" href=http://www.maktabti.org/profiles/blogs/how-to-get-generic-brand>search viagra ...
SFTP in Python: Paramiko

Lacilslaw

September 1, 2010
HYUN JAIMIE enniless and homele JAMILA
This Week: Heroes and Monsters

domaserisk

August 31, 2010
who was shaking his head back and forth knowingly Grissom shifted his eyes over at Brass,
How I Removed Windows from my Laptop

get ready loan

August 30, 2010
Though, by the you kill the legitimate PC user from visiting the site. Also, think about the dynamic IP's issue.
Only the penitent man will pass - on captchas and cotton wool

Packers and movers in pune

August 30, 2010
The topic you disscussed here is very amazing, informative and useful in future...
On Comment Spam

serhanters1

August 30, 2010
?? ???????? ??... ??????...... ??. ????????? ??? ??? ???????D ???????? ??. ????? ????? ???? ??? ???=) ?? ?????- http://letitbit.net/download/8746.894a84bc20f38f1661895aeee0/stereokartinki.html ???http://f-zona.ru ? ? ?? ????????????
Burning an iso to CD on Windows

strona startowa

August 29, 2010
Thanks For This Post, was added to my bookmarks.
Python CGI contact forms

lerexottori

August 29, 2010
?????????????? ??????????
Adding more terminals to your function keys

KelpAugmeme

August 29, 2010
aofaapsymp, http://forums.quark.com/members/jennaq.aspx online stock trading broker, rdgofzary
PuTTY Series: Adding PuTTY to your system path

Cheeday

August 28, 2010
What flowers do you like?
This Week: Heroes and Monsters

magfcvb

August 28, 2010
??????? ?????????????? ?????? - ????? ?????? ?????????????? ??????, ?????????????? ?????? ???????, ?????????????? ?????? crosman, ???? ??????????????? ??????, ?????????????? ?????? ?????? ????????. ???? magazin-oruzhie.ru
Include ODF support in the Linux Standard Base?

noni

August 28, 2010
I find myself coming to your blog more and more often to the point where my visits are almost daily now!
On Comment Spam

Latenadsfes

August 28, 2010
http://mynewblog.for-breastcancer.com/ http://mynewblog.photoblogcentral.com/ http://ilovezebras.thechicks.org/ http://mynewblog.cyberbardsymposium.com/ http://wewphost.com/ilovezebras/
Burning an iso to CD on Windows

LeupoldEst

August 28, 2010
pretty cool stuff here thank you!!!!!!!
OOXML Vote Coverage