Tim Van Wassenhove home

A while ago i wrote that i had created two .reg files to update my Internet Options / Lan Settings (Automating the configuration of Internet Options / Lan Settings). Yesterday i build a little Windows Service that automates this completely. With NotifyAddrChange i am notified whenever a change occurs in the table that maps IPv4 addresses to interfaces

[DllImport("iphlpapi.dll", CharSet = CharSet.Ansi)]
private static extern int NotifyAddrChange(ref IntPtr handle, IntPtr overlapped);

The main loop of the service looks like this

while (this.isRunning)
{
	IntPtr handle = IntPtr.Zero;
	NotifyAddrChange(ref handle, IntPtr.Zero);
	UpdateRegistry();
}

Whenever i’m connected to the LAN at work i want to use a proxy. Here’s the code that takes care of this

private static void UpdateRegistry()
{
	RegistryKey registryKey = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Internet Settings", true);
	if (IsInWorkLan())
	{
		registryKey.SetValue("AutoConfigURL", "http://123.456.789.0");
	}
	else
	{
		registryKey.DeleteValue("AutoConfigURL", false);
	}
}

Figuring out whether i’m connected to the LAN at work is pretty simple. As soon as i have an IPAddress that looks like 192.168.X.Y i’m connected. Here’s how i translated this into code

private static bool IsInWorkLan()
{
	foreach (IPAddress ipAddress in Dns.GetHostAddresses(Dns.GetHostName()))
	{
		if (IsInWorkLan(ipAddress))
		{
			return true;
		}
	}

	return false;
}

private static bool IsInWorkLan(IPAddress ipAddress)
{
	byte[] bytes = ipAddress.GetAddressBytes();
	if ((int)bytes[0] == 192 && (int)bytes[1] == 168)
	{
		return true;
	}

	return false;
}