Shell学习笔记之shell脚本和python脚本实现批量ping IP测试
0x00 将IP列表放到txt文件内
先建一个存放ip列表的txt文件:
[root@yysslopenvpn01 ~]# cat hostip.txt 192.168.130.1 192.168.130.2 192.168.130.3 192.168.130.4 192.168.130.5 192.168.130.6 192.168.130.7 192.168.130.8 192.168.130.9 192.168.130.10 192.168.130.11 192.168.130.12 192.168.130.13 192.168.130.14 192.168.130.15 192.168.130.16 192.168.130.17 192.168.130.18 192.168.130.19 192.168.130.20
0x01 使用Shell脚本实现
创建shell 脚本:
[root@yysslopenvpn01 ~]# vim shell_ping.sh #!/bin/sh for i in `cat hostip.txt` do ping -c 4 $i|grep -q 'ttl=' && echo "$i ok" || echo "$i failed" done exit()
注意:请不要直接粘贴复制,如果使用以上shell请在linux主机的vim中自己手动编写,不然会出现换行符报错!
# syntax error near unexpected token `do!
添加脚本权限
[root@yysslopenvpn01 ~]# chmod +x shell_ping.sh
执行:
[root@yysslopenvpn01 ~]# sh shell_ping.sh 192.168.130.1 ok 192.168.130.2 failed 192.168.130.3 failed 192.168.130.4 failed 192.168.130.5 failed 192.168.130.6 failed 192.168.130.7 failed 192.168.130.8 failed 192.168.130.9 failed 192.168.130.10 failed 192.168.130.11 failed 192.168.130.12 failed 192.168.130.13 failed 192.168.130.14 failed 192.168.130.15 failed 192.168.130.16 failed 192.168.130.17 failed 192.168.130.18 ok 192.168.130.19 ok 192.168.130.20 ok
0x02 使用Python脚本实现
创建python脚本:
[root@yysslopenvpn01 ~]# vim ping.py #!/usr/bin/env python # -*- coding: utf-8 -*- # Author:xieshengsen # 实现批量ping IP测试 import re import subprocess def check_alive(ip,count=4,timeout=1): 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[32m%s UP\033[0m" %(ip) else: print "\033[31m%s DOWN\033[0m" %(ip) if __name__ == "__main__": with file('hostip.txt','r') as f: for line in f.readlines(): ip = line.strip() check_alive(ip)
执行结果:
[root@yysslopenvpn01 ~]# python ping.py 192.168.130.1 UP 192.168.130.2 DOWN 192.168.130.3 DOWN 192.168.130.4 DOWN 192.168.130.5 DOWN 192.168.130.6 DOWN 192.168.130.7 DOWN 192.168.130.8 DOWN 192.168.130.9 DOWN 192.168.130.10 DOWN 192.168.130.11 DOWN 192.168.130.12 DOWN 192.168.130.13 DOWN 192.168.130.14 DOWN 192.168.130.15 DOWN 192.168.130.16 DOWN 192.168.130.17 DOWN 192.168.130.18 UP 192.168.130.19 UP 192.168.130.20 UP