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

本文中的脚本适用范围:

1)检测某些IP地址是否被占用;

2)检测网络中某些设备是否存活;

3)在分配新的ip地址之前,批量检测环境中是否存在冲突的机器

以上检测基于ICMP Ping报文,要求所有的设备允许Ping,设备开通禁止ICMP策略,防火墙禁止ICMP报文等情况不在本文的考虑范围之内。

不多说,上代码:

(一)windows 批处理脚本

复制代码
 1 ::autor lb
 2 ::date 2018 05
 3 @echo off
 4 ::屏显当前的测试时间并输出到测试结果(详细日志和结果日志)
 5 echo %date% %time%
 6 
 7 ::每次执行脚本时都要先删除日志
 8 del %cd%\IpCheckerDetailLog.txt 
 9 del %cd%\IpCheckerResLog.txt 
10 echo %date% %time% >>IpCheckerDetailLog.txt
11 echo %date% %time%  >>IpCheckerResLog.txt
12 echo IpCheckerResult >>IpCheckerResLog.txt
13 
14 ::for循环执行ping命令,每次循环都会从制定的文件中读取ip地址进行ping操作,ping count=1,timeout=1ms,每次Ping结果都会重定向到详细日志文件
15 set /a avaNum=0
16 set /a unReaccNum=0
17 for /f "delims=" %%i in (ip.txt) do (
18 Ping.exe -n 1 -w 1 %%i >> IpCheckerDetailLog.txt
19 if not errorlevel 1 ( echo %%i            is avaliable
20 echo %%i            is avaliable >> IpCheckerResLog.txt
21 set /a avaNum+=1 ) else ( echo %%i            is unreachable[Warning] 
22 set /a unReaccNum+=1
23 echo %%i            is unreachable[Warning]  >> IpCheckerResLog.txt )
24 )
25 set /a Total=%avaNum% + %unReaccNum%
26 echo Total Count:%Total%
27 echo %avaNum% avaliable;    %unReaccNum% unreachable!
28 pause
复制代码

 

测试如下:

 创建ip.txt,

 

执行脚本

 (二) Windows Python脚本

复制代码
 1 #!windows 64 python3.6.5
 2 # coding=utf-8
 3 
 4 # Ip检测脚本
 5 # author lb
 6 # time 2018 05
 7 import os
 8 import datetime
 9 
10 SrcFileName = "ip.txt";
11 CurT = datetime.datetime.now().strftime("%m%d_%H%M%S");
12 CurTInLog = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S\n");
13 LogFileName = "%s_LogDetail.txt" % CurT;
14 ResFileName = "%s_Res.txt" % CurT;
15 IpOkNum=0;
16 IpFailNum=0;
17 
18 # 创建详细日志文件
19 LogFp = open(LogFileName, 'w+');
20 LogFp.write("PingTestDetailLog\n")
21 LogFp.write(CurTInLog);
22 
23 # 创建结果日志文件
24 ResFp = open(ResFileName, 'w+');
25 ResFp.write("PingTestResult\n");
26 ResFp.write(CurTInLog);
27 
28 # 打开ip文件
29 SrcFp = open(SrcFileName, "r");
30 for ip in SrcFp:
31     #print(ip)
32     cmd = "ping -n 1 -w 1 %s" % ip;
33     ret = os.popen(cmd);
34     strRet="%s\n" % ret.read();
35     LogFp.write( strRet);
36     print(strRet)
37     #找到了TTL关键字,证明ping通
38     if  strRet.find("TTL") != -1 or strRet.find("丢失 = 0")!=-1:
39         strok="%s Is Reachable \n"% ip;
40         print(strok);
41         ResFp.write(strok);
42         IpOkNum+=1;
43     else:
44         strfail="%s Is Uneachable[Warning]\n"% ip;
45         print(strfail);
46         ResFp.write(strfail);
47         IpFailNum+=1;
48 Res="Total Ip Num i:%d\nReachable  Count:%d,Unreachable Count:%d " % ((IpFailNum+IpOkNum),IpOkNum,IpFailNum);
49 print(Res)
50 
51 LogFp.close();
52 ResFp.close();
53 SrcFp.close();
复制代码

