电脑工场
白蓝主题五 · 清爽阅读
首页  > 网络基础

Linux下数据包捕获命令:tcpdump、tshark 和 wireshark 基础用法

在排查网络故障、分析服务响应慢、查证DNS解析异常,或者单纯想看看自己的HTTP请求到底发了啥,Linux下抓个是最直接的办法。不用装Wireshark图形界面,一条命令就能看到真实流动的数据

最常用的:tcpdump

系统自带,轻量、稳定、够用。普通用户需加 sudo,否则没权限读取网卡原始数据。

sudo tcpdump -i eth0 port 80

这条命令监听 eth0 网卡上所有目标或源端口为 80 的流量。如果你用的是无线网卡,可能是 wlan0ens33,先用 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,就能看清你输的域名到底有没有发出去、响应来自哪台服务器。

抓包不是玄学,它只是把网络里看不见的字节流,变成你能读得懂的一行行内容。多试两次,连路由器转发异常、容器间通信断连这些事,自己也能顺藤摸瓜。