首先明白ping是通过网络层的 ICMP协议发送数据包至对方主机并且对方回包才能ping通的 首先发送ICMP前 我们并不知道对方主机的网卡地址(MAC)我们需要用ARP广播通过路由得到对方的MAC然后再传递ICMP
传递的ICMP报头包括IP报头
代码步骤如下
1.创建原始套接字用来发送ICMP
2.创建双线程分别为发送ICMP以及接受ICMP
3.发送ICMP前要设置报头内容以及校验码
ICMP_ECHO = 8是发送请求的类型
计算校验码
4.接受对方的ICMP包利用select或者epoll来获取描述符数量
5.若描述符数量大于0则用recv函数接收数据包
6.解包判断是否为ICMP包
7.关闭线程关闭套接字