Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从java SOCKS套接字检测协议_Java_Sockets_Socks - Fatal编程技术网

从java SOCKS套接字检测协议

从java SOCKS套接字检测协议,java,sockets,socks,Java,Sockets,Socks,我正在用Java开发一个定制的SOCKS5服务器。除了包含主机和端口的第一条CONNECT消息外,还有其他方法可以检查后续消息以确定数据的协议吗?例如,如果应用程序数据以“GET/…”开头,则请求可能是超文本传输协议(HTTP),但这远不是一个完整的解决方案。是否有办法查看数据是否为HTTPS、FTP或“NetFlix流媒体”等 其次,如果数据是http或https,我如何将请求转发到专用http代理 那么有没有办法检查后续消息以确定数据的协议?。。。有没有一种方法可以查看数据是否是HTTPS、

我正在用Java开发一个定制的SOCKS5服务器。除了包含主机和端口的第一条CONNECT消息外,还有其他方法可以检查后续消息以确定数据的协议吗?例如,如果应用程序数据以“GET/…”开头,则请求可能是超文本传输协议(HTTP),但这远不是一个完整的解决方案。是否有办法查看数据是否为HTTPS、FTP或“NetFlix流媒体”等

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

那么有没有办法检查后续消息以确定数据的协议?。。。有没有一种方法可以查看数据是否是HTTPS、FTP或“NetFlix流媒体”等

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

在当今的入侵检测系统、更好的防火墙和流量分类器中,你会发现这样的启发式算法,它们在检测质量上有很大的不同,一个坚定的用户常常可以愚弄这些启发式算法。这是一个非常宽泛的主题,但您可能会开始关注免费深度检查(DPI)库,并阅读更多相关内容

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

首先将目标从客户端请求的目标更改为代理。当然,这必须在传输任何可能与数据流上的DPI冲突的数据之前完成,因为某些连接首先从服务器(如SMTP)获取数据,而其他连接(如HTTP)首先从客户端获取数据。因此,您可能需要在获取任何有效负载(即仅基于目标端口)之前确定这是否是HTTP。对于HTTPS,则需要使用连接请求建立隧道,如中所述。对于HTTP,您将修改请求,使其不仅包括路径,还包括完整的URL(即
http://host[:端口]/path


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

感谢您周到的回复。我已经看过nDPI,如果我能让它工作的话,可能会用到它。这些示例显示了命令行工具是如何工作的,但我还没有找到API的详细信息。正如我提到的,我想在数据包通过网络时实时完成这项工作。