Beispiel #1
0
 public ColorControl()
 {
     InitializeComponent();
     proxy = new SocketProxy(50001);
     List<string> animations = proxy.call<List<string>>("GetAnimations");
     this.comboBox1.Items.AddRange(animations.ToArray<object>());
     this.trackBar1.Scroll += new System.EventHandler(this.updateColorTrackBar);
     this.trackBar2.Scroll += new System.EventHandler(this.updateColorTrackBar);
     this.trackBar3.Scroll += new System.EventHandler(this.updateColorTrackBar);
     colorRadio_CheckedChanged(null, null);
 }
Beispiel #2
0
 internal SendSocket(SocketProxy socketProxy, SocketType socketType)
     : base(socketProxy, socketType)
 {
 }
 internal DuplexSocket(SocketProxy socketProxy, SocketType socketType)
     : base(socketProxy, socketType)
 {
 }
Beispiel #4
0
 internal ReceiveSocket(SocketProxy socketProxy, SocketType socketType)
     : base(socketProxy, socketType)
 {
 }
 private void ProcessClientRequest(object state)
 {
     var client = (Socket)state;
     var message = new AsynchReceiver().Receive(client, false, "");
     Action<HttpMessage, ISocketProxy> action = ReturnNamedResourceAsWebPage;
     if (Steps.Count == 0 || Steps.Count < _stepIndex)
     {
         Console.WriteLine("no defined action for step " + (_stepIndex++) + " - trying ReturnNamedResourceAsWebPage");
     }
     else
     {
         action = Steps[_stepIndex++];
     }
     var proxy = new SocketProxy(client);
     action(message, proxy);
     proxy.Close();
 }
Beispiel #6
0
 internal SendSocket(SocketProxy socketProxy, SocketType socketType)
     : base(socketProxy, socketType)
 {
 }
