当前位置:网站首页 > Haskell函数式编程 > 正文

icmp报文格式图片(icmp 报文格式)



ICMP协议概述:

ICMP是“Internet Control Message Protocol”(Internet控制消息协议)的缩写。它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。

ICMP消息类型用途说明

其中无法到达目标消息中可以细分为一下几项

无法到达目标消息说明

ICMP协议只是试图报告错误,并对特定的情况提供反馈,但最终并没有使IPv4成为一个可靠的协议。ICMP消息是以未确认的IPv4数据报传送的,它们自己也不可靠。

伪造ICMP数据包进行扫描:

在主机192.168.70.128 上实施ICMP数据包扫描,判断目标主机192.168.70.2是否启用。

1)伪造IP地址为192.168.70.10 MAC地址为a1:b2:c3:d4:e5:f6

netwox 66 -i 192.168.70.2 -E a1:b2:c3:d4:e5:f6 -I 192.168.70.10

我们使用专家信息来看下保存信息:

显示我们构造的这个MAC地址前面的厂商号是不存在的。

伪造连续的ICMP数据请求包:

1)伪造实施的主机IP地址为192.168.70.10 MAC地址为 aa:bb:cc:11:22:33 目标IP192.168.70.2 MAC地址a1:b2:c3:d4:f5:e6

执行命令:

netwox 50 -i 192.168.70.2 -E a1:b2:c3:d4:f5:e6 -I 192.168.70.10 -e aa:bb:cc:11:22:33

ICMP协议应用-路由追踪

在Linux中使用traceroute,windows中使用tracert命令可以实现路由追踪,

原理主机向目标发送ICMP数据包,每经过一个路由器都会得到一个响应包,直到目标返回ICMP响应包;但是这样也很容易被溯源发现。

使用构造ICMP请求包进行路由跟踪方式时,容易被目标主机发现。为了避免这种情况,用户可以使用 netwox 工具提供的编号为 58 的模块伪造 ICMP 请求包。它可以伪造主机 IP 地址和 MAC 地址。

【实例】在主机 192.168.12.106 上,伪造 ICMP 请求包对目标 125.39.52.26 进行路由跟踪。

1) 伪造源 IP 地址为 192.168.12.130,MAC 地址为 00:01:02:12:13:14,指定目标 IP 地址为 125.39.52.26,MAC 地址为 ec:17:2f:46:70:ba,执行命令如下:

root@kali:~# netwox 58 -I 192.168.12.130 -E 00:01:02:12:13:14 -i 125.39.52.26 -e ec:17:2f:46:70:ba

输出信息如下:

1 : 192.168.12.1
2 : 192.168.0.1
3 : 183.185.164.1
4 : 218.26.28.157
5 : 218.26.151.161
6 : 219.158.15.214
8 : 125.39.79.158
14 : 125.39.52.26

2) 通过 Wireshark 抓包,验证伪造的 ICMP 请求包,如图所示。

其中,第 3~33 个数据包为进行路由跟踪所产生的 ICMP 数据包,并且可以看到经过的路由返回了超时消息 ICMP 数据包。

3) 选择第 3 个数据包,查看地址信息,如图所示。

其中,源 IP 地址为伪造的 192.168.12.130,目标地址为 125.39.52.26。在 Ethernet II 部分中,源 MAC 地址为伪造的 00:01:02:12:13:14。

发送ICMPs时间戳请求:

ICMP 时间戳请求允许系统向另一个系统查询当前的时间,但不包含日期,返回的建议值是自午夜零点开始计算的时间(UTC)。

ICMP 时间戳请求与应答报文格式如图所示。

在发送 ICMP 时间戳请求时,请求端填写发起时间戳,然后发送报文。应答系统收到请求报文时填写接收时间戳,在发送应答时填写发送时间戳。

在请求和响应的交互过程中,当 ICMP 报文中的类型值为 13、代码值为 0 时,数据包为 ICMP 时间戳请求数据包;当 ICMP 报文中的类型值为 14,代码值为 0 时,数据包为 ICMP 时间戳应答数据包。

netwox 工具提供编号为 81 的模块,用于构建时间戳请求。

【实例】向目标主机 192.168.59.135 发送 ICMP 时间戳请求,探测数据包传输的时间。

1) 发送ICMP时间戳请求,执行命令如下:

root@daxueba:~# netwox 81 -i 192.168.59.135

输出信息如下:

0 0

输出信息表示目标主机可达,如果目标主机不可达,将显示信息如下:

