[英]Retrieving netmask for interfaces with multiple IP addresses using Python?
我需要在Linux环境中使用Python列出可用的网络接口及其IP地址和相应的网络掩码。 我可以使用此处概述的ioctl
和SIOCGIFCONF
来获取接口和每个接口的IP地址,但是当接口上有多个IP地址时要确定网络掩码时,我很SIOCGIFCONF
。
我可以按照在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
的输出外,是否有办法检索所有地址的网络掩码?
从技术上讲,“ ip addr sh”的作用是使用netlink库查询(并可选地监视)内核网络接口/路由表。
您也许可以在python中执行此操作,但我强烈建议您解析“ / sbin / ip addr sh”的输出
这是因为
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.