我需要在Linux环境中使用Python列出可用的网络接口及其IP地址和相应的网络掩码。我可以使用ioctl
和SIOCGIFCONF
按照here概述获取每个接口的接口和IP地址,但是在有多个IP时确定网络掩码时我会感到茫然接口上的地址。
我可以按Retrieving network mask in Python中的建议获取接口主IP地址的网络掩码:
import socket
import fcntl
import struct
SIOCGIFNETMASK = 0x891b
def get_network_mask(ifname):
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
netmask = fcntl.ioctl(s, SIOCGIFNETMASK, struct.pack('256s', ifname))[20:24]
return socket.inet_ntoa(netmask)
>>> get_network_mask('eth0')
'255.255.255.0'
但是,如果我在同一个界面上有多个具有不同网络掩码的IP地址,则不起作用,如下所示:
$ ip addr show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
inet 192.168.1.1/16 brd 192.168.255.255 scope global eth0
inet 172.16.0.123/24 scope global eth0
在这种情况下,我只能使用上述功能检索其中一个网络掩码。有没有办法检索所有地址的网络掩码,除非解析ip addr show
或ifconfig
的输出?
答案 0 :(得分:2)
技术上,“ip addr sh”的作用是使用netlink库来查询(并可选地监视)内核网络接口/路由表。
您可以在python中执行此操作,但我强烈建议解析“/ sbin / ip addr sh”的输出
这是因为