tcpdump 基本使用方法

· Read in about 2 min · (252 Words)
dev work

基本使用

  • 将捕获到的流量写入到某个文件

    # -s 0       表示将完整数据包抓取下来,默认只抓取68字节
    # -c 1000    表示抓1000个包, 避免抓取过多的包
    # -w         表示写入
    tcpdump -s 0 -c 1000 -w filename  # 将监听到的输出写入到filename这个文件中
    
  • 根据网卡来过滤流量

    tcpdump -i eth1           # 监听eth1网卡的流量
    tcpdump -i docker0        # 监听docker0网卡的流量
    
  • 根据端口号来过滤

    tcpdump tcp port 8080        # 监听本机8080端口TCP通讯
    tcpdump udp port 567         # 查看本机某UDP端口567流量
    tcpdump src port 25          # 来源端口为25的流量
    tcpdump dst port 25          # 目的端口为25的流量
    tcpdump -i eth1 src port 25  # 通过网卡eth1且来源端口为25的流量
    tcpdump -i eth1 dst port 25  # 通过网卡eth1且目的端口为25的流量
    
  • 根据源与目的地址过滤

    tcpdump src host 192.168.1.1          # 为**192.168.1.1**的流量
    tcpdump -i eth1 src host 192.168.1.1  # 通过网卡eth1且源地址为192.168.1.1
    tcpdump dst host 192.168.1.1          # 目的地址为**192.168.1.1**的流量
    tcpdump -i eth1 dst host 192.168.1.1  # 通过网卡eth1且目的地址为192.168.1.1
    
  • 根据协议进行过滤

    tcpdump arp    # 过滤arp协议流量
    tcpdump ip     # 过滤ip协议流量
    tcpdump tcp    # 过滤tcp协议流量
    tcpdump udp    # 过滤udp协议流量
    tcpdump icmp   # 过滤icmp协议流量
    

增强用法

  • 包头过滤

    # 从包头过滤信息如下所示
    proto[x:y]          : 过滤从x字节开始的y字节数。比如ip[2:2]过滤出3、4字节(第一字节从0开始排)
    proto[x:y] & z = 0  : proto[x:y]和z的与操作为0
    proto[x:y] & z !=0  : proto[x:y]和z的与操作不为0
    proto[x:y] & z = z  : proto[x:y]和z的与操作为z
    proto[x:y] = z      : proto[x:y]等于z
    # 操作符可以有: >, <, >=, <=, =, !=
    
  • 抓取HTTP包

    # 过滤 HTTP GET
    #tcpdump -s 0 -A 'tcp[(tcp[12]>>2):4] = 0x47455420'
    tcpdump -s 0 -A 'tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420'
    # 抓取 HTTP POST
    tcpdump -s 0 -A 'tcp dst port 80 and (tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504f5354)'
    

示例

  • 抓取所有经过eth1,目的地址是192.168.1.254或192.168.1.200端口是80的TCP数据

    tcpdump -i eth1 '((tcp) and (port 80) and ((dst host 192.168.1.254) or (dst host 192.168.1.200)))'
    
  • 抓取所有经过eth1,目标MAC地址是00:01:02:03:04:05的ICMP数据

    tcpdump -i eth1 '((icmp) and ((ether dst host 00:01:02:03:04:05)))'
    
  • 抓取所有经过eth1,目的网络是192.168,但目的主机不是192.168.1.200的TCP数据

    tcpdump -i eth1 '((tcp) and ((dst net 192.168) and (not dst host 192.168.1.200)))'
    

引用

Comments