python实战系列之批量主机ping网络测试(07)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python实战系列之批量主机ping网络测试(07)相关的知识,希望对你有一定的参考价值。

1.需求说明

  工作环境中,经常会有使用到ping对网络上的主机做网络测试,如机器上架,下线,测试等一些需要,对于大批量的机器来说,逐个主机ping测试,显然难以满足要求,对于机器比较多的场景,可以将需要执行ping测试的IP地址存放至一个文件内,调用脚本执行网络测试,方便,便捷。

2.程序内容

vim ping.py 
#!/usr/bin/env python
#_*_ coding:utf8 _*_
#author: Happy
#来自Happy试验试验 http://happylab.blog.51cto.com
#脚本主要用于做ping测试

import re
import subprocess

def check_alive(ip,count=1,timeout=1):
        ‘‘‘
        ping网络测试,通过调用ping命令,发送一个icmp包,从结果中通过正则匹配是否有100%关键字,有则表示丢包,无则表示正常
        ‘‘‘
        cmd = ‘ping -c %d -w %d %s‘ % (count,timeout,ip)

        p = subprocess.Popen(cmd,
                stdin=subprocess.PIPE,
                stdout=subprocess.PIPE,
                stderr=subprocess.PIPE,
                shell=True
        )

        result = p.stdout.read()
        regex = re.findall(‘100% packet loss‘,result)
        if len(regex) == 0:
                print "\033[31m%s UP\033[0m" % (ip)
        else:
                print "\033[32m%s DOWN\033[0m" % (ip)


if __name__ == "__main__":

        with file(‘/root/ip.txt‘,‘r‘) as f:
                for line in f.readlines():
                        ip = line.strip()
                        check_alive(ip)         #执行函数功能调用

3. 测试结果

python ping.py 
10.16.2.4 DOWN
10.16.2.5 DOWN
10.16.4.16 UP
10.16.4.30 UP
10.16.4.61 UP
10.16.4.65 UP
10.16.4.66 UP
10.16.4.68 UP
10.16.4.74 UP
10.16.4.76 UP
10.16.4.77 UP

4.关于subprocess模块学习

   在python中,调用shell中的命令主要有三种方法:1. os.system(), 2.commands模块,3.subprocess模块,方法都有所不同。

1.os.system(),调用系统命令,获取命令输出结果并接受返回码

>>> import os
>>> os.system(‘df -h‘)
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda2             9.9G  7.3G  2.2G  78% /
tmpfs                 3.9G  4.0K  3.9G   1% /dev/shm
/dev/sda1            1008M   82M  876M   9% /boot
/dev/sda4             899G   36G  818G   5% /data1
10.16.2.8:openstack_glances
                      899G   37G  816G   5% /var/lib/glance/images
0

>>> result = os.system(‘df -h‘)   #保存返回值
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda2             9.9G  7.3G  2.2G  78% /
tmpfs                 3.9G  4.0K  3.9G   1% /dev/shm
/dev/sda1            1008M   82M  876M   9% /boot
/dev/sda4             899G   36G  818G   5% /data1
10.16.2.8:openstack_glances
                      899G   37G  816G   5% /var/lib/glance/images
>>> print result
0

2.cmmands模块

>>> import commands

#得到命令输出结果
>>> commands.getoutput(‘df -h‘) 
‘Filesystem            Size  Used Avail Use% Mounted on\n/dev/sda2             9.9G  7.3G  2.2G  78% /\ntmpfs                 3.9G  4.0K  3.9G   1% /dev/shm\n/dev/sda1            1008M   82M  876M   9% /boot\n/dev/sda4             899G   36G  818G   5% /data1\n10.16.2.8:openstack_glances\n                      899G   37G  816G   5% /var/lib/glance/images‘

#得到命令输出结果和返回码,以元组的形式展示
>>> commands.getstatusoutput(‘df -h‘)
(0, ‘Filesystem            Size  Used Avail Use% Mounted on\n/dev/sda2             9.9G  7.3G  2.2G  78% /\ntmpfs                 3.9G  4.0K  3.9G   1% /dev/shm\n/dev/sda1            1008M   82M  876M   9% /boot\n/dev/sda4             899G   36G  818G   5% /data1\n10.16.2.8:openstack_glances\n                      899G   37G  816G   5% /var/lib/glance/images‘)
>>> 
>>> commands.getstatusoutput(‘df -h‘)[0]
0

3.os.popen()模块

>>> import os
>>> p = os.popen(‘df -h‘)
>>> p.read()
‘Filesystem            Size  Used Avail Use% Mounted on\n/dev/sda2             9.9G  7.3G  2.2G  78% /\ntmpfs                 3.9G  4.0K  3.9G   1% /dev/shm\n/dev/sda1            1008M   82M  876M   9% /boot\n/dev/sda4             899G   36G  818G   5% /data1\n10.16.2.8:openstack_glances\n                      899G   37G  816G   5% /var/lib/glance/images\n‘

其他方法,还有p.readline()读一行,p.readlines()读取所有的行,和文件操作的方法相类似!不建议使用这种方法,建议使用subprocess,因为subprocess是os.popen()的更高级封装,功能更强

4.subprocess模块










本文出自 “Happy实验室” 博客,谢绝转载!

以上是关于python实战系列之批量主机ping网络测试(07)的主要内容,如果未能解决你的问题,请参考以下文章

linux批量测试在线主机

通过curl以及ping命令批量测试主机连通性

Python多线程批量Ping主机IP的脚本

Vulnhb 靶场系列:Jarbas1.0

Vulnhb 靶场系列:Jarbas1.0

Python网络爬虫实战案例之:7000本电子书下载