最近做项目,相机和plc的连接有时候会突然中断,搜寻了下,找到一个可用的检查 某ip是否可以连通的函数。需要调用icmp.dll

ping.h

icmp.dll下载点这里

#pragma once
#include <Winsock2.h>
#include "iphlpapi.h"
#include<tchar.h>#pragma comment(lib,"Iphlpapi.lib")
#pragma comment(lib,"Ws2_32.lib")
typedef HANDLE(WINAPI* ICMPCREATEFILE)(VOID);
typedef INT(WINAPI* ICMPCLOSEHANDLE)(HANDLE);
typedef DWORD(WINAPI* ICMPSENDECHO)(HANDLE, DWORD, LPVOID, WORD, PIP_OPTION_INFORMATION, LPVOID, DWORD, DWORD);//定义三个指针函数
ICMPCREATEFILE pIcmpCreateFile;
ICMPCLOSEHANDLE pIcmpCloseHandle;
ICMPSENDECHO pIcmpSendEcho;
// 函数功能:初始化ICMP函数:
BOOL InitIcmp()
{HINSTANCE hIcmp = LoadLibrary(_T("ICMP.DLL"));if (hIcmp == NULL){return false;}pIcmpCreateFile = (ICMPCREATEFILE)GetProcAddress(hIcmp, "IcmpCreateFile");pIcmpCloseHandle = (ICMPCLOSEHANDLE)GetProcAddress(hIcmp, "IcmpCloseHandle");pIcmpSendEcho = (ICMPSENDECHO)GetProcAddress(hIcmp, "IcmpSendEcho");if ((pIcmpCreateFile == NULL) || (pIcmpCloseHandle == NULL) || (pIcmpSendEcho == NULL))return false;return true;
}// 函数功能:判断是否能ping通IP
// 函数参数:IP地址或域名
INT ICMPPing(char* host)
{DWORD timeOut = 1000;                                              //设置超时   ULONG hAddr = inet_addr(host);                                     //如果是IP地址就直接转换   if (hAddr == INADDR_NONE){hostent* hp = gethostbyname(host);                             //如果是域名就用DNS解析出IP地址   if (hp)memcpy(&hAddr, hp->h_addr_list, hp->h_length);             //IP地址   else{return 0;}}HANDLE hIp = pIcmpCreateFile();IP_OPTION_INFORMATION ipoi;memset(&ipoi, 0, sizeof(IP_OPTION_INFORMATION));ipoi.Ttl = 128;                  //Time-To-Live   unsigned char pSend[36];                                                                   //发送包   memset(pSend, 'E', 32);int repSize = sizeof(ICMP_ECHO_REPLY) + 32;unsigned char pReply[100];                                                                 //接收包   ICMP_ECHO_REPLY* pEchoReply = (ICMP_ECHO_REPLY*)pReply;DWORD nPackets = pIcmpSendEcho(hIp, hAddr, pSend, 32, &ipoi, pReply, repSize, timeOut);             //发送ICMP数据报文   if (pEchoReply->Status != 0)                                                                  //超时,可能是主机禁用了ICMP 或者目标主机不存在  {pIcmpCloseHandle(hIp);return 0;}pIcmpCloseHandle(hIp);return 1;
}

调用

#include"ping.h"
//…//ready for ping test
InitIcmp();int ping2C = ICMPPing("192.168.1.3"); // 0 fail, 1 yes

