Python中的 ping 模块

模块安装

  1. 安装模块

pip install pythonping

  1. 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

处理返回值

  1. 在屏幕上打印并不是我们一直想要的,这就是让我们的脚本默认静默的原因。相反,我们希望程序的其他部分使用 ping 的结果。

    • 例如,如果远程设备不可用,我们可能需要运行脚本或向管理员发送电子邮件。
    • 如果延迟超过阈值,我们可能想要准备自定义操作,等等
  2. 正因为如此,Python 的 ping 返回值中,有你可能需要的所有细节,在自定义对象:ResponseList。此对象是一个可迭代对象,包含其他自定义对象、Response。

  3. 每个 Response 代表从给定的 ICMP 请求收到的响应。它包含其有效负载(消息)以及接收它所花费的时间

  4. 由于 Response 是一个对象,您可以从其成员中获取其属性:

    • error_message 包含描述此响应所代表的错误的字符串。例如,错误可能是“网络无法访问”或“需要分段”。如果您得到成功响应,则此属性为None
    • success 是一个布尔值,指示响应是否成功
    • time_elapsedtime_elapsed_ms 分别以秒和毫秒表示收到此响应所需的时间
  5. 您可以通过访问访问各个响应 responses 的 ResponseList的对象,从返回ping。在这种情况下,responses只是一个列表。但是,responses 不能从外部访问 ResponseList,应该 ResponseLis t直接使用。最重要的是,ResponseList 添加了一些可以直接使用的方法

  • rtt_avgrtt_avg_ms
  • rtt_minrtt_min_ms
  • rtt_maxrtt_max_ms
    (注释:avg 代表 response 的平均值,同理 min 是最小值,max 是最大值;以 ms 结尾的代表返回的 response 以毫秒(ms)计算;没有则以秒(s)计算)

高级Python ping

  1. "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;或者,您可能想在这里使用一个文件接受详细输出的值
posted @ 2021-05-26 09:31  阮小言  阅读(9193)  评论(0编辑  收藏  举报