gpt4 book ai didi

java - 从 java SOCKS 套接字检测协议(protocol)

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:54:39 25 4
gpt4 key购买 nike

我正在用 Java 开发自定义 SOCKS5 服务器。除了包含 HOST 和 PORT 的第一个 CONNECT 消息之外,还有什么方法可以检查后续消息以确定数据协议(protocol)?例如,如果应用程序数据以“GET/...”开头,请求很可能是超文本传输​​协议(protocol) (HTTP),但这远不是一个完整的解决方案。有没有办法查看数据是 HTTPS、FTP 还是“Netflix 流媒体”等...?

其次,如果数据是 http 或 https,我如何将请求转发到专用的 HTTP 代理?

最佳答案

is then any way to inspect the subsequent messages to determine the protocol of the data?... s there a way to see if the data is say HTTPS, or FTP, or "NetFlix streaming", etc...?

基本上你有目标端口、目标 IP 地址和主机名(如果 DNS 解析也通过 SOCKS5 服务器完成)和有效负载。基于众所周知的目标主机、目标端口和典型负载的知识,您可以构建启发式算法来猜测协议(protocol)。

您会在当今的入侵检测系统、更好的防火墙和流量分类器中发现此类启发式方法,它们在检测质量上有很大差异,坚定的用户通常可以愚弄这些启发式方法。这是一个非常广泛的主题,但您可能会开始查看免费的深度检查 (DPI) 库,例如 nDPI并阅读更多关于 DPI at Wikipedia 的信息.

Secondarily, if the data is http or https how would I forward the request to a dedicated HTTP proxy?

首先把target从client请求的target改成proxy。当然,这必须在传输任何数据之前完成,这可能与您在数据流上执行的 DPI 冲突,因为某些连接首先从服务器(如 SMTP)获取数据,而其他连接(如 HTTP(S))首先从客户端获取数据。因此,您可能需要在获取任何负载之前查明这是否是 HTTP(S),即仅基于目标端口。对于 HTTPS,您随后需要使用 CONNECT 请求建立隧道,如 RFC 2817 中所述。 .对于 HTTP,您将修改请求以不仅包含路径,还包含完整的 URL(即 http://host[:port]/path)。

如您所见,所有这些都使用了很多适用于大多数但并非所有情况的启发式方法。除此之外,这可能是一项非常复杂的任务,具体取决于您需要的流量分类质量。

关于java - 从 java SOCKS 套接字检测协议(protocol),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35823957/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com