我是该论坛的新手,如果我违反这里的任何规则,请您道歉(可以更正和/或重定向)
那是:我试图了解tpcdump中的“ -d”选项的作用(即tcpdump -i any -d
)
运行上面的示例命令,很明显输出与没有-d时有所不同,但是我不理解输出或其目的
手册页中的状态
“将已编译的数据包匹配代码以人类可读的格式转储到标准输出并停止。”
但是我在解析含义时遇到了麻烦-数据包匹配代码是什么意思?使用此输出的目的是什么?
非常感谢您的答复
当将捕获过滤器与tcpdump -i <any> tcp port 443
一起用于tcpdump时,您正在过滤的不是TCP数据包或未在端口443上发送的out数据包。但是,您问tcpdump如何知道如何这样吗?
此处的分组匹配代码是指BPF(伯克利包过滤器)语法代码。换句话说,tcp port 443
分解为较低的水平是什么?如果运行tcpdump -i <any> tcp port 443
,我们可以看到:
$ tcpdump -i en0 -d tcp port 443
(000) ldh [12]
(001) jeq #0x86dd jt 2 jf 8
(002) ldb [20]
(003) jeq #0x6 jt 4 jf 19
(004) ldh [54]
(005) jeq #0x1bb jt 18 jf 6
(006) ldh [56]
(007) jeq #0x1bb jt 18 jf 19
(008) jeq #0x800 jt 9 jf 19
(009) ldb [23]
(010) jeq #0x6 jt 11 jf 19
(011) ldh [20]
(012) jset #0x1fff jt 19 jf 13
(013) ldxb 4*([14]&0xf)
(014) ldh [x + 14]
(015) jeq #0x1bb jt 18 jf 16
(016) ldh [x + 16]
(017) jeq #0x1bb jt 18 jf 19
(018) ret #262144
(019) ret #0
有关人们使用tcpdump -d
的信息,请参阅文章on it。要彻底了解BPF代码的工作方式,tshark.dev上带有article。