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; }
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); }
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; } }
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); }