在排查网络故障、分析服务响应慢、查证DNS解析异常,或者单纯想看看自己的HTTP请求到底发了啥,Linux下抓个包是最直接的办法。不用装Wireshark图形界面,一条命令就能看到真实流动的数据。
最常用的:tcpdump
系统自带,轻量、稳定、够用。普通用户需加 sudo,否则没权限读取网卡原始数据。
sudo tcpdump -i eth0 port 80这条命令监听 eth0 网卡上所有目标或源端口为 80 的流量。如果你用的是无线网卡,可能是 wlan0 或 ens33,先用 ip a 看清接口名。
想看更直观的 HTTP 请求头?加上 -A 参数(ASCII 显示):
sudo tcpdump -i eth0 -A port 80 | grep 'GET\|Host:'注意:这里用了管道过滤,实际抓包时会实时滚动输出,适合快速定位。
进阶一点:tshark(Wireshark 的命令行版)
tshark 功能比 tcpdump 更细,支持 Wireshark 的显示过滤语法,还能导出结构化数据。
比如只抓访问百度的 HTTPS 流量,并打印源IP、目标IP和TLS握手信息:
sudo tshark -i eth0 -f 'host www.baidu.com and port 443' -T fields -e ip.src -e ip.dst -e ssl.handshake.type其中 -f 是捕获过滤器(BPF语法),-Y 才是显示过滤器(比如 -Y 'http.request.method == "GET"')。
图形界面?本地装 Wireshark 就行
如果习惯点选、着色、跟踪TCP流,直接在 Linux 桌面环境装 Wireshark 即可:
sudo apt install wireshark # Ubuntu/Debian
sudo yum install wireshark # CentOS/RHEL安装后需把当前用户加入 wireshark 用户组才能免sudo启动:
sudo usermod -aG wireshark $USER登出再登录,就能直接双击图标打开,选网卡点“Start”——和 Windows 上操作一模一样。
小提醒几条
• 抓包文件默认是 .pcap 格式,用 tcpdump 或 tshark 都能读:
tcpdump -r capture.pcap• 别在生产服务器上无限制抓包,磁盘可能很快写满。加 -c 100 限制抓100个包,或 -W 10 -C 100 循环写10个、每个100MB的文件。
• DNS 查询经常被忽略,其实加一句 sudo tcpdump -i eth0 udp port 53,就能看清你输的域名到底有没有发出去、响应来自哪台服务器。
抓包不是玄学,它只是把网络里看不见的字节流,变成你能读得懂的一行行内容。多试两次,连路由器转发异常、容器间通信断连这些事,自己也能顺藤摸瓜。