No answer.

2) 可以通过 Wireshark 进行抓包,验证成功发送了时间戳请求,如图所示。

其中,第 6 个数据包为 ICMP 时间戳请求。

在 Internet Control Message Protocol 部分中,Type 值为 13,Code 值为 0,表示该数据包为 ICMP 时间戳请求。

Originate timestamp 的值表示数据包发起的起始时间,这里为 0 秒(午夜 0 点 0 秒);Receive timestamp 的值表示接收数据包的时间,这里为 0 秒;Transmit timestamp 的值表示数据包的发送时间,这里为 0 秒。时间为 0 秒,是因为从午夜零点开始计算。

3) 选择对应的响应包查看信息,如图所示。

其中,第 7 个数据包为 ICMP 时间戳应答。

在 Internet Control Message Protocol 部分中,Type 值为 14,Code 值为 0,表示该数据包为 ICMP 时间戳应答。

Originate timestamp 的值表示数据包发起的起始时间,这里为 0 秒(午夜零点后开始计算);Receive timestamp 的值表示接收数据包的时间,这里为午夜零点后 8 小时 44 分 24.379 秒;Transmit timestamp 的值表示数据包的发送时间,这里为 秒,时间为午夜零点后 8 小时 44 分 24.379 秒。

伪造请求超时的ICMP数据包:

在网络传输 IP 数据报的过程中,如果 IP 数据包的 TTL 值逐渐递减为 0 时,需要丢弃数据报。这时,路由器需要向源发送方发送 ICMP 超时报文,表示传输过程中超时了。

在超时 ICMP 数据包报文中,类型值为 11,代码值为 0。

用户可以通过 netwox 工具中编号为 83 的模块伪造请求超时 ICMP 数据包。

【实例】已知主机 A 的 IP 地址为 192.168.59.134,主机 B 的 IP 地址为 192.168.59.135,在主机 C 上伪造请求超时 ICMP 数据包。

1) 在主机 A 上 ping 主机 B,执行命令如下:

root@daxueba:~# ping 192.168.59.135

输出信息如下:

PING 192.168.59.135 (192.168.59.135) 56(84) bytes of data.
64 bytes from 192.168.59.135: icmp_seq=1 ttl=64 time=0.447 ms
64 bytes from 192.168.59.135: icmp_seq=2 ttl=64 time=0.468 ms
64 bytes from 192.168.59.135: icmp_seq=3 ttl=64 time=0.773 ms
64 bytes from 192.168.59.135: icmp_seq=4 ttl=64 time=0.307 ms

上述输出信息表示主机 B 是可达的,并且给出了传输的时间。例如,time=0.447ms,表示时间需要 0.447 毫秒。

2) 在主机 C 上伪造请求超时 ICMP 数据包,设置源 IP 地址为 192.168.59.135,执行命令如下:

root@daxueba:~# netwox 83 -i 192.168.59.135

执行命令后没有任何输出信息,但是成功伪造了请求超时 ICMP 数据包。

3) 再次在主机 A 上 ping 主机 B,执行命令如下:

root@daxueba:~# ping 192.168.59.135

输出信息如下:

PING 192.168.59.135 (192.168.59.135) 56(84) bytes of data.
64 bytes from 192.168.59.135: icmp_seq=6 ttl=64 time=0.336 ms
From 192.168.59.135 icmp_seq=6 Time to live exceeded
64 bytes from 192.168.59.135: icmp_seq=7 ttl=64 time=0.532 ms
From 192.168.59.135 icmp_seq=7 Time to live exceeded
64 bytes from 192.168.59.135: icmp_seq=8 ttl=64 time=0.495 ms
From 192.168.59.135 icmp_seq=8 Time to live exceeded

从上述输出信息可以看到,主机 A 向主机 192.168.59.135 发送了 ping 请求。部分请求没有收到响应信息,而显示了 Time to live exceeded 信息,表示时间超时。

4) 为了验证伪造的请求超时 ICMP 数据包,可以通过捕获数据包查看,如图所示,捕获到了若干个 ICMP 超时数据包。

其中,第 3 个数据包的源 IP 地址为 192.168.59.134,目标 IP 地址为 192.168.59.135,是主机 A 向主机 B 发送的 ICMP 请求包;第 5 个数据包源 IP 地址为 192.168.59.135,目标 IP 地址为 192.168.59.134,Info 列显示的 Time-to-live exceeded 表示时间超时,说明该数据包为伪造的请求超时 ICMP 包。