Beispiel #7
0
        private static ServerInfo sendHTTPSRequest(int count, String host, int port, String payload, String request, int timeout, String encoding, Boolean foward_302, Boolean redirectDoGet)
        {
            request = request.Replace(CT, ST).Replace(ST, CT);
            Interlocked.Increment(ref HTTP.index);
            String    index = Thread.CurrentThread.Name + Interlocked.Read(ref HTTP.index);
            Stopwatch sw    = new Stopwatch();

            sw.Start();
            ServerInfo   server           = new ServerInfo();
            Boolean      isupdateEncoding = false;
            int          sum          = 0;
            Proxy        cproxy       = null;//当前使用代理
            TcpClient    clientSocket = null;;
            MemoryStream body_data    = new MemoryStream();

            try
            {
                if (port > 0 && port <= 65556)
                {
                    request = request.Replace(Main.setInjectStr, payload);

                    //编码处理
                    request = StringReplace.strReplaceCenter(main.config, request, main.replaceList);
                    TimeOutSocket tos = new TimeOutSocket();
                    if (main.config.proxy_mode == 1 || main.config.proxy_mode == 2)
                    {
                        if (main.config.proxy_mode == 1)
                        {
                            //随机代理
                            cproxy = getRandProxy();
                        }
                        else
                        {
                            cproxy = main.proxy;
                        }
                        //为空,没有代理资源
                        if (cproxy == null)
                        {
                            //不使用代理
                            try
                            {
                                clientSocket = tos.Connect(host, port, timeout);
                            }
                            catch (Exception)
                            {
                                Tools.SysLog(host + ":" + port + "无法连接!");
                            }
                        }
                        else
                        {
                            if (Socks5ProxyType.Equals(cproxy.proxyType))
                            {
                                SocketProxy sp   = new SocketProxy();
                                bool        isok = false;
                                clientSocket = sp.creatProxySocket(cproxy.host, cproxy.port, timeout);
                                if (clientSocket != null)
                                {
                                    isok = sp.ConnectProxyServer(host, port, clientSocket, cproxy.username, cproxy.password, timeout);
                                }
                                if (!isok)
                                {
                                    throw new Exception("代理连接失败!");
                                }
                                tos.useTime = sp.ConectProxyUseTime;
                            }
                            else
                            {
                                //直接替换IP和端口即可
                                clientSocket = tos.Connect(cproxy.host, cproxy.port, timeout);
                            }
                        }
                    }

                    else
                    {
                        try
                        {
                            clientSocket = tos.Connect(host, port, timeout);
                        }
                        catch (Exception)
                        {
                            Tools.SysLog(host + ":" + port + "无法连接!");
                        }
                    }

                    if (sw.ElapsedMilliseconds >= timeout)
                    {
                        return(server);
                    }


                    SslStream ssl = null;
                    if (clientSocket != null && clientSocket.Connected)
                    {
                        clientSocket.SendTimeout = timeout - tos.useTime;
                        ssl = new SslStream(clientSocket.GetStream(), false, new RemoteCertificateValidationCallback(ValidateServerCertificate));

                        //增加支持TLS1.1和TLS1.2支持3072,768
                        SslProtocols protocol = (SslProtocols)3072 | (SslProtocols)768 | SslProtocols.Tls | SslProtocols.Ssl3;
                        ssl.AuthenticateAsClient(host, null, protocol, false);
                        if (ssl.IsAuthenticated)
                        {
                            checkContentLength(ref server, ref request);
                            server.request = request;
                            //分开发送header和body,可以绕过某些情况下的安全防护Connection: close,不能使用这种方式
                            if (!server.reuqestHeader.ToLower().Contains(ConnectionClose))
                            {
                                String[] reqs = Regex.Split(request, "\r\n\r\n");
                                server.reuqestHeader = reqs[0];
                                server.reuqestBody   = reqs[1];
                                ssl.Write(Encoding.UTF8.GetBytes(server.reuqestHeader + "\r\n\r\n"));
                                ssl.Write(Encoding.UTF8.GetBytes(server.reuqestBody));
                            }
                            else
                            {
                                ssl.Write(Encoding.UTF8.GetBytes(request));
                            }
                            ssl.Flush();
                        }
                    }
                    server.request = request;
                    int len = 0;
                    //获取header头
                    String tmp = "";

                    StringBuilder sb = new StringBuilder();

                    clientSocket.ReceiveTimeout = timeout - (int)sw.ElapsedMilliseconds;
                    do
                    {
                        byte[] responseHeader = new byte[1];
                        int    read           = ssl.ReadByte();
                        if (read <= 0)
                        {
                            Thread.Sleep(WaitTime);
                        }
                        char c = (char)read;
                        sb.Append(c);
                        if (c.Equals(T))
                        {
                            tmp = String.Concat(sb[sb.Length - 4], sb[sb.Length - 3], sb[sb.Length - 2], c);
                        }
                    } while (!tmp.Equals(CTRL) && sw.ElapsedMilliseconds <= timeout);

                    server.header = sb.ToString().Replace(CTRL, "");
                    String[] headers = Regex.Split(server.header, CT);
                    //处理header
                    doHeader(ref server, ref headers, ref encoding);
                    //302 301跳转
                    if ((server.code == 302 || server.code == 301) && foward_302)
                    {
                        StringBuilder rsb      = new StringBuilder(server.request);
                        int           urlStart = server.request.IndexOf(" ") + 1;
                        int           urlEnd   = server.request.IndexOf(" HTTP");
                        if (urlStart != -1 && urlEnd != -1)
                        {
                            String url = server.request.Substring(urlStart, urlEnd - urlStart);
                            rsb.Remove(urlStart, url.Length);
                            String location = server.headers["location"];
                            if (!server.headers["location"].StartsWith("/") && !server.headers["location"].StartsWith("http"))
                            {
                                location = Tools.getCurrentPath(url) + location;
                            }
                            location = location.Replace(" ", "%20");
                            rsb.Insert(urlStart, location);
                            String newReuqest = rsb.ToString();
                            if (rsb.ToString().StartsWith("POST") && redirectDoGet)
                            {
                                rsb.Remove(0, 4);
                                rsb.Insert(0, "GET");
                            }

                            return(sendHTTPSRequest(count, host, port, payload, rsb.ToString(), timeout, encoding, false, redirectDoGet));
                        }
                    }


                    //根据请求头解析
                    if (server.headers.ContainsKey(Content_Length) && server.header.IndexOf(Content_Length_Zero) == -1)
                    {
                        int length = int.Parse(server.headers[Content_Length]);

                        while (sum < length && sw.ElapsedMilliseconds <= timeout)
                        {
                            int read = length - sum;
                            if (read > 1024)
                            {
                                read = 1024;
                            }
                            byte[] response_data = new byte[read];

                            len = ssl.Read(response_data, 0, read);

                            if (len > 0)
                            {
                                sum += len;
                                body_data.Write(response_data, 0, len);
                            }
                            if (len <= 0 && sum < length)
                            {
                                Thread.Sleep(WaitTime);
                            }
                        }
                    }
                    //解析chunked传输
                    else if (server.headers.ContainsKey(Transfer_Encoding))
                    {
                        //读取长度
                        int    chunkedSize = 0;
                        byte[] chunkedByte = new byte[1];
                        //读取总长度
                        sum = 0;
                        do
                        {
                            String ctmp = "";
                            do
                            {
                                len = ssl.Read(chunkedByte, 0, 1);
                                if (len <= 0)
                                {
                                    Thread.Sleep(WaitTime);
                                }
                                ctmp += Encoding.UTF8.GetString(chunkedByte);
                            } while (ctmp.IndexOf(CT) == -1 && sw.ElapsedMilliseconds <= timeout);

                            chunkedSize = Tools.convertToIntBy16(ctmp.Replace(CT, ""));

                            //chunked的结束0\r\n\r\n是结束标志,单个chunked块\r\n结束
                            if (ctmp.Equals(CT))
                            {
                                continue;
                            }
                            if (chunkedSize == 0)
                            {
                                //结束了
                                break;
                            }
                            int onechunkLen = 0;

                            while (onechunkLen < chunkedSize && sw.ElapsedMilliseconds <= timeout)
                            {
                                int read = chunkedSize - onechunkLen;
                                if (read > 1024)
                                {
                                    read = 1024;
                                }
                                byte[] response_data = new byte[read];

                                len = ssl.Read(response_data, 0, read);

                                if (len > 0)
                                {
                                    onechunkLen += len;
                                    sum         += len;
                                    body_data.Write(response_data, 0, len);
                                }
                                if (len <= 0 && onechunkLen < chunkedSize)
                                {
                                    Thread.Sleep(WaitTime);
                                }
                            }

                            //判断
                        } while (sw.ElapsedMilliseconds <= timeout);
                    }
                    //connection close方式或未知body长度
                    else
                    {
                        while (sw.ElapsedMilliseconds <= timeout)
                        {
                            bool isok = clientSocket.Client.Poll(timeout, SelectMode.SelectRead);
                            if (!isok || clientSocket.Available <= 0)
                            {
                                break;
                            }
                            else
                            {
                                int read = clientSocket.Available;
                                if (read > 0)
                                {
                                    byte[] response_data = new byte[read];
                                    len = ssl.Read(response_data, 0, read);
                                    if (len > 0)
                                    {
                                        sum += len;
                                        body_data.Write(response_data, 0, len);
                                    }
                                }
                                else
                                {
                                    Thread.Sleep(WaitTime);
                                }
                            }
                        }
                    }
                    //自动识别编码
                    if (AutoGetEncoding.Equals(encoding))
                    {
                        if (!String.IsNullOrEmpty(server.encoding))
                        {
                            encoding = server.encoding;//header找到编码
                        }
                        else
                        {
                            encoding         = DefaultEncoding; //默认一个编码
                            isupdateEncoding = true;            //body找编码
                        }
                        Encoding encod = Encoding.GetEncoding(encoding);
                        getBody(ref server, ref body_data, ref encod, ref index);
                        //修正编码
                        if (isupdateEncoding)
                        {
                            String cEncoding = getHTMLEncoding("", server.body);
                            if (!String.IsNullOrEmpty(cEncoding))
                            {
                                server.encoding = cEncoding;//body找到编码
                                getBody(ref server, ref body_data, ref encod, ref index);
                            }
                        }
                    }
                    else
                    {
                        //指定编码
                        Encoding encod = Encoding.GetEncoding(encoding);
                        getBody(ref server, ref body_data, ref encod, ref index);
                    }
                }
            }catch (Exception e)
            {
                Exception ee = new Exception("HTTPS发包错误!错误消息:" + e.Message + "----发包编号:" + index);
                throw ee;
            }
            finally
            {
                sw.Stop();
                server.length  = sum;
                server.runTime = sw.ElapsedMilliseconds;
                body_data.Close();
                if (clientSocket != null)
                {
                    clientSocket.Close();
                }

                if (main.config.isOpenHTTPLog)
                {
                    server.sleepTime = main.config.sendHTTPSleepTime;
                    Tools.sysHTTPLog(index, server);
                    String proxyInfo = "";
                    if (cproxy != null)
                    {
                        proxyInfo = cproxy.host + ":" + cproxy.port;
                    }
                    main.showHTTPLog(index, server, payload, proxyInfo);
                }
                if (main.config.sendHTTPSleepTime > 0)
                {
                    Thread.Sleep(main.config.sendHTTPSleepTime);
                }
            }
            return(server);
        }
