0
我需要在Linux環境中使用Python列出可用的網絡接口及其IP地址和相應的網絡掩碼。我可以使用ioctl
和SIOCGIFCONF
作爲概述here獲取每個接口的接口和IP地址,但是當涉及到在接口上存在多個IP地址時確定網絡掩碼時,我很頭疼。使用Python檢索具有多個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地址,這是不行的,如下:
$ 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監視器」監視它們)。我快速瀏覽了rtnetlink,你說得對,因爲這個任務似乎過於複雜。解析'ip addr show'仍然感覺有些ha,,但我想這是在這種情況下最好的前進方式。 – 2010-09-13 13:34:22