Linux碎碎念:网络抓包利器:tcpdump 使用与分析入门
网络抓包利器:tcpdump 使用与分析入门
前言
hello,断更好久,最近入职音视频嵌入式应用开发,算是刚踏入这个大坑,完全是小白一枚。学习路线还是有点迷茫,有没有前辈可以让我在你经验中捡捡漏,少走点弯路呀。
在日常的开发和运维工作中,我们常常需要分析网络通信情况,例如调试 MQTT 协议、定位 HTTP 请求问题、检查设备和服务器之间的数据交互。这个时候,tcpdump
就是非常好用的一把“瑞士军刀”。
本文将从 tcpdump 的基本用法 开始,介绍如何 抓包并保存为文件,以及 如何在本地分析这些数据。
一、什么是 tcpdump?
tcpdump
是 Linux/Unix 系统上最常用的网络抓包工具之一。它能够捕获经过指定网络接口的数据包,并以人类可读的方式显示,或者保存为文件(pcap 格式),方便后续分析。
相比 Wireshark 这种图形化工具,tcpdump
更轻量级,适合在服务器或嵌入式设备上使用。
二、tcpdump 的基本语法
tcpdump [选项] [过滤表达式]
常用参数:
-i <iface>
:指定网卡接口(例如eth0
、wlan0
)。-n
:不解析主机名/IP,直接显示 IP 地址。-nn
:不解析主机名和端口号。-X
:同时显示报文的 ASCII 和十六进制内容。-w <file>
:将抓到的数据保存到文件(常用于后续分析)。-r <file>
:从文件中读取并分析数据包。
三、常见抓包场景
1. 抓取指定网卡上的所有流量
tcpdump -i eth0
2. 抓取某个端口的数据
例如抓取 MQTT(默认 1883 端口)的数据:
tcpdump -i eth0 port 1883 -nn
3. 抓取某个 IP 的数据
tcpdump host 192.168.1.100
4. 抓取并保存到文件
tcpdump -i eth0 port 1883 -w mqtt.cap
这样会把数据保存到 mqtt.cap
文件中,后续就可以下载到本地,用 Wireshark 打开分析。
四、如何分析抓到的包?
抓包只是第一步,关键是如何分析。常见方法有两种:
1. 在命令行直接查看
tcpdump -r mqtt.cap -nn -X
输出示例:
15:42:10.123456 IP 192.168.1.50.34567 > 192.168.1.200.1883: Flags [P.], length 450x0000: 4500 0045 6a2c 4000 4006 b1e6 c0a8 01320x0010: c0a8 01c8 86a7 075b 1234 5678 90ab cdef0x0020: 5018 ffff 3c4d 0000 3132 3334 6865 6c6c0x0030: 6f20 6d71 7474
这里可以看到:
- 报文头部信息(源 IP、目标 IP、端口号等)。
- 报文的 十六进制数据 和 ASCII 内容,方便查看是否有明文数据。
2. 使用 Wireshark 图形化工具
Wireshark 支持读取 tcpdump
生成的 .cap
文件,并提供:
- 协议自动解析(HTTP、MQTT、DNS 等)。
- 会话跟踪。
- 图形化过滤和统计。
五、实战小技巧
-
只抓取前 N 个包,避免文件太大:
tcpdump -i eth0 -c 100 -w test.cap
-
结合过滤器减少无用数据,例如只抓 TCP 并且端口是 1883:
tcpdump tcp port 1883 -w mqtt.cap
-
限制包大小(只抓前 200 字节):
tcpdump -s 200 -w short.cap
-
实时调试 + 后续分析结合:工作中一般会先用
-w
保存,然后再本地用 Wireshark 打开详细分析。