如何使用python標準庫函數在OS X(或BSD)上執行ip-address/netmask等查找。我正處在一個進程的中間,無法讓我的腳本在Mac上運行。在Linux機器上,它非常簡單:BSD/OS X上的掩碼/ IP地址查找
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系統不同。任何想法如何解決這個問題?已經在同一類問題上發現了幾篇文章,但沒有得到明確的答案。任何投入將不勝感激。提前致謝。乾杯!!
有趣svnweb.freebsd.org/base?view=revision&revision=230207 – Satish