Python 如何 ping
背景
最近需要监测一个服务器的运行状态。
因为服务器部署在两地,网络抖动对业务的影响很大,所以要在网络抖动情况严重时做一些警报。
实现方法有很多种,最终选择了使用 Python 来实现这样的功能。
实现
Python 实现 ping 有几种方法:
1、自己实现 ping
2、调用系统 ping
3、使用 Python 模块
自己实现 ping
ping 的原理就是发送一份 ICMP 回显请求报文给目标主机,并等待目标主机返回ICMP回显应答。
如果想要自己写,可以自己控制发报文,这里推荐一篇博客大家可以自行前去学习:点我去学习
调用系统 ping
这个就没什么复杂的,就是调用系统的 ping,但是如果有跨平台使用的需求,要区分好系统平台,windows 要特殊处理一下,可以参考如下代码:
import platform # For getting the operating system name
import subprocess # For executing a shell commanddef ping(host):"""Returns True if host (str) responds to a ping request.Remember that a host may not respond to a ping (ICMP) request even if the host name is valid."""# Option for the number of packets as a function ofparam = '-n' if platform.system().lower()=='windows' else '-c'# Building the command. Ex: "ping -c 1 google.com"command = ['ping', param, '1', host]return subprocess.call(command) == 0
使用 Python 模块
一般大家也不会自己造轮子,尤其是对于 Python 这种轮子众多的,我们只要从中选择好用的就可以。
这里推荐大家几个挺不错的 ping 模块。
ping3
代码地址:https://github.com/kyan001/ping3
功能很强大,使用简单,缺点也比较明显——需要 root 权限。
Note that ICMP messages can only be sent from processes running as root.
需要 root 权限运行的 process 才能发送 ICMP 数据。
>>> from ping3 import ping, verbose_ping
>>> ping('example.com') # Returns delay in seconds.
0.215697261510079666>>> verbose_ping('example.com') # Ping 4 times in a row.
ping 'example.com' ... 215ms
ping 'example.com' ... 216ms
ping 'example.com' ... 219ms
ping 'example.com' ... 217ms
MultiPing
代码地址:https://github.com/romana/multi-ping/
话说一个大牛,觉得目前的工具都不好用,然后就自己写了一个。
特点是可以以较小的资源同时 ping 多个地址。
from multiping import MultiPing# Create a MultiPing object to test three hosts / addresses
mp = MultiPing(["8.8.8.8", "youtube.com", "127.0.0.1"])# Send the pings to those addresses
mp.send()# With a 1 second timout, wait for responses (may return sooner if all
# results are received).
responses, no_responses = mp.receive(1)
TCPing
代码地址:https://github.com/zhengxiaowai/tcping
TCP 实现的 ping,与 ICMP 的 ping 原理不同,但反应网络是否连通、延迟多少的功能是一样的。
还有另外一个优点,也是最终被我选用的优点,不需要 root 权限。
from tcping import Pingdef ping_check():ping = Ping('192.168.0.116', 80, 60)ping.ping(10)ret = ping.result.rowsfor r in ret:print(r)ret = ping.result.rawprint(ret)ret = ping.result.tableprint(ret)if __name__ == '__main__':ping_check()
该有的统计什么的也都是有的,而且很好用。
➜ ~ tcping api.github.com -c 3 --report
Connected to api.github.com[:80]: seq=1 time=237.79 ms
Connected to api.github.com[:80]: seq=2 time=237.72 ms
Connected to api.github.com[:80]: seq=3 time=258.53 ms+----------------+------+-----------+--------+--------------+----------+----------+----------+
| Host | Port | Successed | Failed | Success Rate | Minimum | Maximum | Average |
+----------------+------+-----------+--------+--------------+----------+----------+----------+
| api.github.com | 80 | 3 | 0 | 100.00% | 237.72ms | 258.53ms | 244.68ms |
+----------------+------+-----------+--------+--------------+----------+----------+----------+
行了,就先分享到这里了,大家可以根据自身情况灵活选择,每个库都试一试,总能找到满足你需求的。
祝大家搬砖顺利。
Python 如何 ping相关推荐
- python 实现ping测试延迟的两种方法
一.python实现ping返回延迟繁琐版 __author__ = 'hsz' __date__ = 'Thu Feb 27 22:41:15 EST 2020'import time import ...
- python实现ping某一ip_Python实现ping指定IP的示例
这篇文章主要介绍了关于Python实现ping指定IP的示例,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 贴代码:import os import sys iplist = list ...
- python判断ip能否ping通_使用Python测试Ping主机IP和某端口是否开放的实例
使用Python方法 比用各种命令方便,可以设置超时时间,到底通不通,端口是否开放一眼能看出来. 命令和返回 完整权限,可以ping通,端口开放,结果如下: 无root权限(省略了ping),端口开放 ...
- python自动保存ping结果_利用python获取Ping结果示例代码
前言 本文主要跟大家分享了关于利用python获取Ping结果的相关内容,分享出来供大家参考学习,下面话不多说,来一起看看详细的介绍吧. 示例代码: # -*- coding: utf-8 -*- i ...
- Python批量ping脚本
简单的Python批量ping脚本 ip列表的文件为 192.168.1.1 192.168.1.2 ··· ··· # -*- coding: utf-8 -*- import osdef chec ...
- python执行ping并输出,python 执行ping 返回成功与否
怎样实现在python中ping域名并返回ip 怎样使用python来ping 需求python实时返回ping回包,怎么写 python实现批量ping 如何去写 新建两个文本文件,一个保存为tes ...
- Python多线程ping(ping3模块)
Python多线程ping(ping3模块) 代码 from ping3 import ping from concurrent.futures import ThreadPoolExecutor## ...
- python实现ping某一ip_Python:如何ping一系列IP地址?
我想在Python中ping一系列IP地址并打印: "IP可访问,包丢失率为X%"或 "IP无法访问,包丢失X%" 我想尝试的范围是192.168.0.X,X是 ...
- 基于python的ping命令分析与实现
摘要 在网络日益发达的今天,网络变得越来越重要,而ping命令是我们使用的比较多的用于测试网络连通性的命令,ping用于确定本地主机是否能与另一台主机成功交换(发送与接收)数据包,再根据返回的信息,就 ...
最新文章
- [Vue.js进阶]从源码角度剖析vue-router(三)
- Wide ResNet ResNeXt DenseNet DPNet [9] NASNet [10] SENet [11] Capsules [12
- ctf -- 内存取证分析工具volatility的下载与安装+简单的使用
- boost::filesystem模块实现Windows MAX_PATH的测试程序
- scrapy发送翻页请求
- ios 自定义拍照页面_vivo X27只靠颜值和拍照吃饭?体验过后你也会被系统所折服...
- 表格占据整个页面_excel转换为pdf6个示例,在多个工作表、表格和空白页中进行选择...
- Elasticsearch单机安装
- 走近深度学习,认识MoXing:初识华为云ModelArts的王牌利器 — MoXing
- 剑指offer-06-旋转数组的最小数字
- 高中计算机会考教案,高中信息技术会考模拟试题讲课教案.pdf
- redis缓存hset, hget, hPutAll
- 跨越阶层,至少需要三代人的努力;看千年前的眉山五苏是如何完成的
- 基于springboot的停车场管理系统设计与实现
- 计嵌 廖峻 20178303040 C++作业
- Android——SVG图片转成安卓能用的vector矢量图
- 易道云控数字引擎下的企业协同办公
- MongoDB相关概念
- 反编译class文件
- 100道经典Hadoop常见面试/笔试题及答案解析