网络编程培训之七 实现Traceroute

本文详细介绍了Traceroute的工作原理和实现过程,包括TTL的递增、ICMP超时与端口不可达报文的处理。通过编程实现Traceroute的基本功能,解析ICMP消息,跟踪数据包在网络中的路由。提供了参考资料链接和GitHub代码仓库以供深入学习。
摘要由CSDN通过智能技术生成

系列博客参考:http://blog.csdn.net/zy416548283/article/category/1108400
代码以编号对应放在Github上:https://github.com/zy416548283/networkProgramming

题目

编程实现Traceroute的基本功能

题目解读

  • 首先了解traceroute的基本用法和功能,我们来man一下:
traceroute  tracks  the route packets taken from an IP network on their way to a given host.
It utilizes the IP protocol's time to  live  (TTL) field  and  attempts to elicit an ICMP TIME_EXCEEDED response from each gateway along the path to the host.
  • 了解traceroute的实现原理,可以参考[TCP/IP详解 卷一]
  • 根据原理,编程实现traceroute

实现

原理

traceroute一开始向目的地发送一个TTL为1的UDP数据报,这个数据报在第一跳路由器返回一个超时的ICMP报文,并丢弃该报文.发送方解析这个ICMP报文(每个进程都会从内核收到一个消息的副本),如果是超时ICMP消息,将递增TTL一次,直到到达目标主机,此时目标主机会回复一个端口不可达的ICMP报文(发送的UDP报文会选择端口比较大,并且变化的端口),发送方解析ICMP端口不可达报文,打印对应的数据.

主流程

  • 处理命令行参数/处理主机名或者IP地址;
  • 做一些初始化工作;
  • 进入循环

循环

  • 创建两个套接字:一个原始套接字用于读取返送的ICMP消息;另外一个套接字用于发送探测分组的UDP套接字;
  • 对TTL进行循环递增直到TTL达到最大或者到达目的地, 并且对于每个TTL发送3个UDP数据报的探测分组. 发送一个探测分组之后等待3秒钟来接收ICMP消息,然后才发送下一个探测分组.
  • 关于没有收到ICMP回应报文的情况,这样处理:
if ( (code = (*pr->recv)(seq, &tvrecv)) == -3)
    
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值