Python中的 ping 模块
模块安装
- 安装模块
pip install pythonping
- pythonping
- pythonping 是 pytho n中 ping 的简单方法。使用它,您可以像从终端发送 icmp 探测一样将 icmp 探测发送到远程设备。
- pythonping 是模块化的,因此您可以将它作为一个独立的函数在脚本中运行,或者将其组件集成到一个成熟的应用程序中。
Ping 基本用法
from pythonping import ping
ping('8.8.8.8')
- 上面这段代码就是最简单的ping使用,但是不会在控制台中看到任何输出内容,因为ping默认情况下是静默的,并且不会向屏幕打印任何内容
- 如果我们想在屏幕上看到所有内容,我们可以简单地使用 verbose 标志,该标志接受 bool 值参数
from pythonping import ping
ping('8.8.8.8', verbose=True)
- 结果就会打印到屏幕上,如下所示
Reply from 8.8.8.8, 9 bytes in 70.51ms
Reply from 8.8.8.8, 9 bytes in 38.76ms
Reply from 8.8.8.8, 9 bytes in 42.33ms
Reply from 8.8.8.8, 9 bytes in 41.51ms
处理返回值
-
在屏幕上打印并不是我们一直想要的,这就是让我们的脚本默认静默的原因。相反,我们希望程序的其他部分使用 ping 的结果。
- 例如,如果远程设备不可用,我们可能需要运行脚本或向管理员发送电子邮件。
- 如果延迟超过阈值,我们可能想要准备自定义操作,等等
-
正因为如此,Python 的 ping 返回值中,有你可能需要的所有细节,在自定义对象:ResponseList。此对象是一个可迭代对象,包含其他自定义对象、Response。
-
每个 Response 代表从给定的 ICMP 请求收到的响应。它包含其有效负载(消息)以及接收它所花费的时间
-
由于 Response 是一个对象,您可以从其成员中获取其属性:
- error_message 包含描述此响应所代表的错误的字符串。例如,错误可能是“网络无法访问”或“需要分段”。如果您得到成功响应,则此属性为None
- success 是一个布尔值,指示响应是否成功
- time_elapsed 并 time_elapsed_ms 分别以秒和毫秒表示收到此响应所需的时间
-
您可以通过访问访问各个响应 responses 的 ResponseList的对象,从返回ping。在这种情况下,responses只是一个列表。但是,responses 不能从外部访问 ResponseList,应该 ResponseLis t直接使用。最重要的是,ResponseList 添加了一些可以直接使用的方法
- rtt_avg 和 rtt_avg_ms
- rtt_min 和 rtt_min_ms
- rtt_max 和 rtt_max_ms
(注释:avg 代表 response 的平均值,同理 min 是最小值,max 是最大值;以 ms 结尾的代表返回的 response 以毫秒(ms)计算;没有则以秒(s)计算)
高级Python ping
- "ping"的所有参数
- ping() 函数还需要许多您可能想要指定的参数,如下所示
范围 | 类型 | 描述 |
---|---|---|
target | str | 要ping的远程设备。这是唯一的强制性参数 |
timeout | int | 在考虑未收到的响应丢失之前多长时间,以秒为单位 |
count | int | 要按顺序发送多少个ICMP数据包 |
size | int | 要发送的整个ICMP数据包的大小。 您可以将其保留为o (默认值) ,以根据有效负载调整大小,而不是相反。 |
payload | str或者bytes | 数据包的有效载荷。如果您还提供了有效载荷的大小,则将对其进行剪切或重复以匹配所需的大小。 |
sweep_start | int | 与一起使用sweep_end。它size通过将有效负载大小增加一个字节来忽略并发送每个后续数据包, 从sweep_ start大小开始一直到sweep_end大小。尝试查找 MTU 时很有用。 |
df | bool | IP报头的 Don't Fragment标志的值。如果设置为true,将启用IP头中的不分段标志 |
verbose | bool | 如果您希望将输出打印到屏幕,则为True。默认为 False |
out | file | 默认情况下,将详细输出结果输出定向到sys.stdout;或者,您可能想在这里使用一个文件接受详细输出的值 |