使用Python检索具有多个IP地址的接口的网络掩码?

2024-06-02 15:35:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要在Linux环境中列出可用的网络接口及其IP地址和相应的网络掩码。我可以使用ioctlSIOCGIFCONF来获得接口和每个接口的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 showifconfig的输出,是否有方法检索所有地址的网络掩码?在


Tags: import网络get环境linuxmasknetworksocket
1条回答
网友
1楼 · 发布于 2024-06-02 15:35:59

从技术上讲,“ip addr sh”所做的是使用netlink库来询问(或者选择性地监视)内核网络接口/路由表。在

您也许可以在python中执行此操作,但我强烈建议您解析“/sbin/ipaddr sh”的输出

这是因为

  • 使用rtnetlink库很复杂
  • 您不关心性能-网络接口的更改频率不够高,以至于您不会在意(在任何情况下,您都可以使用“ip监视器”监视它们)

相关问题 更多 >