37 lines
1.0 KiB
Python
37 lines
1.0 KiB
Python
|
# Use those functions to enumerate all interfaces available on the system using Python.
|
||
|
# found on <http://code.activestate.com/recipes/439093/#c1>
|
||
|
|
||
|
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()
|
||
|
lst = []
|
||
|
for i in range(0, outbytes, 40):
|
||
|
name = namestr[i:i+16].split('\0', 1)[0]
|
||
|
ip = namestr[i+20:i+24]
|
||
|
lst.append((name, ip))
|
||
|
return lst
|
||
|
|
||
|
def format_ip(addr):
|
||
|
return str(ord(addr[0])) + '.' + \
|
||
|
str(ord(addr[1])) + '.' + \
|
||
|
str(ord(addr[2])) + '.' + \
|
||
|
str(ord(addr[3]))
|
||
|
|
||
|
|
||
|
ifs = all_interfaces()
|
||
|
for i in ifs:
|
||
|
print "%12s %s" % (i[0], format_ip(i[1]))
|