python之第三方库netifaces库:netifaces 模块用于提供有关网络接口及其状态的信息(①获取网络接口的名字,②根据接口名字获取ip地址,③获取路由信息)

前言

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操作系统命令)

ip route how

命令执行结果:

② netifaces 库使用 gateways() 函数获取当前系统的路由信息

代码如下:

import netifaces

routes = netifaces.gateways()

print(routes)

代码执行结果:

返回值详解:

数据类型为字典。

default 键指明该路由为默认路由信息。

值为根据类型返回的路由信息: 

key值是类型,例如:2代表AF_INET

172.16.0.1 为路由地址

enp3s0 为网络接口名字

True 为默认路由

 

posted @ 2022-10-24 20:41  习久性成  阅读(2588)  评论(0编辑  收藏  举报