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