5) 选择第 5 个数据包,查看包信息,如图所示。

在该数据包的 Internet Control Message Protocol 部分中,Type 值为 11,Code 值为 0,说明该数据包是请求超时 ICMP 数据包。

伪造目标不可达的ICMP数据包:

目标不可达包是指路由器无法将 IP 数据包发送给目标地址时,会给发送端主机返回一个目标不可达的 ICMP 消息。在目标不可达报文中,类型值为 3,代码值为 1。

伪造目标不可达的 ICMP 数据包需要使用 netwox 工具中编号为 82 的模块。

【实例】已知主机 A 的 IP 地址为 192.168.59.134,主机 B 的 IP 地址为 192.168.59.135,在主机 C 上伪造目标不可达 ICMP 数据包。

1) 在主机 C 上伪造目标不可达 ICMP 数据包,设置源 IP 地址为 192.168.59.135,执行命令如下:

root@daxueba:~# netwox 82 -i 192.168.59.135

执行命令后没有任何输出信息,说明成功伪造了目标主机不可达 ICMP 数据包。

2) 在主机 A 上 ping 主机 B,执行命令如下:

root@daxueba:~# ping 192.168.59.135

输出信息如下:

PING 192.168.59.135 (192.168.59.135) 56(84) bytes of data.
64 bytes from 192.168.59.135: icmp_seq=1 ttl=64 time=3.95 ms
From 192.168.59.135 icmp_seq=1 Destination Host Unreachable
64 bytes from 192.168.59.135: icmp_seq=2 ttl=64 time=0.608 ms
From 192.168.59.135 icmp_seq=2 Destination Host Unreachable
64 bytes from 192.168.59.135: icmp_seq=3 ttl=64 time=0.341 ms
From 192.168.59.135 icmp_seq=3 Destination Host Unreachable
64 bytes from 192.168.59.135: icmp_seq=4 ttl=64 time=0.499 ms
From 192.168.59.135 icmp_seq=4 Destination Host Unreachable

从上述输出信息可以看到,主机 A 向主机 192.168.59.135 发送了 ping 请求,但是部分请求没有得到响应信息,而显示了 Destination Host Unreachable 信息,表示目标主机不可达。

3) 为了验证伪造的目标不可达 ICMP 数据包,可以使用 Wireshark 抓包查看,如图所示,捕获到了若干个 ICMP 数据包。

其中,第 3 个数据包的源 IP 地址为 192.168.59.134,目标 IP 地址为 192.168.59.135,是主机 A 向主机B发送的 ICMP 请求包;第 5 个数据包的源 IP 地址为 192.168.59.135,目标 IP 地址为 192.168.59.134,Info 列显示的 Destination unreachable(Host unreachable) 表示目标主机不可达,说明该数据包为伪造的目标不可达 ICMP 数据包。

5) 选择第 5 个数据包,查看包信息,如图所示。

在该数据包的 Internet Control Message Protocol 部分中,Type 值为 3,Code 值为 1,说明该数据包是目标不可达 ICMP 数据包。

伪造参数错误的ICMP数据包:

当路由器或主机处理数据报时,发现因为报文头的参数错误而不得不丢弃报文时,需要向源发送方发送参数错误报文。该报文中,类型值为 12,代码值为 0。

伪造参数错误的 ICMP 数据包需要使用 netwox 工具中编号为 84 的模块。

【实例】已知主机 A 的 IP 地址为 192.168.59.134,主机 B 的 IP 地址为 192.168.59.135,在主机 C 上伪造参数错误 ICMP 数据包。

1) 在主机 C 上伪造参数错误 ICMP 数据包,设置源 IP 地址为 192.168.59.135,执行命令如下:

root@daxueba:~# netwox 82 -i 192.168.59.135

执行命令后没有任何输出信息,但是会伪造参数错误 ICMP 数据包。

2) 在主机 A 上 ping 主机 B,执行命令如下:

root@daxueba:~# ping 192.168.59.135

输出信息如下:

PING 192.168.59.135 (192.168.59.135) 56(84) bytes of data.
64 bytes from 192.168.59.135: icmp_seq=1 ttl=64 time=11.1 ms
From 192.168.59.135 icmp_seq=1 Parameter problem: pointer = 0
64 bytes from 192.168.59.135: icmp_seq=2 ttl=64 time=0.546 ms
From 192.168.59.135 icmp_seq=2 Parameter problem: pointer = 0
64 bytes from 192.168.59.135: icmp_seq=3 ttl=64 time=0.453 ms
From 192.168.59.135 icmp_seq=3 Parameter problem: pointer = 0

