Traceroute test program implement

traceroute 通过逐渐变更的TTL值发送UDP包(我见busybox 也有icmp 类型的),然后等待ttl 值变为0的那一跳回复icmp time exceeded 包来测试网络的连通性。首先,traceroute送出一个TTL是1的IP数据包到目的地,当路径上的第一个路由器收到IP数据包时,将TTL减1。此时,TTL变为0,所以将该路由器会将此IP数据包丢掉,并返回一个ICMP time exceeded数据包,当traceroute收到这个消息后,接着继续发生TTL为2的IP数据包给第二个路由器。以此类推,直到IP数据包达到最后一台路由器时,会返回一个ICMP echo reply 或者 地址不可达的数据包。我们通过建立原始套接字来接收返回的icmp 数据包,然后通过解析数据包的字段,析出地址,然后给出连通性的信息。

以下代码存储测试,写完可以跑了就没理了,没考虑过释放内存,关闭套接字等一系列细节,就一测试程序,跑完就结束了。