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 流量。
```
    
【励志篇】:
古之成大事掌大学问者,不惟有超世之才,亦必有坚韧不拔之志。
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号