Esempio n. 1
0
 private void button2_Click(object sender, EventArgs e)
 {
     if (!ValidateRoute())
         return;
     if (savedRouteName.Text == "")
     {
         new BalloonTip("Warning", "Route name can not be empty", savedRouteName, BalloonTip.ICON.WARNING);
         return;
     }
     Config.SavedRouteItem route = new Config.SavedRouteItem();
     route.Name = savedRouteName.Text;
     route.Destination = routeDestination.Text;
     route.Prefix = routePrefix.Text;
     route.Gateway = routeGateway.Text;
     int ifIndex = int.Parse(Regex.Replace(routeInterface.Text, @"^(\d+) .*$", "$1"));
     if (ifIndex == 1)
         route.InterfaceGuid = NetworkInterface.Loopback.Guid;
     else
         route.InterfaceGuid = Global.NetworkInterfaces.Values.Where((i) => i.Index == ifIndex).FirstOrDefault().Guid;
     route.Metric = ushort.Parse(routeMetric.Text);
     route.IPVersion = ipVersion;
     int result = Global.Config.SavedRoutes.AddNode(treeView, route);
     if (result == 1)
     {
         new BalloonTip("Error", "Invalid destination", button2, BalloonTip.ICON.ERROR);
         return;
     }
     if (result == 2)
     {
         new BalloonTip("Warning", "Route name already used at current destination", savedRouteName, BalloonTip.ICON.WARNING);
         return;
     }
     Close();
 }
Esempio n. 2
0
        private void button2_Click(object sender, EventArgs e)
        {
            if (!ValidateRoute())
            {
                return;
            }
            if (savedRouteName.Text == "")
            {
                new BalloonTip("Warning", "Route name can not be empty", savedRouteName, BalloonTip.ICON.WARNING);
                return;
            }
            Config.SavedRouteItem route = new Config.SavedRouteItem();
            route.Name        = savedRouteName.Text;
            route.Destination = routeDestination.Text;
            route.Prefix      = routePrefix.Text;
            route.Gateway     = routeGateway.Text;
            int ifIndex = int.Parse(Regex.Replace(routeInterface.Text, @"^(\d+) .*$", "$1"));

            if (ifIndex == 1)
            {
                route.InterfaceGuid = NetworkInterface.Loopback.Guid;
            }
            else
            {
                route.InterfaceGuid = Global.NetworkInterfaces.Values.Where((i) => i.Index == ifIndex).FirstOrDefault().Guid;
            }
            route.Metric    = ushort.Parse(routeMetric.Text);
            route.IPVersion = ipVersion;
            int result = Global.Config.SavedRoutes.AddNode(treeView, route, true);

            if (result == 1)
            {
                new BalloonTip("Error", "Invalid destination", button2, BalloonTip.ICON.ERROR);
                return;
            }
            if (result == 2)
            {
                new BalloonTip("Warning", "Route name already used at current destination", savedRouteName, BalloonTip.ICON.WARNING);
                return;
            }
            Close();
            if (savedRouteName.Text != route.Name)
            {
                //foreach (Config.SavedRouteNode node in parent.Nodes)
                //    if (node.Name == savedRouteName.Text && node is Config.SavedRouteItem)
                //    {
                //        new Lib.Windows.BalloonTip("Warning", "Route name already used at current destination", savedRouteName, Lib.Windows.BalloonTip.ICON.WARNING);
                //        return;
                //    }
            }
        }
Esempio n. 3
0
        private void button1_Click(object sender, EventArgs e)
        {
            if (!ValidateConfigs())
            {
                return;
            }
            IPAddress ipAddress = new IPAddress(0);

            for (int j = 0; j < unloadRoutes.Count; j++)
            {
                if (listView1.Items[j].Checked &&
                    ValidateRoute(ref unloadRoutes[j].Destination, ref unloadRoutes[j].Prefix, ref unloadRoutes[j].Gateway, unloadRoutes[j].IPVersion))
                {
                    Config.SavedRouteItem savedRoute = unloadRoutes[j];
                    int ifIndex = 0;
                    if (Global.NetworkInterfaces.ContainsKey(savedRoute.InterfaceGuid))
                    {
                        ifIndex = Global.NetworkInterfaces[savedRoute.InterfaceGuid].Index;
                    }
                    else if (Environment.OSVersion.Version.CompareTo(new Version("6.0")) > -1 &&
                             NetworkInterface.Loopback.Guid == savedRoute.InterfaceGuid)
                    {
                        ifIndex = 1;
                    }
                    // load defaults
                    if (defaultInterfaceMode.SelectedIndex == 0 && listView1.Items[j].SubItems[6].Text != "Active" ||
                        defaultInterfaceMode.SelectedIndex == 1)
                    {
                        if (unloadRoutes[j].IPVersion == 4)
                        {
                            ifIndex = int.Parse(Regex.Replace(defaultIPv4Interface.Text, @"^(\d+) .*$", "$1"));
                            if (defaultIPv4GatewayMode.SelectedIndex != 3)
                            {
                                unloadRoutes[j].Gateway = defaultIPv4Gateway.Text;
                            }
                        }
                        else
                        {
                            ifIndex = int.Parse(Regex.Replace(defaultIPv6Interface.Text, @"^(\d+) .*$", "$1"));
                            if (defaultIPv6GatewayMode.SelectedIndex != 3)
                            {
                                unloadRoutes[j].Gateway = defaultIPv6Gateway.Text;
                            }
                        }
                    }
                    // unload route
                    Iphlpapi.DeleteRoute(unloadRoutes[j].Destination, unloadRoutes[j].Prefix, unloadRoutes[j].Gateway, ifIndex.ToString());
                }
            }
            Close();
        }
