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] >



1 Zeth says...
Okay this is not cross-platform, but rather cool for how many different text processing tools you can get in there:
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