实验名称:利用Wireshark软件进行ICMP抓包实验
实验目的:1.掌握Wireshark的基本使用方法。
2.通过对Wireshark抓取的ICMP协议数据包分析,掌握ICMP的帧格式及运行原理。 3.熟悉IP首部各字段的含义及以太网封装格式。
实验环境:1.硬件环境
a)网卡信息DescripTIon:Realtek RTL8139 Family Fast Ethernet Adapter Link speed:100MBits/s Media supported:802.3(Ethernet) Media in use: 802.3(Ethernet) Maximum Packet Size 1514 其它详细信息见附图1.
b)网络组成实验电脑通过ADSL MODEM 接入互联网中联通ADSL服务器,ADSL MODEM和ADSL服务器间通过PPP over Ethernet(PPPoE)协议转播以太网络中PPP帧信息。电脑通过ADSL方式上网是通过以太网卡(Ethernet)与互联网相连的。使用的还是普通的TCP/IP方式,并没有付加新的协议,对我们的抓包实验是透明的。
2. 软件环境
a)操作系统Microsoft Windows XP Professional 版本 2002 Service Pack 3
b)Wireshark 软件通过系统命令systeminfo查看处理器类型为X86-based PC,为32位机,因此选择32位的Wireshark软件(Version:Version 1.2.3 for win32)。
一、概述:
1. ICMP允许主机或路由报告差错情况和提供有关异常情况。ICMP是因特网的标准协议,但ICMP不是高层协议,而是IP层的协议。通常ICMP报文被IP层或更高层协议(TCP或UDP)使用。一些ICMP报文把差错报文返回给用户进程。
2. ICMP报文作为IP层数据报的数据,加上数据报的首部,组成数据报发送出去。
3. ICMP报文的种类有两种,即ICMP差错报告报文和ICMP询问报文。
二、ICMP报文的格式
1. 类型:占8位
2. 代码:占8位
3. 检验和:占16位
说明:ICMP所有报文的前4个字节都是一样的,但是剩下的其他字节则互不相同。
4. 其它字段都ICMP报文类型不同而不同。
1》 ICMP报文的前4个字节是统一的格式,共有三个字段:即类型,代码和检验和。
2》 8位类型和8位代码字段一起决定了ICMP报文的类型。
类型8,代码0:表示回显请求(ping请求)。
类型0,代码0:表示回显应答(ping应答)
类型11,代码0:超时
3》16位的检验和字段:包括数据在内的整个ICMP数据包的检验和;其计算方法和IP头部检验和的计算方法一样的。
ICMP报文具体分为查询报文和差错报文(对ICMP差错报文有时需要做特殊处理,因此要对其进行区分。如:对ICMP差错报文进行响应时,永远不会生成另一份ICMP差错报文,否则会出现死循环)
三、ICMP差错报文(56字节)
1. ICMP差错报告报文共有5种
1》 终点不可达:终点不可达分为:网络不可达,主机不可达,协议不可达,端口不可达,需要分片但DF比特已置为1,以及源路由失败等六种情况,其代码字段分别置为0至5。当出现以上六种情况时就向源站发送终点不可达报文。
说明:
端口不可达:UDP的规则之一是:如果收到UDP数据报而且目的端口与某个正在使用的进程不相符,那么UDP返回一个ICMP不可达报文。
2》 源站抑制:当路由器或主机由于拥塞而丢弃数据报时,就向源站发送源站抑制报文,使源站知道应当将数据报的发送速率放慢。
3》 时间超过:当路由器收到生存时间为零的数据报时,除丢弃该数据报外,还要向源站发送时间超过报文。当目的站在预先规定的时间内不能收到一个数据报的全部数据报片时,就将已收到的数据报片都丢弃,并向源站发送时间超过报文。
4》 参数问题:当路由器或目的主机收到的数据报的首部中的字段的值不正确时,就丢弃该数据报,并向源站发送参数问题报文。
5》 改变路由(重定向)路由器将改变路由报文发送给主机,让主机知道下次应将数据报发送给另外的路由器。
说明:
以下几种情况都不会导致产生ICMP差错报文
1》ICMP差错报文(但是,ICMP查询报文可能会产生ICMP差错报文)
2》目的地址是广播地址或多播地址的IP数据报
3》作为链路层广播的数据报
4》不是IP分片的第一片
5》源地址不是单个主机的数据报。即源地址不能为零地址、环回地址、广播地址或多播地址。
这些规则是为了防止过去允许ICMP差错报文对广播分组响应所带来的广播风暴。
2.所有的ICMP差错报告报文中的数据字段都具有同样的格式。将收到的需要进行差错报告IP数据报的首部和数据字段的前8个字节提取出来,作为ICMP报文的数据字段。再加上响应的ICMP差错报告报文的前8个字节,就构成了ICMP差错报告报文。提取收到的数据报的数据字段的前8个字节是为了得到运输层的端口号(对于TCP和UDP)以及运输层报文的发送序号(对于TCP)。
注:一下情况不发送ICMP差错报告报文