python写ping工具_客户端Ping服务器工具[Python]

要写一个方便使用的客户端ping服务器的小工具,记录一下关键的地方。这里使用Python的subprocess模块调用系统命令ping.exe,利用正则表达式从输出结果中提取需要的信息。subprocess模块可以和打开的子进程进行数据传递,非常方便。

这里要注意的是,子进程要使用绝对路径,不然在用py2exe打包后,会找不到可执行文件。

COUNT = ‘10’

TIMEOUT = ‘6’

PING_EXE = 'C:\Windows\System32\PING.EXE'

SEP = os.linesep

p = subprocess.Popen(

[ PING_EXE, server, '-n', COUNT, '-w', TIMEOUT],

stderr=file('nul', 'a'),

stdin=subprocess.PIPE,

stdout=subprocess.PIPE)

data = p.stdout.read().split(SEP)

data = data[-5:-1]

data中保存ping.exe输出的内容,和在cmd.exe里使用ping时的输出内容一样,最后几行包含了此次ping的汇总信息。输出的结果是str类型,用换行符来截断成list,根据最后4行来判断ping的结果。应该会有更好的方法,先这样用了。Windows下ping的结果有3种:

正常ping通,最后4行都不为空。

无法解析DNS,即unknow host。输出行数为1,len(data) == 1。

能解析,但ping不通,即100%丢包,此时输出中没有delay信息。

用来提取数据的正则表达式:

# 域名解析后的IP地址

# 输入:115.239.210.27 的 Ping 统计信息:

# 结果:['115.239.210.27']

re_ip = re.compile('([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+).*')

# 数据包的收发统计

# 输入:数据包: 已发送 = 10,已接收 = 10,丢失 = 0 (0% 丢失)

# 结果:[('10', '10', '0', '0%')]

re_packets = re.compile('.*= ([0-9]+).*= ([0-9]+).*= ([0-9]+).*\(([0-9]+%).*')

# 数据包delay数据

# 输入:最短 = 5ms,最长 = 44ms,平均 = 9ms

# 结果:[('5', '44', '9')]

re_delay = re.compile('.*= ([0-9]+)ms.*= ([0-9]+)ms.*= ([0-9]+)ms')

更好的方法是使用基于web的工具,测试者只需要打开对应网页,就可以从测试者的机器上ping服务器。在不安装多余插件的前提下,就只有JS和ActionScript可以选择了。JavaScript是不能直接发送ICMP包的,只有采用变通的办法测试。目前在线测网速的工作大都是使用Flash实现。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值