All Ipaddress of your system#
Question#
The program gets all the ipaddress assigned to all the interfaces in your machine.
Solution#
#!/usr/bin/python
# $Id$
"""
**Purpose**: The program gets all the ipaddress assigned to all the interfaces
in your machine.
**Description**: Get all the interfaces using SIOCGIFCONF ioctl call and then
use SIOCGIFADDR to get its address.
man networking says that SIOCGIFADDR Get interface address for
protocol family.
"""
import socket
import fcntl
import struct
import array
def all_interfaces():
max_possible = 128 # arbitrary. raise if needed.
bytes = max_possible * 32
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
names = array.array('B', '\0' * bytes)
outbytes = struct.unpack('iL', fcntl.ioctl(
s.fileno(),
0x8912, # SIOCGIFCONF
struct.pack('iL', bytes, names.buffer_info()[0])
))[0]
namestr = names.tostring()
return [namestr[i:i+32].split('\0', 1)[0] for i in range(0, outbytes, 32)]
def get_ip_address(ifname):
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
return socket.inet_ntoa(fcntl.ioctl(
s.fileno(),
0x8915, # SIOCGIFADDR
struct.pack('256s', ifname[:15])
)[20:24])
for each in all_interfaces():
if each:
print(get_ip_address(each))