C# WMI之Win32_IP4RouteTable

学习笔记之Management命名空间

 

using System.Management;

 

ManagementClass(string WIM_NAME);

通过 ManagementClass类,访问某WMI;

ManagmentClass.GetInstances() 返回关于WMI的实例,返回类型:ManagementObjectCollection,。表示通过 WMI 检索到的管理对象的不同集合,此集合中的对象为从 ManagementBaseObject 派生的类型,包括 ManagementObjectManagementClass。通过 ManagementObjectSearcher 对象执行 WMI 查询,或者通过表示指定类型的 ManagementClass 检索该类型管理对象的枚举,可得到此集合。此外,这也可能是以指定方式与特定管理对象相关的管理对象集合 — 在这种情况下,此集合可以通过诸如 GetRelated() 之类的方法检索到。此集合可以通过 ManagementObjectCollection.ManagementObjectEnumerator 遍历,并且能够针对各种管理任务对集合中的对象进行检查或操作。

 

ManagemenObjectCollection.Count 属性表示这个返回的WMI实例的集合中的条目,

 

比如Win32_IP4RouteTable 返回的实例的Count 属性就是当前电脑的路由表中路由条数,你也可以用CMD命令route print来进行显示路由条数进行对比确认

 

foreach(ManagementObject mo in ManagementObjectCollection )

通过循环取出集合 的单个路由可以进行操作。

mo.put();  这个函数官方解释是提交对ManagementObject 的修改操作,

但如果你修改mo 的某个属性,再执行put,其实是添加了新的一条路由,而不是在的来的基础上进行的修改,原来的路由还是会保留。

所以,如果你想要修改某条路由,可以先复制一份,再执行put,然后执行Delete(),把原来的那条进行删除操作。达到修改的效果。

以上两个操作在 win7中会抛出UnauthorizedAccessException异常,原因在于WIN7的UAC权限限制了。只有用管理员方式运行就不会出现异常,请注意处理异常,

 

Win32_IP4RouteTable 官方说明http://msdn.microsoft.com/en-us/library/aa394162(v=vs.85).aspx

其中我们常用的字段为:

Destination 目标IP

Mask          子网掩码

NextHop     网关,也就是俗称下一跳

Metric1       跳数,也就是到达目标要经过的路由器数量,值越小越优先,

InterfaceIndex 就称为网卡的ID吧,每张网卡在电脑里都会有个唯一对应ID,通过route print CMD命令可以查看到网卡对应ID。

接口列表
 13...bc ae c5 25 07 0f ......JMicron PCI Express Gigabit Ethernet Adapte
 11...48 5d 60 26 7c 3d ......Atheros AR5007EG Wireless Network Adapter
 14...00 50 56 c0 00 01 ......VMware Virtual Ethernet Adapter for VMnet1
 15...00 50 56 c0 00 08 ......VMware Virtual Ethernet Adapter for VMnet8

 

这个接口列表就是我电脑上的接口列表 11 就是我笔记本无线网卡的接口,13是有线网卡的接口,14,15 是虚拟机的网卡,

 

更多字段详见官方说明了。

 

说差不多了,上个源码,更明白

 ManagementClass routeClass = new ManagementClass("Win32_IP4routeTable");

            ManagementObjectCollection routeColl = routeClass.GetInstances();

            if (routeColl.Count > 0)
            {
                foreach (ManagementObject mo in routeColl)
                {
                    Console.WriteLine("目标IP: {0}\t掩码: {1}\t网关: {2}\t跳数: {3}",mo["Destination"], mo["Mask"], mo["NextHop"], mo["Metric1"]);
                    if (mo["Destination"].ToString() == "0.0.0.0") //不用直接用mo["Destination"]进行比对,会提示需要
//警告 1 可能非有意的引用比较;若要获取值比较,请将左边转换为类型“string” 并且结果是 false
                    {
                        //mo["Nexthop"] = "192.168.1.6";
                        //mo["Type"] = 2;  //不管用,Type = 2 表示无效,用put提交后没效果,
                          try
                        {
                            mo.Delete();  //删除这条路由。
                        }
                        catch (UnauthorizedAccessException)
                        {
                            MessageBox.Show("添加修改路由表无权限,请以管理员权限执行程序");
                        }
                        
                        Console.WriteLine("目标IP: {0}\t掩码: {1}\t网关: {2}\t跳数: {3} 修改版", mo["Destination"], mo["Mask"], mo["NextHop"], mo["Metric1"]);
                    }
                }
            }

 

好了,暂时只了解到这么多,有问题再回来修改,网上都找不到用WMI 修改东西的路由表的资料,用的好多是一个DLL API函数

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值