这些表达式的含义是什么?ip[2:2],ip[0],tcp[12],ip

这些表达式的含义是什么?ip[2:2],ip[0],tcp[12],ip

我在学习tcpdump最近,但是我现在遇到了一些麻烦。我已经在谷歌上搜索过了,但没有什么可以帮助我解决问题。如果你知道答案,请帮助我。非常感谢。

我想知道这些表达的含义,以下这些让我感到困惑:

ip[0]&0xf)<<2

tcp[12]&0xf0)>>2

ip[2:2]

tcp[20:2]=0x4745 or tcp[20:2]=0x4854

答案1

数据包从根本上来说只是一个字节数组,并且该[...]语法在大多数编程语言中通常用于数组索引(访问特定元素或元素范围)。

tcpdump(libpcap)过滤器语法记录在pcap 过滤器(7)手册页,您可以在其中找到:

要访问数据包内的数据,请使用以下语法:

proto [ expr : size ]

例如,tcp[20:2]指的是 TCP 段中的 2 个字节 20-21(从 0 开始数),并且根据 TCP 标头文档,这些通常表示该段数据有效负载的前两个字节(尽管它们也可能是 TCP 选项的前两个字节)。

(0x4745 在 ASCII 中是“GE”,因此tcp[20:2]=0x4745很可能充当 HTTP GET 请求的粗略过滤器。)

相关内容