cap
1 interface
简要的讲,tcpdump是在某一个interface上做包的抓取,所以在使用tcpdump的时候,需要指定interface。tcpdump可以使用tcpdump --list-interfaces
,或者tcpdump -D
来看有哪些interface。
2 包计数
这个没啥好说的,简单的讲就是你要抓多少包之后停止
-n cnt
3 拒绝resolve issue
。默认情况下,tcpdump 会尝试将网络地址转换为主机名,这需要进行 DNS 查询,可能会导致 tcpdump 的输出延迟。使用 -n
选项可以避免这个问题,tcpdump 将直接显示网络地址。
除了不将网络地址转换为主机名之外,还不将端口号转换为服务名。默认情况下,tcpdump 会尝试将端口号转换为对应的服务名,例如,端口 80 会被转换为 http。使用 -nn
选项,tcpdump 将直接显示端口号。
4 理解抓包的输出
5 io
-w file
选项可以将抓取的数据包保存到文件中
-r file
读
6 filter
这些filter都可以通过and,or,not来组合
包类型,tcpdump有预置的filter,可以用来过滤抓取的包。例如,可以使用
tcp
过滤器只抓取 TCP 包,使用udp
过滤器只抓取 UDP 包,使用icmp
过滤器只抓取 ICMP 包。限定host,你可以指定主机,通过
host ip
来过滤特定ip的包, 更进一步还有src
和dst
.端口,
tcpdump port 80
网络过滤,
tcpdump net 192.168.1.0/24
, 会只显示与192.168.1.0/24
网络相关的包。数据包长,
less
+greater
7 packet content
-X
选项可以将抓取的数据包以十六进制和 ASCII 码的形式显示出来。
-A
选项可以将抓取的数据包以 ASCII 码的形式显示出来。
8 old
使用tcpdump抓的话,help见
1
2
3
4
5
6
7
8
9
tcpdump [ -AdDefIJKlLnNOpqRStuUvxX ] [ -B buffer_size ] [ -c count ]
[ -C file_size ] [ -G rotate_seconds ] [ -F file ]
[ -i interface ] [ -j tstamp_type ] [ -m module ] [ -M secret ]
[ -Q|-P in|out|inout ]
[ -r file ] [ -s snaplen ] [ -T type ] [ -w file ]
[ -W filecount ]
[ -E spi@ipaddr algo:secret,... ]
[ -y datalinktype ] [ -z postrotate-command ] [ -Z user ]
[ expression ]
一些例子,具体的看看man。
1
2
3
4
5
# 抓取所有网络包,并在terminal中显示抓取的结果,将包以十六进制的形式显示。
tcpdump
# 抓取经过网卡eth0所有的网络包, 保存在cache.cap
tcpdump -i eth0 -w cache.cap
tcpdump <src/dest> <host> 127.0.0.1
用wireshark的filter
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
32
33
34
35
# ip级别过滤
ip.addr == XXXXXXX
ip.src == XXXXXXX
ip.dst == XXXXXXX
# protocol级别
tcp/udp/arp/icmp/http/smtp/ftp/dns/ssl
# 端口级别
tcp.port == XX or tcp.port == XX or tcp.port == XX
#过滤以太网mac地址
eth.dst == XX
#udp目标端口大于udp源端口+1
udp.dstport >= udp.srcport + 1
#过滤http包含特定域名
http contains "XX.com"
#过滤http post请求
http.request.method == "POST"
#过滤端口范围
tcp.port >= 1 and tcp.port <= 80