Esempio n. 4
0
        private void button4_Click(object sender, EventArgs e)
        {
            if (!ValidateRoute())
            {
                return;
            }
            Config.SavedRouteItem savedRoute = new Config.SavedRouteItem();
            savedRoute.Name        = savedRouteName.Text;
            savedRoute.Destination = routeDestination.Text;
            savedRoute.Prefix      = routePrefix.Text;
            savedRoute.Gateway     = routeGateway.Text;
            int ifIndex = int.Parse(Regex.Replace(routeInterface.Text, @"^(\d+) .*$", "$1"));

            if (ifIndex == 1)
            {
                savedRoute.InterfaceGuid = NetworkInterface.Loopback.Guid;
            }
            else
            {
                savedRoute.InterfaceGuid = Global.NetworkInterfaces.Values.Where((i) => i.Index == ifIndex).FirstOrDefault().Guid;
            }
            savedRoute.Metric    = ushort.Parse(routeMetric.Text);
            savedRoute.IPVersion = ipVersion;
            int result = Global.Config.SavedRoutes.AddNode(treeView1, savedRoute);

            if (result == 1)
            {
                new BalloonTip("Error", "Invalid destination", button4, BalloonTip.ICON.ERROR);
                return;
            }
            if (result == 2)
            {
                DialogResult dialogResult = MessageBox.Show("Route name already used at current destination.\nDo you want to overwrite?", "Overwrite confirmation", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2);
                if (dialogResult == DialogResult.No)
                {
                    return;
                }
                if (treeView1.SelectedNode.ImageIndex == (int)Config.SavedRouteNode.ImageIndex.Group)
                {
                    treeView1.SelectedNode = treeView1.SelectedNode.Nodes.Find(savedRouteName.Text, false).First();
                }
                else if (treeView1.SelectedNode.Name != savedRouteName.Text)
                {
                    treeView1.SelectedNode = treeView1.SelectedNode.Parent.Nodes.Find(savedRouteName.Text, false).First();
                }
                Global.Config.SavedRoutes.DeleteNode(treeView1);
                Global.Config.SavedRoutes.AddNode(treeView1, savedRoute);
            }
            Close();
        }
Esempio n. 5
0
        private void button4_Click(object sender, EventArgs e)
        {
            if (!ValidateRoute())
            {
                return;
            }
            Config.SavedRouteItem savedRoute = new Config.SavedRouteItem();
            savedRoute.Name        = savedRouteName.Text;
            savedRoute.Destination = routeDestination.Text;
            savedRoute.Prefix      = routePrefix.Text;
            savedRoute.Gateway     = routeGateway.Text;
            int ifIndex = int.Parse(Regex.Replace(routeInterface.Text, @"^(\d+) .*$", "$1"));

            if (ifIndex == 1)
            {
                savedRoute.InterfaceGuid = NetworkInterface.Loopback.Guid;
            }
            else
            {
                savedRoute.InterfaceGuid = Global.NetworkInterfaces.Values.Where((i) => i.Index == ifIndex).FirstOrDefault().Guid;
            }
            savedRoute.Metric    = ushort.Parse(routeMetric.Text);
            savedRoute.IPVersion = ipVersion;
            int result = Global.Config.SavedRoutes.AddNode(treeView1, savedRoute);

            if (result == 1)
            {
                new BalloonTip("Error", "Invalid destination", button4, BalloonTip.ICON.ERROR);
                return;
            }
            if (result == 2)
            {
                new BalloonTip("Warning", "Route name already used at current destination", savedRouteName, BalloonTip.ICON.WARNING);
                return;
            }
            Close();
        }
Esempio n. 6
0
 public EditRouteForm(int ipVersion, string destination, string prefix, string gateway, string interfaceIndex, string metric)
 {
     InitializeComponent();
     this.ipVersion      = ipVersion;
     this.destination    = destination;
     this.prefix         = prefix;
     this.gateway        = gateway;
     this.interfaceIndex = interfaceIndex;
     // Check if route is saved
     route               = new Config.SavedRouteItem();
     route.IPVersion     = ipVersion;
     route.Destination   = destination;
     route.Prefix        = prefix;
     route.Gateway       = gateway;
     route.InterfaceGuid = Global.NetworkInterfaces.First(i => i.Value.Index == int.Parse(interfaceIndex)).Value.Guid;
     treeView            = Global.Config.SavedRoutes.Find(route);
     if (treeView.SelectedNode != treeView.Nodes[0])
     {
         route.Name = treeView.SelectedNode.Name;
         updateSavedRouteCheckBox.Checked = true;
         updateSavedRouteCheckBox.Enabled = true;
     }
     // Populate IPv4 or IPv6
     if (ipVersion == 4)
     {
         Text                  = "Edit IPv4 Route";
         groupBox1.Text        = "IPv4 Route";
         routeDestination.Text = "0.0.0.0";
         routePrefix.Text      = "255.255.255.255";
         toolTip1.SetToolTip(routePrefix, "Subnet IP mask or prefix length");
         foreach (NetworkInterface nic in Global.NetworkInterfaces.Values)
         {
             if (nic.IPv4Enabled)
             {
                 routeInterface.Items.Add(nic.Index.ToString() + " (" + nic.Name + " - " + (nic.IPv4Address.Count > 0 ? nic.IPv4Address.FirstOrDefault().Address : "0.0.0.0") + ")");
             }
         }
         if (Environment.OSVersion.Version.CompareTo(new Version("6.0")) > -1 &&
             NetworkInterface.Loopback.IPv4Enabled)
         {
             routeInterface.Items.Add("1 (" + NetworkInterface.Loopback.Name + " - 127.0.0.1)");
         }
     }
     else
     {
         Text                  = "Edit IPv6 Route";
         groupBox1.Text        = "IPv6 Route";
         routeDestination.Text = "::";
         routePrefix.Text      = "128";
         toolTip1.SetToolTip(routePrefix, "Subnet prefix length, a value between 0 and 128 (inclusive)");
         foreach (NetworkInterface nic in Global.NetworkInterfaces.Values)
         {
             if (nic.IPv6Enabled)
             {
                 routeInterface.Items.Add(nic.Index.ToString() + " (" + nic.Name + " - " + (nic.IPv6Address.All.Count > 0 ? nic.IPv6Address.All.FirstOrDefault().Address : "::") + ")");
             }
         }
         if (Environment.OSVersion.Version.CompareTo(new Version("6.0")) > -1 &&
             NetworkInterface.Loopback.IPv6Enabled)
         {
             routeInterface.Items.Add("1 (" + NetworkInterface.Loopback.Name + " - ::1)");
         }
     }
     routeGatewayMode.SelectedIndex = 1;
     new TextBoxMask(routeMetric, TextBoxMask.Mask.Numeric);
     // load route
     routeDestination.Text          = destination;
     routePrefix.Text               = prefix;
     routeGatewayMode.SelectedIndex = 0;
     routeGateway.Text              = gateway;
     for (int i = 0; i < routeInterface.Items.Count; i++)
     {
         if (Regex.IsMatch(routeInterface.Items[i].ToString(), @"^" + interfaceIndex + @" .*$"))
         {
             routeInterface.SelectedIndex = i;
         }
     }
     routeMetric.Text = metric;
 }
