问题描述
我正在尝试为 scapy 的 sniff()
编写一个 BPF 过滤器来捕获属于 TLSClientHello 数据包或 TCP SYN 数据包的数据包。这是我所拥有的:
sniff(filter="tcp dst port 443 and ((tcp[((tcp[12] & 0xf0) >> 2)] = 0x16) or (tcp[13] & 0x02 = 1))",prn=process_packet,iface=iface,store=False)
不过,嗅探只是在 TLSClientHello 上进行。出于某种原因,SYN 数据包无法通过。 BPF 有什么问题?
解决方法
应该捕获 TCP SYN 的过滤器部分的逻辑 and
将返回 2,而不是 1。所以:
(tcp[13] & 0x02 = 1)
应该是:
(tcp[13] & 0x02 = 2)
或者(至少使用 tcpdump,我还没有尝试使用 Scapy):
(tcp[tcpflags] & tcp-syn != 0)