icmp协议_网络基础知识:ICMP协议之探测主机

微信公众号:计算机与网络安全

ID:Computer-network

如要向目标主机发送数据包,首先需要确保目标主机是启用的。ICMP协议可以用来探测主机,以判断主机是否启用。本文介绍如何进行探测主机。

1、使用ping命令

ping命令就是借助ICMP传输协议,发出要求回应的Echo(ping)request消息。若远端主机的网络功能没有问题,就会回应Echo(ping)reply信息,因而得知该主机运作正常。因此用户可以通过ping命令来判断目标主机是否启用。

判断目标主机192.168.59.135是否启用。

1)使用ping命令探测目标主机,执行命令如下:

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.683 ms

64 bytes from 192.168.59.135: icmp_seq=2 ttl=64 time=2.10 ms

64 bytes from 192.168.59.135: icmp_seq=3 ttl=64 time=0.291 ms

64 bytes from 192.168.59.135: icmp_seq=4 ttl=64 time=0.283 ms

64 bytes from 192.168.59.135: icmp_seq=5 ttl=64 time=0.339 ms

上述输出信息表示,成功向目标主机发送了ping请求并得到了响应时间,这表示目标主机已启用。如果目标主机未启用将显示以下信息:

PING 192.168.59.135 (192.168.59.135) 56(84) bytes of data.

From 192.168.59.132 icmp_seq=1 Destination Host Unreachable

From 192.168.59.132 icmp_seq=2 Destination Host Unreachable

From 192.168.59.132 icmp_seq=3 Destination Host Unreachable

From 192.168.59.132 icmp_seq=4 Destination Host Unreachable

From 192.168.59.132 icmp_seq=5 Destination Host Unreachable

2)通过Wireshark捕获数据包,验证ping命令所产生的ICMP数据包,如图1所示。图中第10~25个数据包都为ICMP数据包。从图中还可以看到ping命令发出的ICMP请求Echo(ping)request与ICMP响应Echo(ping)reply。

icmp协议_网络基础知识:ICMP协议之探测主机_第1张图片

图1 ICMP数据包

2、构造ICMP数据包

ICMP协议可以用来对目标主机发送ICMP数据包,判断目标主机是否启用。正常情况下,ICMP请求包报文中的类型值为8,代码值为0;ICMP响应包报文中的类型值为0,代码值为0。用户可以使用netwox工具的编号65的模块构造ICMP数据包,并对目标主机进行扫描。

在主机192.168.59.132上,构造ICMP数据包,判断目标主机192.168.59.135是否启用。

1)构造ICMP扫描,执行命令如下:

root@daxueba:~# netwox 65 -i 192.168.59.135

输出信息如下:

192.168.59.135 : reached

在输出信息中,reached表示目标主机可达。这说明目标主机是启用状态。如果目标主机没有启用,则显示如下信息,其中,unreached表示不可达。

192.168.59.139 : unreached

2)为了验证以上构造的ICMP数据包,使用Wireshark工具进行捕获数据包,如图2所示。其中,第1个数据包的源IP地址为192.168.59.132,目标IP地址为192.168.59.135,Info显示这是一个ICMP请求包。在Internet Control Message Protocol部分中,Type的值为8,Code的值为0,表示该数据包为正常的ICMP请求包。

icmp协议_网络基础知识:ICMP协议之探测主机_第2张图片

图2 ICMP请求包

3)查看第2个数据包,如图3所示。该数据包的源IP地址为192.168.59.135,目标IP地址为192.168.59.132,这是第1个数据包的响应包。在Internet Control Message Protocol部分中,Type的值为0,Code的值为0,表示该数据包为正常的ICMP响应包。

icmp协议_网络基础知识:ICMP协议之探测主机_第3张图片

图3 ICMP响应包

3、伪造ICMP数据包

使用前面介绍的方式进行ICMP扫描,容易被目标主机发现。为了解决这个问题,可以使用netwox工具中编号为66的模块伪造ICMP数据包,如设置假的IP地址和MAC地址。

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

1)伪造IP地址为192.168.59.140,MAC地址为00:0c:29:ca:e4:99,执行命令如下:

root@daxueba:~# netwox 66 -i 192.168.59.135 -E 00:0c:29:ca:e4:99 -I 192.168.59.140

输出信息如下:

192.168.59.135 : reached

2)验证伪造的ICMP数据包扫描,捕获数据包进行查看,如图4所示。其中,第4个数据包的源IP地址为192.168.59.140(伪造的),目标地址为192.168.59.135(目标主机),该数据包为伪造的ICMP请求包。在Ethernet II部分的Source中可以看到MAC地址为00:0c:29:ca:e4:99,也是伪造的。

icmp协议_网络基础知识:ICMP协议之探测主机_第4张图片

图4 伪造的ICMP数据包

