通过代理使用 netty 3.4.2.Final
Posted
技术标签:
【中文标题】通过代理使用 netty 3.4.2.Final【英文标题】:Working via proxy with netty 3.4.2.Final 【发布时间】:2013-03-07 11:14:20 【问题描述】:是否可以使用此处描述的 Netty: http://docs.oracle.com/javase/6/docs/technotes/guides/net/proxies.html
也许有一些选项,例如:
System.getProperties().put("socksProxySet","true");
System.getProperties().put("socksProxyHost","127.0.0.1");
System.getProperties().put("socksProxyPort","1080");
我试过了,但是 netty 不接受属性,也不通过 socks 代理代理请求。
ChannelFuture future =
bootstrap.connect(
new InetSocketAddress(uri.getHost(), uri.getPort()));
我的 netty 客户端通过 websockets 连接到 netty 服务器。
Java NIO 不支持代理。 Netty 基于 Java NIO。我只是希望这种可能性存在/可以添加到netty。
谢谢!
【问题讨论】:
SOCKS 代理服务器是否已配置?或者您想使用 netty-server 作为 SOCKS 服务器? 不,socks 服务器已经在运行——它根本不是 netty。我不想使用 netty sever 作为 socks 服务器。我想通过 soks 代理使用我的 netty 服务器。我发现java.nio根本不支持代理模式——而netty是基于java.nio的。但也许有些东西改变了...... 【参考方案1】:这很简单。您必须使用自己的处理程序创建您的侦听器。示例可以在这里找到: https://github.com/shenfeng/async-http-client
类:
me.shenfeng.http.ConnectionListener me.shenfeng.http.SocksHandler
3.6.2.final 中的 Netty 包含包 *.socks: http://netty.io/4.0/api/io/netty/handler/codec/socks/package-summary.html。 所以这个对象模型可以用来编码/解码 socks 消息到/来自 socks 服务器。
【讨论】:
这仅适用于 HTTP 还是适用于任何 TCP 连接?【参考方案2】:由于您使用从客户端到服务器的 WebSockets 连接,并且 web-sockets 协议基于 HTTP,那么这样的结构应该可以工作(它与您编写的略有不同):
//System.setProperty("socksProxySet","true"); //it's commented, because it seems to be not necessary
System.setProperty("socksProxyHost","127.0.0.1");
System.setProperty("socksProxyPort","1080");
但正如你所说,它不适合你,那么我建议检查官方netty的代理example。
【讨论】:
谢谢,但您发布的链接重定向到服务器实现。它以下一种方式工作:'localaddres:localport' 上的所有请求都被重定向到'remoteaddress:remoteport' 但我不需要它。接下来是 Situaton:1)我有一个 netty 服务器。 2)我有一个网络客户端。 3)我在他们之间有袜子代理。我需要通过这个 socks 代理使用 netty 客户端连接到 netty 服务器。 好的,明白了,我一定是误解了要求。 顺便说一句,您是否尝试过将 SOCKS 参数作为 JVM 参数传递?而且您正在为客户传递参数 onyl,对吗? 当然我尝试过,因为它是在最初的帖子中描述的。它不起作用。 NIO 不支持此属性:blog.tsunanet.net/2010/08/java-nio-and-overengineering.html。您与示例的链接描述了通常的套接字代理,但 Alexey Usatov 询问了袜子代理以上是关于通过代理使用 netty 3.4.2.Final的主要内容,如果未能解决你的问题,请参考以下文章
Netty的客户端使用Socks5代理,netty-handler-proxy源码浅析