CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

请教如何用C语言实现tracert命令

楼主greenlake()2005-04-02 19:28:41 在 C/C++ / C语言 提问

请教一下高手如何用C语言实现tracert命令,并能在linux下用gcc编译实现。 问题点数:0、回复次数:2Top

1 楼fancyf(凡瑞)回复于 2005-04-02 20:36:32 得分 0

tracert的原理就是发送不同TTL的数据包到目标网址,当经过路由器TTL应该至少减一,TTL减为零时路由器会向发送源传递相应的数据包,就是根据这个数据包来取得这个路由器的IP。因此只要从1开始设定不同的TTL向目标发送数据包,接收发回来的数据包,直到到达目的地就可以了Top

2 楼szwpc(风色鸟)回复于 2005-04-03 21:08:00 得分 0

哈哈,具体怎么实现,我也不怎么懂。帮你顶一下吧。外加放点东西吧。  
   
  当路由器收到一个IP包时,会修改IP包的TTL(及由此造成的头部检验和checksum变化)。  
  每收到一个包,检查这个的TTL是否是0或1。如果是,表明这个包还没有到达目的地,而且剩余时间不多了,肯定是到不了目的地了。这样路由器就简单地丢弃这个包,并给源主机发送   ICMP通知,说这个包已经超时了。  
  ICMP的通知信息里包含当前路由器发送时所用的IP。  
   
  根据上述原理,就可以通过构造数据包,来间接检查到达一个主机时经过了哪些路由。  
  一开始发送一个TTL为1的包,这样到达第一个路由器的时候就已经超时了,第一个路由器就发通知说包超时,这样就可以记录下所经过的第一个路由器的IP。  
  然后TTL加1,安全通过第一个路由器,而第二个路由器的的处理与第一个相同,丢包,发通知说包超时了,这样记录下第二个路由器IP。  
  由此可以一直进行下去,直到这个数据包到达目标主机,由此打印出所有经过的路由器。  
   
  在通信中,IP层只负责数据的路由与传输,并不处理数据包的内容。  
  例如ICMP,或TCP,UDP,这些协议是依赖IP层的传输功能来传送数据的。  
  在通信双方的主机中,收到这些协议的数据包后,一般在通信的对应主机上,会有程序来处理这些数据。  
  而直接的IP数据报是没有用处的。  
  因此traceroute程序发送一个UDP包来试探。  
  对路由器来说,UDP数据报只是IP数据报的一种,它并不关心UDP数据报的具体内容。  
  直到这个包到达目的端的主机,目的主机的内核会解析UDP数据报,并查找数据报中要求端口是否已经有进程在使用。  
  如果找到,则通知进程有数据到达。而如果找不到,则发送一个“目的端口不可达”的ICMP错误数据回到源主机。  
   
  这样就可以完全确定下来:trcertroute建立一个UDP数据包,不断修改TTL值并发送出去。  
  如果收到“超时错”,表示刚刚到达的是路由器,而如果收到的是“端口不可达”错误,表示刚刚到达的就是目的主机。这样路由跟踪完成,程序结束。  
  Top

相关问题

  • 如何在c语言的程序里嵌入Dos命令
  • 请问如何在C语言中调用DOS命令?
  • 怎样在c语言里调用dos命令????
  • c语言中往打印机打印的命令是什么?
  • 如何在C语言中运行DOS命令?
  • linux下如何用c语言调用shell命令
  • 大家认为《C++ 语言命令详解(第二版)》这本书怎么样?
  • 请问VB中如何实现C语言中的位移命令 >> 和<<
  • 请问,用C语言(是C语言)编的程序,可否在win2000下的命令提示符方式中对com1,2进行控制???
  • 哪儿有关于发送mail的c语言命令行程序源码?smtp pop3 等

关键词

  • 路由器
  • 主机
  • 数据
  • ip
  • 端口
  • 通信
  • 数据包
  • 超时
  • 到达
  • ttl

得分解答快速导航

  • 帖主:greenlake

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo