我希望能够在不必执行相应的shell命令,所以我更喜欢原来的Python的解决方案,从内Python中执行ping和跟踪。
Answer 1:
运行口译员根基于安全理由经常皱着眉头(当然你需要有root访问权限的“原始”需要通过ping和traceroute!的ICMP规格停飞),但如果你有没有问题它并不难-比如, 这篇文章给出了一个可行的ping和杰里米·希尔顿的旧页对ICMP仍然使用底层代码(包括ping和跟踪),虽然它很老版本的Python编写的,需要一个豆蔻换装了现代化的光芒的 - 但是,这些概念都在那里,在这两个我给你的网址!
Answer 2:
如果你不介意使用外部模块,而不是使用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
Answer 3:
在韦伯库是在执行各种网络相关的提取非常方便......和ping和跟踪可以很容易地通过它来实现。 只是包括要traceroute命令的网址:
import webb
webb.traceroute("your-web-page-url")
如果你想自动存储路由跟踪记录到一个文本文件,请使用以下命令:
webb.traceroute("your-web-page-url",'file-name.txt')
类似地,URL(服务器)的IP地址可以与下列代码行获得:
print(webb.get_ip("your-web-page-url"))
希望能帮助到你!
Answer 4:
你可能要检查出Scapy的包。 它的网络工具蟒蛇瑞士军刀。
Answer 5:
ICMP Ping是标准作为ICMP协议的一部分。
跟踪路由使用ICMP和IP的功能,通过生存时间值来确定的路径。 使用TTL值,可以在各种协议,只要做路由跟踪的IP / ICMP的工作,因为它是一个ICMP TTL超过了告诉你的路径中跳的消息。
如果您试图访问一个端口,没有监听可用,通过ICMP协议的规则,主机应该发送一个ICMP端口不可达消息。
Answer 6:
我在python,并不需要root权限写了一个简单的tcptraceroute http://www.thomas-guettler.de/scripts/tcptraceroute.py.txt
但它不能显示中间跳的IP地址。 但有时它是有用的,因为你可以猜到其中阻止防火墙是:无论是在开头或路线的终点。
Answer 7:
所述mtrpacket包可用于发送网络探头,它可以执行任一ping或跟踪路由。 由于它采用后端到地铁命令行工具,它并不需要你的脚本以root身份运行。
它还使用ASYNCIO的事件循环,所以你可以有多个正在进行的路由跟踪或坪同时,并与他们的处理结果,因为他们完成了。
这里是一个Python脚本traceroute命令“example.com”:
import asyncio
import mtrpacket
async def trace():
async with mtrpacket.MtrPacket() as mtr:
for ttl in range(1, 256):
result = await mtr.probe('example.com', ttl=ttl)
print(result)
if result.success:
break
asyncio.get_event_loop().run_until_complete(trace())
使用具有“TTL”环路因为“时间到活”传出包的决定网络的跳数,数据包将到期和发送一个错误返回到原始源之前行进。