HTTP 的 BPF 是什么?
可以在此处查看定义。
候选答案可能是tcp and dst port 80
,但是tcp and dst port 80
能否保证它是HTTP
流量并包含所有HTTP流量?
似乎不是,因为某些网站可以通过指定 80 以外的不同端口来访问:
http://domain.name:8080
所以我的问题是:HTTP
的确切 BPF 是什么?
更新
c
中是否已经有一种实现来验证数据包是否是 HTTP 数据包?
The definition can be seen here.
The candidate answer may be tcp and dst port 80
,but can tcp and dst port 80
guarantee it's HTTP
traffic and includes all HTTP traffic?
It seems not,because some site can be visited by specifying a different port other than 80 this way:
http://domain.name:8080
So my question is: what's the exact BPF for HTTP
?
UPDATE
Is there an implementation to verify whether a packet is a HTTP one in c
already?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
tcp 和 dst 端口 80
tcp 和(dst 端口 80 或 dst 端口 8080 或 dst 端口 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
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
HTTP 没有确切的 BPF,因为 HTTP 不是链路层协议。执行此操作的最佳方法是选择任何可能是 HTTP 的流量,然后在您的应用程序中进行验证。为此,您必须将 TCP 段拼接在一起,因为流中间的特定 TCP 段中的数据并不指示应用程序层协议。
There's no exact BPF for HTTP, because HTTP is not a link-layer protocol. The best way to do this is to choose any traffic that appears likely to be HTTP, and then verify that in your application. You will have to stitch together TCP segments to do so, as data in a particular TCP segment from the middle of a stream does not indicate the application-layer protocol.
BPF 不是有状态的数据包过滤器,因此 BPF 无法检测到非标准 HTTP 端口上的任何流量。 BPF 过滤器位于传输层,而不是应用层,因此它只关心 TCP/IP,而不关心封装在 TCP/IP 数据包中的应用数据。最好的选择是过滤常见的 HTTP 端口 80、8000 和 8080。如果您还想考虑 HTTPS,也可以过滤 443。
BPF is not a stateful packet filter and so any traffic that is on non-standard HTTP ports won't be detectable with BPF. BPF filters at the transport layer and not the application layer, so it just cares about TCP/IP, not the application data encapsulated within TCP/IP packets. Your best bet is to filter on common HTTP ports, 80, 8000, and 8080. Also 443 if you want to account for HTTPS as well.
Wireshark 在解码数据包并在适当的情况下将其标记为 HTTP 方面做得不错。
Wireshark does a decent job of decoding packets and labeling them HTTP where appropriate.