《计算机网络—自顶向下方法》 第五章Wireshark实验:ICMP

本文详细探讨了ICMP协议在Ping和Traceroute程序中的应用,包括ICMP数据包的生成、格式、内容及在网络诊断中的作用。通过Wireshark捕获数据包,分析了ICMP请求与响应的具体字段,揭示了网络层通信细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实验描述:

在本实验中,我们将探讨 ICMP 协议的几个方面:

  1. Ping 程序生成的 ICMP 消息;
  2. Traceroute 程序生成的 ICMP 消息;
  3. ICMP 消息的格式和内容

实验过程:

1. ICMP 协议和 Ping 程序

让我们通过捕获 Ping 程序生成的数据包开始我们的 ICMP实验。 您可能还记得 Ping程序是一个简单的工具,允许任何人(例如:网络管理员)验证主机是否存在。 源主机中的 Ping 程序将数据包发送到目标 IP地址; 如果目标是在线的,则目标主机中的 Ping 程序将会发送响应 Ping 数据包证明他在线,这两个 Ping 数据包都 是 ICMP数据包。 因此您可能猜出我们这个实验都是关于 ICMP 的实验了。

  • 打开 windows的命令提示符

  • 启动 Wireshark数据包嗅探器,并开始 Wireshark数据包捕获

  • Ping程序在 c:\windows\system32目录中,所以您在命令提示符中输入“ping –n 10 hostname” 或 “c:\windows\system32\ping –n 10 hostname”都是正确的 (注意命令是引号里的内容)。其中 hostname是另一个大陆的主机名,我这里ping的是gaia.cs.umass.edu

在这里插入图片描述

  • 当 Ping程序终止时,停止在 Wireshark中捕获数据包
    在这里插入图片描述

我这里还是使用官方提供的数据包:icmp-ethereal-trace-1
在这里插入图片描述

回答问题:

  1. 您的主机的 IP地址是多少? 目标主机的 IP地址是多少?

答:我的主机(官方的包)的IP地址:192.168.1.101 目的主机的IP地址:143.89.14.34

  1. 为什么 ICMP数据包没有源端口号和目的端口号?

答:因为ICMP是网络层的协议,它不需要传输层TCP或者UDP的承载,直接使用IP数据报承载,因此不需要源端口号和目的端口号,只要源地址和目的地址即可。

  1. 查看任意的请求 ICMP数据包, ICMP类型和代码是什么? 该 ICMP数据包还有哪些其他字段? 校验和,序列号和标识符字段有多少字节?

答:ICMP类型:8(代表ICMP请求)
代码:0
还有Checksum、Checksum Status、Indetifier(BE),Indentifier (LE)、Sequence number(BE),Sequence number(LE)
校验和(Checksum):2个字节
序列号(Sequence):2个字节
标识符(Identifier):2个字节
在这里插入图片描述
在这里插入图片描述

  1. 查看任意的响应 ICMP数据包, ICMP类型和代码是什么? 该 ICMP数据包 还有哪些其他字段? 校验和,序列号和标识符字段有多少字节?

答:ICMP类型:0(0代表ICMP响应)
代码:0
还有Checksum、Checksum Status、Indetifier(BE),Indentifier (LE)、Sequence number(BE),Sequence number(LE)
校验和(Checksum):2个字节
序列号(Sequence):2个字节
标识符(Identifier):2个字节
在这里插入图片描述


2. ICMP 协议和 Traceroute 命令

现在让我们通过捕获 Traceroute 程序生成的数据包继续我们的 ICMP实验。 您可能 还记得 Traceroute 程序可用于确定数据包从源到目的地的路径 (路由跟踪)。 Traceroute命令可 以在课本中的 1.4节和 5.6节中找到。

每个系统有不同路由跟踪实现办法,在 Unix / Linux中,路由跟踪 traceroute 使用发送不可到达(无使用的)端口的 UDP包来实现,在 Windows中,路由跟踪 tracert 仅使用 ICMP数据包来实现,但是对于他们来说,都是发送 TTL 增加的数据包,例如 TTL=1,TTL=2,回想下,每经过一个路由器,TTL就会减一,当 TTL=1 的包达到路由器,该路由器会将该包丢弃,并且发送 ICMP 错误给请求的机器,在本次实验,我们使用 window自带的 tracert。有一个跨平台 Windows Traceroute程 序的是 pingplotter(www.pingplotter.com)(收费但可以试用)。 我们将在 Wireshark IP实验室中使用 pingplotter,因为它提供了我们在那里需要的其他功能。

  • 打开 windows的命令提示符

  • 启动 Wireshark数据包嗅探器,并开始 Wireshark数据包捕获

  • tracert程序在 c:\windows\system32目录中,所以您在命令提示符中输入 “tracert hostname” 或 “c:\windows\system32\ tracert hostname”都是正确的(注 意命令是引号里的内容)。其中 hostname是另一个大陆的主机名,我这里路由跟踪的是gaia.cs.umass.edu,这里有29个跃点跟踪。
    在这里插入图片描述

  • 当 Traceroute程序终止时,停止在 Wireshark中捕获数据包
    在这里插入图片描述

我这里还是使用官方提供的数据包:icmp-ethereal-trace-2
在这里插入图片描述

回答问题
5. 您的主机的 IP地址是多少? 目标目标主机的 IP地址是多少?

