我怎样才能进行使用本机Python ping或路由跟踪?(How can I perform a p

2019-06-26 07:57发布

我希望能够在不必执行相应的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”环路因为“时间到活”传出包的决定网络的跳数,数据包将到期和发送一个错误返回到原始源之前行进。



文章来源: How can I perform a ping or traceroute using native python?