Skip to content

tcpdump使用

约 1269 字大约 4 分钟

TCPtcpdumpGo

2022-10-06

序言

通常在 Windows 上查看分析 tcp 协议会使用 wireshark,但 Linux 上一般使用 tcpdump. deepin 上使用apt-get install tcpdump安装命令。如果提示权限不足,使用sudo提权。

1. tcpdump 常用的参数

参数释义示例备注
host基于 host 过滤tcpdump host 127.0.0.1
src基于源过滤tcpdump src 127.0.0.1
dst基于目的地过滤tcpdump dst 127.0.0.1
net基于网段过滤tcpdump net 1192.168.31.0/24同样可以指定源和目的 tcpdump [src\dst] net 192.168.31.0/24
port基于端口过滤tcpdump tcp port 80加上具体的协议 tcp 可以更精准的捕获。同样可以指定源和目的 tcpdump [src\dst] port 80。如果要指定多个端口 tcpdump port 80 or port 22 或 tcpdump port 80 or 22。如果要抓去一个端口范围 tcpdump portrange 8000-8080。对于一些常见的协议可以使用协议名如 tcpdump tcp port http
icmp基于协议过滤tcpdump icmp一般常用的协议,如 ip, ip6, arp, icmp, udp 等。但 http, dns, https, ssh 等应用层协议不能直接这样写,需要写成 tcpdump port http 或 tcpdump port 53(dns)。
-i指定监听网络接口tcpdump -i eht0未指定时,默认监听第一块网卡上通过的数据包。tcpdump -i any 监听所有网卡,用来查看是否有网络流量。
-w将捕获的信息保存到文件中tcpdump -i eth0 -w a.pcap不分析和打印到屏幕,导出文件为 cap 或 pcap 格式,可以直接使用 wireshark 打开,进行报文分析。
-r从文件中读取数据tcpdump -r a.pcap读取后可以使用上述语法进行过滤分析
-n直接显示 iptcpdump -n避免执行 dns lookups 解析为主机名,速度会快很多。但端口还是会翻译为协议名
-nn不把协议和端口转化成名字tcpdump -nn速度会快很多
-N不打印 host 域名部分内容tcpdump -N如 192.168.10.135.12345 会被简化为 192.12345
-t不输出时间tcpdump -t
-tt输出显示为时间戳tcpdump -tt
-ttt输出每两行打印的时间间隔tcpdump -ttt单位:毫秒
-tttt在时间戳之前输出日期tcpdump -tttt输出的时间最直观
-v详细输出tcpdump -v
-vv更详细输出tcpdump -vv
-vvv更更详细输出tcpdump -vvv
-c指定抓包数量tcpdump -c 20抓满20包个停止
-C文件分割tcpdump -C 1 -W 3 -w a.pcap-C 与 -w 一起使用,数据在写入文件前检查是否超过了file_size(这里是1百万个字节),单位是百万字节 1000000 个字节,超过后会自动写入新文件,文件名为 a.pcap1,a.pcap2 ... -W 表示最多写 3 个文件。
-Q过滤数据包的方向tcpdump -Q in\out\inout不写和 inout 一样双向的。-Q 也可以用 --direction 等价代替
-q简洁打印tcpdump -q
-D显示所有可用网卡tcpdump -D
-L列出网卡的已知数据链路tcpdump -L
-s指定捕获包的长度tcpdump -s 20单位是 byte,默认是 262144 个 byte。如果超过了大小,显示就会被截断,而打印出[
-A以 ASCII 格式打印所有分组数据tcpdump -A这样方便使用 grep 等工具解析输出内容。例如:tcpdump -A
-X同时使用十六进制和 ASCII 字符串打印报文tcpdump -X-X 和 -A 不能一起用
-e打印出数据链路层的头部信息tcpdump -e如显示源和目的 MAC 地址,及 WLAN tag 信息
-F使用指定文件(filter_rule)中的表达式抓包tcpdump -F filter_rule此时命令行后输入的规则将被忽略,这种情况适合表达式长期维护
-l对标准输出进行缓冲tcpdump -l使标准输出设备遇到换行符时就讲这行内容打印出来,这在观察输出的同时写入文件很有用。如:tcpdump -l
less基于包大小进行过滤tcpdump less 32抓取小于 32 个 byte 的数据包
greater基于包大小进行过滤tcpdump greater 50抓取大于 100 个 byte 的数据包
-v查看版本tcpdump -v

tcpdump 帮助命令man tcpdump, 使用quit退出。

2. tcp 协议分析

逻辑运算符:and(&&) or(||) not(!)。and 优先级高于 or。多个过滤器组合时需要用到圆括号,但在 shell 中圆括号是特殊字符,需要用引号,如:tcpdump "src 127.0.0.1 and (dst port 3306 or 22)"

只抓 SYN 包 tcpdump 'tcp[tcpflags] = tcp-syn' 抓 SYN 和 ACK tcpdump 'tcp[tcpflags]'

注意,监听本机时应使用回环地址 lo。