tcpdump使用教程
一、常用的tcpdump选项
-
-s number 表示需要截取报文字节数(tcpdump默认只会截取前96个字节),如果是0的话,表示截取报文全部内容
-
-n 表示不要解析域名,直接显示ip
-
-i 表示需要监听的网卡
-
-A 表示只使用ascii码打印报文的全部数据
二、过滤器
机器上的网络报文数量异常的多,很多时候我们只关系和具体问题有关的数据报(比如访问某个网站的数据,或者 icmp 超时的报文等等),而这些数据只占到很小的一部分。把所有的数据截取下来,从里面找到想要的信息无疑是一件很费时费力的工作。而 tcpdump 提供了灵活的语法可以精确地截取关心的数据报,简化分析的工作量。这些选择数据包的语句就是过滤器(filter)!
过滤器也可以简单地分为三类:type
, dir
和 proto
。
Type
让你区分报文的类型,主要由 host
(主机), net
(网络) 和 port
(端口) 组成。src
和 dst
也可以用来过滤报文的源地址和目的地址。
1. host: 过滤某个主机的数据报文
tcpdump host 1.2.3.4
2. src, dst: 过滤源地址和目的地址
tcpdump src 2.3.4.5
tcpdump dst 3.4.5.6
3. net: 过滤某个网段的数据,CIDR 模式
tcpdump net 1.2.3.0/24
4. proto: 过滤某个协议的数据,支持 tcp, udp 和 icmp。使用的时候可以省略 proto 关键字。
tcpdump icmp
5. port: 过滤通过某个端口的数据报
tcpdump port 3389
6. src/dst, port, protocol: 结合三者
tcpdump src port 1025 and tcp
tcpdump udp and src port 53
此外还有指定端口和数据报文范围的过滤器:
7. port 范围
tcpdump portrange 21-23
8. 数据报大小,单位是字节
tcpdump less 32
tcpdump greater 128
tcpdump > 32
tcpdump <= 128
过于过滤器的更多详细信息,请访问 tcpdump 官方 map page 的 PCAP-FILTER 部分。
三、输出到文件
tcpdump提供报文数据保存到文件的功能,如果是需要长时间抓包,那么这个功能可以把数据保存下来,再进行分析。
-w
选项用来把数据报文输出到文件,比如下面的命令就是把所有 80 端口的数据导入到文件。
# sudo tcpdump -w capture_file.pcap port 80
四、抓取HTTP GET/POST请求
tcpdump -i enp0s8 -s 0 -A 'tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420'p -i enp0s8 -s 0 -A 'tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420'
tcp[((tcp[12:1] & 0xf0) >> 2):4] 定义了我们所要截取的字符串的位置(http header的后面)的4 bytes。
0x47455420
是GET
的ASCII码。
tcpdump -i enp0s8 -s 0 -A 'tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504F5354
0x504F5354
代表的是 POST
的ASCII码。