Пример #1
0
        public static bool Handle(ByteBuffer request, Tunnel tunnel)
        {
            bool result = false;

            if (request != null && tunnel != null)
            {
                int version = request[0];
                // check if is socks version 5
                if (version == '\u0005')
                {
                    string reply = "\u0005\u0000";
                    result = tunnel.WriteL(reply);
                    if (result)
                    {
                        ByteBuffer buffer = new ByteBuffer();
                        int        read   = tunnel.ReadL(buffer);
                        if (read >= 2)
                        {
                            SOCKS5_CMDType cmdType = (SOCKS5_CMDType)buffer[1];
                            switch (cmdType)
                            {
                            case SOCKS5_CMDType.Connect:
                                result = HandleTCPReq(buffer, tunnel);
                                break;
                            }
                        }
                    }
                }
            }
            return(result);
        }
        public static Tunnel Handle(byte[] request, Socket socket2Client)
        {
            Tunnel result = null;

            if (request != null && socket2Client != null)
            {
                int version = request[0];
                // check if is socks version 5
                if (version == '\u0005')
                {
                    string reply  = "\u0005\u0000";
                    byte[] buffer = Encoding.ASCII.GetBytes(reply);
                    int    written;
                    try {
                        written = socket2Client.Send(buffer);
                    } catch { written = 0; }
                    if (written > 0)
                    {
                        buffer = new byte[100];
                        int read;
                        try {
                            read = socket2Client.Receive(buffer);
                        } catch { read = 0; }
                        if (read > 0)
                        {
                            SOCKS5_CMDType cmdType = (SOCKS5_CMDType)buffer[1];
                            switch (cmdType)
                            {
                            case SOCKS5_CMDType.Connect:
                                result = HandleTCPReq(buffer, socket2Client);
                                break;
                            }
                        }
                    }
                }
            }
            return(result);
        }