Exemple #1
0
 public static List<Ip4RouteEntry> GetRouteTable()
 {
     var fwdTable = IntPtr.Zero;
     int size = 0;
     var result = NativeMethods.GetIpForwardTable(fwdTable, ref size, true);
     fwdTable = Marshal.AllocHGlobal(size);
     result = NativeMethods.GetIpForwardTable(fwdTable, ref size, true);
     var forwardTable = ReadIPForwardTable(fwdTable);
     Marshal.FreeHGlobal(fwdTable);
     List<Ip4RouteEntry> routeTable = new List<Ip4RouteEntry>();
     for (int i = 0; i < forwardTable.Table.Length; ++i)
     {
         Ip4RouteEntry entry = new Ip4RouteEntry();
         entry.DestinationIP = new IPAddress((long)forwardTable.Table[i].dwForwardDest);
         entry.SubnetMask = new IPAddress((long)forwardTable.Table[i].dwForwardMask);
         entry.GatewayIP = new IPAddress((long)forwardTable.Table[i].dwForwardNextHop);
         entry.InterfaceIndex = Convert.ToInt32(forwardTable.Table[i].dwForwardIfIndex);
         entry.ForwardType = Convert.ToInt32(forwardTable.Table[i].dwForwardType);
         entry.ForwardProtocol = Convert.ToInt32(forwardTable.Table[i].dwForwardProto);
         entry.ForwardAge = Convert.ToInt32(forwardTable.Table[i].dwForwardAge);
         entry.Metric = Convert.ToInt32(forwardTable.Table[i].dwForwardMetric1);
         routeTable.Add(entry);
     }
     return routeTable;
 }
Exemple #2
0
        public static void Test()
        {
            NicInterface.PrintAllNetworkInterface();
            Console.Read();
            ShowNetworkInfo();
            Console.Read();
            Ip4RouteTable.RoutePrint(Ip4RouteTable.GetRouteTable());
            Console.Read();

            Ip4RouteEntry routeEntry = new Ip4RouteEntry
            {
                DestinationIP  = IPAddress.Parse("202.0.0.0"),
                SubnetMask     = IPAddress.Parse("255.0.0.0"),
                GatewayIP      = IPAddress.Parse("10.33.55.1"),
                InterfaceIndex = 11
            };

            //Ip4RouteTable.CreateRoute(routeEntry);
            Ip4RouteTable.DeleteRoute(42);
            Ip4RouteTable.CreateRoute("202.0.0.0", "255.0.0.0", 42, 100);
            Console.Read();
            Ip4RouteTable.RoutePrint(Ip4RouteTable.GetRouteTable());
            Console.Read();
            //Ip4RouteTable.DeleteRoute(routeEntry);
        }
Exemple #3
0
        static void Main(string[] args)
        {
            try
            {
                //Get Parameter
                int interfaceIndex = 0;
                if (args.Count() > 0)
                {
                    interfaceIndex = Int32.Parse(args[0]);
                }


                //Print all the Network adaptors
                NicInterface.PrintAllNetworkInterface();
                //Print the Routing Table
                Ip4RouteTable.RoutePrint();

                if (!Ip4RouteTable.InterfaceIndexExists(interfaceIndex))
                {
                    Console.WriteLine("InterfaceIndex '{0}' does not exists.", interfaceIndex);
                    return;
                }

                //Determine if the Route Table has multiple 1.1.1.1 routes, indicating a VPN is active
                if (!Ip4RouteTable.RouteExists("1.1.1.1"))
                {
                    return;
                }
                //Demostrate Deleting routes and Adding routes

                Ip4RouteEntry routeEntry = Ip4RouteTable.GetRouteEntry("1.1.1.1").First();
                //NetworkAdaptor na = NicInterface.GetNetworkAdaptor(interfaceIndex);
                if (routeEntry != null && routeEntry.GatewayIP.ToString().Length > 0)
                {
                    Console.WriteLine("Deleting VPN existing routes.");
                    Ip4RouteTable.DeleteRoute(interfaceIndex);
                    Ip4RouteTable.DeleteRoute("202.0.0.0");

                    Console.WriteLine("Adding VPN new route.");
                    Ip4RouteTable.CreateRoute("202.0.0.0", "255.0.0.0", interfaceIndex, 100);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                Console.WriteLine(ex.StackTrace.ToString());
                throw;
            }
        }
Exemple #4
0
        public IpRouteTable GetRouteTable()
        {
            var fwdTable = IntPtr.Zero;
            var size     = 0;
            var result   = NetworkHelper.GetIpForwardTable(fwdTable, ref size, true);

            fwdTable = Marshal.AllocHGlobal(size);
            result   = NetworkHelper.GetIpForwardTable(fwdTable, ref size, true);

            var forwardTable = (Ip4RouteTable.IPForwardTable)Marshal.PtrToStructure(fwdTable, typeof(Ip4RouteTable.IPForwardTable));

            var table = new Ip4RouteTable.PMIB_IPFORWARDROW[forwardTable.Size];
            var p     = new IntPtr(fwdTable.ToInt64() + Marshal.SizeOf(forwardTable.Size));

            for (var i = 0; i < forwardTable.Size; ++i)
            {
                table[i] = (Ip4RouteTable.PMIB_IPFORWARDROW)Marshal.PtrToStructure(p, typeof(Ip4RouteTable.PMIB_IPFORWARDROW));
                p        = new IntPtr(p.ToInt64() + Marshal.SizeOf(typeof(Ip4RouteTable.PMIB_IPFORWARDROW)));
            }
            forwardTable.Table = table;

            Marshal.FreeHGlobal(fwdTable);

            var routeTable = new IpRouteTable {
                RouteTable = new List <Ip4RouteEntry>()
            };

            for (var i = 0; i < forwardTable.Table.Length; ++i)
            {
                var entry = new Ip4RouteEntry
                {
                    DestinationIP   = new IPAddress(forwardTable.Table[i].dwForwardDest),
                    SubnetMask      = new IPAddress(forwardTable.Table[i].dwForwardMask),
                    GatewayIP       = new IPAddress(forwardTable.Table[i].dwForwardNextHop),
                    InterfaceIndex  = Convert.ToInt32(forwardTable.Table[i].dwForwardIfIndex),
                    ForwardType     = Convert.ToInt32(forwardTable.Table[i].dwForwardType),
                    ForwardProtocol = Convert.ToInt32(forwardTable.Table[i].dwForwardProto),
                    ForwardAge      = Convert.ToInt32(forwardTable.Table[i].dwForwardAge),
                    Metric          = Convert.ToInt32(forwardTable.Table[i].dwForwardMetric1)
                };
                routeTable.RouteTable.Add(entry);
            }

            return(routeTable);
        }