关于几种设置IP方式的尝试
时间:2010-07-19 来源:wunan
以前修改IP用的IPHelper这个软件,非常好用,但总有几个地方感觉不爽。最最最重要的就是往注册表添加了很多东西,这对我这个绿色软件爱好者来说就是个灾难,于是决定手工做个类似的东西方便自己。
在网上一顿猛查,总的来说有一下几种方式:
1。注册表+DhcpNotifyConfigChange。详细的文章见:http://www.vckbase.com/document/viewdoc/?id=851。这个是见的比较多的方式。由此也略微知道了iphelper这个库。缺点就是这个函数是不公开的,而且需要对相关的注册表项比较了解。而且改成自动获取没有函数提供。
2。AddIPAddress & DeleteIPAddress 。这2个也是iphelper提供的函数。缺点也这2个基本上就是成对出现的。。。直接由静态的改成dhcp方式的话比较郁闷。
3。netsh方式。这个也是最开始软件提到的方式。优点是比较简单强大,用ShellExecute就可以搞定。缺点是。。。。依赖一个外部的总有点那么不太爽。。。。顺便记录下dump的方式:
下面是一个配置的例子
4。WMI。老实说我是第一次接触这玩意。我一个同事先前写过这玩意,但我向他要代码参考的时候他说忘了。。。 不过给了一个代码片段,然后一顿翻msdn有点明白了。。。
主要是Win32_NetworkAdapterConfiguration 这个托管类,里面有些参数和方法。唯一的缺点就是。。。设置的那块网卡必须连通才行。。。这个也让我很郁闷。
由于没系统学过c#,都是照着java的葫芦画c#的瓢,呵呵
以上也是对自己翻了几天的资料的一点小小的总结。最后选择用c#胡乱写了一个。。。顺便又复习了下xml的操作和xpath。感觉c#还是挺方便的。。。至少比mfc那个画界面容易。。。
在网上一顿猛查,总的来说有一下几种方式:
1。注册表+DhcpNotifyConfigChange。详细的文章见:http://www.vckbase.com/document/viewdoc/?id=851。这个是见的比较多的方式。由此也略微知道了iphelper这个库。缺点就是这个函数是不公开的,而且需要对相关的注册表项比较了解。而且改成自动获取没有函数提供。
2。AddIPAddress & DeleteIPAddress 。这2个也是iphelper提供的函数。缺点也这2个基本上就是成对出现的。。。直接由静态的改成dhcp方式的话比较郁闷。
3。netsh方式。这个也是最开始软件提到的方式。优点是比较简单强大,用ShellExecute就可以搞定。缺点是。。。。依赖一个外部的总有点那么不太爽。。。。顺便记录下dump的方式:
netsh>interface ip netsh interface ip>dump //执行脚本用 netsh exec aaa.sh
下面是一个配置的例子
# ---------------------------------- # 接口 IP 配置 # ---------------------------------- pushd interface ip # "本地连接" 的接口 IP 配置 set address name="本地连接" source=static addr=192.168.4.189 mask=255.255.255.0 add address name="本地连接" addr=10.1.1.241 mask=255.255.255.0 set address name="本地连接" gateway=10.1.1.254 gwmetric=1 set dns name="本地连接" source=static addr=219.235.127.1 register=PRIMARY add dns name="本地连接" addr=202.97.224.68 index=2 set wins name="本地连接" source=static addr=none # "无线网络连接" 的接口 IP 配置 set address name="无线网络连接" source=dhcp set dns name="无线网络连接" source=dhcp register=PRIMARY set wins name="无线网络连接" source=dhcp popd # 接口 IP 配置结束
4。WMI。老实说我是第一次接触这玩意。我一个同事先前写过这玩意,但我向他要代码参考的时候他说忘了。。。 不过给了一个代码片段,然后一顿翻msdn有点明白了。。。
主要是Win32_NetworkAdapterConfiguration 这个托管类,里面有些参数和方法。唯一的缺点就是。。。设置的那块网卡必须连通才行。。。这个也让我很郁闷。
//获取托管的 ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration"); ManagementObjectCollection moc = mc.GetInstances(); foreach (ManagementObject mo in moc) { //获取属性,另一种写法是mo.GetPropertyValue(""); if ((bool)mo["IPEnabled"] == true) { string s =mo["Description"].ToString(); this.Adapters.Items.Add(s); AdapterMap.Add(s, mo); } } //这个是调用对应的方法 string[] ips = Ip.Text.Split(new char[] { ' ' }); string[] masks = Mask.Text.Split(new char[] { ' ' }); string[] gws = Gateway.Text.Split(new char[] { ' ' }); UInt32 r1 = (UInt32)mo.InvokeMethod("EnableStatic", new object[] { ips, masks });
由于没系统学过c#,都是照着java的葫芦画c#的瓢,呵呵
以上也是对自己翻了几天的资料的一点小小的总结。最后选择用c#胡乱写了一个。。。顺便又复习了下xml的操作和xpath。感觉c#还是挺方便的。。。至少比mfc那个画界面容易。。。
相关阅读 更多 +