Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python BSD/OS X上的网络掩码/ip地址查找_Python_Linux_Macos_Network Programming_Bsd - Fatal编程技术网

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

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',

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