3)选择第7个数据包,查看信息,如图5所示。从该数据包可以看到源IP地址为192.168.59.135,目标IP地址为192.168.59.140(伪造的),目标MAC地址为00:0c:29:ca:e4:99(伪造的)。这说明目标主机给伪造的主机返回了ICMP响应。

icmp协议_网络基础知识:ICMP协议之探测主机_第5张图片

图5 伪造的ICMP响应包

4、构造连续的ICMP数据包

在向目标主机发送ICMP请求时,如果主机启用,将返回响应信息。为了持续判断目标主机的状态,需要连续发送ICMP数据包。netwox工具提供了编号为49的模块,用于持续构造ICMP数据包,实时监听目标主机的启用情况。

构造连续的ICMP数据包,对目标主机192.168.59.135进行扫描。

1)持续向目标主机发送ICMP请求,执行命令如下:

root@daxueba:~# netwox 49 -i 192.168.59.135

输出信息如下:

Ok

Ok

Ok

Ok

… #省略其他信息

输出信息在持续地显示Ok,表示目标主机已启用。如果目标主机未启用,将不会有任何输出信息。

2)通过捕获数据包,验证该模块发送的ICMP请求。捕获到的数据包如图6所示。图中捕获到了大量的ICMP数据包,其中,第10、12、14、16、18个数据包为构造的ICMP请求包,第11、13、15、17、19个数据包为得到的ICMP响应包。

icmp协议_网络基础知识:ICMP协议之探测主机_第6张图片

图6 捕获持续的ICMP数据包

5、伪造连续的ICMP数据请求包

为了避免被发现,可以使用netwox工具中编号为50的模块伪造连续的ICMP数据请求包。

伪造连续的ICMP数据包,实时判断目标主机192.168.59.135的启用情况。

1)伪造实施主机的IP地址为192.168.59.150,MAC地址为aa:bb:cc:11:22:33,指定目标主机的MAC地址为00:0c:29:ca:e4:66,目标主机IP地址为192.168.59.135,进行持续扫描。执行命令如下:

root@daxueba:~# netwox 50 -i 192.168.59.135 -E aa:bb:cc:11:22:33 -I 192.168.59.150 -e 00:0c:29:ca:e4:66

输出信息如下:

Ok

Ok

Ok

Ok

Ok

… #省略其他信息

2)通过捕获数据包,验证发送的ICMP伪造包,捕获的数据包如图7所示。图中捕获到了大量的ICMP请求包,并且都得到了响应。在这些数据包中可以看到成功伪造的IP地址和MAC地址,而不是真正实施主机的地址。

icmp协议_网络基础知识:ICMP协议之探测主机_第7张图片

图7 大量的伪造ICMP数据包

6、伪造ICMP数据包的IP层

ICMP是位于IP层上的协议。用户可以使用netwox工具中编号为42的模块,对ICMP数据包的IP层信息进行伪造。

伪造基于IPv4的ICMP数据包。

1)查看基于IPv4的ICMP数据包的默认值,执行命令如下:

root@daxueba:~# netwox 41

输出信息如下:

IP______________________________________________________________.

|version| ihl | tos | totlen

|___4___|___5___|____0x00=0_____|___________0x001C=28___________

| id |r|D|M| offsetfrag

|_________0xD03C=53308__________|0|0|0|________0x0000=0_________

| ttl | protocol | checksum

|____0x00=0_____|____0x01=1_____|____________0xE26B_____________

| source

|________________________192.168.59.131_________________________

| destination

|____________________________5.6.7.8____________________________

ICMP4_echo reply________________________________________________.

| type | code | checksum

|____0x00=0_____|____0x00=0_____|_________0xFFFF=65535__________

| id | seqnum

|___________0x0000=0____________|___________0x0000=0____________

| data:

|_______________________________________________________________

输出信息分为两部分,IP部分表示IPv4层信息,ICMP4_echo reply部分为ICMP响应包部分。这两部分中包含了多个字段信息。例如,IP部分中source的值为192.168.59.131,表示该IPv4数据包源IP地址(本地IP地址),destination的值为5.6.7.8,表示目标IP地址。这里的值均为默认值。用户可以对这些值进行修改,自定义特定的ICMP数据包。

2)伪造源IP地址为192.168.59.160,执行命令如下:

root@daxueba:~# netwox 41 -l 192.168.59.160 -m 192.168.59.135

输出信息如下:

IP______________________________________________________________.

|version| ihl | tos | totlen

|___4___|___5___|____0x00=0_____|___________0x001C=28___________

| id |r|D|M| offsetfrag

|_________0xDD2B=56619__________|0|0|0|________0x0000=0_________

| ttl | protocol | checksum

|____0x00=0_____|____0x01=1_____|____________0xE55A_____________

| source

|________________________192.168.59.160_________________________

| destination

|________________________192.168.59.135_________________________

ICMP4_echo reply________________________________________________.

| type | code | checksum

|____0x00=0_____|____0x00=0_____|_________0xFFFF=65535__________

| id | seqnum

|___________0x0000=0____________|___________0x0000=0____________

