icmp协议_wireshark分析icmp协议常见范例

Wireshark分析icmp协议常见范例

目录

1 概述: 1

2 Icmp的结构: 1

3 Icmp的类别 2

3.1 icmp差错报文 3

3.2 icmp查询报文 3

4 Ping命令分析 3

5 Ping的几种情况: 6

5.1 没有出局路由 6

5.2 超时 7

6 tracert命令 8

7 pathping命令 12

8 Udp端口没有打开时,发出icmp端口不可达消息 13

9 Icmp路由重定向仿真 15

10 Tcp协议端口没有打开时,不发icmp消息,直接回rst消息 18

概述:

Icmp协议是工作在ip层的点到点内部传输协议,它传递差错报文以及其他需要注意的信息。ICMP 报文通常被 IP 层或更高层协议(如UDP)使用。ICMP 报文是在 IP 数据包内部传输的。IP 协议是不可靠协议,不能保证 IP 数据报能够成功的到达目的主机,无法进行差错控制,而 ICMP 协议能够协助 IP 协议完成这些功能。

0116f48accacb2edb63b5456b5b796b1.png

Icmp的结构:

在ip层之上,不含任何socket信息;

类型:一个 8 位类型字段,表示 ICMP 数据包类型;

代码:一个 8 位代码域,表示指定类型中的一个功能,如果一个类型中只有一种功能,代码域置为 0;

检验和:数据包中 ICMP 部分上的一个 16 位检验和;

数据:不同类型和代码数据不同。

20字节的ip层
8位类型8位代码16位校验和
不同类型和点码有不同的内容

以ping消息为例如下:

693b307158811eb35f4e029b10ac8a48.png

Ping消息data为一串源端发出数值串,对方响应要携带相同的数值串。

Icmp的类别

ICMP消息大体有两类:双向消息和单向消息。

双向消息,如常用的ping消息,用来测试网络的可达性。发起方是源设备,应答方是终端设备或者数据传输路径中的节点路由器。

单向消息一般为告警报错消息(type 3),或Redirect消息( type 5),由于单向的消息是通知源主机出错。发起方都是数据包经过节点路由器。

ICMP 报文大致可分为两类:差错报文、查询报文。主要消息类型如下表所示:

类型内容查询差错单向/双向
0回送应答双向
3目标不可达单向
4源抑制单向
5重定向单向
8回送请求双向
9路由器公告双向
10路由器请求双向
11超时单向
17地址掩码请求双向
18地址掩码应答双向

差错报文是单向的,查询报文是双向的。

icmp差错报文

以下针对 ICMP 差错报文的类型进行分析:

  1. ICMP 目标不可达消息:IP 路由器无法将 IP 数据报发送给目的地址时,会给发送端主机返回一个目标不可达 ICMP 消息,并在这个消息中显示不可达的具体原因。
  1. 2、ICMP 重定向消息:如果路由器发现发送端主机使用次优的路径发送数据时,那么它会返回一个 ICMP 重定向消息给这个主机,这个消息包含了最合适的路由信息和源数据。主要发生在路由器持有更好的路由信息的情况下,路由器会通过这个 ICMP 重定向消息给发送端主机一个更合适的发送路由。
  2. 3、ICMP 超时消息:IP 数据包中有一个字段 TTL(Time to live,生存周期),它的值随着每经过一个路由器就会减 1,直到减到 0 时该 IP 数据包被丢弃。此时,IP 路由器将发送一个 ICMP 超时消息给发送端主机,并通知该包已被丢弃。
  3. 4、源抑制消息:当 TCP/IP 主机发送数据到另一主机时,如果速度达到路由器或者链路的饱和状态,路由器发出一个 ICMP 源抑制消息。

icmp查询报文

----ICMP 回送消息:用于进行通信的主机或路由之间,判断发送数据包是否成功到达对端的消息。可以向对端主机发送回送请求消息,也可以接收对端主机回来的回送应答消息。

----ICMP 地址掩码消息:主要用于主机或路由想要了解子网掩码的情况。可以向那些主机或路由器发送 ICMP 地址掩码请求消息,然后通过接收 ICMP 地址掩码应答消息获取子网掩码信息。

----ICMP 时间戳消息:可以向那些主机或路由器发送 ICMP 时间戳请求消息,然后通过接收 ICMP 时间戳应答消息获取时间信息。

Ping命令分析

Ping命令正常情况下是icmp协议下的双向查询消息,用来测试两点之间的通信是否正常?通常主叫发出一串测试包,并携带对应id和序号,被测试方返回对应这串测试包,并携带正确的id和序号。

4f8b2b794610258466d09e2130e682d7.png

注意这里wireshark里显示的BE和LE为两种数据存储的方式时的值。物理上对应一段数据。

Request消息如上图:

6723b5287828414e5d1b686720d2e127.png

Reply消息如下:

b26a7f13be911c0b82e54275a39a80e0.png

同样下一个request消息id不变,序号递增

4efa1c19b82219f53fe51814dc363777.png

4140523552782519dd6e97d8be7b2229.png

Ping的几种情况:

没有出局路由

b09dafd02a32e1c1891fff2c9cf770d6.png

6b3206c5dcdf73b9c0fffc3816818911.png

如上图中没有对应的路由表项,没有出局可用电路时,显示传输失败。

超时

一般是ttl exceeded消息,经过网络节点收到ttl=1的包就会向源ip发出一个ttl exceeded消息。如果是内网ip,一般是路由环路问题。

下图:用192.168.205.201/24,网关192.168.205.1的ip去ping192.168.211.2

5247c07171bfacf4b56d9d18c2f25434.png

