Python 標準ライブラリ関数を使用して、OS X (または 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 では、次の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 システムではオフセットが異なります。この問題を回避するにはどうすればよいですか? 同じ種類の問題に関するいくつかの投稿が既に見つかりましたが、決定的な答えは得られませんでした。任意の入力をいただければ幸いです。前もって感謝します。乾杯!!