用C/C++代码检测ip能否ping通(配合awk和system可以做到批量检测)
遇到一个小需求,快速搞定。来看看用C/C++代码检测ip能否ping通:
#include#include #include #include #include usingnamespacestd; stringgetCmdResult(conststring&strCmd)//这个是获取命令执行的结果,类似于system,之前我已经说过了 { charbuf[10240]={0}; FILE*pf=NULL; if((pf=popen(strCmd.c_str(),"r"))==NULL) { return""; } stringstrResult; while(fgets(buf,sizeofbuf,pf)) { strResult+=buf; } pclose(pf); unsignedintiSize=strResult.size(); if(iSize>0&&strResult[iSize-1]=='\n')//linux { strResult=strResult.substr(0,iSize-1); } returnstrResult; } intmain(intargc,char*argv[]) { if(argc!=2) { cout<<"no"< 测试一下:
ubuntu@VM-0-13-ubuntu:~$./a.out no ubuntu@VM-0-13-ubuntu:~$./a.out1.1.1.1 1.1.1.1 ubuntu@VM-0-13-ubuntu:~$./a.out172.16.0.13 ipok:172.16.0.13 ubuntu@VM-0-13-ubuntu:~$./a.outwww.baidu.com ipok:www.baidu.com ubuntu@VM-0-13-ubuntu:~$如上ping测试的超时时间是1s,自己可以改。 另外,如果有a.txt文件,每行一个ip,怎么知道哪些ip能否ping通呢?awk和system搞起吧,我们已经说过了:
ubuntu@VM-0-13-ubuntu:~$cata.txt
1.1.1.1
www.baidu.com
www.qq.com
ubuntu@VM-0-13-ubuntu:~$
ubuntu@VM-0-13-ubuntu:~$
ubuntu@VM-0-13-ubuntu:~$
ubuntu@VM-0-13-ubuntu:~$awk'{cmd="./a.out"$1;system(cmd)}'a.txt
1.1.1.1
ipok:www.baidu.com
ipok:www.qq.com
ubuntu@VM-0-13-ubuntu:~$可见1.1.1.1ping不通,其余的可以ping通。
上面用awk和system有个问题:如果ip过多,则必须等到所有ip检测完毕后,才知道最后的结果。也就是说,并不是处理完一个ip后,就立即能看到结果的。怎么办呢?可以写程序逐行读取文件来搞起,看下:
#include#include #include #include #include #include #include usingnamespacestd; stringgetCmdResult(conststring&strCmd) { charbuf[10240]={0}; FILE*pf=NULL; if((pf=popen(strCmd.c_str(),"r"))==NULL) { return""; } stringstrResult; while(fgets(buf,sizeofbuf,pf)) { strResult+=buf; } pclose(pf); unsignedintiSize=strResult.size(); if(iSize>0&&strResult[iSize-1]=='\n')//linux { strResult=strResult.substr(0,iSize-1); } returnstrResult; } stringipCheck(conststring&ip) { stringstrCmd="ping"+ip+"-w1"; stringstrRe=getCmdResult(strCmd); if((strRe.find("received")!=string::npos&&strRe.find(",0received")==string::npos)) { return"ipok:"+string(ip); } else { returnip; } } intmain(intargc,char*argv[])//./a.outa.txtb.txt { if(argc!=3) { cout<<"error"< >"+string(argv[2]); cout< 看下结果:
ubuntu@VM-0-13-ubuntu:~/tmp_test$ls
a.txt test.cpp
ubuntu@VM-0-13-ubuntu:~/tmp_test$
ubuntu@VM-0-13-ubuntu:~/tmp_test$
ubuntu@VM-0-13-ubuntu:~/tmp_test$cata.txt
1.1.1.1
2.2.2.2
www.baidu.com
3.3.3.3
4.4.4.4
ubuntu@VM-0-13-ubuntu:~/tmp_test$
ubuntu@VM-0-13-ubuntu:~/tmp_test$
ubuntu@VM-0-13-ubuntu:~/tmp_test$g++test.cpp
ubuntu@VM-0-13-ubuntu:~/tmp_test$
ubuntu@VM-0-13-ubuntu:~/tmp_test$
ubuntu@VM-0-13-ubuntu:~/tmp_test$./a.outa.txtb.txt
echo1.1.1.1>>b.txt
echo2.2.2.2>>b.txt
echoipok:www.baidu.com>>b.txt
echo3.3.3.3>>b.txt
echo4.4.4.4>>b.txt
ubuntu@VM-0-13-ubuntu:~/tmp_test$
ubuntu@VM-0-13-ubuntu:~/tmp_test$
ubuntu@VM-0-13-ubuntu:~/tmp_test$
ubuntu@VM-0-13-ubuntu:~/tmp_test$
ubuntu@VM-0-13-ubuntu:~/tmp_test$
ubuntu@VM-0-13-ubuntu:~/tmp_test$catb.txt
1.1.1.1
2.2.2.2
ipok:www.baidu.com
3.3.3.3
4.4.4.4
ubuntu@VM-0-13-ubuntu:~/tmp_test$总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对毛票票的支持。如果你想了解更多相关内容请查看下面相关链接
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。