前言
1、 在系统运维等过程中,网络永远是离不开的话题。网络中比较基础的是网络接口,每个网络接口都有一个名字,并且有它的ip地址,还有关于从这个接口出去的包的路由。我们可以把网络接口看作个数据模型,每个数据模型基本上有增删改查四种基本操作,(从网络接口这个数据模型的查引入python的 netifaces 库)
2、 netifaces 是一个非常简单好用的用来获取本机网卡信息的第三方库,如ip
地址, MAC
地址等等信息,支持Windows, Linux和MacOS。
安装
pip install netifaces
使用
1、获取当前操作系统的网络接口名字(获取当前主机所有的网卡设备)
①显示当前网络接口的信息:(linux操作系统命令)
ip link show
命令执行结果:
②netifaces 库提供了函数 interfaces() 用于返回所有接口的名字的列表。
代码如下:
import netifaces ifnames = netifaces.interfaces() print(ifnames)
代码执行结果:
2、通过网络接口的名字获取该接口的IP地址
①只获取指定网络接口的ip地址:(linux操作系统命令)
ip addr show dev 网络接口名
命令执行结果:
②获取系统中所有的网络接口的ip地址:(linux操作系统命令)
ip addr show
命令执行结果:
③netifaces 库获取网络接口(网卡)ip地址使用 ifaddresses() 函数
- 参数:系统中指定网络接口(网卡)的名字
- 返回值:字典(包括ip地址)
代码如下:
import netifaces Addr = netifaces.ifaddresses('enp2s0') print(Addr)
代码执行结果:
返回值详解:
- 数据类型:字典
- 跟linux操作系统上执行ifconfig 命令的输出非常类似,其实就是对应网卡的所有信息,包括
ip,
mac,
netmask
等等。通过这些信息, 我们就可以解析出我们想得到的ip地址
和mac地址。
- key值:netifaces.address_families 中映射中的值,比如上例中的17,对应的是AF_PACKET信息;2就是AF_INET也就是IPV4信息;10代表的就是AF_INET6就是IPV6信息。
- 获取指定网络接口(网卡)的ipv4地址(衔接上诉代码): Addr[2][0]['addr']
-
import netifaces print(netifaces.address_families)
运行结果:
④获取网络接口(网卡)的ip地址
代码如下:
import netifaces ifnames = netifaces.interfaces() print(ifnames) print('\n') for name in ifnames: ipAddr = netifaces.ifaddresses(name) print('网卡名:{0} && 网络接口地址信息:{1}'.format(name, ipAddr)) print(ipAddr[2][0]['addr']) print('\n')
运行结果:
3、获取路由
①获取当前系统路由:(linux操作系统命令)
② netifaces 库使用 gateways() 函数获取当前系统的路由信息
代码如下:
import netifaces routes = netifaces.gateways() print(routes)
代码执行结果:
返回值详解:
数据类型为字典。
default 键指明该路由为默认路由信息。
值为根据类型返回的路由信息:
key值是类型,例如:2代表AF_INET 172.16.0.1为路由地址 enp3s0为网络接口名字 True 是否是默认路由
标签:ip,获取,地址,netifaces,路由,网络接口 From: https://www.cnblogs.com/hls-code/p/16822740.html