C++实现仅判断 ip是否可访问的 ping (win32/Linux)

本文介绍了使用C++实现一个简单的ping功能,基于ICMP协议的type=8和code=0进行请求回显。通过检查回显响应的ICMP包来判断IP是否可达。文中还提到了IP协议头的常见长度,并提供了相关测试信息。
摘要由CSDN通过智能技术生成

C++实现简易的 ping

ping 的实现

  • ping 是基于 ICMP 协议实现的,而 ICMP 协议又是基于 IP 协议实现的(ICMP作为IP协议的数据部分传输)
  • ping 通过 ICMP 协议中的 type=8 和 code=0 来实现的,这个 type 和 code 的组合在 ICMP 协议中表示请求回显。如果能正常回显,那么返回的 ICMP 协议包中的类型是类型0,表示回显成功。
  • IP 协议的头部一般为 20 个字节

更多细节请看:
聊聊实现C++跨平台ping函数及ICMP请求回显数据包解析

demo

#ifdef _WIN32
#include <WinSock2.h>
#pragma comment(lib, "WS2_32")

struct WindowsSocketLibInit
{
   
    WindowsSocketLibInit()
    {
   
        WSADATA wsaData;
        WORD sockVersion = MAKEWORD(2, 2);
        WSAStartup(sockVersion, &wsaData);
    }
    ~WindowsSocketLibInit()
    {
   
        WSACleanup();
    }
} INITSOCKETGLOBALVARIABLE;
#else
#include <unistd.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <arpa/inet.h>
#include <ctime>
#include <cstdlib>
#include <cstdint>
#include <cstring>
#endif

#include <string>
#include <limits>

short getChecksum(unsigned short 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值