答:我的主机(官方的包)的IP地址:192.168.1.101 目的主机IP地址:138.96.146.2

  1. 【待理解】如果 ICMP发送了 UDP数据包(如在 Unix / Linux中),那么探测数据包的 IP协议号仍然是 01吗? 如果没有,它会是什么?

答:
我这里的包,没有显示UDP协议(如果是ICMP协议确实是01),可能是要在Linux上来
在这里插入图片描述

  1. 【待理解】检查屏幕截图中的ICMP 响应数据包(traceroute)。 这与本实验的前半部分中的 ICMP ping查询数据包不同吗? 如果不同,请解释为什么?

答:
请求数据包对比:
在这里插入图片描述
响应数据包对应:
在这里插入图片描述

  1. 【待理解】检查屏幕截图中的 ICMP错误数据包。 它具有比 ICMP响应数据包更多的 字段。 这个数据包含哪些内容?

答:
对比traceroute的请求和响应的数据包:
在这里插入图片描述在这里插入图片描述

  1. 检查源主机收到的最后三个 ICMP数据包。 这些数据包与 ICMP错误数据 包有何不同? 他们为什么不同?

答:源主机收到的最后三个ICMP数据包是目的主机发送给我的ICMP回应数据包,因为路由查询是使用逐渐递增TTL的查询数据包,最后的ICMP查询数据包的TTL已经大于到达目的主机中间路由跃点数,因此不会被目标主机丢弃来发送ICMP超时的数据包,所以只会收到ICMP响应数据包。

在这里插入图片描述

  1. 在 tracert跟踪测量中,是否有一个连接的延迟比其他连接长得多? 请参阅屏幕截图,是否有连接的延迟明显长于其他连接? 根据路由器名称,您能猜出这个连接末端的两个路由器的位置吗?

答:根据下图可以很明显的看到,在第8个请求到第11个请求一下子时间多了很多,然后使用**Best trace(可视化的路由跟踪工具)**可以看到目的IP地址为223.120.12.17的所在地已经到了美国,所以时间比较的久,起始位置在上海,终点位置是美国的圣何塞
在这里插入图片描述
在这里插入图片描述


3. 【待完成】额外问题

对于一个编程任务,您可能创建了一个 UDP 客户端 ping 程序。 与标准 ping 程序
不同,此 ping 程序发送 UDP 探测包而不是 ICMP 探测包
。 使用客户端程序将具有
异常目标端口号的 UDP 数据包发送到某个活动主机。 同时,使用 Wireshark 捕获
目标主机的任何响应。 提供响应的 Wireshark 屏幕截图以及响应分析。


参考资料:

https://github.com/moranzcw/Computer-Networking-A-Top-Down-Approach-NOTES

### 使用 Wireshark 捕获分析 HTTP 数据包 #### 安装与启动 为了使用 Wireshark 进行数据包捕获,首先需要确保已正确安装该软件。如果尚未安装,可以根据官方文档或教程完成安装过程[^3]。 启动 Wireshark 可以通过命令 `sudo wireshark-gtk` 实现,在图形化界面上选择合适的网络接口来开始捕获数据包[^2]。对于 HTTP 协议的捕获,默认情况下大多数标准网络接口都可以满足需求。 --- #### 配置过滤器 HTTP 流量通常基于 TCP 协议运行,并默认使用端口 80(未加密)或 443(HTTPS 加密)。因此可以通过设置显示过滤器来专注于这些特定类型的流量: - 输入过滤条件: ```plaintext http || tcp.port == 80 ``` 此过滤器会筛选出所有涉及 HTTP 请求/响应的数据包及其关联的底层 TCP 报文[^4]。 另外还可以利用更高级别的表达式进一步缩小范围,比如只查看 GET 或 POST 方法请求: ```plaintext http.request.method == "GET" ``` 或者针对某个具体的服务器 IP 地址限定抓取目标: ```plaintext ip.addr == 192.168.x.x && http ``` --- #### 开始捕获并保存文件 一旦配置好所需参数后点击“Start Capturing Packets”,即刻便能实时监控经过选定链路上传输的所有符合条件的消息体。当收集到足够的样本数量时停止记录并将结果导出成 .pcap 格式的永久存储副本以便日后查阅研究之用[^1]。 --- #### 分析捕获的数据包 打开之前生成好的 pcap 文件加载至Wireshark主窗口内展示出来。此时每一条目代表单独的一次交互动作;双击任意感兴趣的条目会展开详细视图呈现更多技术细节诸如源目的MAC/IP/TCP序列号等等字段信息。 特别值得注意的是,在处理 HTTPS (SSL/TLS encrypted traffic) 类型连接的时候由于存在加解密机制所以无法像明文那样轻易读取出实际载荷内容除非掌握私钥材料配合额外插件支持才行。 以下是 Python 中 pyshark 对应的操作示范用于自动化批量解析工作流程的一部分片段作为补充参考资料: ```python import pyshark # 初始化离线模式下的捕获对象 cap = pyshark.FileCapture('example.pcap') for packet in cap: try: if 'HTTP' in packet and hasattr(packet.http, 'request_full_uri'): print(f"Request URI: {packet.http.request_full_uri}") except AttributeError as e: pass # Handle missing attributes gracefully cap.close() ``` --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值