12

私の Python スクリプトでは、スクリプトが実行されているマシンの IP アドレスと、そのネットワーク アドレスとそのネットワーク バイトの両方を取得する必要があります。

IPアドレスに関しては、アーカイブで解決策を見つけました:

import socket
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(("www.google.com",80))
myAddress = (s.getsockname()[0])
s.close()

しかし、ネットワーク アドレスとネットワーク バイトを見つけるにはどうすればよいでしょうか。この情報を tcpdump のフィルタに の形式$NetworkAddress/$NetworkBytesで入力する必要があります。

例:

128.1.2.0/20

inet を実行すると、実際にそれを見つけることができますip addr。Python でこの情報を取得する簡単な方法はありますか?

4

2 に答える 2

18

Linuxの場合は試してください

iface = "eth0"
socket.inet_ntoa(fcntl.ioctl(socket.socket(socket.AF_INET, socket.SOCK_DGRAM), 
                             35099, struct.pack('256s', iface))[20:24])

または http://github.com/rlisagor/pynetlinux

(ここで提案されているように: Python でのネットワーク マスクの取得)

Linux、Windows、および MacOS の場合は、http: //alastairs-place.net/projects/netifaces/ を検討してください。

アップデート:

cidr (「128.1.2.0/20」など) が必要な場合は、関連するライブラリのいずれかを使用できます: http://pypi.python.org/pypi?%3Aaction=search&term=cidr&submit=search

netaddr:

>> from netaddr import IPNetwork
>> print str(IPNetwork('1.2.3.4/255.255.255.0').cidr)
1.2.3.0/24
于 2013-01-16T15:59:17.940 に答える