Beispiel #8
0
 internal DuplexSocket(SocketProxy socketProxy, SocketType socketType)
     : base(socketProxy, socketType)
 {
 }
Beispiel #9
0
 internal SubscribeExtSocket(SocketProxy socketProxy, SocketType socketType)
     : base(socketProxy, socketType)
 {
 }
Beispiel #10
0
 internal SubscribeSocket(SocketProxy socketProxy, SocketType socketType)
     : base(socketProxy, socketType)
 {
 }
 // Use this for initialization
 public SocketProxy() : base(NAME) {
     instances = this;
 }
Beispiel #12
0
        private void Initialize()
        {
            AppendLog("RotMG Tool initializing...");

            try
            {
                Settings = new SimpleSettings();
                string packetFile = Path.Combine(Program.RootDirectory, "packets.dat");
                if (File.Exists(packetFile))
                {
                    PacketTable = PacketTable.Load(File.ReadAllText(packetFile));
                }
                AppendLog("Settings loaded.");
            }
            catch (Exception ex)
            {
                AppendLog("Error when loading settings: " + ex.Message);
                return;
            }

            //new System.Threading.Thread(DoCheckUpdate) { IsBackground = true }.Start();

            AppendLog("Retrieving server list...");
            var doc =
                XDocument.Load("http://realmofthemadgodhrd.appspot.com/char/list?guid=" +
                               Guid.NewGuid().ToString().Replace("-", "").ToUpper());
            byte id = 1;

            Servers = doc.XPathSelectElements("//Server").Select(srv => new RemoteServer
            {
                Name     = srv.Element("Name").Value,
                DNS      = srv.Element("DNS").Value,
                Loopback = new IPAddress(new byte[] { 127, 0, 0, id++ })
            }).ToArray();
            AppendLog("Server list retrieved, total {0} servers.", Servers.Length);


            if (!InitializeComponent("Spam Filter", () =>
            {
                Filter = new SpamFilter(this);
                Filter.LoadWordList();
            }))
            {
                return;
            }

            if (!InitializeComponent("Handlers", () =>
            {
                Commands = new CommandManager();
                Hooks = new HookManager();
                Invoke(new Action(() => Windows = new WindowManager(this, windowDropDown)));
            }))
            {
                return;
            }

            AppendLog("If you see any firewall warning, allow this program to pass!");

            if (!InitializeComponent("Web Proxy", () =>
            {
                WebProxy = new HttpProxy(this);
                WebProxy.Start();
                BeginInvoke(new Action(() => { proxyLink.Text = new Uri(WebProxy.ProxyUrl).AbsoluteUri; }));
            }))
            {
                return;
            }

            if (!InitializeComponent("Socket Proxy", () =>
            {
                SocketProxy = new SocketProxy(this);
                SocketProxy.Start();
            }))
            {
                return;
            }

            if (!InitializeComponent("Policy Server", () =>
            {
                PolicyServer = new PolicyServer();
                if (!PolicyServer.Start())
                {
                    throw new Exception("Cannot start policy server! Try start as adminstrator/sudo!");
                }
            }))
            {
                return;
            }

            new HttpHandler(this).Attach();
            new SocketHandler(this).Attach();
            BeginInvoke(new Action(() => timer.Start()));

            AppendLog("RotMG Tool initialized.");
        }