Of course! In Python, the standard way to get the IP address from a hostname (a process also known as DNS resolution) is by using the socket module.

The primary function for this is socket.gethostbyname().
The Basic Method: socket.gethostbyname()
This function takes a hostname (like 'google.com' or 'python.org') and returns its corresponding IPv4 address as a string.
How to Use It
Here is a simple, complete example:
import socket
hostname = "google.com"
try:
# Get the IP address for the hostname
ip_address = socket.gethostbyname(hostname)
print(f"The IP address of {hostname} is: {ip_address}")
except socket.gaierror as e:
# gaierror stands for "getaddrinfo error"
print(f"Could not resolve hostname {hostname}: {e}")
except Exception as e:
print(f"An unexpected error occurred: {e}")
Output:

The IP address of google.com is: 142.250.191.78
Explanation of the Code
import socket: This line imports Python's built-in socket module, which provides access to the BSD socket interface.hostname = "google.com": We define the hostname we want to look up.try...exceptblock: This is crucial for robust code. DNS lookups can fail for many reasons (the host doesn't exist, the DNS server is down, etc.), so you must handle potential errors.socket.gethostbyname(hostname): This is the core function call. It performs the DNS query.socket.gaierror: This specific exception is raised if the name resolution fails.gaierrorstands for "get address info error". It's the most common error you'll encounter for an invalid hostname.
Getting More Information: socket.getaddrinfo()
Sometimes, you need more than just the IPv4 address. You might want the IPv6 address, or a list of all IP addresses associated with a host. For this, socket.getaddrinfo() is a more powerful and flexible function.
It returns a list of tuples, where each tuple contains a variety of information about a potential connection.
How to Use It
This function returns a lot of information. Let's break down how to use it.
import socket
hostname = "python.org"
try:
# Get a list of address information for the hostname
# We ask for all available addresses (AF_UNSPEC) and all types (SOCK_STREAM, SOCK_DGRAM)
addr_info_list = socket.getaddrinfo(hostname, None, family=socket.AF_UNSPEC)
print(f"Address information for {hostname}:\n")
for info in addr_info_list:
# Each 'info' tuple contains: (family, type, proto, canonname, sockaddr)
family, type, proto, canonname, sockaddr = info
# The sockaddr contains the actual address. Its format depends on the family.
if family == socket.AF_INET:
# For IPv4, sockaddr is (ip_address, port)
ip_address = sockaddr[0]
print(f"IPv4 Address: {ip_address}")
elif family == socket.AF_INET6:
# For IPv6, sockaddr is (ip_address, port, flowinfo, scopeid)
ip_address = sockaddr[0]
print(f"IPv6 Address: {ip_address}")
except socket.gaierror as e:
print(f"Could not resolve hostname {hostname}: {e}")
Output:

Address information for python.org:
IPv4 Address: 51.222.160.227
IPv4 Address: 51.222.160.228
IPv6 Address: 2001:41d0:601:110::53
IPv6 Address: 2001:41d0:601:110::59
Explanation of getaddrinfo()
socket.getaddrinfo(hostname, port, ...): It takes a hostname and a port number (orNoneif you don't care about the port).family=socket.AF_UNSPEC: This tells the function to return addresses for any family (both IPv4 and IPv6). You could specifysocket.AF_INETfor only IPv4 orsocket.AF_INET6for only IPv6.- Return Value: A list of 5-tuples. The last element,
sockaddr, holds the actual IP address and port. The format ofsockaddrdiffers between IPv4 and IPv6, which is why we check thefamilyin the loop.
The Reverse: Getting a Hostname from an IP Address
You can also do the reverse lookup using socket.gethostbyaddr().
import socket
ip_address = "8.8.8.8" # Google's Public DNS
try:
hostname, aliaslist, ipaddrlist = socket.gethostbyaddr(ip_address)
print(f"The hostname for IP {ip_address} is: {hostname}")
print(f"Aliases: {aliaslist}")
print(f"IP addresses: {ipaddrlist}")
except socket.herror as e:
# herror stands for "host error"
print(f"Could not resolve hostname for IP {ip_address}: {e}")
Output:
The hostname for IP 8.8.8.8 is: dns.google
Aliases: []
IP addresses: ['8.8.8.8']
Summary: Which one should you use?
| Function | Purpose | Return Value | Best For |
|---|---|---|---|
socket.gethostbyname() |
Simple IPv4 lookup. | A single string (the IPv4 address). | Quick and simple scripts where you only need the primary IPv4 address. |
socket.getaddrinfo() |
Powerful lookup for IPv4 and/or IPv6. | A list of tuples with detailed connection info. | Applications that need to be robust and support both IPv4 and IPv6, or need to handle multiple IP addresses for a single host. |
socket.gethostbyaddr() |
Reverse DNS lookup (IP to hostname). | A tuple with (hostname, aliaslist, ipaddrlist). | When you have an IP address and need to find the corresponding domain name. |