Esempio n. 7
0
        async void UpdateRoutes(CancellationTokenSource cts)
        {
            try
            {
                while (!cts.IsCancellationRequested)
                {
                    listView1.BeginUpdate();
                    List <Iphlpapi.Route>        routes         = Iphlpapi.GetRoutes(Iphlpapi.FAMILY.AF_UNSPEC);
                    List <Config.SavedRouteItem> savedRoutes    = Global.Config.SavedRoutes.GetRoutes(Global.Config.SavedRoutes.Nodes[0]);
                    Config.SavedRouteNode        selectedNode   = Global.Config.SavedRoutes.GetSelectedNode(treeView1);
                    List <Config.SavedRouteItem> selectedRoutes = Global.Config.SavedRoutes.GetRoutes(selectedNode);
                    // add/update items
                    foreach (Iphlpapi.Route route in routes)
                    {
                        if (route.IPVersion == 4 && comboBox1.SelectedIndex == 1 ||
                            route.IPVersion == 6 && comboBox1.SelectedIndex == 0)
                        {
                            continue;
                        }
                        // skip disconnected interfaces
                        if (Global.NetworkInterfaces.Values.Where((i) => i.Index == route.InterfaceIndex).Count() == 0 &&
                            route.InterfaceIndex != 1)
                        {
                            continue;
                        }
                        // calculate route metric
                        if (Environment.OSVersion.Version.CompareTo(new Version("6.0")) > -1)
                        {
                            if (route.InterfaceIndex != 1)
                            {
                                route.Metric += Global.NetworkInterfaces.Values.Where((i) => i.Index == route.InterfaceIndex).FirstOrDefault().InterfaceMetric;
                            }
                            else
                            {
                                route.Metric += NetworkInterface.Loopback.InterfaceMetric;
                            }
                        }
                        bool   found = false;
                        string ifIndex;
                        if (route.InterfaceIndex == 1)
                        {
                            ifIndex = route.InterfaceIndex.ToString() + " (" + NetworkInterface.Loopback.Name + ")";
                        }
                        else
                        {
                            ifIndex = route.InterfaceIndex.ToString() + " (" + Global.NetworkInterfaces.Values.Where((i) => i.Index == route.InterfaceIndex).FirstOrDefault().Name + ")";
                        }
                        // filter routes
                        bool filter = false;
                        if (checkBox1.Checked)
                        {
                            if (selectedRoutes.Find(i =>
                                                    i.Destination == route.Destination &&
                                                    i.Prefix == route.Prefix &&
                                                    i.Gateway == route.Gateway &&
                                                    (Global.NetworkInterfaces.ContainsKey(i.InterfaceGuid) &&
                                                     Global.NetworkInterfaces[i.InterfaceGuid].Index == route.InterfaceIndex ||
                                                     NetworkInterface.Loopback.Guid == i.InterfaceGuid &&
                                                     NetworkInterface.Loopback.Index == route.InterfaceIndex)) == null)
                            {
                                filter = true;
                            }
                        }
                        // TODO: update routes with all matching saved routes using Find()
                        // update existing items
                        foreach (ListViewItem item in listView1.Items)
                        {
                            if (item.SubItems[0].Text == route.Destination &&
                                item.SubItems[1].Text == route.Prefix &&
                                item.SubItems[2].Text == route.Gateway &&
                                item.SubItems[3].Text == ifIndex)
                            {
                                item.SubItems[4].Text = route.Age.ToString();
                                item.SubItems[5].Text = route.Metric.ToString();
                                Config.SavedRouteItem savedRoute = savedRoutes.Find(i =>
                                                                                    i.Destination == route.Destination &&
                                                                                    i.Prefix == route.Prefix &&
                                                                                    i.Gateway == route.Gateway &&
                                                                                    (Global.NetworkInterfaces.ContainsKey(i.InterfaceGuid) &&
                                                                                     Global.NetworkInterfaces[i.InterfaceGuid].Index == route.InterfaceIndex ||
                                                                                     NetworkInterface.Loopback.Guid == i.InterfaceGuid &&
                                                                                     NetworkInterface.Loopback.Index == route.InterfaceIndex));
                                if (savedRoute != null)
                                {
                                    item.SubItems[6].Text = savedRoute.Name;
                                }
                                else
                                {
                                    item.SubItems[6].Text = "";
                                }
                                found = true;
                                break;
                            }
                        }

                        if (found || filter)
                        {
                            continue;
                        }
                        listView1.Items.Add(new ListViewItem(new string[] { route.Destination, route.Prefix, route.Gateway, ifIndex, route.Age.ToString(), route.Metric.ToString(), "" }));
                    }
                    // delete items
                    foreach (ListViewItem item in listView1.Items)
                    {
                        string ifIndex = Regex.Replace(item.SubItems[3].Text, @"^(\d+) .*$", "$1");
                        // filter routes
                        bool filter = false;
                        if (checkBox1.Checked)
                        {
                            if (selectedRoutes.Find(i =>
                                                    i.Destination == item.SubItems[0].Text &&
                                                    i.Prefix == item.SubItems[1].Text &&
                                                    i.Gateway == item.SubItems[2].Text &&
                                                    (Global.NetworkInterfaces.ContainsKey(i.InterfaceGuid) &&
                                                     Global.NetworkInterfaces[i.InterfaceGuid].Index.ToString() == ifIndex ||
                                                     NetworkInterface.Loopback.Guid == i.InterfaceGuid &&
                                                     NetworkInterface.Loopback.Index.ToString() == ifIndex)) == null)
                            {
                                filter = true;
                            }
                        }
                        if (routes.Find((i) =>
                                        i.Destination == item.SubItems[0].Text &&
                                        i.Prefix == item.SubItems[1].Text &&
                                        i.Gateway == item.SubItems[2].Text &&
                                        i.InterfaceIndex.ToString() == ifIndex) == null ||
                            item.SubItems[0].Text.Contains(':') && comboBox1.SelectedIndex == 0 ||
                            !item.SubItems[0].Text.Contains(':') && comboBox1.SelectedIndex == 1 ||
                            filter)
                        {
                            item.Remove();
                        }
                    }
                    foreach (ColumnHeader column in listView1.Columns)
                    {
                        column.Width = -2;
                    }
                    listView1.EndUpdate();
                    await TaskEx.Delay(1000);
                }
            }
            catch { }
        }
