首先明白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.关闭线程关闭套接字
本文详细阐述了ping命令的工作原理,涉及ICMP协议的使用、ARP广播获取MAC地址、ICMP报头设置、双线程编程实现及数据包接收和解析的过程。适合理解网络通信机制的读者。

2120

被折叠的 条评论
为什么被折叠?



