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
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'}]
- Adding Scapy to get meaningful interface names
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'}]