Example usage for io.netty.handler.proxy Socks5ProxyHandler Socks5ProxyHandler

List of usage examples for io.netty.handler.proxy Socks5ProxyHandler Socks5ProxyHandler

Introduction

In this page you can find the example usage for io.netty.handler.proxy Socks5ProxyHandler Socks5ProxyHandler.

Prototype

public Socks5ProxyHandler(SocketAddress proxyAddress) 

Source Link

Usage

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);
}