从输出信息可以看到,主机A向主机 192.168.59.135 发送了 ping 请求,但部分请求没有得到响应信息,而显示了 Parameter problem 信息,表示参数错误。

3) 通过捕获数据包,验证伪造的参数错误的 ICMP 数据包,如图所示,捕获到了若干个 ICMP 数据包。

第 1 个数据包的源 IP 地址为 192.168.59.134,目标 IP 地址为 192.168.59.135,是主机 A 向主机 B 发送的 ICMP 请求包;第 3 个数据包的源 IP 地址为 192.168.59.135,目标 IP 地址为 192.168.59.134,Info 列显示的 Parameter problem 表示参数错误,说明该数据包为伪造的参数错误 ICMP 数据包。

4) 选择第 3 个数据包,查看包信息,如图所示。

在 Internet Control Message Protocol 部分中,Type 值为 12,Code 值为 0,说明该数据包是参数错误 ICMP 数据包。

伪造原站抑制的ICMP数据包:

主机在处理报文时会有一个缓存队列。当主机接收数据包的速度比处理速度快时,一旦超过最大缓存队列,主机将无法处理,从而选择丢弃报文。这时,主机会向源发送方发送一个 ICMP 源站抑制报文,告诉对方缓存队列已满,稍后再进行请求。

在源站抑制的 ICMP 报文中,类型值为 4,代码值为 0。

伪造源站抑制的数据包需要使用 netwox 工具中编号为 85 的模块。

【实例】已知主机 A 的 IP 地址为 192.168.59.134,主机 B 的 IP 地址为 192.168.59.135。在主机 C 上伪造源站抑制 ICMP 数据包。

1) 在主机 C 上伪造源站抑制 ICMP 数据包,设置源 IP 地址为 192.168.59.135,执行命令如下:

root@daxueba:~# netwox 85 -i 192.168.59.135

执行命令后没有任何输出信息,但是成功伪造了源站抑制 ICMP 数据包。

2) 在主机 A 上 ping 主机 B,执行命令如下:

root@daxueba:~# ping 192.168.59.135

输出信息如下:

PING 192.168.59.135 (192.168.59.135) 56(84) bytes of data.
64 bytes from 192.168.59.135: icmp_seq=1 ttl=64 time=1.77 ms
From 192.168.59.135: icmp_seq=1 Source Quench
64 bytes from 192.168.59.135: icmp_seq=2 ttl=64 time=0.429 ms
From 192.168.59.135: icmp_seq=2 Source Quench
64 bytes from 192.168.59.135: icmp_seq=3 ttl=64 time=18.8 ms
From 192.168.59.135: icmp_seq=3 Source Quench

从输出信息可以看到,主机 A 向主机 192.168.59.135 发送了 ping 请求,但是部分请求没有得到响应信息,而显示了 Source Quench 信息,表示源站抑制。

3) 通过捕获数据包,验证伪造的源站抑制的 ICMP 数据包,如图所示。

捕获到了若干个 ICMP 数据包,其中,第 4 个数据包的源 IP 地址为 192.168.59.134,目标 IP 地址为 192.168.59.135,是主机 A 向主机 B 发送的 ICMP 请求包;第 6 个数据包的源 IP 地址为 192.168.59.135,目标 IP 地址为 192.168.59.134,Info 列显示的 Source Quench 表示源站抑制,说明该数据包为伪造的源站抑制 ICMP 数据包。

4) 选择第 6 个数据包,查看包信息,如图所示。

在 Internet Control Message Protocol 部分中,Type 值为 4,Code 值为 0,说明该数据包是源站抑制 ICMP 数据包。

伪造重定向ICMP数据包:

当路由收到 IP 数据报,发现数据报的目的地址在路由表上却不存在时,它发送 ICMP 重定向报文给源发送方,提醒它接收的地址不存在,需要重新发送给其他地址进行查找。

在重定向 ICMP 报文中,类型值为 5,代码值为 0。

伪造重定向 ICMP 数据包需要使用 netwox 工具中编号为 86 的模块。

【实例】已知主机 A 的 IP 地址为 192.168.59.132,netwox 工具所在主机 IP 地址为 192.168.59.135。基于 netwox 所在主机向主机 A 实施攻击。为了不让目标主机发现攻击的来源,伪造数据包的源 IP 地址为 192.168.59.136,将目标主机的网关修改为网段中的其他主机,使目标主机发送的数据包重定向到该主机上。