运行结果:

 (三)linux shell

复制代码
 1 #!bin/sh
 2 #author lb
 3 #date 2018 05
 4 
 5 
 6 PingFun()
 7 {
 8 #Creat Log File
 9 echo DetailLog>>IpCheckerDetailLog.txt
10 echo DetailResult>>IpCheckerResLog.txt
11 CurT=$(date "+%Y:%m:%D %H:%M:%S")
12 IpAvaCount=0;
13 IpUnReachCount=0;
14 
15 #Init Log File
16 echo $CurT>>IpCheckerDetailLog.txt
17 echo $CurT>>pCheckerResLog.txt
18 
19 echo Starting ping...
20 #Read Ip 
21 while read ip
22 do
23     if ping -c 1 -w 1 $ip >/dev/null ;then
24         echo $ip     is avaliable
25         echo $ip     is avaliable >>IpCheckerResLog.txt
26         IpAvaCount=$(($IpAvaCount+1))
27     else echo $ip     is unreachable
28          echo $ip     is unreachable >>IpCheckerResLog.txt    
29         IpUnReachCount=$((1+$IpUnReachCount))
30     fi
31 done <ip.txt
32 
33 #statistics
34 echo Statis:
35 echo Total Count : $(($IpUnReachCount+$IpAvaCount))
36 echo Avaliable :$IpAvaCount,Unreachable :$IpUnReachCount
37 }
38 PingFun
复制代码

 执行结果:

 

http://www.q-wei.cn/
http://news.q-wei.cn/
http://www.yichaonet.cn/
http://news.yichaonet.cn/
http://www.vxjezfv.cn/
http://news.vxjezfv.cn/
http://www.xibiyo.com.cn/
http://news.xibiyo.com.cn/
http://www.9208361.org.cn/
http://news.9208361.org.cn/
http://www.9111316.cn/
http://news.9111316.cn/
http://www.bluelf.com.cn/
http://news.bluelf.com.cn/
http://www.qqq136com.cn/
http://news.qqq136com.cn/
http://www.2819w.cn/
http://news.2819w.cn/
http://www.9019758.org.cn/
http://news.9019758.org.cn/
http://www.wydaogou.cn/
http://news.wydaogou.cn/
http://www.ralhys.cn/
http://news.ralhys.cn/
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
批量获取网络摄像机的IP地址和设备名称,你可以使用一些网络工具和脚本来实现。以下是一个基本的思路: 1. 确定你要扫描的网络范围:你可以确定你要扫描的IP地址范围,例如192.168.1.0/24,这将扫描192.168.1.0到192.168.1.255之间的所有IP地址。 2. 使用网络扫描工具:你可以使用诸如nmap、fping或arp-scan等工具来扫描指定IP地址范围。这些工具可以帮助你发现活动的设备并获取其IP地址。 3. 解析设备信息:一旦你获得了设备的IP地址,你可以使用脚本编程语言(如Python、Bash等)编写脚本来解析设备信息。你可以使用网络库(如socket)来连接到设备并获取设备的名称或其他相关信息。 以下是一个简单的Bash脚本示例,使用nmap扫描网络并获取设备的IP地址和名称: ```bash #!/bin/bash network="192.168.1.0/24" # 使用nmap扫描网络 nmap -sn $network | grep "Nmap scan report" | awk '{print $NF}' > ip_addresses.txt # 遍历IP地址并获取设备名称 while read -r ip; do device_name=$(nslookup $ip | grep "name =" | awk '{print $NF}' | sed 's/\.$//') echo "IP: $ip, Device Name: $device_name" done < ip_addresses.txt # 清除临时文件 rm ip_addresses.txt ``` 请注意,这只是一个简单的示例,你可能需要根据你的实际情况进行适当的调整和改进。此外,需要确保你有足够的权限来运行网络扫描工具和访问设备信息。 希望这个示例对你有所帮助!如果你需要更进一步的指导,请告诉我。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值