抓包后如下图:

5a4fb1f15610113198a6e4208aad6691.png

Tracert的结果:

c7f771233d1c843dc450ce9538aa4015.png

跟踪的结果三层交换机的对应vlan所属的端口down,导致直连路由消失,包在三层交换机192.168.212.2和路由器192.168.212.1间来回发送。直到路由器收到ttl=1的包。

7aa7830468691fba3517b2cd979bc886.png

6dfd40793d132327d37439065f4f7663.png

c688f263328f265db8af4dcac409ca4a.png

tracert命令

tracert 先发送 TTL 为 1 的回应数据包,当数据包上的 TTL在路由器收到后TTL自动减1 ,一旦某个路由器将TTL减1后,等于了0,路由器应该将“ICMP Time Exceeded”的消息发回源计算机,源计算机就根据收到的信息判断达到的路由器和所用时间。下次再次发送数据包时,将TTL递增 1,继续上述测试,直到目标响应或 TTL 达到最大值,从而确定路由。通过检查中间路由器发回的“ICMP 已超时”的消息确定路由。某些路由器不经询问直接丢弃 TTL过期的数据包,这在 Tracert 实用程序中看不到,我们会显示请求超时的请求信息。

请求消息会发三次(使用相同的ttl值),若没有reply消息返回,就把ttl加1,继续发出。直到最后终端的响应为止。

2fb5addac608f04d66cc0b2408625f27.png

过程如下:

7b2ac575e7660cc343c490bc4fb0bb69.png

15006654967f2ccf0ddb0113755a1e95.png

发出ping包,mac地址为网关地址,目的ip为117.23.6.86,ttl为1.每个ttl值发3遍。

0b72f3b7dfda9f156d0e5f2544d83523.png

收到路由器的icmp单向消息,ttl超出消息。

37ac3082c70e364dee24c832abab481d.png

f0c6db0687d072115d9f7afef091860b.png

57fa5384d7df6a461440a1f4c8b45f64.png

2196383c962332734e0cc1af3e7bf05b.png

2e9e11740bf0c9572bcc61d99b684c22.png

b80216d0d8908c38da024368a62548f0.png

cdf3d2fddcfd1dd87575dffaaab72181.png

pathping命令

和tracert类似,发出ping的request消息,但只发一次,收到ttl exceed消息后,ttl加1发出,当没有响应,没有收到ttl exceed时,停止发出ping的request消息,用此时最大的有效ttl值对几个记录的路由器ip进行测试。

Udp的端口不可达消息

3849a60d173ed6a84a4e5d378d216785.png

cd81fe3c7754360e4d80bf107aa67444.png

Udp端口没有打开时,发出icmp端口不可达消息

测试环境:iad向pc进行sip用户注册,默认端口是5060。Iad的ip是18.250.153,

Pc的ip是18.250.0.145

Iad的配置界面:

ef134bd3d06b73d6e88bbaed2b4b41d2.png

过程为:

fdbb7b01671abca7037b0c74fe9a8c71.png

Pc上端口显示如下

3e116b89e27c3ec2c1aef81876b8fe5f.png

8fae084ef4099ef05fcdeb311daef069.png

cdb856942e380120a9bba339375d9b19.png

udp端口没有打开,icmp层回端口不可达消息。

Icmp路由重定向仿真

ICMP重定向报文是ICMP控制报文中的一种。在特定的情况下,当路由器检测到一台机器使用非优化路由的时候,它会向该主机发送一个ICMP重定向报文,请求主机改变路由。路由器也会把初始数据包向它的目的地转发。

发生ICMP重定向通常有两种情况:

1)当路由器从某个接口收到数据还需要从相同接口转发该数据时;

2)当路由器从某个接口到发往远程网络的数据时发现源ip地址与下一跳属于同一网段时。

1c51d9fb720eaae19b70d916467457f7.png

A的mac地址44:37:e6:8c:94:27,B的mac地址44:37:e6:8e:cf:77

路由器的mac地址为70:ba:ef:e3:5e:12

B开始pingA后,流程如上图123,路由器给给1 发icmp路由重定向消息。抓包见下图:

dec33af20ffc849e6779f978d1cd1736.png

过程分析:

B的路由表如下:

c1c12cf7d76dfdbd9ff67a0beca7d1a6.png

A的路由表:

b702abc359398fccb32355b38e53cce2.png

BpingA时,首先查找B中的直连路由表项,A的地址和路由表中的255.255.255.224相与,得到192.168.206.145,这个在B的直连路由表中没有匹配的,所以走默认路由,送到网关ip192.168.206.1的mac地址上去。

75be79fced1eecdf686a7b3693a94b1f.png

网关查自己路由表,认为B应该直接发给A的,所以用redirect消息通知A

78a7c0b30561da405524f48a14ef1dfa.png

路由器查自己的路由表,是自己的直连路由,所以也转出包,A收到后,查询自己的路由表,符合自己的直连路由表项,所以回复reply消息。

e390b06c044cb4ba997c678852327a84.png

Tcp协议端口没有打开时,不发icmp消息,直接回rst消息

如下图:pc18.250.0.145运行一个http服务器,另一终端18.250.0.31访问,syn握手后,发rst中断握手。

91e52e11e71c98238b30bb9310029155.png

过滤项为ip.addr==18.250.0.31 || icmp消息,发现此时没有icmp消息发出

490ce08e75252ab4e277e97013427d12.png

查看8080端口是否打开?

48179fa963ee55dec8404d92cbc24963.png

fcfdf0f5a12555c8e3f7a737ecb1bbbd.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值