Pythonping 模块

2024 年 8 月 29 日 | 4 分钟阅读

引言

在本教程中,我们将讨论 pythonping 模块。PythonPing 是一种在 Python 中进行 ping 的便捷方法。它允许您像从终端一样向远程设备发送 ICMP 探测。PythonPing 是模块化的,因此您可以将其脚本化为独立函数,或将其组件组合成完整的实用程序。本文介绍了如何使用 Python 的 Python ping 模块通过 URL 或 IP 地址 ping 主机。该模块提供了一种在 Python 中进行 ping 的简单方法。它会检查主机是否可用,并测量响应需要多长时间。在“之前”,您应该在机器上安装此模块。

为什么我需要 Root 权限才能使用 Pythonping?

所有运行的系统都允许创建 TCP 或 UDP 套接字而无需权限。然而,ping 是通过 ICMP(既不是 TCP 也不是 UDP)进行的。这意味着您需要创建原始 IP 数据包并在网络地图上监视流量。操作系统被设计成需要 Root 权限才能执行此类操作。这是因为普通用户访问 NIC 可能会使操作系统面临风险,如果应用程序意图不良。尽管 pythonping 指令有时不是这种情况;但是,我需要此功能来创建自定义 IP 数据包。实际上,没有其他方法可以创建 ICMP 数据包。

Pythonping 的高级利用

如果您想扩展 PythonPing 或将其与您的软件结合使用,我们建议使用 Python Ping 中的类,而不是 ping 函数。`executor.Communicator` 处理与目标设备的通信,并负责发送 ICMP 请求和处理响应(请注意,为了使其线程安全,您需要为每个线程实例创建唯一的种子 ID,请参阅 `ping._init_` 示例)。它最终会生成 `executor.ResponseList` 项。Communicator 需要了解目标以及要发送到远程设备的内容。为此,我们在 `payload_provider` 模块中提供了多个类。您可以通过扩展 `payload_provider.PayloadProvider` 来创建自己的提供程序。如果您对此感兴趣,请查看 `executor` 和 `payload_provider` 模块的文档。

语法

pythonping 的语法如下:

参数

pythonping 的参数如下:

  • verbose: 允许详细模式,将输出打印到流
  • timeout: 在假设目标不可达之前,您希望等待响应的秒数
  • payload: 允许您使用特定的有效负载(字节)
  • size: 一个整数,允许您指定所选 ICMP 有效负载的大小。

自定义 Ping

根据上述信息,我们可以自定义和调整 ping 以完全满足我们的需求。以下是一些常见的示例。你们中的许多人都会认识它们,因为你们可能已经使用它们来 ping 设备。您可以使用 Python Ping 在 Python 中执行相同的操作。

1. 压力测试:通过此示例;您可以确保链路能够有效地处理负载。您发送大量大包并观察结果。

2. 通过 Ping Sweep 检查 MTU

要查看数据包有多大,请运行 ping sweep。通过这种方式,您可以确定导致远程设备停止响应的大小。为此,我们必须从相对较小的尺寸开始,然后增加到较大的尺寸。

注意:此处需要 df 标志。没有它,路径中的路由器可能会分片数据包,因此您看不到其真实的 MTU。

3. 自定义有效负载

在开发复杂的软件时,您可以使用自定义有效负载。例如,您可以使用响应器来查看数据包在网络上传输了多长时间,以及它们在设备处理数据包上花费了多长时间。在此类示例中,时间戳可用作有效负载。我们应该这样做。

结论

我们每个人一生中总有某个时候需要 ping。无论您是网络工程师还是程序员,这都很重要。IT 行业的每个人都知道 ping。这个简单的命令允许您检查远程设备是否在线并提供其他一些便利功能。鉴于其任务很简单,我们期望 ping 也很简单。然而,Python 本身需要提供一种快速的 ping 方法,因此这可能是一个真正的挑战。是时候做出改变了。Python Ping 允许您在几秒钟内 ping Python 脚本。因此,在本文中,我们将讨论 pythonping 模块。