public SocksRequest(StreamTypes type, AddressType addrtype, string address, int port) { Type = addrtype; StreamType = type; Address = address; Port = port; Error = SocksError.Granted; IPAddress p = this.IP; //get Error on the stack. }
public static void SendError(int serverID, SocksError resp = SocksError.HostUnreachable) { byte[] bytesToSend = CreateFormattedMessage(resp, new Structs.AddrSpec() { FQDN = "", IP = null, Port = -1 }); var msg = new SocksDatagram() { server_id = serverID, data = Convert.ToBase64String(bytesToSend) }; AddMythicMessageToQueue(msg); }
private static SocksDatagram CreateFormattedMessageWithLength(SocksError resp, ProxyConnection conn) { byte[] bytesToSend = CreateFormattedMessage(resp, conn.Bind); var msg = new SocksDatagram() { server_id = conn.ServerID, data = Convert.ToBase64String(bytesToSend) }; //string jsonMsg = JsonConvert.SerializeObject(msg); //byte[] jsonBytes = ASCIIEncoding.ASCII.GetBytes(jsonMsg); //byte[] length = BitConverter.GetBytes(jsonBytes.Length); //if (BitConverter.IsLittleEndian) // Array.Reverse(length); //byte[] finalMsg = new byte[jsonBytes.Length + 4]; //Array.Copy(length, finalMsg, length.Length); //Array.Copy(jsonBytes, 0, finalMsg, 4, jsonBytes.Length); return(msg); }
private void onConnected(IAsyncResult res) { Client = (Client)res.AsyncState; try { Client.Sock.EndConnect(res); } catch { this.OnConnected(this, new Socks5ClientArgs(null, SocksError.Failure)); return; } if (Socks.DoSocksAuth(this, Username, Password)) { SocksError p = Socks.SendRequest(Client, enc, Dest, Destport); Client.onDataReceived += Client_onDataReceived; this.OnConnected(this, new Socks5ClientArgs(this, p)); } else { this.OnConnected(this, new Socks5ClientArgs(this, SocksError.Failure)); } }
public Socks5ClientArgs(Socks5Client p, SocksError x) { sock = p; status = x; }
public SocksException(string message, SocksError err, Exception inner) : base(message, inner) { ErrorCode = err; }
public SocksException(SocksError err) { ErrorCode = err; }
private static byte[] CreateFormattedMessage(SocksError resp, Structs.AddrSpec addr) { Enums.AddressType addrType; byte[] addrBody; UInt16 addrPort; byte[] msg; if (addr.FQDN == "" && addr.IP == null && addr.Port == -1) { addrType = Enums.AddressType.IPv4Address; addrBody = new byte[4]; addrPort = 0; //return DisconnectMessageBytes; } else if (addr.FQDN != "") { addrType = Enums.AddressType.FQDNAddress; addrBody = ASCIIEncoding.ASCII.GetBytes(addr.FQDN); addrPort = (UInt16)addr.Port; } else if (addr.IP != null) { if (addr.IP.AddressFamily == AddressFamily.InterNetwork) { addrType = Enums.AddressType.IPv4Address; addrBody = addr.IP.GetAddressBytes(); addrPort = (UInt16)addr.Port; } else if (addr.IP.AddressFamily == AddressFamily.InterNetworkV6) { addrType = Enums.AddressType.IPV6Address; addrBody = addr.IP.GetAddressBytes(); addrPort = (UInt16)addr.Port; } else { //DebugWriteLine($"Failed to format address: {addr.IP.AddressFamily.ToString()}"); return(new byte[1]); } } else { //DebugWriteLine($"Failed to format address: {addr}"); return(new byte[1]); } // Format the message msg = new byte[6 + addrBody.Length]; msg[0] = socks5Version; msg[1] = BitConverter.GetBytes((uint)resp)[0]; msg[2] = 0; // reserved msg[3] = BitConverter.GetBytes((uint)addrType)[0]; Array.Copy(addrBody, 0, msg, 4, addrBody.Length); msg[msg.Length - 2] = (byte)(addrPort >> 8); msg[msg.Length - 1] = (byte)(addrPort & 0xff); return(msg); }