BSD / OS X上的网络掩码/ IP地址查找

时间:2013-01-08 13:50:36

标签: python linux macos network-programming bsd

如何使用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
>>> 

在BSD / OS X系统中看起来SIOCGIFNETMASK,SIOCGIFADDR等偏移量是不同的。不知道如何解决这个问题?已经在同一类问题上找到了几个帖子,但没有得到确定的答案。任何投入将不胜感激。提前致谢。欢呼声!!

1 个答案:

答案 0 :(得分:0)

我没有尝试使用BSD系统,但希望它能够正常工作

socket.inet_ntoa(fcntl.ioctl(socket.socket(socket.AF_INET, socket.SOCK_DGRAM), 35099, struct.pack('256s', iface))[20:24])