Use WMI to modify the network settings of your computer
MONTAQUE (Hou Yongfeng)
Received:
1, personal personal experience, for reference 2, when reprinted, please keep the original
Overview:
In the previous article, briefly introduces how to use the WMI to get software and hardware settings, interested in refer to the last article (http://www.9cbs.net/develop/read_article.asp?id=15744). Today, we use the programmed way to read and write system network settings, mainly including the IP address, network mask, and DNS server and gateway of the local network card. Mainly using Win32_NetworkAdapterConfiguration WMI class.
Idea:
The ManagementObject class represents the data management object, and the WIN32_NetworkAdapterConfiguration class is then called by using WQL (WMI Query Language). For the ManagementObject object, the name and parameters of the call method can be passed to the InvokeMethod method to obtain the method of managing the management object class.
The Win32_NetworkAdapterConfiguration class contains some properties and methods related to the computer network adapter settings. This class supports some methods and properties of TCP / IP protocols that are independent of specific network adapters and IPX protocol management.
The properties of some Win32_NetworkAdapterConfiguration are listed below (managed object format)
Class Win32_NetworkAdapterConfiguration: CIM_SETTING
{
Boolean arpAlwayssourceRoute;
Boolean arpuseethersnap;
String Caption;
String DatabasePath;
Boolean deadGwdetectenable;
String defaultiPgateway [];
Uint8 defaulttos;
Uint8 defaulttl;
String description;
Boolean DHCPENABLED;
DateTime DHCPLEAXPIRES;
DateTime DHCPLEaseObtained;
String DHCPSERVER;
String DNSDomain;
String DNSDomainsuffixsearchOrder [];
Boolean DNSenableDforwinsResolution;
String DNSHOSTNAME;
String DNSSERVERSEARCHORDER [];
Boolean DomainDnsRegistrationnabled;
Uint32 forwardbuffermemory;
Boolean FulldnsRegistrationnable;
Uint16 GatewayCostMetric [];
Uint8 IGMPLEVEL;
UINT32 INDEX;
UINT32 InterfaceIndex;
String ipaddress [];
UINT32 IPCONNECTIONMETRIC
Boolean iPENABLED;
Boolean ipfiltersecurityenabled;
Boolean ipportsecurityenabled;
String ipsecpermitipprotocols [];
String ipsecPermittcpports [];
String ipsecPermitudpports [];
String ipSubnet [];
Boolean ipusezerobroadcast; string ipxaddress;
Boolean ipxenable;
UINT32 IPXFRAMEPE [];
UINT32 IPXMEDITYPE;
String ipxnetworknumber [];
String ipxvirtualnetNumber;
Uint32 KeepaliveInterVal;
UINT32 KeepaliveTime;
String macaddress;
UINT32 MTU;
Uint32 NumForwardPacket;
Boolean Pmtubhdtectectenable;
Boolean PmtudiscoveryEnabled;
String serviceName;
String settingId;
UINT32 TCPIPNETBIOSOPTIONS;
UINT32 TCPMAXCONNECTRENSMISSIONS;
Uint32 TCPMaxDataRetransmissions;
UINT32 TCPNUMCONNECTIONS;
Boolean tcpuserfc1222urgentpointer;
UINT16 TCPWINDOWSIZE;
Boolean Winsenablelmhostslookup;
String WinShostLookupfile;
String WinsprimaryServer;
String WinsScopeID;
String WinssecondaryServer;
}
We can use the following code to get the network card settings:
Code:
Imports System.Management
DIM Searcher As New ManagementObjectSearcher ("SELECT * from Win32_NetworkAdapterConfiguration")
Dim Share As ManagementObject
For Each Share in Searcher.get ()
Messagebox.show (Share.getText (TextFormat.mof))
Next Share
result:
Instance of Win32_NetworkAdapterConfiguration
{
CAPTION = "[00000001] Intel (r) Pro / 100 S Desktop Adapter";
DatabasePath = "% systemroot% // system32 // drivers // ETC";
DEFAULTIPGATEWAY = {"192.168.0.254"}; gateway
Description = "Intel (r) Pro / 100 S Desktop Adapter"; 'This is the only one
DHCPENABLED = FALSE;
DNSENABLEDFORWINSRESD = FALSE;
DNSHOSTNAME = "Monkey";
DNSSERVERSEARCHORDER = {"192.168.0.254", "202.120.190.208"}; 'two alternative DNS
DomainDnsregistrationenabled = false;
FullDnsregistrationenabled = true;
GatewayCostMetric = {1};
INDEX = 1;
InterfaceIndex = 65539;
Ipaddress = {"192.168.0.161"}; 'Local iPipConnectionMetric = 20;
Ipenabled = true;
Ipfiltersecurityenabled = false;
IpsecPermitipProtocols = {"0"};
IPsecPermittcpports = {"0"};
IpsecPermitudpports = {"0"};
Ipsubnet = {"255.255.255.0"}; 'mask
IPXENABLED = FALSE;
Macaddress = "52: 54: AB: DD: 64: 03";
ServiceName = "E100B";
SettingId = "{F5553268-53F8-48F6-A818-1432EEE04AE1}"
Tcpipnetbiosoptions = 0;
Winsenablelmhostslookup = true;
WinsScopeID = ""
}
How to change these settings for the NIC? We use the Win32_NetworkAdapterConfiguration to use the method of win32_networkadapterconfiguration. The methods we use have the following methods:
Enablestatic
Enable static TCP / IP settings, enter two parameters one is a local IP address, and the other is a network mask. // General We all use this method to set up a network card IP attribute
Setgateway
Specify a series of gateways
SetDNSSERVERSEARCHORDER
Incorporate DNS list in the form of an array
Below is a snippet, set the correspondence network card according to the NIC Description in the list box.
The main code:
Private Sub Form1_Load (Byval E AS System.Object, Byval E AS System.Eventargs) Handles MyBase.LOAD
GetAllConfigurationalLenetCard ()
End Sub
'Modification setting
Private sub button1_click (byvale as system.object, byval e as system.eventargs) Handles Button1.click
DIM Searcher As New ManagementObjectSearcher ("Select * from win32_networkadapterconfiguration where description =" "" & me.combobox1.selectedItem.toString & "" ")
Dim Share As ManagementObject
DIM IRESULT AS INTEGER = 0 'Judging whether to modify success. If successful, the return value of the following three methods is 0, pay attention to the returned value is the UINT32 type.
For Each Share in Searcher.get ()
Console.writeline (Share.getText (TextFormat.mof))
IF not (Share.Item ("ipaddress" is nothing) THEN
'set address
DIM ipaddresses () as string = {textbox1.text} 'IP address DIM IPSUBNETMASK () AS STRING = {textBox2.text}' mask
Dim objpara () as object = {ipaddresses, ipsubnetmask}
IRESULT = Convert.Toint32 (Share.InvokeMethod ("EnableStatic", Objpara)
DIM ipgateway () as string = {textbox3.text} 'gateway
DIM GATEWAYCOSTMETRIC () AS uint16 = {uint16.parse ("1")}
Dim objpara1 () as object = {ipgateway, gatewaycostmetric}
IRESULT = Convert.Toint32 (Share.InvokeMethod ("setgateways", objpara1))
'set DNS Server Sercer Sera ORDER
'Middle DNS is separated by minus
If Me.TextBox4.text.indexof ("-")> 0 THEN
DIM DNSSERVERS AS STRING () = textbox4.text.split ("-")
Dim objPara2 () as object = {dnsservers}
IRESULT = Convert.Toint32 (Share.InvokeMethod ("SetDnsserversearchOrder", Objpara2))
Else
DIM DNSSERVERS AS STRING () = {me.textbox4.text}
Dim objPara2 () as object = {dnsservers}
IRESULT = Convert.Toint32 (Share.InvokeMethod ("SetDnsserversearchOrder", Objpara2))
END IF
If IResult = 0 THEN
Messagebox.show ("Successful Modification")
Else
Messagebox.show ("Modify Failure, Check the format of the input and whether you have permission")
END IF
END IF
Next Share
End Sub
'Get a list of network cards
Private sub getAllConfigurationArtCard ()
DIM Searcher As New ManagementObjectSearcher ("SELECT * from Win32_NetworkAdapterConfiguration")
Dim Share As ManagementObject
Me.comboBox1.Items.clear ()
For Each Share in Searcher.get ()
IF not (Share.Item ("ipaddress" is nothing) THEN
Me.comBobox1.Items.Ad (Share ("Description"))
END IF
Next Share
Me.comboBox1.selectedIndex = 0
End Sub
'Get detailed information on the network card
Private sub getconfiguraton (ByVal Description As String)
IF description is nothing or description.length = 0 thenexit SUB
Else
DIM Searcher As New ManagementObjectSearcher ("Select * from win32_networkadapterconfiguration where description =" "" & description & "" ")
Dim Share As ManagementObject
For Each Share in Searcher.get ()
Me.TextBox1.text = DirectCast (Share.Item ("ipaddress"), string ()) (0) .tostring
Me.TextBox2.text = Directcast (Share.Item ("IPSUBNET"), String ()) (0) .tostring
Me.TextBox3.Text = Directcast (Share.Item ("defaultiPgateway"), string ()) (0) .tostring
DIM I as integer
Me.TextBox4.clear ()
For i = 0 to Directcast (Share.Item ("DNSSERVERSEARCHORDER"), STRING ()). GetLength (0) - 1
Me.TextBox4.text & = Directcast (Share.Item ("DNSSERVERSEARCHORDER"), String ()) (i) .tostring & "-"
NEXT
IF i> = 2 THEN
Me.TextBox4.forecolor = systemcolors.Hottrack
Else
Me.TextBox4.ForeColor = Me.TextBox3.Forecolor
END IF
Me.TextBox4.text = Me.TextBox4.text.remove (Me.TextBox4.Text.length - 1, 1)
Me.TextBox5.text = Share.Item ("macaddress"). Tostring
EXIT for
Next Share
END IF
End Sub
Note where you need to pay attention:
The calling method parameter passed by InvokeMethod is an Object type and requires a packing operation.
The return value of EnableStatic SetGateWays SetDnsserverseArchOrder is UINT32, if the execution is successful returns 0, if it is successful, then returns 1 if it is executed and needs to restart the computer.
These properties of the Win32_NetworkAdapterConfiguration method are generally read-only, and the SETPROPERTYVALUE method for calling the management object is invalid.
reference:
MS-Help: //ms.vscc.2003/ms.msdnqtr.2003feb.2052/wmisdk/wmi/win32_networkadapterconfiguration.htm
If you need a detailed code example, please send me email: rainman_am_i@hotmail.com Please do not send more than 100K attachments, otherwise it is directly dropped directly :)
2003-10-03 Shanghai