tcpdump基础入门

97 阅读3分钟

安装

yum install tcpdump

重要参数

  1. 基本使用:

    • -i <interface>: 指定要监听的网络接口,默认监听第一块网卡。tcpdump -i ens33

    • -c <number>: 捕获指定数量的数据包后停止。tcpdump -i ens33 -c3

    • -C 限制文件大小,单位:MB。

      tcpdump -i eth0 -C 5 -w mycapture
      

      当文件mycapture达到5MB后,创建一个新文件mycapture-1、mycapture-2 依次递增

    • -W 限制文件的个数

      tcpdump -i eth0 -C 10 -W 3 -w mycapture
      

      表示当文件大小为10MB时,会创建新文件,最多创建3个文件。

    • -n: 不进行DNS反向查找,即不将IP地址转换为主机名。提高速度。

    • -nn: 除了不进行DNS查找,也不解析端口号为服务名。

    • -N 不输出主机名中的域名部分。例如,‘nic.ddn.mil‘只输出’nic‘。

    • -v: 显示更详细的输出信息。

    • -vv: 显示非常详细的输出信息。

    • -vvv: 显示极其详细的输出信息。

    • -l: 输出结果到标准输出,便于管道操作。

    • -e: 在输出中显示链路层头部。

    • -s <snaplen>: 设置数据包的捕获最大长度。单位:字节

      tcpdump -i eth0 -s 1000
      

      表示捕获1000字节以下的数据包,1000字节以上数据包无法捕获

    • -t不输出时间戳。

      IP 192.168.1.100.54321 > 192.168.1.1.80: Flags [P.], seq 12345, ack 67890, win 292, options [nop,nop,TS val 123456789 sec 12345], length 100
      
    • -tt输出时间戳,但是会省略掉毫秒部分。

      16:34:42 IP 192.168.1.100.54321 > 192.168.1.1.80: Flags [P.], seq 12345, ack 67890, win 292, options [nop,nop,TS val 123456789 sec 12345], length 100
      
    • -tttt: 时间戳显示为毫秒精度(默认),还有和第一个数据包的时间差。

      16:34:42.123456 0.000000 IP 192.168.1.100.54321 > 192.168.1.1.80: Flags [P.], seq 12345, ack 67890, win 292, options [nop,nop,TS val 123456789 sec 12345], length 100
      
    • -r 从文件中读取数据 tcpdump -r 文件名

    • -w 把捕获到的数据包写入文件 tcpdump -i ens33 -w 文件名

    • -Q 限制出站还是入站,tcpdump -Q in 表示入站,tcpdump -Q out 表示出战。

    • -q 输出信息只显示协议、源地址、目标地址以及数据包长度

      16:34:42.123456 IP 192.168.1.100 > 192.168.1.1: 100
      
    • -F <filename>: 从文件读取过滤表达式。

      tcpdump -i eth0 -F filters.txt -w output.pcap
      

      读取文件,过滤,并写入文件。

    • -T <type>: 尝试以特定的格式打印数据包负载。

过滤

net过滤

捕获所有内网的数据包:

tcpdump net 192.168.1.0/24
tcpdump src net 192.168.1.0/24
tcpdump dst net 192.168.1.0/24

等价于

tcpdump net 192.168.1.0/255.255.255.0

host过滤

tcpdump net 192.168.1.254
tcpdump src net 192.168.1.254
tcpdump dst net 192.168.1.254

端口过滤

tcpdump tcp port 8080
tcpdump src tcp port 8080
tcpdump dst tcp port 8080

范围端口

tcpdump portrange 8000-9000
tcpdump src portrange 8000-9000
tcpdump dst portrange 8000-9000

对于一些常见协议的默认端口,可以直接使用协议名

tcpdump tcp port http
tcpdump tcp port ssh

基于协议过滤

tcpdump icmp #ping 用的是icmp协议
tcpdump ip
tcpdump tcp
tcpdump udp

注意:http、https、ssh、dns这些是应用层协议,要使用端口号过滤

tcpdump port http

根据tcp包大小过滤

抓取包大小小于32bytes的数据包

tcpdump less 32

抓取包大小大于1000bytes的数据包

tcpdump greater 1000

捕获所有HTTP请求:

tcpdump -i eth0 'tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420'
  • 0x47455420 十六进制数 ASCII字符是“GET ”

    • 0x47 十进制 71 'G'
    • 0x45 十进制69 'E'
    • 0x54 十进制84 'T'
    • 0x20 十进制是32 ' ' (空格)

逻辑运算符

or

tcpducmp port 80 or 22

and

tcpdump tcp port 53 and udp port 53

not

tcpdump not tcp port 22