如何使用原生Python执行ping或traceroute?

11 投票
7 回答
45831 浏览
提问于 2025-04-15 13:01

我想在Python里面直接进行ping和traceroute操作,而不想去执行那些相应的命令行指令,所以我更希望能有一个原生的Python解决方案。

7 个回答

3

Webb库非常方便,可以用来进行各种与网络相关的数据提取...而且通过它可以轻松进行ping和traceroute操作。只需要输入你想要进行traceroute的URL:

import webb
webb.traceroute("your-web-page-url")

如果你想把traceroute的日志自动保存到一个文本文件中,可以使用以下命令:

webb.traceroute("your-web-page-url",'file-name.txt')

同样,你也可以通过以下代码获取一个URL(服务器)的IP地址:

print(webb.get_ip("your-web-page-url"))

希望这对你有帮助!

13

如果你不介意使用外部模块,并且不想用UDP或TCP的话,scapy是个简单的解决方案:

from scapy.all import *
target = ["192.168.1.254"]
result, unans = traceroute(target,l4=UDP(sport=RandShort())/DNS(qd=DNSQR(qname="www.google.com")))

或者你也可以使用TCP版本

from scapy.all import *
target = ["192.168.1.254"]
result, unans = traceroute(target,maxttl=32)

请注意,你需要以管理员身份运行scapy,才能执行这些任务,否则你会遇到:

socket.error: [Errno 1] Operation not permitted
3

以root身份运行解释器通常被认为不太安全(当然,你确实需要root权限才能访问ping和traceroute所需的“原始”套接字,这符合ICMP的规范!),不过如果你对此没有问题,其实也不难做到。例如,这篇帖子(可能已经失效?)或者这篇帖子提供了可用的ping功能,而Jeremy Hylton的旧页面中还有一些可以用的底层代码,适用于ICMP(包括ping和traceroute),虽然这些代码是为很老的Python版本写的,需要稍微修改一下才能在现代版本中使用——不过,我给你的这两个网址中,所有的概念都是存在的!

撰写回答