空闲IP检测小工具
1. 背景
在一个局域网内,IP使用数量有限,所以随着联网的设备数越来越多,出现IP冲突的问题越来越频繁。所以做了一个空闲IP检测小工具,在给新增设备设置IP之前,可以检测局域网内空闲的IP来使用,由此可减少冲突发生。
2. 原理
在执行ping时,如果返回的结果值为 1,则表明没有ping平通,IP空闲;如果返回的值不为 1,则认为ping通,IP已经在被使用(不包含特殊情况)。
3. 实现
提示:以下为示例代码,最后下载链接里有完整代码(笔者所用开发环境为 vs2008)和Windows下可直接运行的 exe
3.1 输入需要检测的IP段
解析出IP段的范围,并对输入的IP段格式进行检测。当输入IP段符合规则时,进行循环ping操作。
//定义标号L,用于goto跳转
L1: cout<<“开始IP >>”;
string startIp;
cin>>startIp;
int pos=startIp.find_last_of(".");
string inputIp=startIp.substr(0,pos+1);
startIp=startIp.substr(pos+1);
cout<<“结束IP >>”;
string endIp;
cin>>endIp;
pos=endIp.find_last_of(".");
endIp=endIp.substr(pos+1);
//对输入IP格式检测
if(atoi(endIp.c_str())<=atoi(startIp.c_str()))
{
cout<<endl<<“结束IP需大于开始IP,请重新输入!”<<endl;
goto L1;
}
if(atoi(startIp.c_str())<1||atoi(endIp.c_str())>=255)
{
cout<<endl<<“开始结束IP的尾数范围为(1-254),请重新输入!”<<endl;
goto L1;
}
3.2 检测过程
在ping的过程中,将ping的结果进行分类(通/不通),把空闲IP和已用IP写入不同文件。
for(int i=atoi(startIp.c_str());i<=atoi(endIp.c_str());i++)
{
sprintf(strIp,"%s%d",inputIp.c_str(),i);
sprintf(strPing,“ping %s %s”,"-w 2 -n 1",strIp);
//ping不通则认为ip空闲
if(1==system(strPing))
{
ofsFree <<strIp<< endl;
}
//通了则认为已占用
else
{
ofsUsed<<strIp<<endl;
}
}
3.3 结果处理
读取结果文件进行空闲IP和已用IP展示,通过flag标志确定是否保存生成的结果文件。
//读取结果文件进行展示
read();
//判断是否保留结果文件
if(!flag)
{
delFile(“FreeIP.txt”);
delFile(“UsedIP.txt”);
}
4. 效果展示
41. 输入检测IP段并选择是否保留结果文件:
42. 检测过程打印
43. 检测结果展示
5. 总结
简单地通过ping的结果进行IP是否空闲判断有不严谨之处,但是这足以获得大多数情况下的真实IP情况。并且在实现检测输入IP段是否合规部分,用到了goto语句,虽然笔者也知goto存在一些所谓的问题,但不得不说在这样的小场景,用着真舒肥。
6. 成果物
源码和可直接使用exe下载地址。
https://download.****.net/download/sjdjjd6466446/12827509
如果链接失效,请直接去我的主页资源里获取。