ICMP实验三:ICMP端口不可达差错报文

2015年11月09日

一、实验目的

通过简单的实验来了解ICMP端口不可达差错报文

二、ICMP端口不可达差错报文简介

  • 数据报格式

图片失效

图片失效

  • 字段说明
    • 类型和代码:类型3,代码3,表示ICMP端口不可达差错
    • 产生差错的数据报IP首部:包含协议字段,区分TCP/UDP
    • IP数据报的最少前8个字节:包含TCP/UDP的端口,进而判断出用户进程;

三、实验环境

表1 ICMP实验环境
机器名称 网卡名称 IP地址 MAC地址
FreeBSD V1 em0 192.168.146.141 00:0c:29:4b:8e:c3
FreeBSD V2 em0 192.168.146.142 00:0c:29:c7:9f:61

四、实验步骤

  • 首先关闭FreeBSD V1和FreeBSD V2的防火墙
1
2
3
# 命令
ipfw disable firewall  
/etc/rc.d/ipfw stop
  • 在FreeBSD V2上监听FreeBSD V1和FreeBSD V2之间的ICMP和UDP数据包
1
2
# 命令
tcpdump -nex -ttt -vnn \(icmp or udp\) and \(host 192.168.146.141 and 192.168.146.142\)
  • 在FreeBSD V1上向FreeBSD V2进行tftp操作
1
2
3
4
# 命令
[root@pcbsd_v1] ~# tftp
tftp> connect 192.168.146.142 8888 #FreeBSD V2实际上并没有提供服务,向FreeBSD V1返回ICMP端口不可达差错报文
tftp> get c
  • FreeBSD V2监听到的网络内容如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
00:00:00.000000 00:0c:29:4b:8e:c3 > 00:0c:29:c7:9f:61, ethertype IPv4 (0x0800), length 74: (tos 0x0, ttl 64, id 22640, offset 0, flags [none], proto UDP (17), length 60)
    192.168.146.141.65305 > 192.168.146.142.8888: UDP, length 32
	0x0000:  4500 003c 5870 0000 4011 7bd4 c0a8 928d
	0x0010:  c0a8 928e ff19 22b8 0028 31a3 0001 6300
	0x0020:  6e65 7461 7363 6969 0074 7369 7a65 0030
	0x0030:  0072 6f6c 6c6f 7665 7200 3000
00:00:00.000069 00:0c:29:c7:9f:61 > 00:0c:29:4b:8e:c3, ethertype IPv4 (0x0800), length 70: (tos 0x0, ttl 64, id 16943, offset 0, flags [none], proto ICMP (1), length 56)
    192.168.146.142 > 192.168.146.141: ICMP 192.168.146.142 udp port 8888 unreachable, length 36
	(tos 0x0, ttl 64, id 22640, offset 0, flags [none], proto UDP (17), length 60)
    192.168.146.141.65305 > 192.168.146.142.8888: UDP, length 32
	0x0000:  4500 0038 422f 0000 4001 9229 c0a8 928e
	0x0010:  c0a8 928d 0303 a95f 0000 0000 4500 003c
	0x0020:  5870 0000 4011 7bd4 c0a8 928d c0a8 928e
	0x0030:  ff19 22b8 0028 31a3

五、实验结果分析

  • 分析FreeBSD V2监听到的第1个数据报,易得:
表2 IP数据报首部解析
版本 首部长度 服务类型 总长度 标识 标志 片偏移 TTL 协议 首部校验和 源IP地址 目的IP地址
0x4 0x5 0x00 0x003c 0x5870 0x0 0x0 0x40 0x11 0x7bd4 0xc0a8928d 0xc0a8928e
IPV4 20 Bytes 一般服务 60Bytes(20Bytes IP首部 + 40Bytes UDP报文) 22640 64 UDP 置为0x0000 192.1658.146.141 192.1658.146.142


表3 UDP数据报首部解析
源端口号 目的端口号 长度 校验和
0xff19 0x22b8 0x028 0x31a3
65305 8888 40 置为0x0000


  • 分析FreeBSD V2监听到的第2个数据报,易得:
表4 IP数据报首部解析
版本 首部长度 服务类型 总长度 标识 标志 片偏移 TTL 协议 首部校验和 源IP地址 目的IP地址
0x4 0x5 0x00 0x0038 0x422f 0x0 0x0 0x40 0x01 0x9229 0xc0a8928e 0xc0a8928d
IPV4 20 Bytes 一般服务 56Bytes(20Bytes + 8Bytes + 20Bytes + 8Bytes) 16943 64 ICMP 置为0x0000 192.1658.146.142 192.1658.146.141


表5 ICMP差错报文首部解析
类型 代码 检验和
0x03 0x03 0xa95f
ICMP端口不可达差错 置为0x0000


表6 UDP数据报首部解析(与表3一只)
源端口号 目的端口号 长度 校验和
0xff19 0x22b8 0x028 0x31a3
65305 8888 40 置为0x0000


六、参考内容