HTTP/HTTPS 与抓包入门

从浏览器访问网页开始,理解 HTTP 与 HTTPS 的工作过程,学习 tcpdump、Wireshark、curl 等抓包和验证方法,并强调合法授权边界。

写在前面:合法学习边界

抓包、代理、重放请求和测试漏洞都属于访问和分析网络流量的行为。本文只演示在你自己的电脑、你自己搭建的靶场、公司授权测试环境或明确书面授权目标上可以做的学习动作。请不要对陌生网站、企业内网、他人服务器进行抓包、爆破、篡改请求、绕过认证或漏洞利用。未经授权访问、干扰、篡改网络服务和数据,可能违反《网络安全法》《数据安全法》《个人信息保护法》和《刑法》相关规定。

一、HTTP 与 HTTPS 到底在做什么

浏览器访问一个网页时,并不是简单地把网址发给服务器。浏览器先解析域名,找到服务器 IP,再建立 TCP 连接。如果是 HTTP,浏览器会在 TCP 上发送请求;如果是 HTTPS,浏览器会先和服务器完成 TLS 握手,建立加密通道,再在加密通道中发送 HTTP 请求。

HTTP 是应用层协议,规定请求方法、路径、请求头、请求体、状态码和响应头。HTTPS 可以理解为 HTTP over TLS:业务仍是 HTTP,但传输过程经过 TLS 加密和认证。

一次典型访问流程如下:

1
2
3
4
5
6
1. DNS 解析域名到 IP
2. TCP 三次握手建立连接
3. 若为 HTTPS,执行 TLS 握手并验证证书
4. 客户端发送 HTTP 请求
5. 服务器返回 HTTP 响应
6. 浏览器渲染页面并继续请求 CSS、JS、图片等资源

学习抓包时,关键是分清“网络层连接”“TLS 加密通道”和“HTTP 应用报文”这三层。

二、HTTP 请求和响应的核心字段

HTTP 请求一般由请求行、请求头、空行和请求体组成。示例:

1
2
3
4
5
GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0
Accept: text/html
Cookie: session=abc123

HTTP 响应一般由状态行、响应头、空行和响应体组成。示例:

1
2
3
4
5
HTTP/1.1 200 OK
Server: nginx
Content-Type: text/html; charset=utf-8
Set-Cookie: sid=xyz456; HttpOnly; Secure
Content-Length: 1234

常见状态码需要会看:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
200 OK:请求成功
301/302:重定向
304 Not Modified:资源未变化
400 Bad Request:请求格式错误
401 Unauthorized:未认证
403 Forbidden:无权限
404 Not Found:资源不存在
500 Internal Server Error:服务器内部错误
502 Bad Gateway:网关或代理错误
503 Service Unavailable:服务不可用

安全分析时,不能只关注 500。大量 404、403、401、302 也可能是扫描、爆破、越权测试或登录失败的线索。

三、HTTPS 加密了什么,没有加密什么

HTTPS 在传输过程中保护请求和响应内容。抓包时,普通 HTTPS 流量通常只能看到 TCP 包、TLS 握手、Server Name Indication 中的域名、证书信息和密文,不能直接看到 Cookie、登录表单、请求体和响应体。

但 HTTPS 也不等于绝对安全:

1
2
3
4
它保护传输过程,不代表后端没有 SQL 注入
它保护 Cookie 不被明文传输,不代表 Cookie 一定设置了 HttpOnly
它验证服务器身份,不代表用户没有点错钓鱼站点
它加密应用数据,不代表日志、数据库、缓存和 API 权限设计是安全的

所以安全人员抓 HTTPS 流量时,通常会关注连接目标、证书、TLS 版本、SNI、访问频率、重放请求模式和代理链路,而不是指望直接看到密文内容。

四、用 curl 观察 HTTP 和 HTTPS

curl 是学习和验证 Web 服务最常用的命令行工具之一。以下命令默认访问公开示例网站,适合学习响应头和 TLS 信息。

1. 只查看响应头

1
curl -I http://example.com

参数说明:-I 表示只发送 HEAD 请求或只关心响应头。

2. 查看 HTTPS 详细信息

1
curl -v https://example.com --max-time 10

-v 会显示 DNS、连接、TLS 握手、请求头和响应头。--max-time 10 限制最多等待 10 秒,避免卡住。

3. 不验证证书(仅用于理解风险)

1
curl -k https://example.com

-k 会跳过证书验证。生产学习和真实测试中不要养成依赖 -k 的习惯。它只能用于理解证书错误的影响,不能用于绕过安全控制。

4. 带超时和输出保存

1
2
3
4
5
6
curl -A 'security-learning' \
  -H 'Accept: text/html' \
  -o response.html \
  -w 'HTTP %{http_code}, time %{time_total}s\n' \
  --max-time 10 \
  https://example.com

这个命令保存响应体,并打印状态码和耗时。注意自定义 User-Agent 可能触发风控或访问规则,使用前应确认目标授权和测试规范。

五、用 tcpdump 抓包入门

tcpdump 是 Linux 下常见的命令行抓包工具。抓包通常需要 root 权限,因为它要读取网络接口上的原始包。

1. 查看网络接口

1
ip addr

找到当前上网使用的接口。Linux 常见接口名有 eth0ens33enp0s3wlan0 等。

