1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | import socket import fcntl import struct import array
# # found on <http://code.activestate.com/recipes/439093/#c1> # get all interface names def all_interfaces(): max_possible = 128 # arbitrary. raise if needed.
bytes = max_possible * 32
# Create a dummy socket 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, socket.inet_ntoa(ip)))
s.close() return lst
if __name__ == '__main__': print all_interfaces()
|