具体步骤如下:

1) 查看目标主机A的网关。在目标主机 A 上,向  (http://www..com) 发送 ping 请求。通过捕获数据包,查看网关信息,如图所示。

图中第 2 帧和第 3 帧为 DNS 协议查询数据包,是通过网关查询  () 主机的 IP 地址信息。从中可以判断,目标主机的网关为 192.168.59.2。

2) 向目标主机发送重定向数据包,设置源 IP 地址为 192.168.59.136,将目标主机发送的数据包重定向到主机 192.168.59.131 上,执行命令如下:

root@daxueba:~# netwox 86 -g 192.168.59.131 -c 1 -i 192.168.59.136

执行命令没有任何输出信息。

3) 在目标主机上向  () 发送 ping 请求,执行命令如下:

root@daxueba:~# ping 

输出信息如下:

PING  (125.39.52.26) 56(84) bytes of data.
64 bytes from no-data (125.39.52.26): icmp_seq=1 ttl=128 time=25.6 ms
From localhost (192.168.59.136): icmp_seq=1 Redirect Host(New nexthop:
localhost (192.168.59.131))
From localhost (192.168.59.136): icmp_seq=2 Redirect Host(New nexthop:
localhost (192.168.59.131))
64 bytes from no-data (125.39.52.26): icmp_seq=2 ttl=128 time=25.2 ms
From localhost (192.168.59.136): icmp_seq=3 Redirect Host(New nexthop:
localhost (192.168.59.131))
64 bytes from no-data (125.39.52.26): icmp_seq=3 ttl=128 time=27.1 ms
64 bytes from no-data (125.39.52.26): icmp_seq=4 ttl=128 time=25.5 ms
From localhost (192.168.59.136): icmp_seq=4 Redirect Host(New nexthop:
localhost (192.168.59.131))

上述输出信息中,64 bytes from no-data(125.39.52.26):icmp_seq=1 ttl=128 time=25.6 ms 表示成功向目标  () 发送 ping 请求;From localhost(192.168.59.136):icmp_seq=1 Redirect Host(New nexthop:localhost(192.168.59.131)) 表示伪造的重定向 ICMP 数据包,源 IP 地址为 192.168.59.136,Redirect Host 表示目标主机已经重定向,重定向到了主机 192.168.59.131 上。

4) 在目标主机上捕获数据包,验证重定向的数据包,如图所示。

其中,第 11 帧的源 IP 地址为 192.168.59.136(设置的源 IP 地址),目标 IP 地址为 192.168.59.132(设置的目标 IP 地址),Info 列的 Redirect(Redirect for host) 表示该数据包是一个重定向数据包。

在 Internet Control Message Protocol 部分中,Type 值为 5,Code 值为 1,说明该数据包是重定向的数据包;Gateway address:192.168.59.131 表示该主机的网关被重新定向到了 192.168.59.131。

5) 选择第 13 帧,查看网关的重定向信息,如图所示。

第 13 帧的源 IP 地址为 192.168.59.136(设置的源 IP 地址),目标 IP 地址为 192.168.59.2(目标主机 A 的网关)。该数据包也是一个重定向的数据包。

在 Internet Control Message Protocol 部分中,Gateway address:192.168.59.131 表示目标主机 A 的网关被修改为了 192.168.59.131。

到此这篇icmp报文格式图片(icmp 报文格式)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • 支付方式英文(支付方式英文缩写)2025-04-11 10:00:05
  • sigmoid函数取值范围(sigmoid函数有哪些)2025-04-11 10:00:05
  • ip地址格式转换(ip地址在线转化)2025-04-11 10:00:05
  • pdf界面怎么截图(pdf模式下怎么截图)2025-04-11 10:00:05
  • 单片机编程入门基础知识(单片机编程入门基础知识考试题目)2025-04-11 10:00:05
  • mysql窗口函数有哪些(mysql窗口函数使用方法)2025-04-11 10:00:05
  • 反激电路公式(反激电路原理详解)2025-04-11 10:00:05
  • 多级列表样式怎么设置word(多级列表样式怎么设置1.2变为2.1)2025-04-11 10:00:05
  • sigmoid函数和logistic(sigmoid函数和logistic一样吗)2025-04-11 10:00:05
  • 宽松的支付方式英文(宽松的支付方式英文缩写)2025-04-11 10:00:05
  • 全屏图片