Introduction
This is a tiny utility which stores multiple network and proxy configuration as
profiles. You can apply a profile to set specific network setting and proxy
from simple shortcuts.
Background
If you have a laptop, when you go to different places, you have to change
Network configuration and browser proxy. I have to go to 4 different places
everyday with my laptop; my university, my offices and my home. Everywhere I
have to change my IP setting and IE Proxy. I could write a WMI Script to do all
of them. Unfortunately, for some reason WMI is not working from VB Script in my
laptop but somehow it is working from .NET. So, I have made a handy utility
which I can use to store configuration profiles for different places and apply
them very quickly just by pressing one key and a ENTER at system startup. This
program automatically sets IP, Subnet, Gateway and DNS for my LAN card and also
changes the IE Proxy setting.
Using the code
You can setup in 3 easy steps.
-
1. Click New and enter a profile name.
-
2. Set IP configuration
-
3. Set IE Proxy configuration
It�s even easier to use:
-
1. Press the first letter of your profile. For example, �h� for Home.
-
2. Press ENTER and wait as it applies the profile.
-
3. Press ESC to quit.
Points of Interest
It�s a very simple Winforms application written in C#. The key technologies are:
-
1. WMI
-
2. IE Registry tweaking
-
3. XML Serialization
WMI
Windows Management Intrumentation (WMI) helps you work with Network
configuration. For example, the following code retrieves Network Setting for a
given Network Card.
public static void GetIP( string nicName, out string [] ipAdresses,
out string [] subnets, out string [] gateways, out string [] dnses )
{
ipAdresses = null;
subnets = null;
gateways = null;
dnses = null;
ManagementClass mc = new ManagementClass(
"Win32_NetworkAdapterConfiguration");
ManagementObjectCollection moc = mc.GetInstances();
foreach(ManagementObject mo in moc)
{
if( mo["ipEnabled"] as bool )
{
if( mo["Caption"].Equals( nicName ) )
{
ipAdresses = (string[]) mo["IPAddress"];
subnets = (string[]) mo["IPSubnet"];
gateways = (string[]) mo["DefaultIPGateway"];
dnses = (string[]) mo["DNSServerSearchOrder"];
break;
}
}
}
}
�Win32_NetworkAdapterConfiguration� gives you the collection of network
adapters installed. Be careful, all the entries in this list may not be your
LAN card.
Similarly you can set Network configuration just by a couple of lines.
public static void SetIP( string nicName, string IpAddresses,
string SubnetMask, string Gateway, string DnsSearchOrder)
{
ManagementClass mc = new ManagementClass(
"Win32_NetworkAdapterConfiguration");
ManagementObjectCollection moc = mc.GetInstances();
foreach(ManagementObject mo in moc)
{
if( mo["IPEnabled"] as bool )
{
if( mo["Caption"].Equals( nicName ) )
{
ManagementBaseObject newIP =
mo.GetMethodParameters( "EnableStatic" );
ManagementBaseObject newGate =
mo.GetMethodParameters( "SetGateways" );
ManagementBaseObject newDNS =
mo.GetMethodParameters( "SetDNSServerSearchOrder" );
newGate[ "DefaultIPGateway" ] = new string[] { Gateway };
newGate[ "GatewayCostMetric" ] = new int[] { 1 };
newIP[ "IPAddress" ] = IpAddresses.Split( ',' );
newIP[ "SubnetMask" ] = new string[] { SubnetMask };
newDNS[ "DNSServerSearchOrder" ] = DnsSearchOrder.Split(',');
ManagementBaseObject setIP = mo.InvokeMethod(
"EnableStatic", newIP, null);
ManagementBaseObject setGateways = mo.InvokeMethod(
"SetGateways", newGate, null);
ManagementBaseObject setDNS = mo.InvokeMethod(
"SetDNSServerSearchOrder", newDNS, null);
break;
}
}
}
}
Internet Explorer Proxy
Changing Internet Explorer Proxy setting is a tricky job. There are 3 registry
keys that you need to handle:
CURRENT_USER\ Software\Microsoft\Windows\CurrentVersion\Internet Settings
-
ProxyServer � string � Name of proxy server
-
ProxyEnable � integer � 1 for enabled, 0 for disabled
-
ProxyOverride � string � a list of hosts that you need to directly access
without proxy
XML Serialization
XML Serialization makes it very easy to persist object graph in human readable
form. For example, this is the XML that the program generates:
="1.0"
<ConfigWrapper xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Profiles>
<anyType xsi:type="Profile">
<Name>Home</Name>
<NICProfiles>
<anyType xsi:type="NICProfile">
<Name>[00000001] Intel(R) PRO/100
VE Network Connection</Name>
<IP>192.168.2.43</IP>
<Subnet>255.255.255.0</Subnet>
<Gateway>192.168.2.1</Gateway>
<DNS>202.141.190.2,202.141.190.3</DNS>
</anyType>
</NICProfiles>
<IEProfile>
<UseProxy>true</UseProxy>
<ProxyName>192.168.2.1:3128</ProxyName>
<BypassLocal>true</BypassLocal>
<BypassAddresses />
</IEProfile>
</anyType>
It makes it very easy to modify the file manually. You can save an entire object
graph just by writing 3 lines of code:
XmlSerializer serializer = new XmlSerializer( typeof( ConfigWrapper ) );
StreamWriter writer = new StreamWriter( PROFILE_FILE_NAME, false );
serializer.Serialize( writer.BaseStream, wrapper );
History
- Ver 1.0 - Store multiple profiles, multiple NIC setting, IE Proxy
- (Planning) Ver 2.0 - Execute batch file before and after profile setting