/// <summary>
        /// 创建路由
        /// </summary>
        /// <param name="dest"></param>
        /// <param name="mask"></param>
        /// <param name="nextHop"></param>
        /// <param name="ifIndex"></param>
        /// <param name="metric"></param>
        /// <returns></returns>
        public static int CreateIpForwardEntry(IPAddress dest, IPAddress mask, IPAddress nextHop, uint ifIndex, int metric = 1)
        {
            IPForwardRow route = new IPForwardRow()
            {
                Dest      = dest,
                Mask      = mask,
                NextHop   = nextHop,
                IfIndex   = ifIndex,
                Metric    = metric,
                Policy    = 0,
                Type      = MIB_IPFORWARD_TYPE.MIB_IPROUTE_TYPE_DIRECT,
                Proto     = MIB_IPPROTO.MIB_IPPROTO_NETMGMT,
                Age       = 0,
                NextHopAS = 0
            };

            OperatingSystem os = Environment.OSVersion;

            if (os.Platform == PlatformID.Win32NT && os.Version.Major >= 6)
            {
                MIB_IPINTERFACE_ROW row;
                int res = GetIpInterfaceEntry(ifIndex, out row);
                if (res != 0)
                {
                    return(res);
                }
                route.Metric = (int)row.Metric;
            }

            return(CreateIpForwardEntry(route));
        }
        /// <summary>
        /// 获取路由表
        /// </summary>
        /// <param name="ipForwardTable"></param>
        /// <returns></returns>
        //public unsafe static int GetIpForwardTable(out IPForwardRow[] ipForwardTable)
        //{
        //    int res = 0, size = 0;
        //    size = Marshal.SizeOf(typeof(MIB_IPFORWARDROW));
        //    MIB_IPFORWARDTABLE* table = (MIB_IPFORWARDTABLE*)Marshal.AllocHGlobal(size);

        //    res = GetIpForwardTable(table, ref size, true);
        //    if (res == 0x7A)
        //    {
        //        table = (MIB_IPFORWARDTABLE*)Marshal.ReAllocHGlobal((IntPtr)table, (IntPtr)size);
        //        res = GetIpForwardTable(table, ref size, true);
        //    }

        //    if (res == 0)
        //    {
        //        ipForwardTable = new IPForwardRow[(*table).dwNumEntries];
        //        for (int i = 0; i < ipForwardTable.Length; i++)
        //        {
        //            ipForwardTable[i] = new IPForwardRow((&(*table).table)[i]);
        //        }
        //    }
        //    else
        //        ipForwardTable = null;

        //    Marshal.FreeHGlobal((IntPtr)table);


        //    return res;
        //}

        /// <summary>
        /// 获取基础路由
        /// </summary>
        /// <param name="destAddr"></param>
        /// <param name="sourceAddr"></param>
        /// <param name="bestRoute"></param>
        /// <returns></returns>
        public static int GetBestRoute(IPAddress destAddr, IPAddress sourceAddr, out IPForwardRow bestRoute)
        {
            MIB_IPFORWARDROW pBestRoute;
            var res = GetBestRoute(IpToUint(destAddr), IpToUint(sourceAddr), out pBestRoute);

            bestRoute = new IPForwardRow(pBestRoute);
            return(res);
        }
 /// <summary>
 /// 删除路由
 /// </summary>
 /// <param name="route"></param>
 /// <returns></returns>
 public static int DeleteIpForwardEntry(IPForwardRow route)
 {
     return(DeleteIpForwardEntry(route.GetBaseStruct()));
 }