Post

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来组合

  1. 包类型,tcpdump有预置的filter,可以用来过滤抓取的包。例如,可以使用 tcp 过滤器只抓取 TCP 包,使用 udp 过滤器只抓取 UDP 包,使用 icmp 过滤器只抓取 ICMP 包。

  2. 限定host,你可以指定主机,通过host ip来过滤特定ip的包, 更进一步还有srcdst.

  3. 端口, tcpdump port 80

  4. 网络过滤,tcpdump net 192.168.1.0/24, 会只显示与192.168.1.0/24网络相关的包。

  5. 数据包长,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

9 REF

  1. tcpdump page
  2. man-tcpdump
This post is licensed under CC BY 4.0 by the author.

Trending Tags