# !/usr/bin/python3
# coding: utf-8
import netifaces
def list_ipv4_adapter():
mapping = {}
gateways = netifaces.gateways()
if netifaces.AF_INET in gateways:
ipv4gates = gateways[netifaces.AF_INET]
for gate in ipv4gates:
mac = gate[1][1:-1]
mapping[mac] = gate[0]
ipv4list = []
macs = netifaces.interfaces()
for mac in macs:
adapter = netifaces.ifaddresses(mac)
if netifaces.AF_INET not in adapter:
continue
ipv4group = adapter[netifaces.AF_INET]
if len(ipv4group) < 1:
# IPv4 is not enabled or configured
continue
# len(ipv4group) > 1
# One available network adapter is configured with multiple network segments
mac = mac[1:-1]
for ipv4 in ipv4group:
ip = ipv4['addr']
mask = ipv4['netmask']
# `broadcast` may be the upper limit address of this network segment
gate = mapping[mac] if mac in mapping else ipv4['broadcast']
ipv4list.append((ip, mask, gate, mac))
# [('127.0.0.1', '255.0.0.0', '127.255.255.255', 'DFCA0DEC-A7BA-11EB-A168-806E6F6E6963')]
return ipv4list