# 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']
```