![这些表达式的含义是什么?ip[2:2],ip[0],tcp[12],ip](https://linux22.com/image/1607889/%E8%BF%99%E4%BA%9B%E8%A1%A8%E8%BE%BE%E5%BC%8F%E7%9A%84%E5%90%AB%E4%B9%89%E6%98%AF%E4%BB%80%E4%B9%88%EF%BC%9Fip%5B2%3A2%5D%2Cip%5B0%5D%2Ctcp%5B12%5D%2Cip.png)
我在学习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 请求的粗略过滤器。)