Python BSD/OS X上的网络掩码/ip地址查找
如何使用python标准库函数在OSX(或BSD)上查找ip地址/网络掩码等。我处于一个过程中,不能让我的脚本在MAC上工作。在Linux机器上,它非常简单:Python BSD/OS X上的网络掩码/ip地址查找,python,linux,macos,network-programming,bsd,Python,Linux,Macos,Network Programming,Bsd,如何使用python标准库函数在OSX(或BSD)上查找ip地址/网络掩码等。我处于一个过程中,不能让我的脚本在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 = "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上,我得到套接字上不支持的操作
错误:
>>> 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
>>>
导入套接字、fcntl、结构
>>>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])
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
IOError:[Errno 102]套接字上不支持操作
>>>
看起来像SIOCGIFNETMASK、SIOCGIFADDR等。BSD/OS X系统中的偏移量不同。你知道我该如何回避这个问题吗?已经找到了一些关于同一类问题的帖子,但没有得到明确的答案。如有任何意见,将不胜感激。提前谢谢。干杯 我没有BSD系统可以尝试,但希望它能工作
socket.inet_ntoa(fcntl.ioctl(socket.socket(socket.AF_INET, socket.SOCK_DGRAM), 35099, struct.pack('256s', iface))[20:24])
我已经尝试过
35099
,但是在OS X上出现了相同的错误。无论如何,谢谢!!您尝试过SIOCSIFNETMASK 0x891c吗?您也尝试过SOCK_流而不是SOCK_DGRAM吗?只是好奇刚刚尝试了0x891c
,它也不起作用;失败,错误完全相同。看来SIOCSIFNETMASK
不是BSD[sub]系统的选择。干杯与SOCK_DGRAM
相同,也会出现同样的错误。谢谢有趣的svnweb.freebsd.org/base?view=revision&revision=230207