Example #1
0
        public void Start()
        {
            DoAsyncRead();
            if (SocksVersion == 4)
            {
                MethodSelectionsVersionFourMessage msg = new MethodSelectionsVersionFourMessage();
                msg.SOCKS4CommandCode = SOCKS4CommandCode.TCPStream;
                msg.DomainName        = RemoteHost;
                msg.DestinationPort   = (ushort)RemotePort;
                msg.UserId            = User;
                msg.Version           = 0x04;
                byte[] bMsg = msg.GetBytes();
                Send(bMsg);
            }
            else if (SocksVersion == 5)
            {
                SOCKS5ClientSessionState = SOCKS5ClientSessionState.WaitingForMethodSelected;
                MethodSelectionsMessage msg = new MethodSelectionsMessage();
                msg.Version = 0x05;
                msg.Methods.Add(SockMethod.NoAuthenticationRequired);
                byte[] bMsg = msg.GetBytes();
                Send(bMsg);
            }

            else
            {
            }
        }
Example #2
0
        public void Start()
        {
            DoAsyncRead();
            if (SocksVersion == 4)
            {
                MethodSelectionsVersionFourMessage msg = new MethodSelectionsVersionFourMessage();
                msg.SOCKS4CommandCode = SOCKS4CommandCode.TCPStream;
                msg.DomainName = RemoteHost;
                msg.DestinationPort = (ushort)RemotePort;
                msg.UserId = User;
                msg.Version = 0x04;
                byte[] bMsg = msg.GetBytes();
                Send(bMsg);
            }
            else if (SocksVersion == 5)
            {
                SOCKS5ClientSessionState = SOCKS5ClientSessionState.WaitingForMethodSelected;
                MethodSelectionsMessage msg = new MethodSelectionsMessage();
                msg.Version = 0x05;
                msg.Methods.Add(SockMethod.NoAuthenticationRequired);
                byte[] bMsg = msg.GetBytes();
                Send(bMsg);
            }

            else
            {

            }
        }
Example #3
0
        public bool HandleReceiveData(byte[] bRecv)
        {
            ReceiveBuffer.AppendData(bRecv);
            byte[] bAllData = ReceiveBuffer.PeekAllSamples();

            /// Recieve our response
            ///
            if (SocksVersion == 4)
            {
                MethodSelectedVersionFourMessage msg = new MethodSelectedVersionFourMessage();
                int nRead = msg.ReadFromBytes(bAllData, 0);
                if (nRead > 0)
                {
                    ReceiveBuffer.GetNSamples(nRead);
                    if (msg.SOCKS4Status == SOCKS4Status.RequestGranted)
                    {
                       return true;
                    }
                    else
                    {
                        throw new Exception("Failed to negotiate a SOCKS4 session");
                    }
                }
                return false;
            }
            else if (SocksVersion == 5)
            {
                if (SOCKS5ClientSessionState == SOCKS5ClientSessionState.WaitingForMethodSelected)
                {
                    MethodSelectedMessage msg = new MethodSelectedMessage();
                    int nRead = msg.ReadFromBytes(bAllData, 0);
                    if (nRead > 0)
                    {
                        ReceiveBuffer.GetNSamples(nRead);
                        if (msg.SockMethod != SockMethod.NoAuthenticationRequired)
                        {
                            throw new Exception("Failed to negotiate a SOCKS5 session");
                        }

                        SOCKS5ClientSessionState = SOCKS5ClientSessionState.WaitingForFinalResponse;

                        /// We're happy, send our connect request
                        SocksRequestMessage req = new SocksRequestMessage();
                        req.AddressType = AddressType.DomainName;
                        req.DestinationDomain = RemoteHost;
                        req.DestinationPort = (ushort)RemotePort;
                        req.Version = 0x05;
                        req.SOCKSCommand = SOCKSCommand.Connect;
                        byte[] bMsg = req.GetBytes();
                        Send(bMsg);
                    }
                    return false;
                }
                else if (SOCKS5ClientSessionState == SOCKS5ClientSessionState.WaitingForFinalResponse)
                {
                    SocksReplyMessage msg = new SocksReplyMessage();
                    int nRead = msg.ReadFromBytes(bAllData, 0);
                    if (nRead > 0)
                    {
                        ReceiveBuffer.GetNSamples(nRead);
                        if (msg.SOCKSReply == SOCKSReply.Succeeded)
                        {
                            return true;
                        }
                        else
                        {
                            throw new Exception(string.Format("Failed to negotiate a SOCKS5 session, error: {0}", msg.SOCKSReply));
                        }

                    }
                    return false;
                }

                return false;
            }
            else
            {
                throw new Exception("Unsupported Version");
            }
        }
Example #4
0
        public bool HandleReceiveData(byte[] bRecv)
        {
            ReceiveBuffer.AppendData(bRecv);
            byte[] bAllData = ReceiveBuffer.PeekAllSamples();

            /// Recieve our response
            ///
            if (SocksVersion == 4)
            {
                MethodSelectedVersionFourMessage msg = new MethodSelectedVersionFourMessage();
                int nRead = msg.ReadFromBytes(bAllData, 0);
                if (nRead > 0)
                {
                    ReceiveBuffer.GetNSamples(nRead);
                    if (msg.SOCKS4Status == SOCKS4Status.RequestGranted)
                    {
                        return(true);
                    }
                    else
                    {
                        throw new Exception("Failed to negotiate a SOCKS4 session");
                    }
                }
                return(false);
            }
            else if (SocksVersion == 5)
            {
                if (SOCKS5ClientSessionState == SOCKS5ClientSessionState.WaitingForMethodSelected)
                {
                    MethodSelectedMessage msg = new MethodSelectedMessage();
                    int nRead = msg.ReadFromBytes(bAllData, 0);
                    if (nRead > 0)
                    {
                        ReceiveBuffer.GetNSamples(nRead);
                        if (msg.SockMethod != SockMethod.NoAuthenticationRequired)
                        {
                            throw new Exception("Failed to negotiate a SOCKS5 session");
                        }

                        SOCKS5ClientSessionState = SOCKS5ClientSessionState.WaitingForFinalResponse;

                        /// We're happy, send our connect request
                        SocksRequestMessage req = new SocksRequestMessage();
                        req.AddressType       = AddressType.DomainName;
                        req.DestinationDomain = RemoteHost;
                        req.DestinationPort   = (ushort)RemotePort;
                        req.Version           = 0x05;
                        req.SOCKSCommand      = SOCKSCommand.Connect;
                        byte[] bMsg = req.GetBytes();
                        Send(bMsg);
                    }
                    return(false);
                }
                else if (SOCKS5ClientSessionState == SOCKS5ClientSessionState.WaitingForFinalResponse)
                {
                    SocksReplyMessage msg = new SocksReplyMessage();
                    int nRead             = msg.ReadFromBytes(bAllData, 0);
                    if (nRead > 0)
                    {
                        ReceiveBuffer.GetNSamples(nRead);
                        if (msg.SOCKSReply == SOCKSReply.Succeeded)
                        {
                            return(true);
                        }
                        else
                        {
                            throw new Exception(string.Format("Failed to negotiate a SOCKS5 session, error: {0}", msg.SOCKSReply));
                        }
                    }
                    return(false);
                }

                return(false);
            }
            else
            {
                throw new Exception("Unsupported Version");
            }
        }