как реализовать socks прокси-сервер с пользователем и паролем в netty - PullRequest
0 голосов
/ 10 ноября 2019

Я новичок в netty, и я изучаю пример sotyproxy netty. Пример по умолчанию - no_auth, я хочу установить имя пользователя и пароль для моего прокси, но когда я раскомментировал код, DefaultSocks5AuthMethodResponse не может быть найден в библиотеке, как мне получить socksproxy с именем пользователя и паролем?

    package io.netty.example.socksproxy;


    @ChannelHandler.Sharable
    public final class SocksServerHandler extends SimpleChannelInboundHandler<SocksMessage> {

.............

        @Override
        public void channelRead0(ChannelHandlerContext ctx, SocksMessage socksRequest) throws Exception {
            switch (socksRequest.version()) {
                ............
                case SOCKS5:
                    if (socksRequest instanceof Socks5InitialRequest) {
                        // auth support example
    //                    ctx.pipeline().addFirst(new Socks5PasswordAuthRequestDecoder());
    //                    ctx.write(new DefaultSocks5AuthMethodResponse(Socks5AuthMethod.PASSWORD));
                        ctx.pipeline().addFirst(new Socks5CommandRequestDecoder());
                        ctx.write(new DefaultSocks5InitialResponse(Socks5AuthMethod.NO_AUTH));
                    } else if (socksRequest instanceof Socks5PasswordAuthRequest) {
                        ctx.pipeline().addFirst(new Socks5CommandRequestDecoder());
                        ctx.write(new DefaultSocks5PasswordAuthResponse(Socks5PasswordAuthStatus.SUCCESS));
                    } else if (socksRequest instanceof Socks5CommandRequest) {
                        Socks5CommandRequest socks5CmdRequest = (Socks5CommandRequest) socksRequest;
                        if (socks5CmdRequest.type() == Socks5CommandType.CONNECT) {
                            ctx.pipeline().addLast(new SocksServerConnectHandler());
                            ctx.pipeline().remove(this);
                            ctx.fireChannelRead(socksRequest);
                        } else {
                            ctx.close();
                        }
                    } else {
                        ctx.close();
                    }
                    break;
                case UNKNOWN:
                    ctx.close();
                    break;
            }
        }

       ...............
    }
...