Пример #1
0
 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.
 }
Пример #2
0
        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);
        }
Пример #3
0
        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);
        }
Пример #4
0
 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));
     }
 }
Пример #5
0
 public Socks5ClientArgs(Socks5Client p, SocksError x)
 {
     sock   = p;
     status = x;
 }
Пример #6
0
 public SocksException(string message, SocksError err, Exception inner) : base(message, inner)
 {
     ErrorCode = err;
 }
Пример #7
0
 public SocksException(SocksError err)
 {
     ErrorCode = err;
 }
Пример #8
0
 public Socks5ClientArgs(Socks5Client p, SocksError x)
 {
     sock = p;
     status = x;
 }
Пример #9
0
        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);
        }