Exemplo n.º 1
0
        private void SendTestCommand(object sender, EventArgs e)
        {
            ToolStripMenuItem s = sender as ToolStripMenuItem;

            PingRequest.SendCommandToTargetAsync(s.Tag.ToString(), "test", Dns.GetHostName());

            timerTickAsync(null, null);
        }
Exemplo n.º 2
0
        private async void RandomizePortMenuItem_Click(object sender, EventArgs e)
        {
            ToolStripItem s = sender as ToolStripItem;

            string host = s.Tag.ToString();

            setHostBlueDot(host);

            RemoteMachine node = Ping.RemoteMachines[host];

            await PingRequest.SendCommandToTargetAsync(node.host, "randomize");

            timerTickAsync(null, null);
        }
Exemplo n.º 3
0
        public bool ProcessCommandHeader(INatDevice Router, dynamic Response, string Key)
        {
            IEnumerable <string> Commands;
            IEnumerable <string> Parameters;

            if (Response.Headers.TryGetValues("Command", out Commands))
            {
                foreach (string c in Commands)
                {
                    Command = c;
                }
            }

            if (Response.Headers.TryGetValues("Parameter", out Parameters))
            {
                foreach (string p in Parameters)
                {
                    Parameter = p;
                }
            }

            // If no command headers were found in the response, return false
            if (Command == null || Parameter == null)
            {
                return(false);
            }

            int rdpPortExternal = Int32.Parse(Registry.Get("Port"));

            // Decrypt the headers passed back by server
            string commandDecrypted   = Harpocrates.Engine.Decrypt(Command, Key);
            string parameterDecrypted = Harpocrates.Engine.Decrypt(Parameter, Key);

            if (commandDecrypted == "open")
            {
                int     lifetime = Convert.ToInt32(Registry.Get("PortLifetime"));
                string  desc     = "Drawbridge [" + Dns.GetHostName() + "]";
                Mapping mapping  = new Mapping(Protocol.Tcp, 3389, rdpPortExternal, lifetime * 60);
                Router.CreatePortMap(mapping);
            }
            else if (commandDecrypted == "close")
            {
                try
                {
                    Router.DeletePortMap(new Mapping(Protocol.Tcp, 3389, rdpPortExternal));
                }
                catch
                {
                }
            }
            else if (commandDecrypted == "lifetime")
            {
                Registry.Set("PortLifetime", parameterDecrypted);
            }
            else if (commandDecrypted == "interval")
            {
                Registry.Set("Interval", parameterDecrypted);
            }
            else if (commandDecrypted == "test")
            {
                PingRequest.SendCommandToTargetAsync(parameterDecrypted, "test-reply", Dns.GetHostName());
            }
            else if (commandDecrypted == "test-reply")
            {
                MessageBox.Show(String.Format("Test command reply processed from: {0}", parameterDecrypted));
            }
            else if (commandDecrypted == "port")
            {
                // Delete old port mapping on router (if any exists)
                try
                {
                    Router.DeletePortMap(new Mapping(Protocol.Tcp, 3389, rdpPortExternal));
                }
                catch
                {
                }

                Registry.Set("Port", parameterDecrypted);
            }
            else if (commandDecrypted == "randomize")
            {
                // Delete old port mapping on router (if any exists)
                try
                {
                    Router.DeletePortMap(new Mapping(Protocol.Tcp, 3389, rdpPortExternal));
                }
                catch
                {
                }

                StaticHelpers.RandomizePort();
            }

            return(true);
        }
