简介:这份资源是西北工业大学软件学院计算机网络课程的实验报告,面向正在学习计算机网络、需要完成HTTP协议相关实验的高校学生。报告围绕Wireshark抓包分析展开,涵盖HTTP基础GET/响应交互、条件GET与缓存机制、长文档检索以及含嵌入对象的HTML文档四个实验,逐一记录请求方法、HTTP版本、可接受语言、IP地址、状态码、内容字节数等关键字段的观察结果,并涉及分块传输、持续连接与CDN等概念。资源包内含1个doc文档,压缩包约6.62MB,结构完整,可直接对照实验步骤与问题逐条复盘。目前已有1647人学习下载。读者可借此掌握HTTP请求与响应的构建方式、状态码含义、缓存策略及数据包分析技巧,适合网络编程、网站开发与网络安全分析方向的学习者作为实验参考与排错对照。
1. 西工大软件学院计网实验:一份能直接跑通的报告长什么样
如果你正在搜“西北工业大学软件学院计算机网络实验报告”,大概率不是想找一篇论文来读,而是手里有个实验要做,或者报告要交,想看看别人是怎么把 Wireshark 抓包、Socket 编程、路由配置这些环节串起来的。这份资源就是围绕西工大软件学院计网实验课程整理的一套实验报告合集,覆盖了从数据链路层到应用层的典型实验项目,每个实验都包含实验目的、环境、步骤、结果分析和结论。它适合两类人:一是正在上这门课、需要对照实验流程和报告格式的软件学院学生;二是自学计算机网络、想找一套有完整操作记录和结果分析的实验参考的开发者。核心价值不在于理论多深,而在于它把“实验怎么做、数据怎么记、报告怎么写”这条链路走通了,你拿到手就能对着自己的环境复现一遍。
2. 实验报告的结构拆解:从抓包到结论的完整链路
2.1 一份合格报告里必须有的五个模块
翻完这套报告,你会发现每份实验的骨架基本一致,差别只在具体协议和工具。这五个模块分别是:实验目的、实验环境与工具、实验步骤与命令、实验结果与截图、结果分析与结论。实验目的通常两三句话,点明这次要验证哪个协议或机制,比如“验证 TCP 三次握手中 SYN、SYN-ACK、ACK 的序号变化”。实验环境写清楚操作系统版本、抓包工具版本、编程语言运行时,这部分很多人写报告时容易糊弄,但恰恰是复现时最需要的——Wireshark 3.x 和 4.x 的界面和过滤器语法有差异,不写版本,别人照着做就可能卡住。
实验步骤是报告里最值钱的部分。好的步骤不是流水账,而是把每条命令、每个过滤器表达式、每次点击操作都写清楚,并且说明“为什么这么做”。比如抓 TCP 握手包,步骤里会写:先启动 Wireshark 选定网卡,设置过滤器tcp.port == 80,然后用浏览器访问一个 HTTP 站点,最后停止抓包并筛选出三次握手的三条记录。这里的关键是过滤器表达式要写对,tcp.port == 80和tcp.port eq 80等价,但写成tcp.port = 80就会报语法错误,这是新手常翻车的地方。
实验结果部分,截图要能看清关键字段,比如序号、确认号、标志位。分析部分则要把截图里的数字和理论对上,比如“客户端初始序号为 0,服务端回复的确认号为 1,说明服务端期望下一个字节的序号是 1”。结论不用长,但要有自己的话,不能只抄实验指导书。
2.2 报告里那些容易被忽略的格式细节
西工大软件学院的实验报告一般有固定模板,封面包含课程名称、实验名称、姓名、学号、日期,正文用宋体小四或五号,代码和命令用等宽字体。这些格式要求看着琐碎,但提交时格式不对,内容再好也可能被扣分。这套资源里的报告基本遵循了模板,你可以直接对照调整自己的文档。
另一个细节是截图命名。很多人截图后随手粘贴,结果报告里全是“屏幕截图 2024-xx-xx.png”,老师翻到后面根本对不上哪张图对应哪个步骤。规范做法是按“实验序号-步骤序号-内容”命名,比如“exp2-step3-tcp-handshake.png”,然后在正文里用“如图 2-3 所示”引用。这套报告里大部分截图都做了编号和引用,你可以直接借鉴这个习惯。
提示:如果你用的 Wireshark 版本和报告里不一致,过滤器语法和菜单位置可能有细微差别,建议先确认版本号,再对照调整操作路径。
3. 动手复现:Wireshark 抓包与 Socket 编程实验的完整操作
3.1 用 Wireshark 抓一次完整的 TCP 握手与挥手
先确保你装了 Wireshark,Windows 下安装时记得勾选 Npcap,否则抓不到本地回环以外的流量。打开 Wireshark,选中有流量的网卡,比如 WLAN 或以太网,然后在过滤器栏输入tcp,点击开始捕获。接着在浏览器访问一个 HTTP 网站,比如http://example.com,等页面加载完,停止捕获。
现在过滤器里输入tcp.flags.syn == 1 and tcp.flags.ack == 0,这条表达式筛出所有 SYN 包,也就是握手的第一步。你应该能看到一条从你的 IP 发往目标 IP 的记录,标志位显示 SYN,序号是相对值。接着输入tcp.flags.syn == 1 and tcp.flags.ack == 1,筛出 SYN-ACK 包,这是服务端的回复。最后输入tcp.flags.ack == 1 and tcp.flags.syn == 0,筛出纯 ACK 包,完成三次握手。
# 如果你习惯用 tshark 命令行抓包,可以用下面这条命令 # -i 指定网卡,-f 是 BPF 过滤器,-Y 是显示过滤器,-c 限制包数 tshark -i eth0 -f "tcp port 80" -Y "tcp.flags.syn == 1" -c 10 -w tcp_syn.pcap这条命令里,-i eth0指定抓包网卡,Linux 下常见的是 eth0 或 wlan0,Windows 下用tshark -D先列出网卡编号。-f "tcp port 80"是捕获过滤器,只抓 80 端口的 TCP 包,减少噪音。-Y是显示过滤器,在已抓到的包里筛选 SYN 包。-c 10表示抓满 10 个包就停。-w把结果存成 pcap 文件,方便后续用 Wireshark 打开分析。
抓完握手,再抓一次挥手。访问完页面后,在 Wireshark 里找 FIN 包,过滤器用tcp.flags.fin == 1。通常你会看到四条记录:一方发 FIN,另一方回 ACK,然后另一方发 FIN,最后一方回 ACK。注意看序号和确认号的变化,FIN 包会消耗一个序号,这是分析时容易搞混的点。
3.2 用 Python 写一个 TCP 客户端和服务端验证连接过程
抓包看的是现象,自己写代码能更直观地理解 Socket 的连接和断开。下面是一个最简单的 TCP 服务端和客户端示例,你可以在一台机器上开两个终端分别运行。
# tcp_server.py import socket # 创建 TCP socket,AF_INET 表示 IPv4,SOCK_STREAM 表示 TCP server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 设置端口复用,避免重启时提示地址已被占用 server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) # 绑定地址和端口,0.0.0.0 表示监听所有网卡 server_socket.bind(('0.0.0.0', 9999)) # 开始监听,参数 1 表示等待队列长度 server_socket.listen(1) print('服务端已启动,等待连接...') # 接受客户端连接,accept 会阻塞直到有客户端连上来 client_socket, client_addr = server_socket.accept() print(f'客户端 {client_addr} 已连接') # 接收数据,缓冲区大小 1024 字节 data = client_socket.recv(1024) print(f'收到消息: {data.decode()}') # 回复客户端 client_socket.sendall('你好,我是服务端'.encode()) # 关闭连接 client_socket.close() server_socket.close()# tcp_client.py import socket # 创建 TCP socket client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 连接服务端,注意 IP 换成服务端实际地址 client_socket.connect(('127.0.0.1', 9999)) # 发送数据 client_socket.sendall('你好,我是客户端'.encode()) # 接收服务端回复 response = client_socket.recv(1024) print(f'服务端回复: {response.decode()}') # 关闭连接 client_socket.close()先运行python tcp_server.py,再开一个终端运行python tcp_client.py。服务端会打印客户端地址,客户端会收到服务端的回复。这个过程中,你可以同时用 Wireshark 抓回环网卡(Windows 下选 Npcap Loopback Adapter,Linux 下选 lo),过滤器用tcp.port == 9999,就能看到完整的握手、数据传输和挥手过程。
参数方面,SO_REUSEADDR是为了避免服务端重启时端口还被占用,listen(1)的参数是等待队列长度,实际生产环境会设大一些。recv(1024)的 1024 是每次最多接收的字节数,如果数据超过这个长度,需要循环接收。这些细节在实验报告里写清楚,分析部分就有东西可写。
注意:如果你在 Windows 上抓回环流量,需要单独安装 Npcap 的 Loopback 支持,否则看不到 127.0.0.1 的包。Linux 下直接用 lo 网卡即可。
4. 避坑与排查:实验报告里最容易翻车的五个地方
4.1 抓不到包,Wireshark 接口列表是空的
现象:打开 Wireshark,接口列表里只有一两个选项,或者干脆没有可选的网卡。原因通常是 Npcap 没装好,或者安装时没勾选“支持回环流量”。解决方法是重新运行 Wireshark 安装程序,选择修复安装,确保 Npcap 组件被勾选。如果是在 Linux 下,检查当前用户是否在 wireshark 组里,用sudo usermod -aG wireshark $USER添加后重新登录。
4.2 过滤器语法报错,包筛不出来
现象:在过滤器栏输入表达式后,栏位变红,提示语法错误。原因多半是用了赋值符号=而不是比较符号==,或者字段名拼错。比如ip.addr = 192.168.1.1是错的,正确写法是ip.addr == 192.168.1.1。另一个常见错误是把捕获过滤器和显示过滤器搞混,捕获过滤器用 BPF 语法,显示过滤器用 Wireshark 自己的语法,两者不能混用。解决方法是先查 Wireshark 官方文档的显示过滤器参考,确认字段名和运算符。
4.3 Socket 程序报“Address already in use”
现象:运行服务端代码时提示地址已被占用。原因是上一次运行的程序没有正常关闭,端口还处于 TIME_WAIT 状态。解决方法是在代码里加setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1),或者等几十秒再运行。如果是在 Windows 下,可以用netstat -ano | findstr 9999找到占用端口的进程,再用任务管理器结束它。
4.4 报告截图模糊,关键字段看不清
现象:提交报告后老师反馈截图看不清序号或标志位。原因是截图时没有放大关键区域,或者保存时压缩过度。解决方法是在 Wireshark 里选中目标包,展开协议细节,调整窗口大小让关键字段完整显示,然后用系统截图工具截取,保存为 PNG 格式。不要用 JPG,JPG 压缩会糊掉小字。如果截图区域太小,可以用画图工具放大后再截。
4.5 实验结论写成流水账,没有分析
现象:报告的结果分析部分只写了“我抓到了包,看到了三次握手”,没有结合具体数字。原因是没理解实验要验证什么。解决方法是每写一句结论,都问自己“这个数字说明了什么”。比如“客户端初始序号为 0,服务端确认号为 1,说明服务端期望下一个字节的序号是 1,这符合 TCP 的累积确认机制”。把理论和数据对上,分析部分就有深度了。
5. 进阶技巧:用 tshark 批量分析抓包文件并自动生成报告素材
当你做完几个实验,手里攒了一堆 pcap 文件,一个个用 Wireshark 打开分析效率太低。我一般会用 tshark 写个小脚本,批量提取关键字段,直接生成可以贴进报告的表格。下面这个例子提取每个 pcap 文件里的 TCP 握手包信息。
#!/bin/bash # 批量分析当前目录下所有 pcap 文件,提取 SYN 包的关键字段 for file in *.pcap; do echo "=== 文件: $file ===" # -r 读取文件,-Y 显示过滤器,-T fields 输出指定字段 # -e 指定字段名,-E 设置分隔符 tshark -r "$file" -Y "tcp.flags.syn == 1 and tcp.flags.ack == 0" \ -T fields -e ip.src -e ip.dst -e tcp.srcport -e tcp.dstport -e tcp.seq \ -E separator=, -E header=y echo "" done这段脚本里,-r指定读取的 pcap 文件,-Y是显示过滤器,只筛 SYN 包。-T fields表示输出字段模式,-e后面跟要提取的字段名,比如ip.src是源 IP,tcp.seq是序号。-E separator=,把输出分隔符设为逗号,方便粘贴到 Excel。-E header=y表示输出表头。运行后你会得到每个文件里 SYN 包的源 IP、目的 IP、源端口、目的端口和序号,直接复制到报告里就是一张干净的表格。
如果你想进一步自动化,可以把输出重定向到 CSV 文件,然后用 Python 的 pandas 读取并生成图表。比如统计每个实验里握手成功的次数、平均握手时延等。这些数据放在报告的分析部分,比单纯截图更有说服力。
另一个实用技巧是给 pcap 文件打标签。在 Wireshark 里可以用File -> Export Specified Packets把筛选后的包单独存成一个文件,命名时带上实验序号和协议名,比如exp3-tcp-handshake.pcap。这样后面写报告时找素材不用翻整个抓包记录。我自己的习惯是每做完一个实验,立刻把关键包导出并命名,同时用 tshark 跑一遍字段提取,把结果存成 CSV。等到写报告时,直接打开 CSV 对照截图写分析,效率高很多。
从那以后我每次做实验都强制走一遍“抓包-导出-字段提取”的流程,不再等到写报告时对着一堆乱糟糟的 pcap 文件发愁。希望这套西工大软件学院的实验报告资源和上面的操作思路,能帮你把计网实验做得更顺。
本文还有配套的精品资源,点击获取