前言

1、 在系统运维等过程中,网络永远是离不开的话题。网络中比较基础的是网络接口,每个网络接口都有一个名字,并且有它的ip地址,还有关于从这个接口出去的包的路由。我们可以把网络接口看作个数据模型,每个数据模型基本上有增删改查四种基本操作,(从网络接口这个数据模型的查引入python的 netifaces

2、 netifaces

安装

pip install netifaces

使用

1、获取当前操作系统的网络接口名字(获取当前主机所有的网卡设备)

①显示当前网络接口的信息:(linux操作系统命令)

ip link show

命令执行结果:

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

 

②netifaces 库提供了函数 interfaces() 用于返回所有接口的名字的列表。 

代码如下:

import netifaces

ifnames = netifaces.interfaces()

print(ifnames)

代码执行结果:

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

 

2、通过网络接口的名字获取该接口的IP地址

①只获取指定网络接口的ip地址:(linux操作系统命令)

ip addr show dev 网络接口名

命令执行结果:

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

②获取系统中所有的网络接口的ip地址:(linux操作系统命令)

ip addr show

命令执行结果:

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

③netifaces 库获取网络接口(网卡)ip地址使用 ifaddresses()

  • 参数:系统中指定网络接口(网卡)的名字
  • 返回值:字典(包括ip地址)

代码如下:

import netifaces

Addr = netifaces.ifaddresses('enp2s0')

print(Addr)

代码执行结果:

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

返回值详解:

  • 数据类型:字典
  • 跟linux操作系统上执行ifconfig 命令的输出非常类似,其实就是对应网卡的所有信息,包括​​ip,​​​​mac,​​​​netmask​​​等等。通过这些信息, 我们就可以解析出我们想得到的​​ip地址​​​和​​mac地址。​
  • key值:netifaces.address_families
  • 获取指定网络接口(网卡)的ipv4地址(衔接上诉代码): Addr[2][0]['addr']
import netifaces

print(netifaces.address_families)

运行结果:

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

④获取网络接口(网卡)的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')

运行结果:

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

3、获取路由

①获取当前系统路由:(linux操作系统命令)

ip route how

命令执行结果:

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

② netifaces 库使用 gateways()

代码如下:

import netifaces

routes = netifaces.gateways()

print(routes)

代码执行结果:

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

返回值详解:

数据类型为字典。

default

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

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

172.16.0.1 为路由地址

enp3s0 为网络接口名字

True 为默认路由

 

去期待陌生,去拥抱惊喜。