当前位置: 首页 > news >正文

traceroute原理探究

文章中有截图,看不清的话,可以把浏览器显示比例放大到200%后观看。

linux下traceroute的原理

本文通过抓包观察一下linux下traceroute的原理

环境:一台嵌入式linux设备,内网ip是192.168.186.195,其上有192.168.202.1的ip地址。网关是192.168.186.1。外部公网ip一个乌班图设备,ip是221.5.87.66。在嵌入式上抓包,然后传出观察。

过程:

crt上运行tftp服务器。

cmd下验证

C:\Windows\System32>netstat  -ano  | findstr  :69  查看udp69端口是否打开?

  UDP    0.0.0.0:69             *:*                      27556(得到进程号是27556)

  UDP    [::]:69                *:*                      27556

C:\Windows\System32>tasklist  | findstr  27556  根据进程号查程序名

SecureCRT.exe     27556 Console      1     62,852 K

确定已经打开,文件保存目录事先已经设定好C:\Users\zy041\Desktop\seccrt\tftp\log。

已知设备的eth0口上联口192.168.186.195,gw是192.168.186.1

抓包~ # tcpdump  -i eth0  -w  trace2.pcap   host  221.5.87.66  or   icmp

tcpdump: WARNING: eth0: no IPv4 address assigned

tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes

另起一个ssh,执行traceroute

/mnt/userspace # traceroute  -w 1  -d  221.5.87.66  -w 1是超时等待时间是1秒,-d是不进行dns解析,这样可以提高回显时间。

traceroute to 221.5.87.66 (221.5.87.66), 30 hops max, 38 byte packets

 1  192.168.186.1 (192.168.186.1)  0.464 ms  0.293 ms  0.348 ms

 2  bogon (10.110.1.1)  1.224 ms  0.913 ms  0.957 ms

 3  10.0.64.1 (10.0.64.1)  5.988 ms  3.577 ms  3.588 ms

 4  123.139.2.33 (123.139.2.33)  3.980 ms  3.946 ms  3.903 ms

 5  *  *  221.11.0.2 (221.11.0.2)  4.460 ms

 6  221.11.0.153 (221.11.0.153)  6.493 ms  *  *

 7  *  *  *

 8  112.96.0.198 (112.96.0.198)  44.014 ms  43.995 ms  43.515 ms

 9  120.80.209.146 (120.80.209.146)  40.623 ms  40.636 ms  40.358 ms

10  221.5.87.66 (221.5.87.66)  40.255 ms  39.971 ms  39.960 ms

如图,经过10次到达目的ip221.5.87.66。

停止抓包

~ # tcpdump  -i eth0  -w  trace2.pcap   host  221.5.87.66  or   icmp

tcpdump: WARNING: eth0: no IPv4 address assigned

tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes

^C60 packets captured   ctrl+c结束抓包

60 packets received by filter

0 packets dropped by kernel

~ # tftp  -pl  trace2.pcap  192.168.186.118  传出文件

trace2.pcap          100% |***************************************************************|  5515   0:00:00 ETA

打开观察:

同一ip发来的ttl exceeded三次,判断可能这个ip收到ttl=1的udp包三次,所以wireshark里添加ttl项

找到ip层的ttl项,增加为列

可以看到,ttl为1-10的包,每个ttl取值发了三次,udp的目的端口每发一次+1,因为ttl exceeded消息,回携带部分收到的ttl=1的包,因为发的是udp消息,所以ip层的ttl=1,而这个ttl exceeed消息因为设备不同,ttl原始值有的是255,有的是128,有的是64,所以经过对应节点后,减1后取值不同。

看最后,ttl=10时,到达目的ip,由目的ip 221.5.87.66发出目的端口不可达(目的端口未打开这个端口),所以源设备收到目的设备ip发出目的端口不可达认为已经到达对方设备,停止发出udp包。

由此,traceroute的原理是发出udp包,ttl从1开始,每个ttl值发三次,udp的目的端口有一个基础值,每发一包,端口+1,记录ttl exceed消息的ip为经过节点ip,在收到目的发出目的端口不可达消息后,认为到达目的设备,停止命令。

http://www.lryc.cn/news/520640.html

相关文章:

  • 50_Lua垃圾回收
  • Git-2-:Cherry-Pick 的使用场景及使用流程
  • 【C++】21.map和set的使用
  • burpsiute的基础使用(2)
  • ElasticSearch 同义词匹配
  • linux RT-Preempt spin lock实现
  • PySpark广播表连接解决数据倾斜的完整案例
  • Chromium CDP 开发(十二):为自己的Domain建立custom_config.json
  • 【Vue】全局/局部组件使用流程(Vue2为例)
  • Vue.js组件开发详解
  • 解决:ubuntu22.04中IsaacGymEnv保存视频报错的问题
  • 深度学习camp-第J7周:对于ResNeXt-50算法的思考
  • java: 错误: 无效的源发行版:17解决办法
  • Docker 安装开源的IT资产管理系统Snipe-IT
  • Go语言封装加解密包(AES/DES/RSA)
  • sql server 对 nvarchar 类型的列进行 SUM() 运算
  • java中json字符串键值获取
  • MPLS原理及配置
  • 口碑很好的国产LDO芯片,有哪些?
  • 【流程设计】类似钉钉的流程设计功能样式demo
  • ChatGPT入门之文本情绪识别:先了解LSTM如何处理文字序列
  • 测试开发之面试宝典
  • 399. 除法求值【 力扣(LeetCode) 】
  • 算法日记1:洛谷p2678跳石头(二分答案)
  • Unity shader中真的可以动态关闭Stencil Test吗?
  • YOLOv9改进,YOLOv9自研检测头融合HyCTAS的Self_Attention自注意力机制,2024,适合目标检测、分割任务
  • 计算机网络 (36)TCP可靠传输的实现
  • Git版本控制 - 创建使用Repository
  • MySQL —— 在CentOS9下安装MySQL
  • LeetCode 热题 100_腐烂的橘子(52_994_中等_C++)(图;广度优先遍历(队列))