Esempio n. 8
0
 public EditItemForm(TreeView treeView)
 {
     InitializeComponent();
     this.treeView = treeView;
     route = (Config.SavedRouteItem)Global.Config.SavedRoutes.GetSelectedNode(treeView);
     IPAddress ipAddress = new IPAddress(0);
     IPAddress.TryParse(route.Destination, out ipAddress);
     if (ipAddress.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
     {
         ipVersion = 4;
         groupBoxRoute.Text = "IPv4 Route";
         routeDestination.Text = "0.0.0.0";
         routePrefix.Text = "255.255.255.255";
         toolTip1.SetToolTip(routePrefix, "Subnet IP mask or prefix length");
         foreach (NetworkInterface nic in Global.NetworkInterfaces.Values)
             if (nic.IPv4Enabled)
                 routeInterface.Items.Add(nic.Index.ToString() + " (" + nic.Name + " - " + (nic.IPv4Address.Count > 0 ? nic.IPv4Address.FirstOrDefault().Address : "0.0.0.0") + ")");
         if (Environment.OSVersion.Version.CompareTo(new Version("6.0")) > -1 &&
             NetworkInterface.Loopback.IPv4Enabled)
             routeInterface.Items.Add("1 (" + NetworkInterface.Loopback.Name + " - 127.0.0.1)");
     }
     else
     {
         ipVersion = 6;
         groupBoxRoute.Text = "IPv6 Route";
         routeDestination.Text = "::";
         routePrefix.Text = "128";
         toolTip1.SetToolTip(routePrefix, "Subnet prefix length, a value between 0 and 128 (inclusive)");
         foreach (NetworkInterface nic in Global.NetworkInterfaces.Values)
             if (nic.IPv6Enabled)
                 routeInterface.Items.Add(nic.Index.ToString() + " (" + nic.Name + " - " + (nic.IPv6Address.All.Count > 0 ? nic.IPv6Address.All.FirstOrDefault().Address : "::") + ")");
         if (Environment.OSVersion.Version.CompareTo(new Version("6.0")) > -1 &&
             NetworkInterface.Loopback.IPv6Enabled)
             routeInterface.Items.Add("1 (" + NetworkInterface.Loopback.Name + " - ::1)");
     }
     routeGatewayMode.SelectedIndex = 1;
     new WinLib.Forms.TextBoxMask(routeMetric, WinLib.Forms.TextBoxMask.Mask.Numeric);
     if (Environment.OSVersion.Version.CompareTo(new Version("6.0")) < 0)
     {
         routeMetric.Text = "1";
     }
     else
     {
         toolTip1.SetToolTip(routeMetric, "Route metric offset. The actual route metric is the summation of interface metric");
         routeMetric.Text = "0";
     }
     // load route
     savedRouteName.Text = route.Name;
     routeDestination.Text = route.Destination;
     routePrefix.Text = route.Prefix;
     routeGatewayMode.SelectedIndex = 0;
     routeGateway.Text = route.Gateway;
     routeMetric.Text = route.Metric.ToString();
     // select interface
     if (Global.NetworkInterfaces.ContainsKey(route.InterfaceGuid))
         for (int i = 0; i < routeInterface.Items.Count; i++)
             if (Regex.IsMatch(routeInterface.Items[i].ToString(), @"^" + Global.NetworkInterfaces[route.InterfaceGuid].Index.ToString() + @" .*$"))
                 routeInterface.SelectedIndex = i;
     if (NetworkInterface.Loopback.Guid == route.InterfaceGuid)
         for (int i = 0; i < routeInterface.Items.Count; i++)
             if (Regex.IsMatch(routeInterface.Items[i].ToString(), @"^" + NetworkInterface.Loopback.Index.ToString() + @" .*$"))
                 routeInterface.SelectedIndex = i;
 }
Esempio n. 9
0
        private void button1_Click(object sender, EventArgs e)
        {
            if (!ValidateConfigs())
            {
                return;
            }
            IPAddress ipAddress = new IPAddress(0);

            for (int j = 0; j < loadRoutes.Count; j++)
            {
                if (listView1.Items[j].Checked &&
                    ValidateRoute(ref loadRoutes[j].Destination, ref loadRoutes[j].Prefix, ref loadRoutes[j].Gateway, loadRoutes[j].IPVersion))
                {
                    Config.SavedRouteItem savedRoute = loadRoutes[j];
                    NetworkInterface      nic        = null;
                    string gateway = savedRoute.Gateway;
                    if (Global.NetworkInterfaces.ContainsKey(savedRoute.InterfaceGuid))
                    {
                        nic = Global.NetworkInterfaces[savedRoute.InterfaceGuid];
                    }
                    else if (Environment.OSVersion.Version.CompareTo(new Version("6.0")) > -1 &&
                             NetworkInterface.Loopback.Guid == savedRoute.InterfaceGuid)
                    {
                        nic = NetworkInterface.Loopback;
                    }
                    // load defaults
                    if (defaultInterfaceMode.SelectedIndex == 0 && nic == null ||
                        defaultInterfaceMode.SelectedIndex == 1)
                    {
                        int ifIndex = 0;

                        if (loadRoutes[j].IPVersion == 4)
                        {
                            ifIndex = int.Parse(Regex.Replace(defaultIPv4Interface.Text, @"^(\d+) .*$", "$1"));
                            if (defaultIPv4GatewayMode.SelectedIndex != 3)
                            {
                                gateway = defaultIPv4Gateway.Text;
                            }
                        }
                        else
                        {
                            ifIndex = int.Parse(Regex.Replace(defaultIPv6Interface.Text, @"^(\d+) .*$", "$1"));
                            if (defaultIPv6GatewayMode.SelectedIndex != 3)
                            {
                                gateway = defaultIPv6Gateway.Text;
                            }
                        }
                        nic = Global.NetworkInterfaces.FirstOrDefault(i => i.Value.Index == ifIndex).Value;
                        if (nic == null && Environment.OSVersion.Version.CompareTo(new Version("6.0")) > -1 &&
                            NetworkInterface.Loopback.Index == ifIndex)
                        {
                            nic = NetworkInterface.Loopback;
                        }
                        if (updateSavedRoutesCheckBox.Checked == true)
                        {
                            loadRoutes[j].InterfaceGuid = nic.Guid;
                            loadRoutes[j].Gateway       = gateway;
                            Global.Config.Save();
                        }
                    }
                    savedRoute.Load(nic, gateway);
                }
                else
                {
                    MessageBox.Show("Could not load route:\nDestination: " + loadRoutes[j].Destination + "\nPrefix: " + loadRoutes[j].Prefix + "\nGateway: " + loadRoutes[j].Gateway + "\nIP version: " + loadRoutes[j].IPVersion, "Invalid route", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            Close();
        }
Esempio n. 10
0
        private void button1_Click(object sender, EventArgs e)
        {
            if (!ValidateRoute())
            {
                return;
            }
            Iphlpapi.MIB_IPFORWARD_TYPE type = Iphlpapi.MIB_IPFORWARD_TYPE.MIB_IPROUTE_TYPE_INDIRECT;
            int ifIndex = int.Parse(Regex.Replace(routeInterface.Text, @"^(\d+) .*$", "$1"));

            // if on-link set type to direct for XP
            if (Environment.OSVersion.Version.CompareTo(new Version("6.0")) < 0)
            {
                NetworkInterface nic;
                if (ifIndex == 1)
                {
                    nic = NetworkInterface.Loopback;
                }
                else
                {
                    nic = Global.NetworkInterfaces.Values.Where((i) => i.Index == ifIndex).First();
                }
                if (ipVersion == 4)
                {
                    if (nic.IPv4Address.Where((i) => i.Address == routeGateway.Text).Count() > 0)
                    {
                        type = Iphlpapi.MIB_IPFORWARD_TYPE.MIB_IPROUTE_TYPE_DIRECT;
                    }
                    //if (nic.Index == 1 && IP.CheckIfSameNetwork("127.0.0.1", routeGateway.Text, "255.0.0.0"))
                    //    type = Iphlpapi.MIB_IPFORWARD_TYPE.MIB_IPROUTE_TYPE_DIRECT;
                }
                else
                {
                    if (nic.IPv6Address.All.Where((i) => i.Address == routeGateway.Text).Count() > 0)
                    {
                        type = Iphlpapi.MIB_IPFORWARD_TYPE.MIB_IPROUTE_TYPE_DIRECT;
                    }
                    //if (nic.Index == 1 && IP.CheckIfSameNetwork("::1", routeGateway.Text, "128"))
                    //    type = Iphlpapi.MIB_IPFORWARD_TYPE.MIB_IPROUTE_TYPE_DIRECT;
                }
                if (routeGateway.Text == "0.0.0.0" || routeGateway.Text == "::")
                {
                    type = Iphlpapi.MIB_IPFORWARD_TYPE.MIB_IPROUTE_TYPE_DIRECT;
                }
            }
            Iphlpapi.AddRoute(routeDestination.Text, routePrefix.Text, routeGateway.Text, ifIndex.ToString(), routeMetric.Text, type);
            // save route
            if (checkBox1.Checked)
            {
                Config.SavedRouteItem savedRoute = new Config.SavedRouteItem();
                savedRoute.Name        = savedRouteName.Text;
                savedRoute.Destination = routeDestination.Text;
                savedRoute.Prefix      = routePrefix.Text;
                savedRoute.Gateway     = routeGateway.Text;
                if (ifIndex == 1)
                {
                    savedRoute.InterfaceGuid = NetworkInterface.Loopback.Guid;
                }
                else
                {
                    savedRoute.InterfaceGuid = Global.NetworkInterfaces.Values.Where((i) => i.Index == ifIndex).FirstOrDefault().Guid;
                }
                savedRoute.Metric    = ushort.Parse(routeMetric.Text);
                savedRoute.IPVersion = ipVersion;
                int result = Global.Config.SavedRoutes.AddNode(treeView1, savedRoute);
                if (result == 1)
                {
                    new BalloonTip("Error", "Invalid destination", button1, BalloonTip.ICON.ERROR);
                    return;
                }
                if (result == 2)
                {
                    DialogResult dialogResult = MessageBox.Show("Route name already used at current destination.\nDo you want to overwrite?", "Overwrite confirmation", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2);
                    if (dialogResult == DialogResult.No)
                    {
                        return;
                    }
                    if (treeView1.SelectedNode.ImageIndex == (int)Config.SavedRouteNode.ImageIndex.Group)
                    {
                        treeView1.SelectedNode = treeView1.SelectedNode.Nodes.Find(savedRouteName.Text, false).First();
                    }
                    else if (treeView1.SelectedNode.Name != savedRouteName.Text)
                    {
                        treeView1.SelectedNode = treeView1.SelectedNode.Parent.Nodes.Find(savedRouteName.Text, false).First();
                    }
                    Global.Config.SavedRoutes.DeleteNode(treeView1);
                    Global.Config.SavedRoutes.AddNode(treeView1, savedRoute);
                }
            }
            Close();
        }
Esempio n. 11
0
        public EditItemForm(TreeView treeView)
        {
            InitializeComponent();
            this.treeView = treeView;
            route         = (Config.SavedRouteItem)Global.Config.SavedRoutes.GetSelectedNode(treeView);
            IPAddress ipAddress = new IPAddress(0);

            IPAddress.TryParse(route.Destination, out ipAddress);
            if (ipAddress.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
            {
                ipVersion             = 4;
                groupBoxRoute.Text    = "IPv4 Route";
                routeDestination.Text = "0.0.0.0";
                routePrefix.Text      = "255.255.255.255";
                toolTip1.SetToolTip(routePrefix, "Subnet IP mask or prefix length");
                foreach (NetworkInterface nic in Global.NetworkInterfaces.Values)
                {
                    if (nic.IPv4Enabled)
                    {
                        routeInterface.Items.Add(nic.Index.ToString() + " (" + nic.Name + " - " + (nic.IPv4Address.Count > 0 ? nic.IPv4Address.FirstOrDefault().Address : "0.0.0.0") + ")");
                    }
                }
                if (Environment.OSVersion.Version.CompareTo(new Version("6.0")) > -1 &&
                    NetworkInterface.Loopback.IPv4Enabled)
                {
                    routeInterface.Items.Add("1 (" + NetworkInterface.Loopback.Name + " - 127.0.0.1)");
                }
            }
            else
            {
                ipVersion             = 6;
                groupBoxRoute.Text    = "IPv6 Route";
                routeDestination.Text = "::";
                routePrefix.Text      = "128";
                toolTip1.SetToolTip(routePrefix, "Subnet prefix length, a value between 0 and 128 (inclusive)");
                foreach (NetworkInterface nic in Global.NetworkInterfaces.Values)
                {
                    if (nic.IPv6Enabled)
                    {
                        routeInterface.Items.Add(nic.Index.ToString() + " (" + nic.Name + " - " + (nic.IPv6Address.All.Count > 0 ? nic.IPv6Address.All.FirstOrDefault().Address : "::") + ")");
                    }
                }
                if (Environment.OSVersion.Version.CompareTo(new Version("6.0")) > -1 &&
                    NetworkInterface.Loopback.IPv6Enabled)
                {
                    routeInterface.Items.Add("1 (" + NetworkInterface.Loopback.Name + " - ::1)");
                }
            }
            routeGatewayMode.SelectedIndex = 1;
            new WinLib.Forms.TextBoxMask(routeMetric, WinLib.Forms.TextBoxMask.Mask.Numeric);
            if (Environment.OSVersion.Version.CompareTo(new Version("6.0")) < 0)
            {
                routeMetric.Text = "1";
            }
            else
            {
                toolTip1.SetToolTip(routeMetric, "Route metric offset. The actual route metric is the summation of interface metric");
                routeMetric.Text = "0";
            }
            // load route
            savedRouteName.Text            = route.Name;
            routeDestination.Text          = route.Destination;
            routePrefix.Text               = route.Prefix;
            routeGatewayMode.SelectedIndex = 0;
            routeGateway.Text              = route.Gateway;
            routeMetric.Text               = route.Metric.ToString();
            // select interface
            if (Global.NetworkInterfaces.ContainsKey(route.InterfaceGuid))
            {
                for (int i = 0; i < routeInterface.Items.Count; i++)
                {
                    if (Regex.IsMatch(routeInterface.Items[i].ToString(), @"^" + Global.NetworkInterfaces[route.InterfaceGuid].Index.ToString() + @" .*$"))
                    {
                        routeInterface.SelectedIndex = i;
                    }
                }
            }
            if (NetworkInterface.Loopback.Guid == route.InterfaceGuid)
            {
                for (int i = 0; i < routeInterface.Items.Count; i++)
                {
                    if (Regex.IsMatch(routeInterface.Items[i].ToString(), @"^" + NetworkInterface.Loopback.Index.ToString() + @" .*$"))
                    {
                        routeInterface.SelectedIndex = i;
                    }
                }
            }
        }
Esempio n. 12
0
        private void button1_Click(object sender, EventArgs e)
        {
            if (!ValidateConfigs())
            {
                return;
            }
            IPAddress ipAddress = new IPAddress(0);

            for (int j = 0; j < loadRoutes.Count; j++)
            {
                if (listView1.Items[j].Checked &&
                    ValidateRoute(ref loadRoutes[j].Destination, ref loadRoutes[j].Prefix, ref loadRoutes[j].Gateway, loadRoutes[j].IPVersion))
                {
                    Config.SavedRouteItem savedRoute = loadRoutes[j];
                    int ifIndex = 0;
                    if (Global.NetworkInterfaces.ContainsKey(savedRoute.InterfaceGuid))
                    {
                        ifIndex = Global.NetworkInterfaces[savedRoute.InterfaceGuid].Index;
                    }
                    else if (Environment.OSVersion.Version.CompareTo(new Version("6.0")) > -1 &&
                             NetworkInterface.Loopback.Guid == savedRoute.InterfaceGuid)
                    {
                        ifIndex = 1;
                    }
                    // load defaults
                    if (defaultInterfaceMode.SelectedIndex == 0 && ifIndex == 0 ||
                        defaultInterfaceMode.SelectedIndex == 1)
                    {
                        if (loadRoutes[j].IPVersion == 4)
                        {
                            ifIndex = int.Parse(Regex.Replace(defaultIPv4Interface.Text, @"^(\d+) .*$", "$1"));
                            if (defaultIPv4GatewayMode.SelectedIndex != 3)
                            {
                                loadRoutes[j].Gateway = defaultIPv4Gateway.Text;
                            }
                        }
                        else
                        {
                            ifIndex = int.Parse(Regex.Replace(defaultIPv6Interface.Text, @"^(\d+) .*$", "$1"));
                            if (defaultIPv6GatewayMode.SelectedIndex != 3)
                            {
                                loadRoutes[j].Gateway = defaultIPv6Gateway.Text;
                            }
                        }
                    }
                    // if on-link set type to direct for XP
                    Iphlpapi.MIB_IPFORWARD_TYPE type = Iphlpapi.MIB_IPFORWARD_TYPE.MIB_IPROUTE_TYPE_INDIRECT;
                    NetworkInterface            nic;
                    if (ifIndex == 1)
                    {
                        nic = NetworkInterface.Loopback;
                    }
                    else
                    {
                        nic = Global.NetworkInterfaces.Values.Where((i) => i.Index == ifIndex).First();
                    }
                    if (Environment.OSVersion.Version.CompareTo(new Version("6.0")) < 0)
                    {
                        if (savedRoute.IPVersion == 4)
                        {
                            if (nic.IPv4Address.Where((i) => i.Address == savedRoute.Gateway).Count() > 0)
                            {
                                type = Iphlpapi.MIB_IPFORWARD_TYPE.MIB_IPROUTE_TYPE_DIRECT;
                            }
                        }
                        else
                        {
                            if (nic.IPv6Address.All.Where((i) => i.Address == savedRoute.Gateway).Count() > 0)
                            {
                                type = Iphlpapi.MIB_IPFORWARD_TYPE.MIB_IPROUTE_TYPE_DIRECT;
                            }
                        }
                        if (savedRoute.Gateway == "0.0.0.0" || savedRoute.Gateway == "::")
                        {
                            type = Iphlpapi.MIB_IPFORWARD_TYPE.MIB_IPROUTE_TYPE_DIRECT;
                        }
                    }
                    // correction for Vista->XP transitioned saved route
                    if (Environment.OSVersion.Version.CompareTo(new Version("6.0")) < 0)
                    {
                        if (IPAddress.TryParse(savedRoute.Gateway, out ipAddress))
                        {
                            if (IPAddress.Parse(savedRoute.Gateway).GetAddressBytes().Max() == 0)
                            {
                                if (savedRoute.IPVersion == 4)
                                {
                                    savedRoute.Gateway = nic.IPv4Address.First().Address;
                                }
                                else
                                {
                                    savedRoute.Gateway = nic.IPv6Address.All.First().Address;
                                }
                            }
                        }
                        if (savedRoute.Metric == 0)
                        {
                            savedRoute.Metric = 1;
                        }
                    }
                    Iphlpapi.DeleteRoute(savedRoute.Destination, savedRoute.Prefix, savedRoute.Gateway, ifIndex.ToString());
                    Iphlpapi.AddRoute(savedRoute.Destination, savedRoute.Prefix, savedRoute.Gateway, ifIndex.ToString(), savedRoute.Metric.ToString(), type);
                    if (updateSavedRoutesCheckBox.Checked == true)
                    {
                        // TODO: update saved route with new interface + gw
                    }
                }
                else
                {
                    MessageBox.Show("Could not load route:\nDestination: " + loadRoutes[j].Destination + "\nPrefix: " + loadRoutes[j].Prefix + "\nGateway: " + loadRoutes[j].Gateway + "\nIP version: " + loadRoutes[j].IPVersion, "Invalid route", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            Close();
        }
Esempio n. 13
0
 private void button4_Click(object sender, EventArgs e)
 {
     if (!ValidateRoute())
         return;
     Config.SavedRouteItem savedRoute = new Config.SavedRouteItem();
     savedRoute.Name = savedRouteName.Text;
     savedRoute.Destination = routeDestination.Text;
     savedRoute.Prefix = routePrefix.Text;
     savedRoute.Gateway = routeGateway.Text;
     int ifIndex = int.Parse(Regex.Replace(routeInterface.Text, @"^(\d+) .*$", "$1"));
     if (ifIndex == 1)
         savedRoute.InterfaceGuid = NetworkInterface.Loopback.Guid;
     else
         savedRoute.InterfaceGuid = Global.NetworkInterfaces.Values.Where((i) => i.Index == ifIndex).FirstOrDefault().Guid;
     savedRoute.Metric = ushort.Parse(routeMetric.Text);
     savedRoute.IPVersion = ipVersion;
     int result = Global.Config.SavedRoutes.AddNode(treeView1, savedRoute);
     if (result == 1)
     {
         new BalloonTip("Error", "Invalid destination", button4, BalloonTip.ICON.ERROR);
         return;
     }
     if (result == 2)
     {
         DialogResult dialogResult = MessageBox.Show("Route name already used at current destination.\nDo you want to overwrite?", "Overwrite confirmation", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2);
         if (dialogResult == DialogResult.No)
             return;
         if (treeView1.SelectedNode.ImageIndex == (int)Config.SavedRouteNode.ImageIndex.Group)
             treeView1.SelectedNode = treeView1.SelectedNode.Nodes.Find(savedRouteName.Text, false).First();
         else if (treeView1.SelectedNode.Name != savedRouteName.Text)
             treeView1.SelectedNode = treeView1.SelectedNode.Parent.Nodes.Find(savedRouteName.Text, false).First();
         Global.Config.SavedRoutes.DeleteNode(treeView1);
         Global.Config.SavedRoutes.AddNode(treeView1, savedRoute);
     }
     Close();
 }
Esempio n. 14
0
 private void button1_Click(object sender, EventArgs e)
 {
     if (!ValidateRoute())
         return;
     Iphlpapi.MIB_IPFORWARD_TYPE type = Iphlpapi.MIB_IPFORWARD_TYPE.MIB_IPROUTE_TYPE_INDIRECT;
     int ifIndex = int.Parse(Regex.Replace(routeInterface.Text, @"^(\d+) .*$", "$1"));
     // if on-link set type to direct for XP
     if (Environment.OSVersion.Version.CompareTo(new Version("6.0")) < 0)
     {
         NetworkInterface nic;
         if (ifIndex == 1)
             nic = NetworkInterface.Loopback;
         else
             nic = Global.NetworkInterfaces.Values.Where((i) => i.Index == ifIndex).First();
         if (ipVersion == 4)
         {
             if (nic.IPv4Address.Where((i) => i.Address == routeGateway.Text).Count() > 0)
                 type = Iphlpapi.MIB_IPFORWARD_TYPE.MIB_IPROUTE_TYPE_DIRECT;
             //if (nic.Index == 1 && IP.CheckIfSameNetwork("127.0.0.1", routeGateway.Text, "255.0.0.0"))
             //    type = Iphlpapi.MIB_IPFORWARD_TYPE.MIB_IPROUTE_TYPE_DIRECT;
         }
         else
         {
             if (nic.IPv6Address.All.Where((i) => i.Address == routeGateway.Text).Count() > 0)
                 type = Iphlpapi.MIB_IPFORWARD_TYPE.MIB_IPROUTE_TYPE_DIRECT;
             //if (nic.Index == 1 && IP.CheckIfSameNetwork("::1", routeGateway.Text, "128"))
             //    type = Iphlpapi.MIB_IPFORWARD_TYPE.MIB_IPROUTE_TYPE_DIRECT;
         }
         if (routeGateway.Text == "0.0.0.0" || routeGateway.Text == "::")
             type = Iphlpapi.MIB_IPFORWARD_TYPE.MIB_IPROUTE_TYPE_DIRECT;
     }
     Iphlpapi.AddRoute(routeDestination.Text, routePrefix.Text, routeGateway.Text, ifIndex.ToString(), routeMetric.Text, type);
     // save route
     if (checkBox1.Checked)
     {
         Config.SavedRouteItem savedRoute = new Config.SavedRouteItem();
         savedRoute.Name = savedRouteName.Text;
         savedRoute.Destination = routeDestination.Text;
         savedRoute.Prefix = routePrefix.Text;
         savedRoute.Gateway = routeGateway.Text;
         if (ifIndex == 1)
             savedRoute.InterfaceGuid = NetworkInterface.Loopback.Guid;
         else
             savedRoute.InterfaceGuid = Global.NetworkInterfaces.Values.Where((i) => i.Index == ifIndex).FirstOrDefault().Guid;
         savedRoute.Metric = ushort.Parse(routeMetric.Text);
         savedRoute.IPVersion = ipVersion;
         int result = Global.Config.SavedRoutes.AddNode(treeView1, savedRoute);
         if (result == 1)
         {
             new BalloonTip("Error", "Invalid destination", button1, BalloonTip.ICON.ERROR);
             return;
         }
         if (result == 2)
         {
             new BalloonTip("Warning", "Route name already used at current destination", savedRouteName, BalloonTip.ICON.WARNING);
             return;
         }
     }
     Close();
 }
Esempio n. 15
0
 public EditRouteForm(int ipVersion, string destination, string prefix, string gateway, string interfaceIndex, string metric)
 {
     InitializeComponent();
     this.ipVersion = ipVersion;
     this.destination = destination;
     this.prefix = prefix;
     this.gateway = gateway;
     this.interfaceIndex = interfaceIndex;
     // Check if route is saved
     route = new Config.SavedRouteItem();
     route.IPVersion = ipVersion;
     route.Destination = destination;
     route.Prefix = prefix;
     route.Gateway = gateway;
     route.InterfaceGuid = Global.NetworkInterfaces.First(i => i.Value.Index == int.Parse(interfaceIndex)).Value.Guid;
     treeView = Global.Config.SavedRoutes.Find(route);
     if (treeView.SelectedNode != treeView.Nodes[0])
     {
         updateSavedRouteCheckBox.Checked = true;
         updateSavedRouteCheckBox.Enabled = true;
     }
     // Populate IPv4 or IPv6
     if (ipVersion == 4)
     {
         Text = "Edit IPv4 Route";
         groupBox1.Text = "IPv4 Route";
         routeDestination.Text = "0.0.0.0";
         routePrefix.Text = "255.255.255.255";
         toolTip1.SetToolTip(routePrefix, "Subnet IP mask or prefix length");
         foreach (NetworkInterface nic in Global.NetworkInterfaces.Values)
             if (nic.IPv4Enabled)
                 routeInterface.Items.Add(nic.Index.ToString() + " (" + nic.Name + " - " + (nic.IPv4Address.Count > 0 ? nic.IPv4Address.FirstOrDefault().Address : "0.0.0.0") + ")");
         if (Environment.OSVersion.Version.CompareTo(new Version("6.0")) > -1 &&
             NetworkInterface.Loopback.IPv4Enabled)
             routeInterface.Items.Add("1 (" + NetworkInterface.Loopback.Name + " - 127.0.0.1)");
     }
     else
     {
         Text = "Edit IPv6 Route";
         groupBox1.Text = "IPv6 Route";
         routeDestination.Text = "::";
         routePrefix.Text = "128";
         toolTip1.SetToolTip(routePrefix, "Subnet prefix length, a value between 0 and 128 (inclusive)");
         foreach (NetworkInterface nic in Global.NetworkInterfaces.Values)
             if (nic.IPv6Enabled)
                 routeInterface.Items.Add(nic.Index.ToString() + " (" + nic.Name + " - " + (nic.IPv6Address.All.Count > 0 ? nic.IPv6Address.All.FirstOrDefault().Address : "::") + ")");
         if (Environment.OSVersion.Version.CompareTo(new Version("6.0")) > -1 &&
             NetworkInterface.Loopback.IPv6Enabled)
             routeInterface.Items.Add("1 (" + NetworkInterface.Loopback.Name + " - ::1)");
     }
     routeGatewayMode.SelectedIndex = 1;
     new TextBoxMask(routeMetric, TextBoxMask.Mask.Numeric);
     // load route
     routeDestination.Text = destination;
     routePrefix.Text = prefix;
     routeGatewayMode.SelectedIndex = 0;
     routeGateway.Text = gateway;
     for (int i = 0; i < routeInterface.Items.Count; i++)
         if (Regex.IsMatch(routeInterface.Items[i].ToString(), @"^" + interfaceIndex + @" .*$"))
             routeInterface.SelectedIndex = i;
     routeMetric.Text = metric;
 }