如何使用 python 标准库函数在 OS X(或 BSD)上进行 ip-address/netmask 等查找。我正在处理一个过程,无法让我的脚本在 Mac 上运行。在 Linux 机器上,这很简单:
ifname = "eth0"
SIOCGIFNETMASK = 0x891b
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
socket.inet_ntoa(fcntl.ioctl(s.fileno(), SIOCGIFNETMASK, struct.pack('256s', ifname))[20:24])
例如,它返回网络掩码。在 OS X 上,我收到Operation not supported on socket
错误:
>>> import socket, fcntl, struct
>>> ifname = "en0"
>>> SIOCGIFNETMASK = 0x891b
>>> s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
>>> socket.inet_ntoa(fcntl.ioctl(s.fileno(), SIOCGIFNETMASK, struct.pack('256s', ifname))[20:24])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IOError: [Errno 102] Operation not supported on socket
>>>
看起来 SIOCGIFNETMASK、SIOCGIFADDR 等偏移量在 BSD/OS X 系统中是不同的。知道如何解决这个问题吗?已经找到了几篇关于同一问题的帖子,但没有得到明确的答案。任何投入将不胜感激。提前致谢。干杯!!