traceroute端口,tracert 带端口号

http://www.itjxue.com  2023-01-12 20:09  来源:未知  点击次数: 

【traceroute】关于traceroute(路由追踪)的原理分析

traceroute 主要利用 IP 数据包的 TTL 字段值 + ICMP 来实现,它发送的用于探测网络路径的数据包的 IP 之上的协议可以是 UDP、TCP或ICMP。

协议表示该数据报文所携带的数据所使用的协议类型,占 8 位。

该字段可以方便目的主机的 IP 层知道按照什么协议来处理数据部分。不同的协议有专门不同的协议号。

例如,TCP 的协议号为 6,UDP 的协议号为 17,ICMP 的协议号为 1。

不同模式下,探测过程中设计的数据包如下:

UDP 探测数据包(目标端口大于 30000) + 中间网关发回 ICMP TTL 超时数据包 + 目标主机发回 ICMP Destination Unreachable 数据包

TCP [SYN] 探测数据包(默认目标端口为 80) + 中间网关发回 ICMP TTL 超时数据包 + 目标主机发回 TCP [SYN ACK] 数据包

ICMP Echo (ping) Request 探测数据包 + 中间网关发回 ICMP TTL 超时数据包 + 目标主机发回 ICMP Echo (ping) reply 数据包

UDP 端口扫描比较麻烦,它同TCP不一样,因为它不需要建立连接。

我们向 目标主机 的固定端口发送UDP数据包,可以得到 两种结果:

在运营商的路由器上,UDP 与 ICMP 的待遇大不相同。

为了利于 troubleshooting,ICMP ECHO Request/Reply 是不会封的,而 UDP 则不同。

UDP 常被用来做网络攻击,因为 UDP 无需连接,因而没有任何状态约束它,比较方便攻击者伪造源 IP、伪造目的端口发送任意多的 UDP 包,长度自定义。

所以运营商为安全考虑,对于 UDP 端口常常采用白名单 ACL,就是只有 ACL 允许的端口才可以通过,没有明确允许的则统统丢弃。比如允许 DNS/DHCP/SNMP 等。

当网络工程师用Ping时,Ping在偷摸做啥事儿?

ping命令是依托于 ICMP协议的, ICMP协议的存在就是为了更高效的转发 IP数据报和提高交付成功的机会。

ping命令除了依托于 ICMP,在局域网下还要借助于 ARP协议, ARP协议能根据 IP地址反查出计算机的 MAC地址。

另外 ARP是有缓存的,为了保证 ARP的准确性,计算机会更新ARP缓存。

有时我们traceroute 一台主机时,会看到有一些行是以星号表示的。

出现这样的情况,可能是防火墙封掉了ICMP的返回信息,所以我们得不到什么相关的数据包返回数据。

有些路由器会隐藏的自己的位置,不让ICMP Timeout的消息通过,结果就是在那一跳上始终会显示星号。此外服务器也可以伪造traceroute路径的,不过一般应用服务器也没有理由这么做,所以Traceroute的结果还是能够为网络分析提供一些参考的。

Linux下traceroute程序默认发送的探测包为UDP协议,windows下tracert、mtr,以及Linux下mtr默认都发送的是icmp的数据包,并不是所有网关都会如实返回 ICMP 超时报文。处于安全性考虑,大多数防火墙以及启用了防火墙功能的路由器缺省配置为不返回各种 ICMP 报文,其余路由器或交换机也可能被管理员主动修改配置变为不返回 ICMP 报文。因此 Traceroute 程序不一定能拿到所有的沿途网关地址。所以,当某个 TTL 值的数据包得不到响应时,并不能停止这一追踪过程,程序仍然会把 TTL 递增而发出下一个数据包。这个过程将一直持续到数据包发送到目标主机,或者达到默认或用参数指定的追踪限制(maximum_hops 默认最大为30)才结束追踪

如果在局域网中的不同网段之间,我们可以通过traceroute 来排查问题所在,是主机的问题还是网关的问题。

如果我们通过远程来访问某台服务器遇到问题时,我们用到traceroute 追踪数据包所经过的网关,提交IDC服务商,也有助于解决问题;但目前看来在国内解决这样的问题是比较困难的,就是我们发现问题所在,IDC服务商也不可能帮助我们解决。

动态图解traceroute(路由追踪)的原理与实现

IP数据报格式详解

解析为何traceroute探测的时候中间有些节点探测不到?

traceroute使用与实现原理分析

traceroute(路由追踪)的原理及实现

为什么目标地址ping能通,但是tracetoute不通?

只会用ping测试网络通不通?高级网工还会这么用

当网络工程师用Ping时,Ping在偷摸做啥事儿?

traceroute原理

TCP/UDP/ICMP Traceroute的原理及区别

端口可用性探测工具traceroute

本文主要介绍使用ping命令正常但端口不通时如何进行端口可用性探测。

当客户端访问目标服务器时,如果能ping通,但业务端口无法访问,可能是链路中的相关节点拦截了端口所致。您可以参考如下内容,利用端口可用性探测的相关工具进行测试,验证是否有节点拦截了端口。

