按 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 个字节,那么就可以使用,但我认为永远不要做那个假设更安全。
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 个字节,那么就可以使用,但我认为永远不要做那个假设更安全。