Wireshark与tcpdump实战:从TCP三次握手到HTTP请求的抓包分析指南
简介东南大学计算机网络第四次实验报告是面向自动化专业《信息通信网络概论》课程的一份完整实验报告对应实验四“计算机网络通信应用程序设计”聚焦TCP/IP与UDP/IP协议下的网络编程实现。报告按实验目的、原理、方案步骤、设备配置、实验记录、总结与附录代码的结构展开详细展示了基于WinSock接口的客户机/服务器通信程序包括套接字创建、绑定、监听、连接、收发数据等关键环节实验记录中还呈现了聊天界面、双方对话以及输入特定指令触发字符画、弹出对话框、打开Windows资源管理器等扩展功能并给出了获取主机名和发送时间的改进方法。该PDF共1个文件大小仅20KB内容紧凑且目录分TCP、UDP两部分便于快速定位。目前已有88人浏览学习适合计算机网络课程学生和实验报告撰写者参考。1. 从东南大学这份 PDF 说起第四次实验报告要回答的问题“东南大学计算机网络第四次实验报告.pdf”——这个标题出现在不少课程群和网盘分享里。第四次实验在不同教学轮次里可能指向不同内容但它真正的考察点只有一个你有没有让协议在真实的网络环境里“现出原形”。这篇笔记按抓包与分析这条主线讲因为它的复现成本最低也最能检验你是否真读懂了 TCP、HTTP 这些基础协议。适合正在做这个实验的学生也适合想用抓包手段排查线上问题的工程师。下面从工具选型开始一步步走到“一份能说服老师的 PDF 报告”。2. 动手前先定三件事抓包工具、实验拓扑、过滤策略2.1 抓包工具选型Wireshark 为主、tcpdump 做兜底抓包分析实验的地基不是 Wireshark 的界面而是抓包引擎本身。Windows 上叫 NpcapLinux 和 macOS 上叫 libpcap。Wireshark 只是一个外壳真正完成抓包动作的是引擎。我一般做这类实验的第一步不是打开 Wireshark而是先把 Npcap 装好并确认它能识别当前网卡。安装时有个容易被忽略的选项要不要勾选支持 802.11 无线帧。如果实验机是笔记本且要通过 Wi-Fi 抓包就勾上如果在实验室用有线网卡可以不勾减少驱动层干扰。Wireshark 适合“人看数据”有图形界面、有协议解析器、能按 TCP 流还原数据。tcpdump 适合“先确认有没有”在命令行里快速看某个端口是否有流量。我习惯的配合方式是先用 tcpdump 做一次轻量探测再开 Wireshark 细看。# 列出当前机器上所有可用的网卡 tcpdump -D # 在 eth0 上抓 10 个 TCP 端口 80 的报文后自动停止 tcpdump -i eth0 -nn tcp port 80 -c 10第一条命令列出网卡索引第二条在 eth0 上抓 10 个 TCP 端口 80 的报文抓够数量就自动退出。-nn表示不做域名解析、不把端口翻译成服务名输出更快也更贴近报文的原始信息。这个“先确认流量存在再打开 Wireshark 细看”的习惯能省下大量时间因为实验课上很多问题不在过滤器写错而是抓包的网卡根本没有流量经过。如果实验环境是无图形界面的服务器Wireshark 的图形界面用不了tcpdump 收集 pcap 文件、再下载到本地用 Wireshark 分析是最稳的路子。我一般这样把抓包结果落盘sudo tcpdump -i eth0 -nn -s 96 -w lab4_http.pcap tcp port 80-s 96是快照长度只取每个报文前 96 字节足够覆盖 TCP 头和大部分 HTTP 请求行体积比全量抓包小得多。落盘后用ls -lh看一眼文件大小每秒几 KB 是正常的几秒就涨到几百 MB说明过滤条件没生效立即 CtrlC 停下来检查网卡和过滤表达式。2.2 实验拓扑单机回环和双机直连分别用在哪个环节到第四次实验时双绞线制作、交换机配置这些基础操作已经做完了实验重心从“把线接对”转向“观察协议行为”拓扑不用复杂。常见做法有两种单机回环和双机直连。单机回环是最省事的场景本机访问本机上的 Web 服务报文全部经过 lo 接口。这个拓扑下抓包几乎不受局域网内其他机器干扰HTTP 请求和响应都在同一条链路上逻辑清晰。不足之处是缺少真实网络环境里的 MAC 转发、路由决策这些环节。如果报告想讨论 IP 分片、拥塞控制单机回环不太够。双机直连是用一根网线把两台电脑连起来一台当服务器另一台当客户端用浏览器或 curl 访问。这个拓扑能看到完整链路报文IP 地址、MAC 地址、网卡型号都会出现在帧里报告能讨论的内容更多。代价是两台机器的防火墙必须放行对应端口否则抓包会“干净”到只剩 ARP 广播。实验要求推荐拓扑原因只要三次握手、HTTP 请求、TCP 序号变化单机回环干扰小过滤简单要求体现 IP、MAC、跨网段路由双机直连或加路由器能看到链路层与网络层字段要求观察重传、拥塞控制双机直连加限速能人为制造丢包和延时双机直连时我会在一台机器上起一个极简 HTTP 服务python3 -m http.server 8080 --bind 0.0.0.0这个命令不需要装任何额外组件Python 3 自带。8080 端口可以避开常见 80 端口冲突--bind 0.0.0.0表示监听所有网卡另一台机器才能访问到。Windows 防火墙第一次运行时会弹窗要选“允许”否则客户端请求一直超时。客户端那台机器用 curl 发起请求curl -v http://192.168.1.10:8080/test.html-v参数会打印整个 HTTP 会话过程包括 TCP 握手、请求头、响应头。这个输出和 Wireshark 里的报文是能逐行对上的也是报告里很有说服力的对照证据。2.3 过滤策略先行别把书包回来再慢慢找大多数实验翻车不是不会抓包而是“全量抓包”之后在几千个报文里找不到目标流。正确顺序是先想清楚要证明什么再确定过滤器。比如实验要求分析 TCP 三次握手关心的就是“去往某个 IP 的 8080 端口的所有 TCP 报文”过滤器只保留这一条流其他报文根本不进内存。Wireshark 有两种过滤器概念完全不同混用是新手最容易踩的坑之一。捕获过滤器在抓包前设置让不匹配的报文不进入内存语法基于 pcap-filter显示过滤器在抓包后对已有结果再筛选语法是 Wireshark 自己的显示过滤器语法。通俗说前者是进门前拦人后者是进门后点名。捕获过滤器常用写法host 192.168.1.10 and tcp port 8080显示过滤器常用写法tcp.stream eq 0 http.request我会在开抓之前先限好捕获范围比如单机回环时只需要tcp port 8080这样抓回来的包几乎全是实验要用的。如果捕获过滤器写错报文计数不增长不要急着怀疑网卡先回“捕获选项”里确认本机 IP 和网卡选择再把 IP 和协议组合写进过滤器重试。3. 从启动抓包到拿下关键报文一条可复现的命令链路3.1 先用 tcpdump 确认流量再用 Wireshark 读细节完整的抓包流程不需要在 Wireshark 图形界面里点来点去。我一般先在终端里做一轮“冒烟测试”确认流量真实存在再考虑要不要打开 Wireshark。# 在回环接口上抓 20 个 TCP 报文显示源目 IP 和端口 tcpdump -i lo -nn tcp -c 20回环接口的 IP 是 127.0.0.1-i lo指定它。-c 20抓 20 个报文自动退出不会无限阻塞终端。如果这条命令刷出了大量 127.0.0.1 之间的 TCP 连接说明本机确实有程序在跑网络通信如果等了半天一行输出都没有说明要么端口不对要么网卡选错先 CtrlC 停掉再查。冒烟测试通过之后再启动正式抓包把结果写到文件sudo tcpdump -i lo -nn -s 96 -w lab4_tcp.pcap tcp port 80注意tcpdump 捕获过滤器不支持 Wireshark 的http.request这种写法只能用tcp port 80这种 pcap-filter 语法。HTTP 是承载在 TCP 之上的过滤tcp port 80就能把 HTTP 报文带回来。抓完文件后用ls -lh lab4_tcp.pcap检查文件大小再拖进 Wireshark 分析。3.2 抓一次完整的 TCP 三次握手与 HTTP 请求我习惯的复现步骤如下先启动 Wireshark 捕获再用浏览器或 curl 访问实验页面最后停止捕获用显示过滤器定位关键的几个报文。# 在本地 8080 端口起一个临时 HTTP 服务 python3 -m http.server 8080 --bind 0.0.0.0 # 另开终端发起一次请求并打印详细过程 curl -v http://127.0.0.1:8080/index.htmlWireshark 里显示的过滤表达式用这几条tcp.port 8080 tcp.flags.syn 1 tcp.flags.ack 0 tcp.stream eq 0第一条把所有涉及 8080 端口的报文筛出来第二条只显示 SYN 报文也就是三次握手的第一个报文第三条把整条 TCP 流拿出来按顺序看握手和 HTTP 请求。解析顺序是固定的先是客户端发 SYNtcp.flags.syn 1然后是服务端回 SYNACKtcp.flags.syn 1 tcp.flags.ack 1最后客户端回 ACK。三次握手完成后客户端立刻发出 HTTP GET 请求。在 Wireshark 的分组详情里点开 HTTP 层能看到请求方法、URL、Host 头这些字段直接写进报告就是最好的证据。实验报告里描述这个过程的常规写法是先贴三次握手的三个报文截图再说明每条报文的源 IP、目的 IP、源端口、目的端口、SEQ 和 ACK 值变化最后落到 HTTP 请求的形态上。不要复制网上现成的“三次握手文字描述”要对着自己抓到的报文写老师一眼就能分辨。3.3 三个必须调的参数快照长度、时间戳、文件分片大小抓包实验最常被忽视的就是参数设置三个参数直接影响实验结果能不能复现。第一个是快照长度Snaplen。tcpdump 的-s参数决定每个报文抓多少字节。实验目的是 TCP 头部分析时96 字节足够要做 HTTP 负载分析、TCP 重传分析建议抓 256 字节以上。抓全量虽然最完整但文件体积会膨胀到几 GBWireshark 打开都卡。我的默认值是-s 256平衡了头部分析和部分负载分析的需求。第二个是时间戳显示格式。Wireshark 默认显示相对时间也就是某个报文距离第一个报文的毫秒数这在看延迟时有用但写报告要对照实验记录时就不方便。做法是在“视图 - 时间显示格式”里改成“日期和时间的绝对时间”并确保时区设置成 Asia/Shanghai。否则你报告里写的“14:30 发起请求”Wireshark 里显示的是 UTC 时间两个时间对不上答辩时解释不清楚。第三个是抓包文件的分片。实验要持续十几分钟中间又不能停可以设置 Wireshark 的环形缓冲在捕获选项里把文件大小设为 20 MB文件数设个 5Wireshark 会自动滚动覆盖旧的抓包文件。这样既不会撑爆磁盘又保留了最近五分钟左右的完整报文。tcpdump 也有类似机制sudo tcpdump -i lo -nn -s 256 -w lab4_%Y%m%d%H%M%S.pcap -C 20 -W 5 tcp port 8080-C 20表示单个文件到 20 MB 就切换新文件-W 5表示最多保留 5 个文件%Y%m%d%H%M%S是文件名里的时间戳模板。这套参数适合长时间无人值守抓包。4. 报告的数据从哪来保存证据、统计视图与截图取舍4.1 pcap 文件就是实验原始记录实验报告里最常见的问题是“只有结论没有原始数据”。老师看一份协议分析报告最想看到的是你能拿出抓包文件证明自己真的做过。pcap 文件就是你的实验原始记录像会计凭证一样可以追溯。抓包结束后我一般会存两个版本一个完整版包含所有抓到的报文一个过滤版只保留分析要用的那几条流。完整版用原始文件名保存过滤版在 Wireshark 里用“文件 - 导出特定分组”选择当前显示过滤器的结果再另存。这样报告里引用的每个表本文还有配套的精品资源点击获取