我希望能够从 Python 中执行 ping 和 traceroute 而不必执行相应的 shell 命令,所以我更喜欢本机 python 解决方案。
原文由 Dave Forgac 发布,翻译遵循 CC BY-SA 4.0 许可协议
我希望能够从 Python 中执行 ping 和 traceroute 而不必执行相应的 shell 命令,所以我更喜欢本机 python 解决方案。
原文由 Dave Forgac 发布,翻译遵循 CC BY-SA 4.0 许可协议
如果您不介意使用外部模块而不使用 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)
请注意,您必须以 root 身份运行 scapy 才能执行这些任务,否则您将获得:
socket.error: [Errno 1] Operation not permitted
原文由 Andre de Miranda 发布,翻译遵循 CC BY-SA 3.0 许可协议
2 回答5.2k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
4 回答1.4k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
3 回答1.2k 阅读✓ 已解决
2 回答850 阅读✓ 已解决
1 回答1.7k 阅读✓ 已解决
出于安全原因,以 root 身份运行解释器通常是不受欢迎的(当然,您确实需要具有 root 权限才能访问 ping 和 traceroute 的 ICMP 规范所需的“原始”!),但如果您对此没有问题这并不难——例如, 这篇文章(死了?) 或这篇文章 给出了一个可行的 ping,Jeremy Hylton 的旧 页面 有仍然可用的 ICMP 底层代码(ping 和 traceroute),尽管它是为非常旧的 Python 版本和需要编写的一个小小的整容以与现代的相得益彰——但是,概念都在那里,在我给你的两个 URL 中!