Exemplo n.º 4
0
        private ToolStripMenuItem CreateHostMenuItem(string Name, RemoteMachine x)
        {
            ToolStripMenuItem HostMenuItem = new ToolStripMenuItem();

            HostMenuItem.Text = x.host;

            HostMenuItem.Name = Name;

            if (x.pending)
            {
                HostMenuItem.Image = Properties.Resources.bullet_blue;
            }
            else if (x.wanip == "")
            {
                HostMenuItem.Image       = Properties.Resources.bullet_red;
                HostMenuItem.ToolTipText = "Host error: could not configure router";
            }
            else if (x.rdpopen == false)
            {
                HostMenuItem.Image       = Properties.Resources.bullet_yellow;
                HostMenuItem.ToolTipText = "Host error: RDP service not listening on this host";
            }
            else if (x.status == "open")
            {
                HostMenuItem.Image = Properties.Resources.bullet_green;
            }
            else
            {
                HostMenuItem.Image = Properties.Resources.bullet_grey;
            }

            HostMenuItem.Tag = x.host;

            if (x.status == "closed")
            {
                ToolStripMenuItem OpenPortMenuItem = new ToolStripMenuItem();
                OpenPortMenuItem.Text   = "Open Port";
                OpenPortMenuItem.Tag    = x.host;
                OpenPortMenuItem.Click += new EventHandler(OpenPortMenuItem_Click);
                HostMenuItem.DropDownItems.Add(OpenPortMenuItem);
            }

            if (x.status == "open" && x.rdpopen == true)
            {
                ToolStripMenuItem ConnectClientMenuItem = new ToolStripMenuItem();
                ConnectClientMenuItem.Text   = "Launch RDP";
                ConnectClientMenuItem.Tag    = x.host;
                ConnectClientMenuItem.Click += new EventHandler(ConnectClientMenuItem_Click);
                if (x.host == Dns.GetHostName() || x.wanip == this.ExternalIp)
                {
                    ConnectClientMenuItem.ToolTipText = "Computer can not connect to itself.";
                    ConnectClientMenuItem.Enabled     = false;
                }
                if (x.wanip == "")
                {
                    ConnectClientMenuItem.ToolTipText = "Remote computer could not determine WAN IP address.";
                    ConnectClientMenuItem.Enabled     = false;
                }
                HostMenuItem.DropDownItems.Add(ConnectClientMenuItem);
            }

            if (x.rdpopen == true)
            {
                ToolStripMenuItem LaunchRDPInternalMenuItem = new ToolStripMenuItem();
                LaunchRDPInternalMenuItem.Text = "Launch RDP [internal]";
                // If this machine is the one the user is on disable it...
                if (x.host == Dns.GetHostName() || x.wanip != this.ExternalIp)
                {
                    LaunchRDPInternalMenuItem.ToolTipText = "Computer can not connect to itself.";
                    LaunchRDPInternalMenuItem.Enabled     = false;
                }
                LaunchRDPInternalMenuItem.Tag    = x.host;
                LaunchRDPInternalMenuItem.Click += new EventHandler(ConnectClientInternalMenuItem_Click);
                HostMenuItem.DropDownItems.Add(LaunchRDPInternalMenuItem);
            }

            if (x.status == "open")
            {
                ToolStripMenuItem ClosePortMenuItem = new ToolStripMenuItem();
                ClosePortMenuItem.Text   = "Close Port";
                ClosePortMenuItem.Tag    = x.host;
                ClosePortMenuItem.Click += new EventHandler(ClosePortMenuItem_Click);
                HostMenuItem.DropDownItems.Add(ClosePortMenuItem);
            }

            ToolStripMenuItem HostPortSettingsMenuItem = new ToolStripMenuItem();

            HostPortSettingsMenuItem.Text = "Port Settings";
            HostMenuItem.DropDownItems.Add(HostPortSettingsMenuItem);

            ToolStripMenuItem RandomizePortMenuItem = new ToolStripMenuItem();

            RandomizePortMenuItem.Text   = "Randomize Port";
            RandomizePortMenuItem.Tag    = x.host;
            RandomizePortMenuItem.Click += new EventHandler(RandomizePortMenuItem_Click);
            HostPortSettingsMenuItem.DropDownItems.Add(RandomizePortMenuItem);

            ToolStripMenuItem PortSetManualMenuItem = new ToolStripMenuItem();

            PortSetManualMenuItem.Text   = "Choose Port";
            PortSetManualMenuItem.Tag    = x.host;
            PortSetManualMenuItem.Click += delegate(Object sender1, EventArgs ee)
            {
                PortSelect ps = new PortSelect();

                ps.numPort.Value = x.port;

                ps.ShowDialog();

                PingRequest.SendCommandToTargetAsync(x.host, "port", ps.numPort.Value.ToString());

                timerTickAsync(null, null);
            };
            HostPortSettingsMenuItem.DropDownItems.Add(PortSetManualMenuItem);

            ToolStripMenuItem HostPortLifetimeSelectMenuItem = new ToolStripMenuItem();

            HostPortLifetimeSelectMenuItem.Text = "Lifetime";
            HostPortLifetimeSelectMenuItem.Tag  = x.host;
            HostPortSettingsMenuItem.DropDownItems.Add(HostPortLifetimeSelectMenuItem);

            foreach (KeyValuePair <int, string> Life in this.Lifetimes)
            {
                ToolStripMenuItem i = new ToolStripMenuItem();
                i.Text = Life.Value;
                if (Life.Key == x.lifetime)
                {
                    i.Checked = true;
                }
                i.Click += delegate(Object sender1, EventArgs ee)
                {
                    ToolStripMenuItem s = sender1 as ToolStripMenuItem;

                    PingRequest.SendCommandToTargetAsync(x.host, "lifetime", Life.Key.ToString());

                    timerTickAsync(null, null);
                };
                HostPortLifetimeSelectMenuItem.DropDownItems.Add(i);
            }

            ToolStripMenuItem MachineIntervalMenuItem = new ToolStripMenuItem();

            MachineIntervalMenuItem.Text = "Ping Interval";
            HostMenuItem.DropDownItems.Add(MachineIntervalMenuItem);

            foreach (KeyValuePair <int, string> Ping in this.PingsIntervals)
            {
                ToolStripMenuItem i = new ToolStripMenuItem();
                i.Text = Ping.Value;
                i.Tag  = Ping.Key;
                if (Ping.Key == x.interval)
                {
                    i.Checked = true;
                }
                i.Click += delegate(Object sender1, EventArgs ee)
                {
                    ToolStripMenuItem s = sender1 as ToolStripMenuItem;

                    PingRequest.SendCommandToTargetAsync(x.host, "interval", Ping.Key.ToString());

                    timerTickAsync(null, null);
                };
                MachineIntervalMenuItem.DropDownItems.Add(i);
            }

            ToolStripMenuItem TestCommandMenuItem = new ToolStripMenuItem();

            TestCommandMenuItem.Text   = "Test Command Bus";
            TestCommandMenuItem.Tag    = x.host;
            TestCommandMenuItem.Click += new EventHandler(SendTestCommand);
            HostMenuItem.DropDownItems.Add(TestCommandMenuItem);

            HostMenuItem.DropDownItems.Add("-");

            ToolStripMenuItem MachineStatusMenuItem = new ToolStripMenuItem();

            MachineStatusMenuItem.Text  = "Machine Information";
            MachineStatusMenuItem.Tag   = x.host;
            MachineStatusMenuItem.Width = 400;
            HostMenuItem.DropDownItems.Add(MachineStatusMenuItem);

            int  width = 300;
            Font f     = new Font("Consolas", 9);

            MachineStatusMenuItem.DropDownItems.AddRange(new ToolStripItem[] {
                new ToolStripLabel
                {
                    Text  = "Host Name         :  " + x.host,
                    Width = width,
                    Font  = f
                },
                new ToolStripLabel
                {
                    Text  = "Machine GUID      :  " + x.guid,
                    Width = width,
                    Font  = f
                },
                new ToolStripLabel
                {
                    Text  = "External IP       :  " + x.wanip,
                    Width = width,
                    Font  = f
                },
                new ToolStripLabel
                {
                    Text  = "Internal IP       :  " + x.lanip,
                    Width = width,
                    Font  = f
                },
                new ToolStripLabel
                {
                    Text  = "Mapped Port       :  " + x.port,
                    Width = width,
                    Font  = f
                },
                new ToolStripLabel
                {
                    Text  = "Interval          :  " + x.interval + " Seconds",
                    Width = width,
                    Font  = f
                },
                new ToolStripLabel
                {
                    Text  = "Version           :  " + x.version,
                    Width = width,
                    Font  = f
                },
                new ToolStripLabel
                {
                    Text  = "Port Lifetime     :  " + x.lifetime + " Minutes",
                    Width = width,
                    Font  = f
                },
                new ToolStripLabel
                {
                    Text  = "Port Status       :  " + x.status,
                    Width = width,
                    Font  = f
                },
                new ToolStripLabel
                {
                    Text  = "Service Installed :  " + x.serviceinstalled,
                    Width = width,
                    Font  = f
                },
                new ToolStripLabel
                {
                    Text  = "Service Running   :  " + x.servicerunning,
                    Width = width,
                    Font  = f
                }
            });

            return(HostMenuItem);
        }