打赏

44-tcpdump抓取并显示http请求和响应

tcpdump抓取http请求和响应

(1.)tcpdump抓取http请求,并显示请求和响应

tcpdump -i any -A -s 0 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)' | grep -E 'GET|POST|PUT|DELETE|code'
```
参数说明:
-i any:监听所有网卡(也可指定如 eth0、wlan0)。

-A:以 ASCII 格式输出,方便直接查看 HTTP 文本。

-s 0:捕获完整数据包(避免截断)。

tcp port 80:过滤 HTTP 流量(如果是 HTTPS,改用 port 443)。

剩余部分:过滤 TCP 数据包中的实际数据(排除空包)。

(2.)过滤 HTTP 响应
```
sudo tcpdump -i any -A -s 0 'tcp port 80 and (tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x48545450)'
```
(3.)监控特定主机的 HTTP 流量
```
sudo tcpdump -i any -A -s 0 'tcp port 80 and host 192.168.1.100'
```
(4.)过滤HTTP请求(GET、POST)
```
sudo tcpdump -i any -A -s 0 'tcp port 80 and (tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420 or tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504f5354)'
```
说明:0x47455420:GET 的十六进制。

0x504f5354:POST 的十六进制。
(5.)过滤 HTTP 响应(状态码 200)
```
sudo tcpdump -i any -A -s 0 'tcp port 80 and (tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x48545450)'
```
#### linux抓http包工具
(1.) ngrep(网络层 grep)
```
# Debian/Ubuntu
sudo apt install ngrep

# CentOS/RHEL
sudo yum install ngrep
```
抓取所有 HTTP 流量(包含请求和响应)
```
sudo ngrep -d any -W byline port 80

-d any:监听所有网卡。

-W byline:按行显示,方便阅读。

port 80:仅抓取 HTTP 流量(HTTPS 用 port 443)。
```
只抓取 GET/POST 请求
```
sudo ngrep -d any -q -W byline '^(GET|POST)' port 80

-q:静默模式(只显示匹配的数据)。

'^(GET|POST)':正则匹配 HTTP 方法。
```
(2.) httpry(专用于 HTTP 流量抓取)
```
# Debian/Ubuntu
sudo apt install httpry

# CentOS/RHEL
sudo yum install httpry
```
使用
```
sudo httpry -i eth0
```
(3.) tcpflow(按会话重组 TCP 流)
tcpflow 可以重组 TCP 会话,方便查看完整的 HTTP 请求和响应。

安装
```
bash
# Debian/Ubuntu
sudo apt install tcpflow

# CentOS/RHEL
sudo yum install tcpflow
```
使用示例
抓取 HTTP 流量并显示
```
sudo tcpflow -i any -C port 80
-i any:监听所有网卡。

-C:输出到终端(彩色高亮)。

port 80:仅抓取 HTTP 流量。
```
posted @ 2025-05-08 15:51  苍山落暮  阅读(180)  评论(0)    收藏  举报