C++检测是否ip能够ping通相关推荐

  1. python判断ip能否ping通_Python实现检测服务器是否可以ping通的2种方法

    好想在2014结束前再赶出个10篇博文来,~(>_ python检测服务器是否ping通的2种方法 1.第一种比较挫,就是用ping,python调用shell,这个适用于较少的服务器数量,几百 ...

  2. VB 判断IP能否ping通

    窗体代码: '测试 Private Sub Form_Load()     If PingIP("122.22.255.255") Then         MsgBox &quo ...

  3. 银河麒麟服务器系统ip可ping通,但是tongweb的默认端口9060、8088不能访问,访问提示404

    问题现象:​银河麒麟服务器系统ip可ping通,但是tongweb的默认端口9060.8088不能访问,访问tongweb应用端口 http://192.168.0.49:9060/console以及 ...

  4. win10能够正常访问网站、ip正常ping通,但是ping域名显示”请求找不到主机......“

    win10能够正常访问网站.ip正常ping通,但是ping域名显示"请求找不到主机-" 1.问题描述 在使用wireshark分析数据包的时候,想要通过ping命令查看域名的ip ...

  5. 银河麒麟服务器系统ip可ping通,但是web的默认端口8080不能访问

    问题现象:​银河麒麟服务器系统ip可ping通,但是端口8080不能访问, 处理思路:问题解决思路:ip能ping通考虑端是否开放,端口是否开放与防火墙的设置有关系,具体步骤如下所示: 检查系统防火墙 ...

  6. 如何解决IP能ping通但无法上网的问题?

    当我们在网络环境中遇到无法上网的问题时,可能会尝试使用ping命令来测试网络连接是否正常.如果ping测试成功,说明我们的IP地址能够和网络中其他设备进行通信,但是无法上网.这种情况下,我们需要采取一 ...

  7. 物理机与虚拟机IP互ping通,而互ping主机名不通

    问题描述: 虚拟机信息: VMware-workstation 10 安装RHEL5.8操作系统.hostname:rhel201.com IP:192.168.1.201 物理机系统:windows ...

  8. python判断ip能否ping通_使用Python测试Ping主机IP和某端口是否开放的实例

    使用Python方法 比用各种命令方便,可以设置超时时间,到底通不通,端口是否开放一眼能看出来. 命令和返回 完整权限,可以ping通,端口开放,结果如下: 无root权限(省略了ping),端口开放 ...

  9. ESXI上的新建虚机绑定已使用过的静态ip无法ping通网关的奇怪现象

    今儿删除掉一台虚拟机并重建后继续使用其旧的ip作为静态ip,出现无法ping通网关的现象(而换其他的ip就没问题): 开始想是不是网卡有问题?更换了,还是一如既往的不行! 百度半天,捣鼓半天还是没解决 ...

最新文章

  1. OKR 落地需要相关工具的辅助吗?
  2. R语言使用magick包的image_border函数和image_background函数自定义图像的边界和背景(Change image border and background)
  3. Vue中正确使用jQuery的方法
  4. python中的__call__和__repr__魔术方法
  5. oracle set feedback off,Oracle数据库之Oracle导出数据中的prompt,set feedback 等是什么意思...
  6. .NET Core容器化@Docker
  7. Eight Machine Learning JavaScript Frameworks to Explore
  8. 在.net中加载dll的一种错误问题原因及处理
  9. ASP.NET MVC涉及到的5个同步与异步,你是否傻傻分不清楚?[上篇]
  10. memcache面试
  11. python发布_python如何发布模块
  12. JVM 内存设置大小
  13. html语言标记滚动字幕,网页滚动文字的制作HTML代码
  14. 算法分析与设计实验报告——实现哈夫曼编码
  15. html表格的基础知识及源代码-尚硅谷
  16. 冰点还原精灵如何卸载
  17. 手串 如何挑选手串 什么是小叶紫檀?小叶紫檀怎么保养 小叶紫檀怎么盘法
  18. docker超强总结,docker这一篇就够了
  19. 揭开手机app中摇一摇的神秘面纱
  20. vs2022 c#调用interop.word 12.0版本也就是word2007实现首行缩进两个字符

热门文章

  1. 【Springboot】Json转换工具
  2. Java毕业设计——>Thymeleaf+SpringBoot+Mybatis实现的齐贤易游网旅游信息管理系统
  3. uni-app分割线微信小程序端不显示
  4. 微信小程序图片文字水平垂直居中对齐
  5. 互斥锁解决缓存雪崩问题(二)
  6. 切版练习笔记(三) - 制作人员介绍卡片
  7. ggplot2(三)|coord 系列函数坐标轴转换
  8. 百度BML飞桨训练营(六)公共场所火焰烟雾检测--PP-YOLOv2算法
  9. 速卖通产品编辑中使用html,速卖通多语言编辑发布产品怎么做?
  10. 【代谢组学入门1】学习资源收集