Using Windows:
- scapy reads:
- meaningful interface-names
- ip-address
- but no netmask
- netifaces reads:
- full Ethernet/IP/IPv6-Information
- but no meaningful interface-names
Mixing both, provides everything needed.
- Netifaces only
- Adding Scapy to get meaningful interface names
from netifaces import AF_INET, AF_INET6, AF_LINK import netifaces for i in netifaces.interfaces(): niif=netifaces.ifaddresses(i) print("i",i) for k,v in niif.items(): print("Key",k) if k==AF_LINK: print("LINK:",v) if k==AF_INET: print("IPv4",v) if k==AF_INET6: print("IPv6",v) print()
>>> for i in netifaces.interfaces(): ... niif=netifaces.ifaddresses(i) ... print("i",i) ... for k,v in niif.items(): ... print("Key",k) ... if k==AF_LINK: ... print("LINK:",v) ... if k==AF_INET: ... print("IPv4",v) ... if k==AF_INET6: ... print("IPv6",v) ... print() ... i {07E9D8A4-E167-4FFF-B851-61A20C49AE6E} Key -1000 LINK: [{'addr': '00:00:81:00:de:11'}] Key 23 IPv6 [{'addr': 'fe80::8400:abb0:2a62:a173%4', 'netmask': 'ffff:ffff:ffff:ffff::/64', 'broadcast': 'fe80::ffff:ffff:ffff:ffff%4'}] i {D30DEC05-D495-4DA1-81F1-42B07885B0EB} Key -1000 LINK: [{'addr': '0a:00:27:00:00:14'}] Key 23 IPv6 [{'addr': 'fe80::1e0:4a4:8afc:90f7%20', 'netmask': 'ffff:ffff:ffff:ffff::/64', 'broadcast': 'fe80::ffff:ffff:ffff:ffff%20'}] Key 2 IPv4 [{'addr': '192.168.56.1', 'netmask': '255.255.255.0', 'broadcast': '192.168.56.255'}] i {402C453F-4B74-4883-9257-BD31FAB7AB57} Key -1000 LINK: [{'addr': '74:70:fd:bd:10:38'}] Key 23 IPv6 [{'addr': 'fe80::2599:368f:e80d:94b6%8', 'netmask': 'ffff:ffff:ffff:ffff::/64', 'broadcast': 'fe80::ffff:ffff:ffff:ffff%8'}] i {2120C2CA-E7D4-45DF-8090-A8D7F48EFF42} Key -1000 LINK: [{'addr': '76:70:fd:bd:10:37'}] Key 23 IPv6 [{'addr': 'fe80::34d6:9683:4af5:afad%6', 'netmask': 'ffff:ffff:ffff:ffff::/64', 'broadcast': 'fe80::ffff:ffff:ffff:ffff%6'}] i {F931F123-70A4-4CFB-BD9C-C0A509080286} Key -1000 LINK: [{'addr': '74:70:fd:bd:10:37'}] Key 23 IPv6 [{'addr': 'fe80::1926:3c29:1b34:e1f6%22', 'netmask': 'ffff:ffff:ffff:ffff::/64', 'broadcast': 'fe80::ffff:ffff:ffff:ffff%22'}] Key 2 IPv4 [{'addr': '192.168.1.163', 'netmask': '255.255.255.0', 'broadcast': '192.168.1.255'}] i {693A5869-6A31-11E8-85D1-806E6F6E6963} Key -1000 LINK: [{'addr': ''}] Key 23 IPv6 [{'addr': '::1', 'netmask': 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff/128', 'broadcast': '::1'}] Key 2 IPv4 [{'addr': '127.0.0.1', 'netmask': '255.0.0.0', 'broadcast': '127.255.255.255'}]
from scapy.all import * for i in ifaces.data.keys(): print(i) iface = ifaces.data[i] wname = iface.data['netid'] addresses = netifaces.ifaddresses(i) af_inet = [{"addr": "0.0.0.0", "netmask": "0.0.0.0", "broadcast": "0.0.0.0"}] if AF_INET in addresses: af_inet = netifaces.ifaddresses(i)[AF_INET] print(wname,af_inet)
>>> for i in ifaces.data.keys(): ... print(i) ... iface = ifaces.data[i] ... wname = iface.data['netid'] ... addresses = netifaces.ifaddresses(i) ... af_inet = [{"addr": "0.0.0.0", "netmask": "0.0.0.0", "broadcast": "0.0.0.0"}] ... if AF_INET in addresses: ... af_inet = netifaces.ifaddresses(i)[AF_INET] ... print(wname,af_inet) ... {F931F123-70A4-4CFB-BD9C-C0A509080286} Wi-Fi [{'addr': '192.168.1.163', 'netmask': '255.255.255.0', 'broadcast': '192.168.1.255'}] {D30DEC05-D495-4DA1-81F1-42B07885B0EB} VirtualBox Host-Only Network [{'addr': '192.168.56.1', 'netmask': '255.255.255.0', 'broadcast': '192.168.56.255'}] {07E9D8A4-E167-4FFF-B851-61A20C49AE6E} ETH_DELL [{'addr': '0.0.0.0', 'netmask': '0.0.0.0', 'broadcast': '0.0.0.0'}]