过滤

tcpdump [option] [proto] [dir] [type]

基于IP进行过滤host、src、dst

1
2
3
tcpdump host 192.168.10.0
tcpdump src 192.168.10.0
tcpdump dst 192.168.10.0

基于网段进行过滤net

1
2
3
tcpdump net 192.168.10.0/24
tcpdump src net 192.168.10.0/24
tcpdump dst net 192.168.10.0/24

基于端口进行过滤

1
2
3
tcpdump tcp port 80 
tcpdump src port 80
tcpdump dst port 80

如果需要指定两个端口,可以如下。

1
2
tcpdump port 80 or port 22
tcpdump prot 80 or 22

范围过滤

1
2
3
tcpdump portrange 8000-8088
tcpdump src portrange 8000-8088
tcpdump dst portrange 8000-8088

基于协议进行过滤

获取icmp协议的报文

1
tcpdump icmp

常用于icmp、IP、IP6、arp、icmp、tcp、udp等。

应用层协议http、dns、https、ssh等应用层协议,需要写成tcpdump port http

过滤规则组合

  1. and : tcpdump src 192.168.10.1 and port 80
  2. or: tcpdump tcp port 443 or port 80
  3. not tcpdump not tcp port 22
  4. 多个过滤运算符组合:
    • 需要用到括号,而括号在shell中是特殊符号,所以需要使用双引号包裹。
    • and的优先级大于or
    • tcpdump "src hostname and (dst port 80 or 443)"

基于包大小的过滤

  1. 获取小于100字节的数据包tcpdump less 100
  2. 获取大于100字节的数据包tcpdump greater 100

常用参数

使用tcpdump -hman tcpdump查看参数和使用手册。

1
2
3
4
5
6
7
8
9
10
11
12
root@host:~# tcpdump -h
tcpdump version 4.9.3
libpcap version 1.9.1 (with TPACKET_V3)
OpenSSL 1.1.1f 31 Mar 2020
Usage: tcpdump [-aAbdDefhHIJKlLnNOpqStuUvxX#] [ -B size ] [ -c count ]
[ -C file_size ] [ -E algo:secret ] [ -F file ] [ -G seconds ]
[ -i interface ] [ -j tstamptype ] [ -M secret ] [ --number ]
[ -Q 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

-i指定监听网络接口(网卡),使用ifconfig命令查看网络接口:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
root@host:~# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.0.80 netmask 255.255.255.0 broadcast 192.168.0.255
inet6 fe80::f816:3eff:feaa:252 prefixlen 64 scopeid 0x20<link>
ether fa:16:3e:aa:02:52 txqueuelen 1000 (Ethernet)
RX packets 90200 bytes 5710319 (5.7 MB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 155625 bytes 42626480 (42.6 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 223 bytes 19740 (19.7 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 223 bytes 19740 (19.7 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

再使用tcpdump -i eth0

tcpdump默认是监听第一块网卡。
tcpdump -i any监听所有的网卡。

-w

-w 将捕获的信息写入(write)到文件中。导出的文件格式最好是cappcap,能够被wireshark打开,便于分析。
实例

1
2
3
4
5
tcpdump -w test  # test 是文件名
tcpdump -w test.cap
tcpdump -w test.pcap
tcpdump -i eth0 -w test.cap
tcpdump -i eth0 -w test.pcap

-r

-r read

1
tcpdump -r test  # test 是文件名

-n、-nn、-N

  1. -n不把ip转换成域名,直接显示ip,避免执行DNS lookups的过程,提高执行效率。
  2. -nn不把ip和端口转换成域名与别名。
  3. -N简化host的显示

-t、-tt、-ttt、-tttt

  1. -t每一行不显示时间。
  2. -tt每一行显示时间戳。
  3. -ttt输出每两行的时间间隔(毫秒)。
  4. -tttt在时间前面加上日期。

-v、-vv、-vvv

  1. -v
  2. -vv
  3. -vvv

-c、-C、-W

  1. -c count , tcpdump抓取报文的数量。
  2. -C file_size ,输出的文件大小,需要配合-w使用,基本单位是百万字节,file_size为1时,指的是一百万字节。
  3. -W 最大文件数量。

-Q、-q

  1. -Q 选择是入方向还是出方向的数据包,可选项为in,,out,inout。也可使用 --direction=[direction]
  2. -q 简洁的输出

-D、-L

  1. -D
  2. -L

-s

-A、-X

-e

-F

-l