traceroute用于端口可用性探测的常用命令如下。

注:

-n:直接使用IP地址而非主机名称(禁用DNS反查)。

-T:通过TCP探测。

-p:设置探测的端口号。

[ Host]:需要探测的目标服务器地址,比如“10.10.1.1”。

更多关于traceroute的用法,您可以通过man命令查阅。

示例

traceroute的示例命令和返回结果如下。

参考:

能够ping通服务器的同时端口不通

Linux系统中traceroute命令使用详解

Linux系统中traceroute命令可以追踪到网络数据包的路由途径。下面由我为大家整理了linux系统中traceroute命令使用详解,希望对大家有帮助!

Linux系统中traceroute命令使用详解

1.命令格式:

traceroute[参数] [主机]

2.命令功能:

traceroute 指令让你追踪网络数据包的路由途径,预设数据包大小是40 Bytes, 用户可另行设置。

具体参数格式:traceroute [-dFlnrvx] [-f存活数值] [-g网关][-i网络界面][-m存活数值][-p通信端口][-s来源地址][-t服务类型][-w超时秒数][主机名称或IP地址][数据包大小]

3.命令参数

-d使用socket 层级的排错功能

-f设置第一个检测数据包的存活数值TTL的大小

-F设置勿离段位 ----我也不知道啥是勿离段位,查了下没查到什么信息^^

-g设置来源路由网关,最多可设置8个

-i使用指定的网络界面送出数据包

-I使用ICMP回应取代UDP资料信息

-m设置检测数据包的最大存活数值TTL 的大小

-n直接使用IP地址而非主机名称

-p设置UDP传输协议的通信端口

-r忽略普通的routing table ,直接将数据包送到远端主机上

-s设置本地主机送出数据包的IP地址

-t设置检测数据包的TOS数值

-v详细显示指令的执行过程

-w设置等待远端主机回报的时间

-x开启或关闭数据包的正确性检验

linux系统中traceroute命令实例

实例1:traceroute 用法简单,最常用的用法

命令:traceroute

说明:

记录按序列号从1开始,每个记录就是一跳,每跳表示一个网关,我们看到每行有三个时间,单位是 ms,其实就是 -q 的默认参数。探测数据包向每个网关发送三个数据包后,网关响应后返回的时间;如果您用 traceroute -q 4 , 表示向每个网关发送4个数据包

有时我们 traceroute 一台主机时,会看到有一些行是以星号表示的。出现这种情况,可能是防火墙封掉了 ICMP的返回信息,所以我们得不到什么相关的数据包返回数据。

有时我们在某一网关处延时比较长,有可能是某台网关比较阻塞,也可能是物理设备本身的原因,当然如果某台DNS出现问题时,不能解析主机名、域名时,也会有延时长的现象;您可以加 -n 参数来避免DNS 解析,以 IP格式 输出数据。

如果在局域网中的不同网段之间,我们可以通过 traceroute 来排查问题所在,是主机的问题还是网关的问题。如果我们通过远程来访问某台服务器遇到问题时,我们用到 traceroute 追踪数据包所经过的网关,提交 IDC 服务商,也有助于解决问题;但目前看来国内解决这样的问题是比较困难的,就是我们发现问题所在,IDC服务商也不可能帮助我们解决。

实例2:跳数设置

命令:

traceroute -m 10

实例3:只显示IP 地址,不查主机名DNS

命令:traceroute -n

实例4:探测包使用的基本UDP端口设置6888

命令:traceroute -p 6888

实例5:把探测包的个数设置为4个

命令:traceroute -q 4

实例6:绕过正常的路由表,直接发送到网络相连的主机

命令:traceroute -r

实例7:把对外发探测包的等待响应时间设置为3秒

命令:traceroute -w 3

补充:linux系统中traceroute 的工作原理

traceroute 程序的设计是利用 ICMP 及IP header 的TTL(time to live)栏位(field)。首先,traceroute 送出一个 TTL 是1 的IP datagram(每次送的的是3个 40字节的包,包括源地址,目的地址和包发出的时间标签)到目的地,当路径上的第一个路由器(router)收到这个 datagram 时,它将TTL减少 1,此时,TTL变为0了,所以该路径会将次 datagram 丢掉,并送回一个 【ICMP time exceeded】消息,traceroute 收到这个消息后,便知道这个路由器存在于这个路径上,接着traceroute 再送出另一个 TTL为 2 的 datagram ,发现第二个路由器,然后一直重复执行这种操作,直到某个datagram 抵达目的地。

在traceroute 送出 UDP datagram 到目的地时,它所选择送达的 port number 是一个一般应用程序都不会用的号码,所以当此UDP datagram到达目的地后该主机会送回一个 ICMP port unreachable 的消息,而当traceroute 收到这个消息时,便知道目的地已经到达,所以 traceroute 在 server 端也就没有所谓的 daemon 程式。