| data:

|_______________________________________________________________

其中,IP部分的source的值由原来的本地地址192.168.59.131变为了192.168.59.160;destination的值由默认的5.6.7.8变为了192.168.59.135。

3)通过捕获数据包,验证伪造的ICMP请求包是否被发送,如图8所示。图中第4个数据包为伪造的数据包,源IP地址为伪造的地址192.168.59.160,而不是本地IP地址。Ech0(ping)reply表示该数据包为ICMP请求数据包。

icmp协议_网络基础知识:ICMP协议之探测主机_第8张图片

图8 伪造IP地址的ICMP数据包

7、伪造ICMP数据包的Ethernet层

用户不仅可以对ICMP数据包的IPv4层进行伪造,还可以对ICMP数据包的Ehternet层进行伪造。这时,需要使用netwox工具中编号为37的模块。该模块可以伪造ICMP数据包的MAC地址信息。

基于主机192.168.59.131,伪造ICMP数据包的Ethernet层信息。

1)查看ICMP包的Ehternet默认值,执行命令如下:

root@daxueba:~# netwox 37

输出信息如下:

Ethernet________________________________________________________.

| 00:0C:29:AA:E0:27->00:08:09:0A:0B:0C type:0x0800

|_______________________________________________________________

IP______________________________________________________________.

|version| ihl | tos | totlen

|___4___|___5___|____0x00=0_____|___________0x001C=28___________

| id |r|D|M| offsetfrag

|__________0x18A0=6304__________|0|0|0|________0x0000=0_________

| ttl | protocol | checksum

|____0x00=0_____|____0x01=1_____|____________0x9A08_____________

| source

|________________________192.168.59.131_________________________

| destination

|____________________________5.6.7.8____________________________

ICMP4_echo reply________________________________________________.

| type | code | checksum

|____0x00=0_____|____0x00=0_____|_________0xFFFF=65535__________

| id | seqnum

|___________0x0000=0____________|___________0x0000=0____________

| data:

|_______________________________________________________________

在以上输出信息中,第一行Ethernet表示ICMP数据包是基于以太网的数据包。默认源MAC地址为00:0C:29:AA:E0:27,目标MAC地址为00:08:09:0A:0B:0C。

2)伪造源MAC地址为11:22:33:AA:BB:CC,指定目标IP地址为192.168.59.135,MAC地址为00:0C:29:CA:E4:66。执行命令如下:

root@daxueba:~# netwox 37 -a 11:22:33:aa:bb:cc -m 192.168.59.135 -b 00:0c:29:ca:e4:66 -o 8

输出信息如下:

Ethernet________________________________________________________.

| 11:22:33:AA:BB:CC->00:0C:29:CA:E4:66 type:0x0800

|_______________________________________________________________

IP______________________________________________________________.

|version| ihl | tos | totlen

|___4___|___5___|____0x00=0_____|___________0x001C=28___________

| id |r|D|M| offsetfrag

|__________0x246B=9323__________|0|0|0|________0x0000=0________

| ttl | protocol | checksum

|____0x00=0_____|____0x01=1_____|____________0x9E08_____________

| source

|________________________192.168.59.131_________________________

| destination

|________________________192.168.59.135_________________________

ICMP4_echo reply________________________________________________.

| type | code | checksum

|____0x00=0_____|____0x00=0_____|_________0xFFFF=65535__________

| id | seqnum

|___________0x0000=0____________|___________0x0000=0____________

| data:

|_______________________________________________________________

从Ethernet部分可以看到,源MAC地址由原来的00:0C:29:AA:E0:27变为了11:22:33:aa:bb:cc;目标MAC地址由原来的00:08:09:0A:0B:0C变为了00:0C:29:CA:E4:66;而IP部分Source的值保留原来的值。

3)为了验证构建的ICMP数据包,可以捕获数据包查看,如图9所示。从第6个数据包的Ethernet II部分可以看到,Source的值为11:22:33:aa:bb:cc,是伪造的MAC地址。在Internet Control Message Protocol部分中,Type值为8,Code值为0,表示该数据包为ICMP请求包。

icmp协议_网络基础知识:ICMP协议之探测主机_第9张图片

图9 查看伪造MAC地址的ICMP请求包

4)选择第7个数据包进行查看,如图10所示。从该数据包的Ethernet II部分可以看到,源MAC地址为目标主机的MAC地址00:0c:29:ca:e4:66,目标MAC地址为实施主机的MAC地址00:0c:29:aa:e0:27。这表示目标主机成功给伪造MAC地址的主机进行了回复。在Internet Control Message Protocol部分中,Type值为0,Code值为0,表示该数据包为ICMP响应包。

icmp协议_网络基础知识:ICMP协议之探测主机_第10张图片

图10 ICMP响应包

微信公众号:计算机与网络安全

ID:Computer-network

你可能感兴趣的:(icmp协议,icmp的回送和回送响应消息,zabbix,icmp,ping,监控主机)