tcpdump的使用

tcpdump 介绍

tcpdump, a powerful command-line packet analyzer; and libpcap, a portable C/C++ library for network traffic capture.
Tcpdump prints out a description of the contents of packets on a network interface that match the boolean expression; the description is preceded by a time stamp, printed, by default, as hours, minutes, seconds, and fractions of a second since midnight. It can also be run with the -w flag, which causes it to save the packet data to a file for later analysis, and/or with the -r flag, which causes it to read from a saved packet file rather than to read packets from a network interface. It can also be run with the -V flag, which causes it to read a list of saved packet files. In all cases, only packets that match expression will be processed by tcpdump.

tcpdump 是一款用于截取网络分组,并过滤输出分组内容的工具。tcpdump 凭借强大的功能和灵活的截取策略,使其成为类 UNIX 系统下用于网络分析和问题排查的首选工具。 tcpdump 提供了源代码,公开了接口,因此具备很强的可扩展性,对于网络维护和入侵者都是非常有用的工具。tcpdump 存在于基本的 Linux 系统中,由于它需要将网络界面设置为混杂模式,普通用户不能正常执行,但具备 root 权限的用户可以直接执行它来获取网络上的信息。因此系统中存在网络分析工具主要不是对本机安全的威胁,而是对网络上的其他计算机的安全存在威胁。tcpdump 可以将网络中传送的数据包的 “头” 完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供 and、or、not 等逻辑语句来帮助我们去掉无用的信息。

tcpdump 常用命令解释

tcpdump [协议] [ 选项 ] [ -c 数量 ] [ -i 网络接口 ] [ -w 文件名 ] [ 表达式 ]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
man tcpdump
...
tcpdump [ -AbdDefhHIJKlLnNOpqStuUvxX# ] [ -B buffer_size ]
[ -c count ]
[ -C file_size ] [ -G rotate_seconds ] [ -F file ]
[ -i interface ] [ -j tstamp_type ] [ -m module ] [ -M secret ]
[ --number ] [ -Q in|out|inout ]
[ -r file ] [ -V file ] [ -s snaplen ] [ -T type ] [ -w file ]
[ -W filecount ]
[ -E spi@ipaddr algo:secret,... ]
[ -y datalinktype ] [ -z postrotate-command ] [ -Z user ]
[ --time-stamp-precision=tstamp_precision ]
[ --immediate-mode ] [ --version ]
[ expression ]
...

选项翻译如下:

-l:使标准输出变为缓冲行形式;
-c:抓包次数;
-nn:直接以 IP 及 Port Number 显示,而非主机名与服务名称;
-s :< 数据包大小 & gt; 设置每个数据包的大小;
-i:指定监听的网络接口;
-r:从指定的文件中读取包;
-w:输出信息保存到指定文件;
-a:将网络地址和广播地址转变成名字;
-d:将匹配信息包的代码以人们能够理解的汇编格式给出;
-e:在输出行打印出数据链路层的头部信息;
-f:将外部的 Internet 地址以数字的形式打印出来;
-t:在输出的每一行不打印时间戳;
-v :输出稍微详细的报文信息;--vv 则输出更详细信息。

协议有TCP/UDP/ARP/IP/ETHER/ICMP等

tcpdump 参数实例

1
sudo tcpdump -i ens32 -c 50 src port not 22 -w xx.pcap

源端口不是22的数据包,抓取50个包后停止。(若不指定-c,默认不停止直到ctl+c)

1
sudo tcpdump tcp -i ens32 -c 50 src port not 22 and dst port not 22 -w `date "+%Y_%m_%d_%H_%M_%S"`.pcap  

抓取目的与原端口不是22的数据TCP数据包

1
sudo tcpdump -i ens32 -c 50 -w `date "+%Y_%m_%d_%H_%M_%S"`.pcap  \(src host 10.10.10.10 or dst host 10.10.10.10\) and src port not 22 and dst port not 22

抓取经由本地的数据包,排除22端口

抓DNS的数据包

1
sudo tcpdump -i ens32 \(src port 53 or dst port 53 \)  -w file_%Y_%m_%d_%H_%M_%S_%s.pcap

文件回转(rotate)

1
sudo tcpdump -i ens32 -w ./testrotate/trace_%Y_%m_%d_%H_%M_%S_%s.pcap -W 100 -G 2

-G 回转时间,单位是秒。
-W 回转周期数,这里的100,回转100个周期

可以加上-C 文件大小(单位M),与-G 谁先到,先回转

other cmd

1
scp ff@10.10.10.10:~/*.pcap .

抓包小结

  • ubuntu中默认混杂模式,可以抓到局域网中所有的包
  • ICMP和ARP 就算是限定是TCP协议时,也会被抓到
  • LLMNR

参考


tcpdump的使用
https://blog.fengcl.com/2022/03/07/tcpdump-use/
作者
frank
发布于
2022年3月7日
许可协议