小型企业做网站的价格,郑州品牌营销网站建设,内蒙古包头做网站的公司,flash做网站步骤前言: 通过程序更改网卡网关 公司内有多个网络出口,其中一个为固定IP的 带宽只有60M用于应用系统访问, 一个是一条千兆带宽的ADSL,但是只有电信内网IP。做开发调试尤其是企业微信接口涉及到接口白名单IP#xff0c;需要走固定IP#xff0c;而日常一些下载当然我选择用千兆带宽…前言: 通过程序更改网卡网关 公司内有多个网络出口,其中一个为固定IP的 带宽只有60M用于应用系统访问, 一个是一条千兆带宽的ADSL,但是只有电信内网IP。做开发调试尤其是企业微信接口涉及到接口白名单IP需要走固定IP而日常一些下载当然我选择用千兆带宽了所以有时候就不得不在两个网关来进行切换。记录下自己这个自己写的小程序功能走过的一些弯路。 一、.net 版本的选择 最开始理所当然选择了.net 8的版本但网上百度的代码都有用到System.Management ,但8的版本里面没有反正都是自己用所以干脆就改到.net framwork 4的版本了。果然降了版本就可以引用到了。
二、多网卡的问题 我本机只有主板自带的一块网卡以为通过调用 Win32_NetworkAdapterConfiguration 查询出来的网卡也只有一块 但我想简单了调试做了个for循环降本机所有网卡的名称都遍历显示出来了。才发现有如此之多 Microsoft Kernel Debug Network Adapter Bluetooth Device (Personal Area Network) Intel(R) Ethernet Controller (3) I225-V WAN Miniport (SSTP) WAN Miniport (IKEv2) WAN Miniport (L2TP) WAN Miniport (PPTP) WAN Miniport (PPPOE) WAN Miniport (IP) WAN Miniport (IPv6) WAN Miniport (Network Monitor) Microsoft Wi-Fi Direct Virtual Adapter Microsoft Wi-Fi Direct Virtual Adapter Remote NDIS Compatible Device 其中只有Intel(R) Ethernet Controller (3) I225-V 才是我需要设置的网卡。解决方法通过 mo[IPEnabled] 过滤网卡 。简单粗暴一点就通过mo[Description].toString() 来判断网卡的名称。
三、传递值给 inPar[DefaultIPGateway] 注意这里传递过去的值需要是一个数组而不是字符串道理也很简单网关是可以设置多个的。
四、核心代码 核心的代码如下
ManagementBaseObject inPar null;ManagementBaseObject outPar null;ManagementClass mc new ManagementClass(Win32_NetworkAdapterConfiguration);ManagementObjectCollection moc mc.GetInstances();foreach (ManagementObject mo in moc) {if(mo[Description].ToString() Intel(R) Ethernet Controller (3) I225-V) {inPar mo.GetMethodParameters(SetGateways);string[] GateWay new string[] { changeToIP }; inPar[DefaultIPGateway] GateWay; //设置网关地址 1.网关;2.备用网关outPar mo.InvokeMethod(SetGateways, inPar, null);//执行}} 五、悲剧发生 代码其实很简单changeToIP就是需要更改的网关很顺利的代码就跑起来了然而悲剧了没有任何报错提示但就是不生效。最开始我还以为是网卡名称有误导致没有进入到if里面去 执行代码打了断点发现代码是执行的。赶紧求助csdn和度娘没有找到任何有用的信息。
六、解决方法 突发奇想难道是执行权限不够可是我登录的账号Administrator权限的司马当活马医了到Debug目录下右键以管理员身份运行果然设置成功了。一上午的时间都浪费在排查为啥不成功的问题上了。 总结 网上代码很多都是前人经验的总结如果跑不通而你再网上有看到很多人都用了这些代码不防换个思路想想是不是操作系统版本问题权限问题也许排除了这些问题就迎刃而解了。