本文中的脚本适用范围:
1) 检测某些 IP 地址是否被占用;
2) 检测网络中某些设备是否存活;
3) 在分配新的 ip 地址之前, 批量检测环境中是否存在冲突的机器
以上检测基于 ICMP Ping 报文, 要求所有的设备允许 Ping, 设备开通禁止 ICMP 策略, 防火墙禁止 ICMP 报文等情况不在本文的考虑范围之内.
不多说, 上代码:
(一)windows 批处理脚本
- ::autor lb
- ::date 2018 05
- @echo off
:: 屏显当前的测试时间并输出到测试结果 (详细日志和结果日志)
echo %date% %time%
:: 每次执行脚本时都要先删除日志
- del %cd%\IpCheckerDetailLog.txt
- del %cd%\IpCheckerResLog.txt
- echo %date% %time%>>IpCheckerDetailLog.txt
- echo %date% %time%>>IpCheckerResLog.txt
- echo IpCheckerResult>>IpCheckerResLog.txt
::for 循环执行 ping 命令, 每次循环都会从制定的文件中读取 ip 地址进行 ping 操作, ping count=1,timeout=1ms, 每次 Ping 结果都会重定向到详细日志文件
- set /a avaNum=0
- set /a unReaccNum=0
- for /f "delims=" %%i in (ip.txt) do (
Ping.exe -n 1 -w 1 %%i>> IpCheckerDetailLog.txt
- if not errorlevel 1 ( echo %%i is avaliable
- echo %%i is avaliable>> IpCheckerResLog.txt
- set /a avaNum+=1 ) else ( echo %%i is unreachable[Warning]
- set /a unReaccNum+=1
- echo %%i is unreachable[Warning]>> IpCheckerResLog.txt )
- )
- set /a Total=%avaNum% + %unReaccNum%
- echo Total Count:%Total%
- echo %avaNum% avaliable; %unReaccNum% unreachable!
- pause
测试如下:
创建 ip.txt,
执行脚本
(二) Windows Python 脚本
- #!windows 64 python3.6.5
- # coding=utf-8
- # Ip 检测脚本
- # author lb
- # time 2018 05
- import os
- import datetime
- SrcFileName = "ip.txt";
- CurT = datetime.datetime.now().strftime("%m%d_%H%M%S");
- CurTInLog = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S\n");
- LogFileName = "%s_LogDetail.txt" % CurT;
- ResFileName = "%s_Res.txt" % CurT;
- IpOkNum=0;
- IpFailNum=0;
- # 创建详细日志文件
- LogFp = open(LogFileName, 'w+');
- LogFp.write("PingTestDetailLog\n")
- LogFp.write(CurTInLog);
- # 创建结果日志文件
- ResFp = open(ResFileName, 'w+');
- ResFp.write("PingTestResult\n");
- ResFp.write(CurTInLog);
- # 打开 ip 文件
- SrcFp = open(SrcFileName, "r");
- for ip in SrcFp:
- #print(ip)
- cmd = "ping -n 1 -w 1 %s" % ip;
- ret = os.popen(cmd);
- strRet="%s\n" % ret.read();
- LogFp.write( strRet);
- print(strRet)
- #找到了 TTL 关键字, 证明 ping 通
- if strRet.find("TTL") != -1 or strRet.find("丢失 = 0")!=-1:
- strok="%s Is Reachable \n"% ip;
- print(strok);
- ResFp.write(strok);
- IpOkNum+=1;
- else:
- strfail="%s Is Uneachable[Warning]\n"% ip;
- print(strfail);
- ResFp.write(strfail);
- IpFailNum+=1;
- Res="Total Ip Num i:%d\nReachable Count:%d,Unreachable Count:%d" % ((IpFailNum+IpOkNum),IpOkNum,IpFailNum);
- print(Res)
- LogFp.close();
- ResFp.close();
- SrcFp.close();
运行结果:
- (三)linux shell
- #!bin/sh
- #author lb
- #date 2018 05
- PingFun()
- {
- #Creat Log File
- echo DetailLog>>IpCheckerDetailLog.txt
- echo DetailResult>>IpCheckerResLog.txt
- CurT=$(date "+%Y:%m:%D %H:%M:%S")
- IpAvaCount=0;
- IpUnReachCount=0;
- #Init Log File
- echo $CurT>>IpCheckerDetailLog.txt
- echo $CurT>>pCheckerResLog.txt
- echo Starting ping...
- #Read Ip
- while read ip
- do
- if ping -c 1 -w 1 $ip>/dev/null ;then
- echo $ip is avaliable
- echo $ip is avaliable>>IpCheckerResLog.txt
- IpAvaCount=$(($IpAvaCount+1))
- else echo $ip is unreachable
- echo $ip is unreachable>>IpCheckerResLog.txt
- IpUnReachCount=$((1+$IpUnReachCount))
- fi
- done <ip.txt
- #statistics
- echo Statis:
- echo Total Count : $(($IpUnReachCount+$IpAvaCount))
- echo Avaliable :$IpAvaCount,Unreachable :$IpUnReachCount
- }
- PingFun
执行结果:
来源: https://www.cnblogs.com/LiuBingBlogs/p/9054035.html