可以看到here的定义。
候选答案可能是tcp and dst port 80
,但tcp and dst port 80
可以保证HTTP
流量并包含所有HTTP流量吗?
似乎没有,因为可以通过以这种方式指定80以外的其他端口来访问某些站点:
http://domain.name:8080
所以我的问题是:HTTP
的确切 BPF 是什么?
更新
是否有实现来验证数据包是否已成为c
中的HTTP?
答案 0 :(得分:4)
tcp and dst port 80
tcp and (dst port 80 or dst port 8080 or dst port 443)
tcp and tcp[20:4] = 0x47455420
tcp and tcp[(tcp[12] >> 4) * 4 : 4] = 0x47455420
tcp and (dst port 80 or dst port 8080 or dst port 443) and tcp[(tcp[12] >> 4) * 4 : 4] = 0x47455420
答案 1 :(得分:3)
HTTP没有准确的BPF,因为HTTP不是链路层协议。执行此操作的最佳方法是选择可能是HTTP的任何流量,然后在应用程序中验证该流量。您必须将TCP段拼接在一起,因为来自流中间的特定TCP段中的数据不表示应用层协议。
答案 2 :(得分:2)
BPF不是有状态数据包过滤器,因此BPF无法检测到非标准HTTP端口上的任何流量。 BPF过滤器位于传输层,而不是应用程序层,因此它只关心TCP / IP,而不是TCP / IP数据包中封装的应用程序数据。您最好的办法是过滤常见的HTTP端口80,8000和8080.如果您想要考虑HTTPS,还需要443。
答案 3 :(得分:0)
Wireshark在解码数据包方面做得不错,并在适当的时候标记HTTP。