Wireshark数据抓包分析之HTTP协议
字数 2403 2025-08-15 21:33:52
HTTP协议数据抓包与分析教学文档
一、HTTP协议基础
1. HTTP协议特性
- 无状态协议:客户端(Web浏览器)和服务器之间不需要建立持久连接
- 请求/响应模型:客户端发送请求,服务器返回响应
- 工作流程:
- 通过TCP三次握手建立连接
- 客户端发送HTTP请求
- 服务器接收请求并返回响应数据
- 通过TCP四次挥手断开连接
2. HTTP报文格式
请求报文格式
请求行(请求方法 URL 协议版本)
请求头部(关键字:值)
空行
请求正文(可选)
响应报文格式
状态行(协议版本 状态码 状态描述)
响应头部(关键字:值)
空行
响应正文
二、实验环境搭建
1. HFS软件配置
- 以管理员身份运行HFS软件
- 配置端口(如8080)
- 在虚拟文件系统区域右键选择"从磁盘添加目录"
- 设置用户名和密码(如demo/demo)
- 在属性中选择"上传"sheet页,选中"任何人"
2. 数据抓取准备
- 在测试机器上打开Wireshark
- 设置过滤条件:
ip.addr == 服务器IP
- 通过浏览器访问HFS服务器
三、HTTP头域详解
1. 请求头域
| Header |
解释 |
| Accept |
指定客户端能够接收的内容类型 |
| Accept-Charset |
浏览器可以接受的字符编码集 |
| Accept-Encoding |
支持的压缩编码类型 |
| Accept-Language |
浏览器可接受的语言 |
| Authorization |
HTTP授权证书 |
| Cache-Control |
缓存机制 |
| Connection |
是否需要持久连接 |
| Cookie |
发送给服务器的cookie值 |
| Content-Length |
请求的内容长度 |
| Content-Type |
请求的MIME信息 |
| Host |
请求的服务器的域名和端口号 |
| User-Agent |
用户浏览器信息 |
2. 响应头域
| Header |
解释 |
| Accept-Ranges |
服务器是否支持指定范围请求 |
| Age |
从原始服务器到代理缓存的估算时间 |
| Cache-Control |
是否可以缓存及哪种类型 |
| Content-Encoding |
返回内容压缩编码类型 |
| Content-Length |
响应体的长度 |
| Content-Type |
返回内容的MIME类型 |
| ETag |
请求变量的实体标签的当前值 |
| Expires |
响应过期的日期和时间 |
| Server |
web服务器软件名称 |
| Set-Cookie |
设置Http Cookie |
3. 通用头域
| Header |
解释 |
| Cache-Control |
缓存机制 |
| Connection |
持久连接设置 |
| Date |
消息发送的时间 |
| Pragma |
实现特定的指令 |
| Upgrade |
指定另一种协议 |
| Via |
经过的代理服务器信息 |
4. 实体头域
| Header |
解释 |
| Allow |
资源支持的方法集 |
| Content-Encoding |
实体数据编码方式 |
| Content-Language |
实体数据采用的自然语言 |
| Content-Length |
实体数据的长度 |
| Content-Location |
实体数据的资源位置 |
| Content-MD5 |
实体数据的MD5值 |
| Expires |
实体数据的有效期 |
| Last-Modified |
内容的最后修订时间 |
四、HTTP方法分析
1. GET方法分析
请求包示例
GET / HTTP/1.1\r\n
Host: 10.1.1.33:8080\r\n
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:37.0) Gecko/20100101 Firefox/37.0\r\n
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3\r\n
Accept-Encoding: gzip, deflate\r\n
Connection: keep-alive\r\n
\r\n
响应包示例
HTTP/1.1 200 OK\r\n
Content-Type: text/html\r\n
Content-Length: 2023\r\n
Accept-Ranges: bytes\r\n
Server: HFS 2.3 beta\r\n
Set-Cookie: HFS_SID=0.248448607278988; path=/; \r\n
Cache-Control: no-cache, no-store, must-revalidate, max-age=-1\r\n
Content-Encoding: gzip\r\n
\r\n
2. POST方法分析
请求包示例
POST /hfs2_3b287/ HTTP/1.1\r\n
Host: 10.1.1.33:8080\r\n
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:37.0) Gecko/20100101 Firefox/37.0\r\n
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3\r\n
Accept-Encoding: gzip, deflate\r\n
Referer: 10.1.1.33:8080/hfs2_3b287/\r\n
Cookie: HFS_SID=0.248448607278988\r\n
Authorization: Basic ZGVtbzpkZW1v\r\n
Connection: keep-alive\r\n
Content-Type: multipart/form-data; boundary=54542580413055\r\n
Content-Length: 367\r\n
\r\n
文件上传部分
MIME Multipart Media Encapsulation, Type: multipart/form-data, Boundary: 54542580413055
Encapsulated multipart part:
Content-Disposition: form-data; name="Filename"
http-post.txt
Encapsulated multipart part:
Content-Disposition: form-data; name="file"; filename="http-post.txt"
Content-Type: text/plain
This is demo for HTTP POST
响应包示例
HTTP/1.1 200 OK\r\n
Content-Type: text/html\r\n
Content-Length: 570\r\n
Accept-Ranges: bytes\r\n
Server: HFS 2.3 beta\r\n
Content-Encoding: gzip\r\n
\r\n
五、Wireshark分析技巧
- 过滤HTTP请求:
http.request.method == "GET" 或 http.request.method == "POST"
- 查看特定IP的通信:
ip.addr == 10.1.1.33
- 分析TCP流:右键数据包 → Follow → TCP Stream
- 查看重组后的HTTP数据:注意TCP重组片段信息
- 分析文件上传:查找
multipart/form-data类型的内容
六、常见状态码
| 状态码 |
说明 |
| 200 |
响应成功 |
| 304 |
资源未修改(使用缓存) |
| 400 |
客户端请求有语法错误 |
| 401 |
请求需要认证 |
| 403 |
服务器拒绝请求 |
| 404 |
请求资源不存在 |
| 500 |
服务器内部错误 |
七、安全注意事项
- 明文传输:HTTP协议传输的数据是明文的,包括认证信息
- Cookie安全:注意分析Cookie中的敏感信息
- 认证信息:Basic认证的凭证是Base64编码(可逆),非加密
- 文件上传:注意检查文件上传功能的过滤机制
- 敏感信息泄露:服务器信息(如Server头)可能暴露系统细节
八、扩展分析
- HTTPS与HTTP的区别:加密传输、端口443、证书验证等
- HTTP/2特性:二进制协议、多路复用、头部压缩等
- 其他HTTP方法:HEAD、PUT、DELETE、OPTIONS等
- RESTful API分析:基于HTTP方法的资源操作
- Web服务安全分析:CSRF、XSS、SQL注入等漏洞的HTTP特征
通过本教学文档,您可以全面了解HTTP协议的工作原理、报文结构以及使用Wireshark进行抓包分析的技巧。建议在实际环境中进行实践操作,加深对HTTP协议的理解。