当前位置:首页 > 操作系统 > Windows

linux,windows下检测指定的IP地址是否可用或者检测IP地址冲突的3种方式(批处理程序,python程序,linux shell 批量ping)

本文中的脚本适用范围:

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)!

相关教程推荐

其他课程推荐