我需要在Linux环境中列出可用的网络接口及其IP地址和相应的网络掩码。我可以使用ioctl
和SIOCGIFCONF
来获得接口和每个接口的IP地址,但当一个接口上有多个IP地址时,我在确定网络掩码时不知所措。在
我可以得到接口主IP地址的网络掩码,如Retrieving network mask in Python:
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地址,则这将不起作用,如下所示:
^{pr2}$在本例中,我只能使用上述函数检索其中一个网络掩码。除了解析ip addr show
或ifconfig
的输出,是否有方法检索所有地址的网络掩码?在
从技术上讲,“ip addr sh”所做的是使用netlink库来询问(或者选择性地监视)内核网络接口/路由表。在
您也许可以在python中执行此操作,但我强烈建议您解析“/sbin/ipaddr sh”的输出
这是因为
相关问题 更多 >
编程相关推荐