类 io.netty.handler.codec.socksx.v5.Socks5CommandRequestDecoder 源码实例Demo

下面列出了怎么用 io.netty.handler.codec.socksx.v5.Socks5CommandRequestDecoder 的API类实例代码及写法,或者点击链接到github查看源代码。

源代码1 项目: netty-4.1.22   文件: Socks5ProxyServer.java

boolean authenticate(ChannelHandlerContext ctx, Object msg) {
    if (username == null) {
        ctx.pipeline().replace(DECODER, DECODER, new Socks5CommandRequestDecoder());
        ctx.write(new DefaultSocks5InitialResponse(Socks5AuthMethod.NO_AUTH));
        return true;
    }

    if (msg instanceof Socks5InitialRequest) {
        ctx.pipeline().replace(DECODER, DECODER, new Socks5PasswordAuthRequestDecoder());
        ctx.write(new DefaultSocks5InitialResponse(Socks5AuthMethod.PASSWORD));
        return false;
    }

    Socks5PasswordAuthRequest req = (Socks5PasswordAuthRequest) msg;
    if (req.username().equals(username) && req.password().equals(password)) {
        ctx.pipeline().replace(DECODER, DECODER, new Socks5CommandRequestDecoder());
        ctx.write(new DefaultSocks5PasswordAuthResponse(Socks5PasswordAuthStatus.SUCCESS));
        return true;
    }

    ctx.pipeline().replace(DECODER, DECODER, new Socks5PasswordAuthRequestDecoder());
    ctx.write(new DefaultSocks5PasswordAuthResponse(Socks5PasswordAuthStatus.FAILURE));
    return false;
}
 

@Override
protected void channelRead0(ChannelHandlerContext ctx, Socks5Message msg) throws Exception {
    if (msg instanceof DefaultSocks5InitialRequest) {
        ctx.pipeline().addBefore(ctx.name(), Socks5CommandRequestDecoder.class.getName(),
                                 new Socks5CommandRequestDecoder());
        ctx.writeAndFlush(new DefaultSocks5InitialResponse(Socks5AuthMethod.NO_AUTH));
    } else if (msg instanceof DefaultSocks5CommandRequest) {
        final DefaultSocks5CommandRequest req = (DefaultSocks5CommandRequest) msg;
        ctx.pipeline().remove(Socks5CommandRequestDecoder.class);
        ctx.fireUserEventTriggered(new ProxySuccessEvent(
                new InetSocketAddress(req.dstAddr(), req.dstPort()),
                new DefaultSocks5CommandResponse(Socks5CommandStatus.SUCCESS,
                                                 Socks5AddressType.IPv4)));
    } else {
        throw new IllegalStateException("unexpected msg: " + msg);
    }
}
 
源代码3 项目: nitmproxy   文件: SocksProxyHandler.java

@Override
protected void channelRead0(ChannelHandlerContext ctx, SocksMessage socksMessage)
        throws Exception {
    switch (socksMessage.version()) {
    case SOCKS4a:
        Socks4CommandRequest socksV4CmdRequest = (Socks4CommandRequest) socksMessage;
        if (socksV4CmdRequest.type() == Socks4CommandType.CONNECT) {
            onSocksSuccess(ctx, socksV4CmdRequest);
        } else {
            ctx.close();
        }
        break;
    case SOCKS5:
        if (socksMessage instanceof Socks5InitialRequest) {
            ctx.pipeline().addFirst(addChannelHandler(new Socks5CommandRequestDecoder()));
            ctx.writeAndFlush(new DefaultSocks5InitialResponse(Socks5AuthMethod.NO_AUTH));
        } else if (socksMessage instanceof Socks5PasswordAuthRequest) {
            ctx.pipeline().addFirst(addChannelHandler(new Socks5CommandRequestDecoder()));
            ctx.writeAndFlush(new DefaultSocks5PasswordAuthResponse(Socks5PasswordAuthStatus.SUCCESS));
        } else if (socksMessage instanceof Socks5CommandRequest) {
            Socks5CommandRequest socks5CmdRequest = (Socks5CommandRequest) socksMessage;
            if (socks5CmdRequest.type() == Socks5CommandType.CONNECT) {
                onSocksSuccess(ctx, socks5CmdRequest);
            } else {
                ctx.close();
            }
        } else {
            ctx.close();
        }
        break;
    case UNKNOWN:
        ctx.close();
        break;
    }
}
 
源代码4 项目: netty-4.1.22   文件: SocksServerHandler.java

@Override
public void channelRead0(ChannelHandlerContext ctx, SocksMessage socksRequest) throws Exception {
    switch (socksRequest.version()) {
        case SOCKS4a:
            Socks4CommandRequest socksV4CmdRequest = (Socks4CommandRequest) socksRequest;
            if (socksV4CmdRequest.type() == Socks4CommandType.CONNECT) {
                ctx.pipeline().addLast(new SocksServerConnectHandler());
                ctx.pipeline().remove(this);
                ctx.fireChannelRead(socksRequest);
            } else {
                ctx.close();
            }
            break;
        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;
    }
}
 
源代码5 项目: socks5-netty   文件: ProxyServer.java

public void start() throws Exception {
	if(proxyFlowLog == null) {
		proxyFlowLog = new ProxyFlowLog4j();
	}
	if(passwordAuth == null) {
		passwordAuth = new PropertiesPasswordAuth();
	}
	EventLoopGroup boss = new NioEventLoopGroup(2);
	EventLoopGroup worker = new NioEventLoopGroup();
	try {
		ServerBootstrap bootstrap = new ServerBootstrap();
		bootstrap.group(boss, worker)
		.channel(NioServerSocketChannel.class)
		.option(ChannelOption.SO_BACKLOG, 1024)
		.option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 1000)
		.childHandler(new ChannelInitializer<SocketChannel>() {
			@Override
			protected void initChannel(SocketChannel ch) throws Exception {
				//流量统计
				ch.pipeline().addLast(
						ProxyChannelTrafficShapingHandler.PROXY_TRAFFIC, 
						new ProxyChannelTrafficShapingHandler(3000, proxyFlowLog, channelListener)
						);
				//channel超时处理
				ch.pipeline().addLast(new IdleStateHandler(3, 30, 0));
				ch.pipeline().addLast(new ProxyIdleHandler());
				//netty日志
				if(logging) {
					ch.pipeline().addLast(new LoggingHandler());
				}
				//Socks5MessagByteBuf
				ch.pipeline().addLast(Socks5ServerEncoder.DEFAULT);
				//sock5 init
				ch.pipeline().addLast(new Socks5InitialRequestDecoder());
				//sock5 init
				ch.pipeline().addLast(new Socks5InitialRequestHandler(ProxyServer.this));
				if(isAuth()) {
					//socks auth
					ch.pipeline().addLast(new Socks5PasswordAuthRequestDecoder());
					//socks auth
					ch.pipeline().addLast(new Socks5PasswordAuthRequestHandler(getPasswordAuth()));
				}
				//socks connection
				ch.pipeline().addLast(new Socks5CommandRequestDecoder());
				//Socks connection
				ch.pipeline().addLast(new Socks5CommandRequestHandler(ProxyServer.this.getBossGroup()));
			}
		});
		
		ChannelFuture future = bootstrap.bind(port).sync();
		logger.debug("bind port : " + port);
		future.channel().closeFuture().sync();
	} finally {
		boss.shutdownGracefully();
		worker.shutdownGracefully();
	}
}
 
 类所在包
 类方法
 同包方法