0

我需要从我的 python 脚本发送一个数据包。我有一个目标 IP 地址。我需要:
- 通常是默认路由的出口接口名称(我需要它来嗅探响应)
- 该接口的 IP 地址(我需要在我的应用程序有效负载中使用它)

我怎么能从 python 做到这一点?

谢谢,

4

1 回答 1

2

Pynetinfo似乎是你最好的选择。这是我机器上的一个小样本。您的结果会有所不同,但您当然会有一个默认网关。

>>> import netinfo
>>> netinfo.get_routes()
({'dest': '0.0.0.0', 'netmask': '0.0.0.0', 'gateway': '192.168.0.1', 'dev': 'wlan1'}, 
{'dest': '169.254.0.0', 'netmask': '255.255.0.0', 'gateway': '0.0.0.0', 'dev': 'wlan1'}, 
{'dest': '192.168.0.0', 'netmask': '255.255.255.0', 'gateway': '0.0.0.0', 'dev': 'wlan1'})
>>> default_gateway = 
...[route for route in netinfo.get_routes() if route['dest'] == '0.0.0.0'][0]
>>> default_gateway['gateway']
'192.168.0.1'
>>> default_gateway['dev']
'wlan1'

至于获取该接口的IP地址...

>>> import netifaces
>>> netifaces.ifaddresses(default_gateway['dev'])[netifaces.AF_INET]
[{'broadcast': '192.168.0.255', 'netmask': '255.255.255.0', 'addr': '192.168.0.9'}]

在我的 Linux 系统上获取 IP 数据包将用于给定目的地的接口。我不确定另一种方式。

>>> dst = "127.0.0.1"
>>> p = subprocess.Popen(["ip", "route", "get", dst], stdout=subprocess.PIPE)
>>> p.stdout.read()
'local 127.0.0.1 dev lo  src 127.0.0.1 \n    cache <local> \n'
于 2013-10-24T16:18:54.943 回答