0

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

4

1 に答える 1

0

試すBSDシステムはありませんが、うまくいくことを願っています

socket.inet_ntoa(fcntl.ioctl(socket.socket(socket.AF_INET, socket.SOCK_DGRAM), 35099, struct.pack('256s', iface))[20:24])
于 2013-01-08T15:02:36.470 に答える