本文中的脚本适用范围:
1)检测某些IP地址是否被占用;
2)检测网络中某些设备是否存活;
3)在分配新的ip地址之前,批量检测环境中是否存在冲突的机器
以上检测基于ICMP Ping报文,要求所有的设备允许Ping,设备开通禁止ICMP策略,防火墙禁止ICMP报文等情况不在本文的考虑范围之内。
不多说,上代码:
(一)windows 批处理脚本
<span> 1</span>
<span>::autor lb
</span>
<span> 2</span> ::<span>date</span> 2018 05
<span> 3</span><span>@echo</span><span>off</span><span> 4</span><span>::</span><span>屏显当前的测试时间并输出到测试结果(详细日志和结果日志)</span><span> 5</span><span>echo</span> %<span>date</span>% %<span>time</span><span>%
</span><span> 6</span><span> 7</span><span>::</span><span>每次执行脚本时都要先删除日志</span><span> 8</span><span>del</span> %<span>cd</span>%IpCheckerDetailLog.<span>txt
</span><span> 9</span><span>del</span> %<span>cd</span>%IpCheckerResLog.<span>txt
</span><span>10</span><span>echo</span> %<span>date</span>% %<span>time</span>% >>IpCheckerDetailLog.<span>txt
</span><span>11</span><span>echo</span> %<span>date</span>% %<span>time</span>% >>IpCheckerResLog.<span>txt
</span><span>12</span><span>echo</span> IpCheckerResult >>IpCheckerResLog.<span>txt
</span><span>13</span><span>14</span><span>::</span><span>for循环执行ping命令,每次循环都会从制定的文件中读取ip地址进行ping操作,ping count=1,timeout=1ms,每次Ping结果都会重定向到详细日志文件</span><span>15</span><span>set</span> /a avaNum=0
<span>16</span><span>set</span> /a unReaccNum=0
<span>17</span><span>for</span> /f "delims=" %%i in (ip.txt) <span>do</span> (
<span>18</span> Ping.exe -n 1 -w 1 %%i >> IpCheckerDetailLog.<span>txt
</span><span>19</span><span>if</span><span>not</span><span>errorlevel</span> 1 ( <span>echo</span><span> %%i is avaliable
</span><span>20</span><span>echo</span> %%i is avaliable >> IpCheckerResLog.<span>txt
</span><span>21</span><span>set</span> /a avaNum+=1 ) <span>else</span> ( <span>echo</span><span> %%i is unreachable[Warning]
</span><span>22</span><span>set</span> /a unReaccNum+=1
<span>23</span><span>echo</span> %%i is unreachable[Warning] >> IpCheckerResLog.txt )
<span>24</span> )
<span>25</span><span>set</span> /a Total=%avaNum% +<span> %unReaccNum%
</span><span>26</span><span>echo</span><span> Total Count:%Total%
</span><span>27</span><span>echo</span> %avaNum% avaliable;<span> %unReaccNum% unreachable!
</span><span>28</span><span>pause</span>
测试如下:
创建ip.txt,
执行脚本
(二) Windows Python脚本
<span> 1</span>
<span>#</span>
<span>!windows 64 python3.6.5</span>
<span> 2</span>
<span>#</span>
<span> coding=utf-8</span>
<span> 3</span>
<span> 4</span>
<span>#</span>
<span> Ip检测脚本</span>
<span> 5</span>
<span>#</span>
<span> author lb</span>
<span> 6</span>
<span>#</span>
<span> time 2018 05</span>
<span> 7</span>
<span>import</span>
<span> os
</span>
<span> 8</span>
<span>import</span>
<span> datetime
</span>
<span> 9</span>
<span>10</span> SrcFileName = <span>"</span><span>ip.txt</span><span>"</span><span>;
</span><span>11</span> CurT = datetime.datetime.now().strftime(<span>"</span><span>%m%d_%H%M%S</span><span>"</span><span>);
</span><span>12</span> CurTInLog = datetime.datetime.now().strftime(<span>"</span><span>%Y-%m-%d %H:%M:%S
</span><span>"</span><span>);
</span><span>13</span> LogFileName = <span>"</span><span>%s_LogDetail.txt</span><span>"</span> %<span> CurT;
</span><span>14</span> ResFileName = <span>"</span><span>%s_Res.txt</span><span>"</span> %<span> CurT;
</span><span>15</span> IpOkNum=<span>0;
</span><span>16</span> IpFailNum=<span>0;
</span><span>17</span><span>18</span><span>#</span><span> 创建详细日志文件</span><span>19</span> LogFp = open(LogFileName, <span>‘</span><span>w+</span><span>‘</span><span>);
</span><span>20</span> LogFp.write(<span>"</span><span>PingTestDetailLog
</span><span>"</span><span>)
</span><span>21</span><span>LogFp.write(CurTInLog);
</span><span>22</span><span>23</span><span>#</span><span> 创建结果日志文件</span><span>24</span> ResFp = open(ResFileName, <span>‘</span><span>w+</span><span>‘</span><span>);
</span><span>25</span> ResFp.write(<span>"</span><span>PingTestResult
</span><span>"</span><span>);
</span><span>26</span><span>ResFp.write(CurTInLog);
</span><span>27</span><span>28</span><span>#</span><span> 打开ip文件</span><span>29</span> SrcFp = open(SrcFileName, <span>"</span><span>r</span><span>"</span><span>);
</span><span>30</span><span>for</span> ip <span>in</span><span> SrcFp:
</span><span>31</span><span>#</span><span>print(ip)</span><span>32</span> cmd = <span>"</span><span>ping -n 1 -w 1 %s</span><span>"</span> %<span> ip;
</span><span>33</span> ret =<span> os.popen(cmd);
</span><span>34</span> strRet=<span>"</span><span>%s
</span><span>"</span> %<span> ret.read();
</span><span>35</span><span> LogFp.write( strRet);
</span><span>36</span><span>print</span><span>(strRet)
</span><span>37</span><span>#</span><span>找到了TTL关键字,证明ping通</span><span>38</span><span>if</span> strRet.find(<span>"</span><span>TTL</span><span>"</span>) != -1 <span>or</span> strRet.find(<span>"</span><span>丢失 = 0</span><span>"</span>)!=-1<span>:
</span><span>39</span> strok=<span>"</span><span>%s Is Reachable
</span><span>"</span>%<span> ip;
</span><span>40</span><span>print</span><span>(strok);
</span><span>41</span><span> ResFp.write(strok);
</span><span>42</span> IpOkNum+=1<span>;
</span><span>43</span><span>else</span><span>:
</span><span>44</span> strfail=<span>"</span><span>%s Is Uneachable[Warning]
</span><span>"</span>%<span> ip;
</span><span>45</span><span>print</span><span>(strfail);
</span><span>46</span><span> ResFp.write(strfail);
</span><span>47</span> IpFailNum+=1<span>;
</span><span>48</span> Res=<span>"</span><span>Total Ip Num i:%d
Reachable Count:%d,Unreachable Count:%d </span><span>"</span> % ((IpFailNum+<span>IpOkNum),IpOkNum,IpFailNum);
</span><span>49</span><span>print</span><span>(Res)
</span><span>50</span><span>51</span><span>LogFp.close();
</span><span>52</span><span>ResFp.close();
</span><span>53</span> SrcFp.close();
运行结果:
(三)linux shell
<span> 1</span>
<span>#</span>
<span>!bin/sh</span>
<span> 2</span>
<span>#</span>
<span>author lb</span>
<span> 3</span>
<span>#</span>
<span>date 2018 05</span>
<span> 4</span>
<span> 5</span>
<span> 6</span>
<span>PingFun()
</span>
<span> 7</span>
<span>{
</span>
<span> 8</span>
<span>#</span>
<span>Creat Log File</span>
<span> 9</span> echo DetailLog>><span>IpCheckerDetailLog.txt
</span><span>10</span> echo DetailResult>><span>IpCheckerResLog.txt
</span><span>11</span> CurT=$(date <span>"</span><span>+%Y:%m:%D %H:%M:%S</span><span>"</span><span>)
</span><span>12</span> IpAvaCount=0<span>;
</span><span>13</span> IpUnReachCount=0<span>;
</span><span>14</span><span>15</span><span>#</span><span>Init Log File</span><span>16</span> echo <span>$CurT</span>>><span>IpCheckerDetailLog.txt
</span><span>17</span> echo <span>$CurT</span>>><span>pCheckerResLog.txt
</span><span>18</span><span>19</span><span>echo Starting ping...
</span><span>20</span><span>#</span><span>Read Ip </span><span>21</span><span>while</span><span> read ip
</span><span>22</span><span>do</span><span>23</span><span>if</span> ping -c 1 -w 1 <span>$ip</span> >/dev/<span>null ;then
</span><span>24</span> echo <span>$ip</span><span> is avaliable
</span><span>25</span> echo <span>$ip</span> is avaliable >><span>IpCheckerResLog.txt
</span><span>26</span> IpAvaCount=$((<span>$IpAvaCount</span>+1<span>))
</span><span>27</span><span>else</span> echo <span>$ip</span><span> is unreachable
</span><span>28</span> echo <span>$ip</span> is unreachable >><span>IpCheckerResLog.txt
</span><span>29</span> IpUnReachCount=$((1+<span>$IpUnReachCount</span><span>))
</span><span>30</span><span> fi
</span><span>31</span><span>done <ip.txt
</span><span>32</span><span>33</span><span>#</span><span>statistics</span><span>34</span><span>echo Statis:
</span><span>35</span> echo Total Count : $((<span>$IpUnReachCount</span>+<span>$IpAvaCount</span><span>))
</span><span>36</span> echo Avaliable :<span>$IpAvaCount</span>,Unreachable :<span>$IpUnReachCount</span><span>37</span><span>}
</span><span>38</span> PingFun
执行结果:
原文:https://www.cnblogs.com/LiuBingBlogs/p/9054035.html
【说明】:本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!