Linux如何抓取HTTP请求包

说实话,我在做网络抓包这事儿的时候,发现工具组合用得巧不巧,直接关系到效率高不高。
就拿Linux下抓HTTP请求包来说吧,纯手把手教你几招,我都是这么过来的。

---
场景1 :临时调试,只想看大概流程
记得上次测试新API接口,服务器那边突然出问题,但日志全对。
我直接打开终端,敲了句 sudo tcpdump -i any 'tcp port 8 0 or tcp port 4 4 3 ' -A | grep GET。
这命令啥意思?简单说就是:
-i any:监听所有网卡,省得猜哪个接口有流量。

'tcp port 8 0 or tcp port 4 4 3 ':用BPF过滤,只看HTTP(8 0)和HTTPS(4 4 3 )。

-A:把数据包内容以ASCII形式打印出来。

grep GET:过滤出GET请求。

结果?瞬间看到一堆乱码,夹杂着 GET /api/test HTTP/1 .1 这种明文。
虽然能看个大概,但HTTPS流量直接是二进制乱码,HTTP请求可能还分好几个TCP包没重组好。
当时我就想,这玩意儿适合临时应急,真要细查?还得换工具。

场景2 :抓包+解析,需要具体字段
后来抓到一个生产环境问题,用户说POST请求没响应。
光用tcpdump不行啊,得知道POST请求体是啥,目标URL在哪。
这时候tshark登场了。
我用了这个命令: bash sudo tshark -i eth0 -f "tcp port 8 0" -Y "http.request" -T fields -e http.request.method -e http.request.uri -e http.host
这命令为啥好?你看:
-i eth0:指定网卡,抓得准。

-f "tcp port 8 0":过滤8 0端口流量。

-Y "http.request":只看HTTP请求包。

-T fields -e ...:输出特定字段,比如请求方法、URL、Host头。

结果?直接看到一行行 POST /submit HTTP/1 .1 ,IP地址也清楚。
再想看请求体?加个 -e http.request.body 就行。
HTTPS流量?虽然不解密,但能看到 POST /api/login HTTP/1 .1 这种,知道用户在干嘛。

场景3 :模拟请求,验证请求是否按预期发出去
有个情况特别有意思,比如你要改前端代码,不确定请求头是不是改对了。
这时候直接用tshark看抓包,不如自己用curl跑一遍更直观。
我常用这个命令: bash curl -v https://example.com/api/data -H "Content-Type: application/json" -d '{"key": "value"}'
敲回车后,终端直接打印:
DNS解析过程
SSL握手细节(HTTPS的话)
完整的请求头和响应头
请求体和响应体
我当时调试一个JSON格式问题,就是用curl -v发现前端发的是XML,直接改了代码。
比反复抓包看tcpdump的乱码省事多了。

场景4 :深挖系统底层,看到底层怎么干活
最绝的是strace,这玩意儿能让你看进程到底怎么跟系统交互。
比如一个应用为啥连不上服务器,可能网络栈有问题。
我直接用: bash strace -e trace=network -p 1 2 3 4
这命令会显示进程ID为1 2 3 4 的所有网络相关系统调用,比如 connect(3 , {AF_INET, 0x7 f000001 , 8 0}, SOCK_STREAM),直接告诉你它连的是哪个IP哪个端口。
再想看实际发什么内容?加个 -s1 02 4 -e write,read,能看系统调用时传递的字符串,虽然得自己手动找HTTP协议特征。

---
说实话,用tshark和curl组合,能覆盖9 0%以上的抓包需求。
tcpdump适合快速盲测,strace适合定位到底层问题。
但要注意,HTTPS流量解密得有权限,不然抓到的都是密文,白费功夫。

我以前还踩过坑,用tcpdump看HTTPS,以为流量是空的,结果发现是DNS劫持,把流量导向了钓鱼站。
所以抓包时,得结合场景想清楚——是看网络路径?看应用层协议?还是看系统调用?选对工具组合,事半功倍。

Linux如何抓取网络数据包进行分析

tcpdump抓包,简单高效,服务器环境首选。
Wireshark图形界面,直观分析,适合深入探究。
tshark命令行,脚本友好,自动化处理强。
权限需sudo,加组Wireshark可免密码。
过滤条件精简,避免大文件,合规操作重要。
工具选对场景,效率翻倍。
你自己掂量。

linux 抓包命令

这就是坑。
别信长篇介绍。
直接用:sudo tcpdump -i eth0 port 1 1 1 1 -c 3 -X 抓3 个端口1 1 1 1 的包,看细节。