linux网络抓包工具tcpdump

一、介绍

tcpdump 是一个在命令行下运行的网络数据包嗅探工具 。它能实时捕获和分析网络中传输的数据包。无需安装linux下自带(但是需要root权限

二、原理

tcpdump依赖于操作系统底层的包捕获机制(在Linux上是 libpcap ,在Windows上是WinPcap/Npcap)。它通过将网卡设置为混杂模式,可以捕获所有经过该网卡的数据包,而不仅仅是发往本机的包。然后转换可读的格式输出。

三、使用场景

1、服务器突然变慢,是请求太高了吗?

2、发送的网络请求没收到?还是没发出去?

3、服务器 CPU 飙升,流量异常,怀疑被攻击。

4、前端传了一个 JSON 参数给后端,但后端一直报参数错误

5、出现偶发一次的短暂故障,无法实时捕捉

6、抓取流量保存,之后进行重放测试,或压力测试

7、测试程序在"网络超时"或"丢包 "的场景下会不会崩溃。

四、命令参数及过滤方法

命令格式

tcpdump -aAbdDefhHIJKlLnNOpqStuUvxX# -B size -c count

-C file_size \] \[ -E algo:secret \] \[ -F file \] \[ -G seconds

-i interface \] \[ -j tstamptype \] \[ -M secret \] \[ --number

-Q\|-P in\|out\|inout

-r file \] \[ -s snaplen \] \[ --time-stamp-precision precision

--immediate-mode \] \[ -T type \] \[ --version \] \[ -V file

-w file \] \[ -W filecount \] \[ -y datalinktype \] \[ -z postrotate-command

-Z user \] \[ expression

常用参数

-i 指定网卡:sudo tcpdump -i eth0(只抓取eth0接口)。用 -i any 可监听所有接口。

-n 不解析域名:sudo tcpdump -n。强烈推荐加这个,避免DNS反向查询,让显示速度更快,输出更清晰。

-v / -vv / -vvv 详细输出:显示更详细的协议信息。

-c 限制捕获数量:sudo tcpdump -c 10(只抓10个包后自动退出)。

-s 抓取长度:sudo tcpdump -s 0(抓取整个数据包,而不是默认的68或96字节)。为了完整分析,通常设为0。

-w 写入文件:sudo tcpdump -w capture.pcap(把原始包保存下来,供Wireshark等工具离线分析)。

-r 读取文件:sudo tcpdump -r capture.pcap(读取之前保存的pcap文件)。

过滤表达式

按主机:host 192.168.1.100(只抓与这个IP相关的包)
按网络:net 192.168.0.0/24
按端口:port 80 或 portrange 8000-9000
按协议:tcp、udp、icmp
组合逻辑:and(&&)、or(||)、not(!)

五、常用命令

列出所有的网络接口

bash 复制代码
tcpdump -D

抓取eth0数据包,并过滤80端口或ICMP数据,并显示数据

bash 复制代码
tcpdump -i eth0 port 80 or icmp -A

抓取eth0数据包,并过滤目标host为192.168.0.101的数据

bash 复制代码
tcpdump -i eth0 dst host 192.168.0.101
src为原地址

抓取高频流量

bash 复制代码
tcpdump -i any -n

抓取SYN包

bash 复制代码
tcpdump 'tcp[tcpflags] & tcp-syn != 0'

滚动抓包,并保存到pcap文件中

bash 复制代码
tcpdump -w /var/log/capture.pcap -G 3600 -C 100 -W 10
  • -G 3600时间轮转 。每隔 3600秒(1小时),创建一个新的抓包文件。

  • -C 100大小轮转 。当单个文件大小达到 100 MB 时,创建一个新的抓包文件。

  • -W 10 :最多保留 10个 文件(即 capture.pcap0capture.pcap9)。

导出,并使用wireshark分析

抓取HTTP GET请求

bash 复制代码
tcpdump -i any -n -A 'tcp port 80 and (tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420)'

六、抓包内容说明