如何使用本机 python 执行 ping 或 traceroute?

新手上路,请多包涵

我希望能够从 Python 中执行 ping 和 traceroute 而不必执行相应的 shell 命令,所以我更喜欢本机 python 解决方案。

原文由 Dave Forgac 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 624
2 个回答

出于安全原因,以 root 身份运行解释器通常是不受欢迎的(当然,您确实需要具有 root 权限才能访问 ping 和 traceroute 的 ICMP 规范所需的“原始”!),但如果您对此没有问题这并不难——例如, 这篇文章(死了?) 或这篇文章 给出了一个可行的 ping,Jeremy Hylton 的旧 页面 有仍然可用的 ICMP 底层代码(ping 和 traceroute),尽管它是为非常旧的 Python 版本和需要编写的一个小小的整容以与现代的相得益彰——但是,概念都在那里,在我给你的两个 URL 中!

原文由 Alex Martelli 发布,翻译遵循 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 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