List of usage examples for io.netty.handler.proxy Socks5ProxyHandler Socks5ProxyHandler
public Socks5ProxyHandler(SocketAddress proxyAddress)
From source file:com.github.sinsinpub.pero.backend.ConnectBackendHandler.java
License:Apache License
/** * Create new instance of proxy handler as it is not Sharable. * //from w w w.j a v a 2s .c o m * @return Socks5ProxyHandler */ protected ProxyHandler newUpstreamProxyHandler(int index) { final ProxyHandler upstreamProxyHandler; final StringBuilder attrPrefix = new StringBuilder("upstream.socks5."); if (index > 0) { attrPrefix.append(String.valueOf(index)).append("."); } String host = AppProps.PROPS.getValue(attrPrefix.toString().concat("host")); if (StringUtil.isEmpty(host)) { upstreamProxyHandler = null; } else { int port = AppProps.PROPS.getInteger(attrPrefix.toString().concat("port"), 1080); upstreamProxyHandler = new Socks5ProxyHandler(new InetSocketAddress(host, port)); upstreamProxyHandler.setConnectTimeoutMillis(getConnectTimeoutMillis()); } return upstreamProxyHandler; }
From source file:com.github.sinsinpub.pero.manual.proxyhandler.ProxyHandlerTest.java
License:Apache License
@Parameters(name = "{index}: {0}") public static List<Object[]> testItems() { List<TestItem> items = Arrays.asList( // HTTP ------------------------------------------------------- new SuccessTestItem("Anonymous HTTP proxy: successful connection", DESTINATION, new HttpProxyHandler(anonHttpProxy.address())), new FailureTestItem("Anonymous HTTP proxy: rejected connection", BAD_DESTINATION, "status: 403", new HttpProxyHandler(anonHttpProxy.address())), new FailureTestItem("HTTP proxy: rejected anonymous connection", DESTINATION, "status: 401", new HttpProxyHandler(httpProxy.address())), new SuccessTestItem("HTTP proxy: successful connection", DESTINATION, new HttpProxyHandler(httpProxy.address(), USERNAME, PASSWORD)), new FailureTestItem("HTTP proxy: rejected connection", BAD_DESTINATION, "status: 403", new HttpProxyHandler(httpProxy.address(), USERNAME, PASSWORD)), new FailureTestItem("HTTP proxy: authentication failure", DESTINATION, "status: 401", new HttpProxyHandler(httpProxy.address(), BAD_USERNAME, BAD_PASSWORD)), new TimeoutTestItem("HTTP proxy: timeout", new HttpProxyHandler(deadHttpProxy.address())), // HTTPS ------------------------------------------------------ new SuccessTestItem("Anonymous HTTPS proxy: successful connection", DESTINATION, clientSslCtx.newHandler(PooledByteBufAllocator.DEFAULT), new HttpProxyHandler(anonHttpsProxy.address())), new FailureTestItem("Anonymous HTTPS proxy: rejected connection", BAD_DESTINATION, "status: 403", clientSslCtx.newHandler(PooledByteBufAllocator.DEFAULT), new HttpProxyHandler(anonHttpsProxy.address())), new FailureTestItem("HTTPS proxy: rejected anonymous connection", DESTINATION, "status: 401", clientSslCtx.newHandler(PooledByteBufAllocator.DEFAULT), new HttpProxyHandler(httpsProxy.address())), new SuccessTestItem("HTTPS proxy: successful connection", DESTINATION, clientSslCtx.newHandler(PooledByteBufAllocator.DEFAULT), new HttpProxyHandler(httpsProxy.address(), USERNAME, PASSWORD)), new FailureTestItem("HTTPS proxy: rejected connection", BAD_DESTINATION, "status: 403", clientSslCtx.newHandler(PooledByteBufAllocator.DEFAULT), new HttpProxyHandler(httpsProxy.address(), USERNAME, PASSWORD)), new FailureTestItem("HTTPS proxy: authentication failure", DESTINATION, "status: 401", clientSslCtx.newHandler(PooledByteBufAllocator.DEFAULT), new HttpProxyHandler(httpsProxy.address(), BAD_USERNAME, BAD_PASSWORD)), new TimeoutTestItem("HTTPS proxy: timeout", clientSslCtx.newHandler(PooledByteBufAllocator.DEFAULT), new HttpProxyHandler(deadHttpsProxy.address())), // SOCKS5 ----------------------------------------------------- new SuccessTestItem("Anonymous SOCKS5: successful connection", DESTINATION, new Socks5ProxyHandler(anonSocks5Proxy.address())), new FailureTestItem("Anonymous SOCKS5: rejected connection", BAD_DESTINATION, "status: FORBIDDEN", new Socks5ProxyHandler(anonSocks5Proxy.address())), new FailureTestItem("SOCKS5: rejected anonymous connection", DESTINATION, "unexpected authMethod: PASSWORD", new Socks5ProxyHandler(socks5Proxy.address())), new SuccessTestItem("SOCKS5: successful connection", DESTINATION, new Socks5ProxyHandler(socks5Proxy.address(), USERNAME, PASSWORD)), new FailureTestItem("SOCKS5: rejected connection", BAD_DESTINATION, "status: FORBIDDEN", new Socks5ProxyHandler(socks5Proxy.address(), USERNAME, PASSWORD)), new FailureTestItem("SOCKS5: authentication failure", DESTINATION, "authStatus: FAILURE", new Socks5ProxyHandler(socks5Proxy.address(), BAD_USERNAME, BAD_PASSWORD)), new TimeoutTestItem("SOCKS5: timeout", new Socks5ProxyHandler(deadSocks5Proxy.address())), // HTTP + HTTPS + SOCKS5 new SuccessTestItem("Single-chain: successful connection", DESTINATION, new Socks5ProxyHandler(interSocks5Proxy.address()), // SOCKS5 clientSslCtx.newHandler(PooledByteBufAllocator.DEFAULT), new HttpProxyHandler(interHttpsProxy.address()), // HTTPS new HttpProxyHandler(interHttpProxy.address()), // HTTP new HttpProxyHandler(anonHttpProxy.address())), // (HTTP + HTTPS + SOCKS5) * 2 new SuccessTestItem("Double-chain: successful connection", DESTINATION, new Socks5ProxyHandler(interSocks5Proxy.address()), // SOCKS5 clientSslCtx.newHandler(PooledByteBufAllocator.DEFAULT), new HttpProxyHandler(interHttpsProxy.address()), // HTTPS new HttpProxyHandler(interHttpProxy.address()), // HTTP new Socks5ProxyHandler(interSocks5Proxy.address()), // SOCKS5 clientSslCtx.newHandler(PooledByteBufAllocator.DEFAULT), new HttpProxyHandler(interHttpsProxy.address()), // HTTPS new HttpProxyHandler(interHttpProxy.address()), // HTTP new HttpProxyHandler(anonHttpProxy.address())) );/*w w w . j a v a 2s .co m*/ // Convert the test items to the list of constructor parameters. List<Object[]> params = new ArrayList<Object[]>(items.size()); for (Object i : items) { params.add(new Object[] { i }); } // Randomize the execution order to increase the possibility of exposing failure // dependencies. Collections.shuffle(params); return params; }
From source file:com.slyak.services.proxy.server.Socks5ProxyServer.java
License:Apache License
@Override ProxyHandler getProxyHandler(ProxyProperties proxyProperties) { return new Socks5ProxyHandler( new InetSocketAddress(proxyProperties.getProxyAddress(), proxyProperties.getProxyPort())); }
From source file:org.apache.dubbo.remoting.transport.netty4.NettyClient.java
License:Apache License
/** * Init bootstrap//from w w w. j av a2 s . c om * * @throws Throwable */ @Override protected void doOpen() throws Throwable { final NettyClientHandler nettyClientHandler = new NettyClientHandler(getUrl(), this); bootstrap = new Bootstrap(); bootstrap.group(nioEventLoopGroup).option(ChannelOption.SO_KEEPALIVE, true) .option(ChannelOption.TCP_NODELAY, true) .option(ChannelOption.ALLOCATOR, PooledByteBufAllocator.DEFAULT) //.option(ChannelOption.CONNECT_TIMEOUT_MILLIS, getTimeout()) .channel(NioSocketChannel.class); if (getConnectTimeout() < 3000) { bootstrap.option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 3000); } else { bootstrap.option(ChannelOption.CONNECT_TIMEOUT_MILLIS, getConnectTimeout()); } bootstrap.handler(new ChannelInitializer() { @Override protected void initChannel(Channel ch) throws Exception { int heartbeatInterval = UrlUtils.getHeartbeat(getUrl()); NettyCodecAdapter adapter = new NettyCodecAdapter(getCodec(), getUrl(), NettyClient.this); ch.pipeline()//.addLast("logging",new LoggingHandler(LogLevel.INFO))//for debug .addLast("decoder", adapter.getDecoder()).addLast("encoder", adapter.getEncoder()) .addLast("client-idle-handler", new IdleStateHandler(heartbeatInterval, 0, 0, MILLISECONDS)) .addLast("handler", nettyClientHandler); String socksProxyHost = ConfigUtils.getProperty(SOCKS_PROXY_HOST); if (socksProxyHost != null) { int socksProxyPort = Integer .parseInt(ConfigUtils.getProperty(SOCKS_PROXY_PORT, DEFAULT_SOCKS_PROXY_PORT)); Socks5ProxyHandler socks5ProxyHandler = new Socks5ProxyHandler( new InetSocketAddress(socksProxyHost, socksProxyPort)); ch.pipeline().addFirst(socks5ProxyHandler); } } }); }
From source file:ws.wamp.jawampa.transport.netty.NettyWampClientConnectorProvider.java
License:Apache License
@Override public IWampConnector createConnector(final URI uri, IWampClientConnectionConfig configuration, List<WampSerialization> serializations, final SocketAddress proxyAddress) throws Exception { String scheme = uri.getScheme(); scheme = scheme != null ? scheme : ""; // Check if the configuration is a netty configuration. // However null is an allowed value final NettyWampConnectionConfig nettyConfig; if (configuration instanceof NettyWampConnectionConfig) { nettyConfig = (NettyWampConnectionConfig) configuration; } else if (configuration != null) { throw new ApplicationError(ApplicationError.INVALID_CONNECTION_CONFIGURATION); } else {/*from ww w. j a va2 s .c o m*/ nettyConfig = null; } if (scheme.equalsIgnoreCase("ws") || scheme.equalsIgnoreCase("wss")) { // Check the host and port field for validity if (uri.getHost() == null || uri.getPort() == 0) { throw new ApplicationError(ApplicationError.INVALID_URI); } // Initialize SSL when required final boolean needSsl = uri.getScheme().equalsIgnoreCase("wss"); final SslContext sslCtx0; if (needSsl && (nettyConfig == null || nettyConfig.sslContext() == null)) { // Create a default SslContext when we got none provided through the constructor try { sslCtx0 = SslContext.newClientContext(InsecureTrustManagerFactory.INSTANCE); } catch (SSLException e) { throw e; } } else if (needSsl) { sslCtx0 = nettyConfig.sslContext(); } else { sslCtx0 = null; } final String subProtocols = WampSerialization.makeWebsocketSubprotocolList(serializations); final int maxFramePayloadLength = (nettyConfig == null) ? NettyWampConnectionConfig.DEFAULT_MAX_FRAME_PAYLOAD_LENGTH : nettyConfig.getMaxFramePayloadLength(); // Return a factory that creates a channel for websocket connections return new IWampConnector() { @Override public IPendingWampConnection connect(final ScheduledExecutorService scheduler, final IPendingWampConnectionListener connectListener, final IWampConnectionListener connectionListener) { // Use well-known ports if not explicitly specified final int port; if (uri.getPort() == -1) { if (needSsl) port = 443; else port = 80; } else port = uri.getPort(); final WebSocketClientHandshaker handshaker = WebSocketClientHandshakerFactory.newHandshaker(uri, WebSocketVersion.V13, subProtocols, false, new DefaultHttpHeaders(), maxFramePayloadLength); /** * Netty handler for that receives and processes WampMessages and state * events from the pipeline. * A new instance of this is created for each connection attempt. */ final ChannelHandler connectionHandler = new SimpleChannelInboundHandler<WampMessage>() { boolean connectionWasEstablished = false; /** Guard to prevent forwarding events aftert the channel was closed */ boolean wasClosed = false; @Override public void channelInactive(ChannelHandlerContext ctx) throws Exception { if (wasClosed) return; wasClosed = true; if (connectionWasEstablished) { connectionListener.transportClosed(); } else { // The transport closed before the websocket handshake was completed connectListener .connectFailed(new ApplicationError(ApplicationError.TRANSPORT_CLOSED)); } } @Override public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { if (wasClosed) return; wasClosed = true; if (connectionWasEstablished) { connectionListener.transportError(cause); } else { // The transport closed before the websocket handshake was completed connectListener.connectFailed(cause); } super.exceptionCaught(ctx, cause); } @Override public void userEventTriggered(final ChannelHandlerContext ctx, Object evt) throws Exception { if (wasClosed) return; if (evt instanceof ConnectionEstablishedEvent) { ConnectionEstablishedEvent ev = (ConnectionEstablishedEvent) evt; final WampSerialization serialization = ev.serialization(); IWampConnection connection = new IWampConnection() { @Override public WampSerialization serialization() { return serialization; } @Override public boolean isSingleWriteOnly() { return false; } @Override public void sendMessage(WampMessage message, final IWampConnectionPromise<Void> promise) { ChannelFuture f = ctx.writeAndFlush(message); f.addListener(new ChannelFutureListener() { @Override public void operationComplete(ChannelFuture future) throws Exception { if (future.isSuccess() || future.isCancelled()) promise.fulfill(null); else promise.reject(future.cause()); } }); } @Override public void close(boolean sendRemaining, final IWampConnectionPromise<Void> promise) { // sendRemaining is ignored. Remaining data is always sent ctx.writeAndFlush(Unpooled.EMPTY_BUFFER) .addListener(new ChannelFutureListener() { @Override public void operationComplete(ChannelFuture future) throws Exception { future.channel().close() .addListener(new ChannelFutureListener() { @Override public void operationComplete( ChannelFuture future) throws Exception { if (future.isSuccess() || future.isCancelled()) promise.fulfill(null); else promise.reject(future.cause()); } }); } }); } }; connectionWasEstablished = true; // Connection to the remote host was established // However the WAMP session is not established until the handshake was finished connectListener.connectSucceeded(connection); } } @Override protected void channelRead0(ChannelHandlerContext ctx, WampMessage msg) throws Exception { if (wasClosed) return; assert (connectionWasEstablished); connectionListener.messageReceived(msg); } }; // If the assigned scheduler is a netty eventloop use this final EventLoopGroup nettyEventLoop; if (scheduler instanceof EventLoopGroup) { nettyEventLoop = (EventLoopGroup) scheduler; } else { connectListener.connectFailed(new ApplicationError(ApplicationError.INCOMATIBLE_SCHEDULER)); return IPendingWampConnection.Dummy; } Bootstrap b = new Bootstrap(); // things should be resolved on via the socks5 proxy if (proxyAddress != null) b.resolver(NoopAddressResolverGroup.INSTANCE); b.group(nettyEventLoop).channel(NioSocketChannel.class) .handler(new ChannelInitializer<SocketChannel>() { @Override protected void initChannel(SocketChannel ch) { ChannelPipeline p = ch.pipeline(); if (proxyAddress != null) { p.addFirst("proxy", new Socks5ProxyHandler(proxyAddress)); } if (sslCtx0 != null) { p.addLast(sslCtx0.newHandler(ch.alloc(), uri.getHost(), port)); } p.addLast(new HttpClientCodec(), new HttpObjectAggregator(8192), new WebSocketClientProtocolHandler(handshaker, false), new WebSocketFrameAggregator( WampHandlerConfiguration.MAX_WEBSOCKET_FRAME_SIZE), new WampClientWebsocketHandler(handshaker), connectionHandler); } }); final ChannelFuture connectFuture = b.connect(uri.getHost(), port); connectFuture.addListener(new ChannelFutureListener() { @Override public void operationComplete(ChannelFuture future) throws Exception { if (future.isSuccess()) { // Do nothing. The connection is only successful when the websocket handshake succeeds } else { // Remark: Might be called directly in addListener // Therefore addListener should be the last call // Remark2: This branch will be taken upon cancellation. // This is required by the contract. connectListener.connectFailed(future.cause()); } } }); // Return the connection in progress with the ability for cancellation return new IPendingWampConnection() { @Override public void cancelConnect() { connectFuture.cancel(false); } }; } }; } throw new ApplicationError(ApplicationError.INVALID_URI); }