traceroute 通过计算 ICMP TTL 到期消息设备的IP 地址并做域名解析。每次,traceroute 都打印出一系列数据,包括所经过的路由设备的域名及 IP 地址,三个包每次来回所花时间。

traceroute和tracert的区别是什么?

您好,很高兴为您解答。\x0d\x0a\x0d\x0a一、应用环境不同\x0d\x0a\x0d\x0atracert是应用在windows下。\x0d\x0a\x0d\x0atraceroute则是应用在linux/BSD/router/UNIX下。 \x0d\x0a\x0d\x0atracert是Windows下常用的命令行工具,UNIX下的是traceroute。都是基于UDP协议的路由探测。\x0d\x0aTracert(跟踪路由)是路由跟踪实用程序,用于确定 \x0d\x0aIP 数据报访问目标所采取的路径。Tracert 命令用 IP 生存时间 (TTL) 字段和 ICMP 错误消息来确定从一个主机到网络上其他主机的路由。\x0d\x0a工作原理和过程:\x0d\x0a通过向目标发送不同 \x0d\x0aIP 生存时间 (TTL) 值的“Internet 控制消息协议 (ICMP)”回应数据包,Tracert \x0d\x0a诊断程序确定到目标所采取的路由。要求路径上的每个路由器在转发数据包之前至少将数据包上的 TTL 递减 1。数据包上的 TTL 减为 0 \x0d\x0a时,路由器应该将“ICMP 已超时”的消息发回源系统。 \x0d\x0aTracert \x0d\x0a先发送 TTL 为 1 的回应数据包,并在随后的每次发送过程将 TTL 递增 1,直到目标响应或 TTL \x0d\x0a达到最大值,从而确定路由。通过检查中间路由器发回的“ICMP 已超时”的消息确定路由。某些路由器不经询问直接丢弃 TTL 过期的数据包,这在 Tracert \x0d\x0a实用程序中看不到。 \x0d\x0aTracert \x0d\x0a命令按顺序打印出返回“ICMP 已超时”消息的路径中的近端路由器接口列表。如果使用 -d 选项,则 Tracert 实用程序不在每个 IP 地址上查询 \x0d\x0aDNS。 \x0d\x0a\x0d\x0a\x0d\x0aTraceroute程序的设计是利用ICMP及IP \x0d\x0aheader的TTL(Time To Live)栏位(field)。首先,traceroute送出一个TTL是1的IP \x0d\x0adatagram(其实,每次送出的为3个40字节的包,包括源地址,目的地址和包发出的时间标签)到目的地,当路径上的第一个路由器(router)收到这个datagram时,它将TTL减1。此时,TTL变为0了,所以该路由器会将此datagram丢掉,并送回一个「ICMP \x0d\x0atime exceeded」消息(包括发IP包的源地址,IP包的所有内容及路由器的IP地址),traceroute \x0d\x0a收到这个消息后,便知道这个路由器存在于这个路径上,接着traceroute 再送出另一个TTL是2 的datagram,发现第2 个路由器...... \x0d\x0atraceroute 每次将送出的datagram的TTL 加1来发现另一个路由器,这个重复的动作一直持续到某个datagram \x0d\x0a抵达目的地。当datagram到达目的地后,该主机并不会送回ICMP time \x0d\x0aexceeded消息,因为它已是目的地了,那么traceroute如何得知目的地到达了呢?\x0d\x0aTraceroute在送出UDP \x0d\x0adatagrams到目的地时,它所选择送达的port number 是一个一般应用程序都不会用的号码(30000 以上),所以当此UDP datagram \x0d\x0a到达目的地后该主机会送回一个「ICMP port unreachable」的消息,而当traceroute \x0d\x0a收到这个消息时,便知道目的地已经到达了。所以traceroute 在Server端也是没有所谓的Daemon 程式。\x0d\x0aTraceroute提取发 \x0d\x0aICMP TTL到期消息设备的IP地址并作域名解析。每次,Traceroute都打印出一系列数据,包括所经过的路由设备的域名及 \x0d\x0aIP地址,三个包每次来回所花时间。\x0d\x0aTraceroute \x0d\x0a有一个固定的时间等待响应(ICMP TTL到期消息)。如果这个时间过了,它将打印出一系列的*号表明:在这个路径上,这个设备不能在给定的时间内发出ICMP \x0d\x0aTTL到期消息的响应。然后,Traceroute给TTL记数器加1,继续进行。\x0d\x0a\x0d\x0a二、探测方法及探测的数据类型不同\x0d\x0a\x0d\x0a默认情况下,tracert是向目的地址发出ICMP请求回显数据包,而traceroute是向目的地址的某个端口(大于30000)发送UDP数据报。\x0d\x0a\x0d\x0a如若满意,请点击右侧【采纳答案】,如若还有问题,请点击【追问】\x0d\x0a\x0d\x0a希望我的回答对您有所帮助,望采纳!\x0d\x0a\x0d\x0a ~ O(∩_∩)O~

(责任编辑:IT教学网)

更多

相关免费资源文章

推荐免费资源文章