按 ESP SPI 值过滤 tcpdump

tcpdump filter by ESP SPI value

tcpdump 是否支持通过具有特定 SPI 值的 ESP 流量(proto 50)进行过滤?

它显​​示了这个值,所以你会认为这是可能的!

21:15:23.143805 IP 64.7.134.1 > 64.7.139.200: ESP(spi=0x0d8f42b8,seq=0x27)

使用"ip proto 50 and ip[((ip[0]&0x0f)<<2):4]==0x0d8f42b8"

这样的过滤器应该是可以的

... 分解为:

  • ip proto 50:所有ESP数据包。 (请注意 较新版本的 tcpdump 显然可以指定 ip proto esp。)

也匹配特定的spi

  • ip[0]&0x0f:IP的32位字数header
  • ((ip[0]&0x0f)<<2): ESP payload和spi字段的偏移量
  • ip[((ip[0]&0x0f)<<2):4]:组成spi字段的4个字节
  • ip[((ip[0]&0x0f)<<2):4]==0x0d8f42b8:匹配十六进制值的spi字段0x0d8f42b8

使用 ip[20:4]==0x0d8f42b8 的简化过滤器可能很诱人,但假设 fixed-size IP headers 的默认 IP header 大小为 20 字节.我想如果你知道你的 IP headers 肯定是 20 个字节,那么就可以使用,但我认为永远不要做那个假设更安全。