# Python 讀取網路相關資訊 1. netifaces * Installation `pip install netifaces` * Example ```python= # check the internet interfaces >>> netifaces.interfaces() ['lo', 'eno1'] #local host information >>> netifaces.ifaddresses('lo') {17: [{'addr': '00:00:00:00:00:00', 'peer': '00:00:00:00:00:00'}], 2: [{'addr': '127.0.0.1', 'netmask': '255.0.0.0', 'peer': '127.0.0.1'}], 10: [{'addr': '::1', 'netmask': 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff/128'}]} # ip insformation >>> netifaces.ifaddresses('eno1') {17: [{'addr': '74:d4:35:ec:82:47', 'broadcast': 'ff:ff:ff:ff:ff:ff'}], 2: [{'addr': '10.1.113.176', 'netmask': '255.255.255.0', 'broadcast': '10.1.113.255'}], 10: [{'addr': 'fe80::277c:ac52:6a60:122c%eno1', 'netmask': 'ffff:ffff:ffff:ffff::/64'}]} ``` :::danger Don’t use these numbers in your code. The numeric values here are system dependent ::: mac_address的索引值`AF_LINK`, ip的索引值`AF_INET` ```python= >>> netifaces.gateways() {'default': {2: ('10.1.113.253', 'eno1')}, 2: [('10.1.113.253', 'eno1', True)]} ``` 2. shell command ``` python >>> import subprocess # Get IP address >>> command = "ip -o -4 addr show | egrep -v '127.0|172.' | awk '{print $4}'" >>> ip_bstring = subprocess.check_output(command, shell=True) >>> ip_list = ip_bstring.decode().strip().split('/') >>> print(ip_list) ['10.1.113.176', '24'] # Get mac address >>> cmd = 'ifconfig | grep ether | awk "{print $5}"' >>> process_task = subprocess.check_output(cmd, shell=True).decode().strip().split('\n') >>> macs = [mac.split()[1] for mac in process_task] >>> print(macs) ['74:d4:35:ec:82:47'] ```