Bonanza
Email
Enterprise Service
menu
Email
Enterprise Service
Submit
Basic information
Waiting for a reply
Your form has been submitted. We'll contact you in 24 hours.
Close
Home/ Blog/ Retrieving All IP Addresses of a Local Machine Using Python

Retrieving All IP Addresses of a Local Machine Using Python

Author:PYPROXY
2024-06-07 15:24:49

Retrieving All IP Addresses of a Local Machine Using Python

In Python, retrieving the IP addresses of a local machine can be a useful task for various reasons, such as network diagnostics, server configuration, or application development. While a computer may have multiple network interfaces and IP addresses, Python provides several methods to enumerate them. Here's a comprehensive guide on how to accomplish this task using Python.


Using thesocketModule

The socket module in Python offers a variety of network-related functionalities, including retrieving local IP addresses. You can use the gethostbyname_ex or getaddrinfo functions to achieve this. However, these methods may not return all IP addresses, especially those associated with non-primary network interfaces.

A more reliable approach is to iterate over the network interfaces and extract the IP addresses associated with each. Here's an example code snippet that accomplishes this:

python


import socket


import ipaddress




def get_local_ips():


ips = []


for interface in socket.getifaddrs():


if interface.family == socket.AF_INET: # IPv4


addr = interface.addr


if not addr.startswith('127.'): # Exclude loopback addresses


ips.append(addr)


elif interface.family == socket.AF_INET6: # IPv6


addr = interface.addr


if not addr.startswith('::1'): # Exclude IPv6 loopback addresses


ips.append(addr)


return ips




# Get and print all local IP addresses


local_ips = get_local_ips()


for ip in local_ips:


print(f"IP Address: {ip}")

In this code, we iterate over the network interfaces returned by socket.getifaddrs(). We then check the family attribute to identify IPv4 or IPv6 addresses. We exclude loopback addresses (e.g., 127.0.0.1 for IPv4 and ::1 for IPv6) as they represent the local host.


Using Third-Party Libraries

While the socket module provides a basic solution, some third-party libraries offer more advanced functionality. For example, the netifaces library provides a cross-platform way to retrieve information about network interfaces, including IP addresses.

Here's an example using netifaces:

python


import netifaces




def get_local_ips_netifaces():


ips = []


for interface in netifaces.interfaces():


if netifaces.AF_INET in netifaces.ifaddresses(interface):


for link in netifaces.ifaddresses(interface)[netifaces.AF_INET]:


if 'addr' in link:


ip = link['addr']


if not ip.startswith('127.'):


ips.append(ip)


return ips




# Get and print all local IP addresses using netifaces


local_ips = get_local_ips_netifaces()


for ip in local_ips:


print(f"IP Address: {ip}")


Handling Multiple Network Interfaces

In a typical computer system, there may be multiple network interfaces, each with its own IP address. The methods described above allow you to retrieve all IP addresses associated with these interfaces. Keep in mind that some interfaces may be virtual, used for specific applications (e.g., VPNs or containers), and their IP addresses may not be publicly accessible.


Retrieving local IP addresses in Python is a straightforward task that can be accomplished using the built-in socket module or third-party libraries like netifaces. By iterating over network interfaces and extracting IP addresses, you can ensure that all addresses, both IPv4 and IPv6, are captured. Remember to exclude loopback addresses and handle multiple network interfaces appropriately.