本文中的脚本适用范围:

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

执行结果:

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

  1. Ruby入门--Linux/Windows下的安装、代码开发及Rails实战

    Ruby入门--Linux/Windows下的安装.代码开发及Rails实战 http://www.linuxidc.com/Linux/2014-04/100242.htm Ubuntu 13.04 ...

  2. linux/windows下启用和停止VMware后台服务的脚本

    linux/windows下启用和停止VMware后台服务的脚本 linux/windows下启用和停止VMware后台服务的脚本 linux平台 windows平台 本文由乌合之众 lym瞎编,欢迎 ...

  3. Go交叉编译(Go语言Mac/Linux/Windows下交叉编译)

    Go交叉编译(Go语言Mac/Linux/Windows下交叉编译) 2019/11/21 Chenxin 在很多时候,由于开发的方便,会有这样的场景出现,使用Mac开发或使用Windows开发,需要 ...

  4. linux环境下,使用Navicat连接mysql时,提示本地IP无法连接虚拟环境下的mysql解决方案

    在Linux环境下,使用Navicat连接mysql时,提示本地IP无法连接虚拟环境下的mysql,提示如下: 而导致连接错误的原因是MYSQL没有开启远程登录权限. 解决方案: 在mysql命令中执 ...

  5. 在 Linux/windows下 命令行中使用和执行 PHP 代码[交互式php]

    [注释]在ubuntu下,升级php到7.1版本,虽然提示的是Interactive mode enabled, 但实际上可以直接书写命令,和interactive shell效果一样. 一:wind ...

  6. c++ 网络编程(四) LINUX/windows下 socket 基于I/O复用的服务器端代码 解决多进程服务端创建进程资源浪费问题

    原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/9613861.html 好了,继上一篇说到多进程服务端也是有缺点的,每创建一个进程就代表大量的运 ...

  7. [Linux] Windows 下通过SecureCRT 访问 Linux

    不愿意装双系统的,可以借助虚拟机(Vmware, Virtual PC等) 安装linux 进行使用. 至于如何使用虚拟机安装Linux 这部分,很简单: 下载好需要安装的Linux ISO 镜像文件 ...

  8. windows下以指定用户访问SMB服务器进行读写

    需求:最近要开发某系统前端界面,但是该系统是部署在linux服务器上,前端是用php开发,实时调试运行需要linux下系统环境支持, 每次修改都需要手动传到服务器上,尤其是debug阶段,每修改一点就 ...

  9. [转]Linux/Windows下脚本对拍程序

    [新]简单写法 (转载自:https://blog.csdn.net/ylsoi/article/details/79824655) 要求:文件输入输出,且输入输出文件需要对应 Linux: #inc ...

  10. java File linux windows 下 绝对路径 相对路径问题

    前言 当前项目目录 windows 为  E:\project\testpro\ linux 为  /project/testpro/ Windows环境下获取绝对路径情况 使用 a/b/c 为路径, ...

随机推荐

  1. C语言字符串的常见特殊操作(除了string.c实现的那些接口)

    字符串操作中,必须掌握的一些之前已经在文章有写过了,比如说字符串查找,字符串粘帖,字符串拷贝等等,这些在标准C库的string.c中已经有实现,故包含#include <string.h> ...

  2. 文件lseek操作产生空洞文件的方法

    在文件操作过程中,lseek操作可以偏移到文件的任意位置. 在UNIX文件操作中,文件位移量可以大于文件的当前长度,在这种情况下,对该文件的下一次写将延长该文件,并在文件中构成一个空洞,这一点是允许的 ...

  3. LeetCode之“字符串”:最短回文子串

    题目链接 题目要求: Given a string S, you are allowed to convert it to a palindrome by adding characters in f ...

  4. ssh keygen命令实现免密码通信(git库获取操作权限:开发人员添加到git库中,获取操作权限)

    先看两个机器实现免密码登陆通讯: 假设 A 为客户机器,B为目标机: 要达到的目的: A机器ssh登录B机器无需输入密码: 加密方式选 rsa|dsa均可以,默认dsa 做法: 1.登录A机器 2.s ...

  5. HBase缓存的使用

    hbase中的缓存分了两层:memstore和blockcache. 其中memstore供写使用,写请求会先写入memstore,regionserver会给每个region提供一个memstore ...

  6. ruby如何查找一个方法属于哪个类

    这是一个看似简单,实际不那么直接的问题.一种方法是先直接看当前对象的类是神马东东: puts self.class 或者 self.class.name 不过在某些情况下上述代码返回不了具体的名称,前 ...

  7. MQ队列管理器搭建(二)

    MQ级联方式使用场景 使用场景:     如上图所示,Application1与Application2要进行通信或者消息互换,使用MQ中间件作为中介.上图中,Application1与Applica ...

  8. 安装centOS后要解决的问题

    1,检查是否联网 ping www.baidu.com 未显示: 则表示网络未连接 首先关闭防火墙 sudo systemctl stop firewalld.service #停止firewall ...

  9. Best Time to Buy and Sell Stock i

    Say you have an array for which the ith element is the price of a given stock on day i. If you were ...

  10. JeeSite

    JeeSite是一个 开源的企业信息管理系统 基础框架.主要定位于"企业信息管理"领域,可用作企业信息管理类系统.网站后台管理类系统等.JeeSite是非常强调开发的高效性.健壮性 ...