2. 抓取指定域名的 DNS 和 TCP 流量

1
sudo tcpdump -i any host example.com -nn -c 50

参数说明:

1
2
3
4
-i any:在任意接口抓包,部分系统可能不支持
host example.com:只抓与 example.com 相关的包
-nn:不解析 IP 和端口
-c 50:抓到 50 个包后自动停止

如果 any 不支持,可以改成实际接口:

1
sudo tcpdump -i eth0 host example.com -nn -c 50

3. 只抓 HTTPS 流量

1
sudo tcpdump -i any host example.com and port 443 -nn -c 100

这通常会看到与目标服务器 443 端口相关的 TCP 包,但不会看到完整 HTTPS 明文内容。

4. 抓 HTTP 明文流量

1
sudo tcpdump -i any host example.com and port 80 -A -nn -c 100

-A 会尝试以 ASCII 显示包内容。HTTP 流量中可能看到请求行、Cookie、表单参数等敏感信息。这正是为什么要使用 HTTPS、最小化日志记录、避免在 HTTP 中提交敏感信息。

5. 保存抓包文件

1
sudo tcpdump -i any host example.com -nn -c 200 -w capture.pcap

之后可以用 Wireshark 打开 capture.pcap 做过滤和分析。

六、用 Wireshark 做可视化分析

Wireshark 是图形化抓包和分析工具,适合新手理解包结构。安装方式以系统为准:

1
2
sudo apt update
sudo apt install wireshark

启动抓包:

1
sudo wireshark

也可以使用命令行启动并指定接口:

1
sudo wireshark -i eth0 -k

Wireshark 常用过滤器:

1
2
3
4
5
ip.addr == 93.184.216.34
tcp.port == 443
http
tls.handshake.type == 1
http.request.method == "GET"

安全分析时可以关注:请求频率、异常方法、异常路径、异常 User-Agent、重复登录失败、大量 404、异常 Cookie 和非浏览器 TLS 指纹。

七、一个最小学习案例:访问本地 HTTP 服务

为了安全地练习,建议在本地搭建 HTTP 服务,而不是抓真实业务系统。

1. 启动一个本地测试服务

1
python3 -m http.server 8000

该命令会在 127.0.0.1:8000 提供当前目录的静态文件服务。它只适合学习和本地演示,不要直接暴露到公网。

2. 在另一个终端访问

1
curl -v http://127.0.0.1:8000/

你应该能看到:

1
2
3
GET / HTTP/1.1
Host: 127.0.0.1:8000
HTTP/1.1 200 OK

3. 抓本地 HTTP 包

1
sudo tcpdump -i any host 127.0.0.1 and port 8000 -A -nn -c 100

然后访问网页或执行 curl。你会看到 HTTP 明文请求和响应,这是理解 Cookie、Header、URL 编码和状态码的好材料。

八、HTTP 中常见的安全问题与抓包视角

抓包帮助你看见“数据如何被发送”,但安全问题往往发生在服务器如何解析和处理这些数据。

HTTP 明文传输时,Cookie 可能被同路径上的抓包者看到。防御方式包括强制 HTTPS、设置 SecureHttpOnly 和合理的 SameSite 属性。

2. 敏感信息出现在 URL

1
2
3
?password=123456
?token=abcdef
?sessionid=xyz

URL 容易被浏览器历史、代理日志、Referer 头和监控系统记录。敏感信息应优先放在请求体中,并使用 HTTPS 和安全的令牌管理。

3. 请求重放和状态改变

GET 请求本应安全且幂等,不应造成危险的业务状态变化。若 POST、PUT、DELETE 没有鉴权、CSRF 防护或幂等控制,可能导致越权修改。抓包和重放测试只能在授权环境下进行。

4. 响应泄露

服务器响应可能泄露版本号、堆栈信息、内部路径、配置项或错误详情。安全设计应隐藏内部实现细节,保留服务端日志供授权团队排查。

九、从抓包结果到安全判断

抓包不是为了“看到更多秘密”,而是为了判断通信是否符合预期。可以问自己几个问题:

1
2
3
4
5
6
7
是否所有敏感访问都使用 HTTPS?
是否存在明文 Cookie 或明文密码传输?
是否存在异常频率的请求?
状态码是否异常,例如大量 404、403、401?
是否有重复请求、重放请求或参数异常?
证书是否可信、是否过期、是否域名不匹配?
服务器是否泄露版本、堆栈或内部路径?

如果你能根据抓包结果回答这些问题,就已经开始具备 Web 安全分析和日志分析的基础。

十、小结

HTTP/HTTPS 抓包入门的重点不是记住多少工具参数,而是形成分层思维:DNS 找地址,TCP 建连接,TLS 保加密,HTTP 做应用交互。HTTP 可以看见明文,HTTPS 保护传输内容但无法替代应用安全。工具方面,curl 适合快速验证响应和 TLS,tcpdump 适合命令行抓包和保存 pcap,Wireshark 适合图形化分析。

下一步建议进入 Linux 基础,理解用户、权限和文件系统。很多安全问题最终都会回到 Linux:进程以谁的身份运行、配置文件谁能改、日志在哪里、Web 目录权限是否合理、上传文件是否可执行。