一个是Raw Ping,顾名思义,就是没有调用微软自带的IcmpSendEcho等函数完全使用Socket API进行Ping的程序。
程序先动态生成IP头+ICMP头,其中调用了GetTickCount函数作为ICMP_ECHO请求数据包的发送时间戳来获取远程计算机响应的时间,更附带了IP和ICMP校验和的VB版计算方法。
另外一个是路由跟踪,类似于tracert这个cmd命令,可以获取从本地计算机发送数据包之后经过了哪些路由器,并将这些路由器的IP一一显示出来(现在的路由器一般都设置了忽略Ping数据包,所以效果不太理想),原理和Raw Ping类似,只是利用了IP头部中的TTL成员的特性,每经过一个路由器则路由器自动把TTL减一,直到TTL变为0时发送回应给源计算机(具体请参考这里:http://baike.baidu.com/view/2696.htm)。另外也需要注意路由器的MTU设置不可过大(具体请参考这里:http://baike.baidu.com/view/26974.htm)