按 ESP SPI 值过滤 tcpdump

joh*_*ohn 1 tcpdump

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

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

21:15:23.143805 IP 64.7.134.1 > 64.7.139.200: ESP(spi=0x0d8f42b8,seq=0x27)
Run Code Online (Sandbox Code Playgroud)

Chr*_*ard 5

应该可以使用过滤器,例如"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位字的数量
  • ((ip[0]&0x0f)<<2): ESP 负载和 spi 字段的偏移量
  • ip[((ip[0]&0x0f)<<2):4]:组成 spi 字段的 4 个字节
  • ip[((ip[0]&0x0f)<<2):4]==0x0d8f42b8:匹配十六进制值的spi字段0x0d8f42b8

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