How To Change Network Interface Card (NIC) Settings Programmatically

How To Change Network Interface Card (NIC) Settings Programmatically

by Stanley Fong

Why?

This comes about when I have to use my notebook outside my office where a hardwired LAN is available. I have 2 work locations where 2 LAN's are connected via a leased line. Changing my NIC settings was easy because with Windows XP you don't need to reboot and in my case I only have to change one digit at the IP address. This job could be tedious at my client's office with a completely different LAN setup.

A NIC can only have one set of settings; if you can afford few NIC's for your notebook then you can skip this article.

How?

Being lazy I didn't want to enter IP address, gateway, WINS, etc. every time I changed location, therefore I scoured the Internet for a solution. I love the Internet. I usually find what I want and learn something along the way.

Methods

A. MCSEworld by Daniel Petri

Some little tricks are available at MCSEworld by Daniel Petri, see http://www.petri.co.il. The basic trick is to use netsh.exe to dump your current setting to a text or a data file. This can be done by typing below:


Netsh interface dump > text.txt

The netsh scripting tool allows you to import the setting by "executing" a text or data file. To do the reverse, just type below


Netsh exec text.txt

The trouble of course is all these have to be done manually at command prompt within a DOS window. At first I did try this, to my surprise it didn't work and all I got is error message like below


'register' is not a valid argument for this command.

The syntax supplied for this command is not valid. Check help for the correct syntax.



Usage: add dns [name=]<string. [addr=]<IP address> [[index=]<integer]



Parameters:.........

.

.

.

.



Dhcp is already enabled on this interface

I have not copied everything I saw but you'll see it's not that simple after all. The point to note the last line "Dhcp is already enabled on this interface", I'll explain this later in the article.

Netsh.exe is a command line scripting tool available on Windows 2000, XP and Windows server 2003. If you type netsh in Windows Help you'll get to know something basic about it.

B. The Code Project - SwitchNetConfig by Omar Al Zabir

This is a good one, see it at http://www.thecodeproject.com/csharp/OazSwitchNetConfig.asp

This little utility is written in C# using functionalities available from WMI (Windows Management Instrumentation), again another powerful scripting tool for network administrators.

I tried it, didn't like it 100% because I can't tweak the code to suit my taste. I don't use C# to earn a living just as simple as that. It surely should work fine.

C. IPetC

This is a little utility which is good for simple settings. You'll have to pay for it if you like it after trial for 28 days, see http://www.ipetc.com

It looks like this:

IPetC - Screen Capture IPetC - Profile Configuration

As you can see from screen shots above you could only set simple things only. This is handy enough for normal users.

D. BATCH file

I found the batch file solution in http://www.experts-exchange.com

Someone asked a question similar to mine and expert "sirbounty" offered two solutions. The first is to use batch file to execute the required netsh commend with parameter fed to it. The second is to use VBScript to run from a command prompt via cscript. Again for the second solution WMI objects will be called.

I liked the first solution. You can either have a simple batch file containing below


@netsh int ip set addr local static 62.131.44.88 255.0.0.0 62.1.1.1

or a batch file containing details of few locations you normally go:


-------ConfigIP.bat----------------------------

@echo off

::Run with

if [%1]==[] goto error

goto %1

:work

netsh int ip set addr local static 62.131.44.88 255.0.0.0 62.1.1.1

goto :eof

:school

netsh int ip set addr local static 10.0.0.26 255.0.0.0 10.0.0.1

goto :eof

:home

netsh int ip set addr local static 192.168.1.104 255.255.255.0 192.168.1.1

goto :eof

:error

cls

Echo. Valid parameters are Work, School, Home

Echo. Example: ConfigIP Work

My Solution

I eventually decided on a combination of a few of the methods above. I want a batch file to be able to achieve:

  • Interactive with user, i.e. I don't need to remember what parameter to be fed after the batch file. This will require user input after batch file is executed.
  • Read from text files with parameters. With this I only need to change details in text file to fine tune NIC setting.
  • Be able to tweak all settings of the NIC, i.e. not just IP, subnet mask and gateways.
  • Leave setting of wireless LAN alone as you don't normally set it.

Below is my batch file


@echo off

title Contribute $10 for every use please - Stanley Fong August 2004

setlocal

set OK=N

:again

	set /p choice=Please enter 1[Kowloon Bay], 2[Tai Po], 3[Ebara] or END ??

	if /i [%choice%]==[END] endlocal&goto end

	if [%choice%]==[] goto again

	if [%choice%]==[1] goto 1

	if [%choice%]==[2] goto 2

	if [%choice%]==[3] goto 3

	set /p xxx=wrong entry, press any key to exit.  

	endlocal

	goto end

:1

	echo NIC setting for Kowloon Bay being configured.....

	@netsh exec kb.txt

	set /p see=IP changed successfully for Kowloon Bay setting [9]see new setting [Enter]exit...

	if [%see%]==[9] goto show

	echo OK you don't want to see new setting, program ends

	goto end

:2

	echo NIC setting for Tai Po being configured.....

	@netsh exec tp.txt

	set /p see=IP changed successfully for Tai Po setting [9]see new setting [Enter]exit...

	if [%see%]==[9] goto show

	echo OK you don't want to see new setting, program ends

	goto end

:3

	echo NIC setting for Ebara Office being configured.....

	@netsh exec ebara.txt

	set /p see=IP changed successfully for Ebara office setting [9]see new setting [Enter]exit...

	if [%see%]==[9] goto show

	echo OK you don't want to see new setting, program ends

	goto end

:show

@netsh int ip show config

:end

With the "/p" switch of the "SET" command I can get user input of the location. You don't have to remember what to enter, just enter a number of your choice. At the end when it's successfully executed you could see your NIC setting. This batch file will read text files containing NIC settings which must be in the same directory with the batch file.

Why Method "A" Above Didn't Work

If you follow the example in (A) above to dump your NIC setting to a text file named "text.txt" and edit "text.txt" with notepad you'll see:


#========================

# Interface configuration

#========================

pushd interface



reset all



popd

# End of interface configuration



#========================

# Interface configuration

#========================

pushd interface ipv6



uninstall



popd

# End of interface configuration



# ----------------------------------

# ISATAP Configuration

# ----------------------------------

pushd interface ipv6 isatap



popd

# End of ISATAP configuration



# ----------------------------------

# 6to4 Configuration

# ----------------------------------

pushd interface ipv6 6to4



reset



popd

# End of 6to4 configuration



#========================

# Port Proxy configuration

#========================

pushd interface portproxy



reset



popd

# End of Port Proxy configuration



# ---------------------------------- 

# Interface IP Configuration         

# ---------------------------------- 

pushd interface ip



# Interface IP Configuration for "Local Area Connection"



set address name="Local Area Connection" source=static addr=192.168.4.49 mask=255.255.255.0

set address name="Local Area Connection" gateway=192.168.4.1 gwmetric=0

add address name="Local Area Connection" gateway=192.168.32.1 gwmetric=0

set dns name="Local Area Connection" source=static addr=192.168.1.218 register=PRIMARY

set wins name="Local Area Connection" source=static addr=192.168.11.21

add wins name="Local Area Connection" addr=192.168.13.21



# Interface IP Configuration for "Wireless Network Connection"



set address name="Wireless Network Connection" source=dhcp 

set address name="Wireless Network Connection" gateway=10.0.1.1 gwmetric=0

set dns name="Wireless Network Connection" source=dhcp register=PRIMARY

set wins name="Wireless Network Connection" source=dhcp



popd

# End of interface IP configuration

The above is your current NIC setting which includes something that you don't normally require to set such as ISATAP configuration and your wireless NIC. In fact this file contains a set of commands which will configure your NIC using netsh.exe, i.e. when you do the reverse by "executing" it using netsh.

What you need is a bare minimum text file like below (line number added)


1	# ---------------------------------- 

2	# Interface IP Configuration         

3	# ---------------------------------- 

4	pushd interface ip





5	# Interface IP Configuration for "Local Area Connection"



6	set address name="Local Area Connection" source=static addr=192.168.32.49 mask=255.255.255.0

7	set address name="Local Area Connection" gateway=192.168.4.1 gwmetric=0

8	add address name="Local Area Connection" gateway=192.168.32.1 gwmetric=0

9	set dns name="Local Area Connection" source=static addr=202.77.0.2 register=primary

10	add dns name="Local Area Connection" addr=192.168.1.218 index=1

11	add dns name="Local Area Connection" addr=202.77.0.1 index=2

12	set wins name="Local Area Connection" source=static addr=192.168.11.21

13	add wins name="Local Area Connection" addr=192.168.13.21



14	# Interface IP Configuration for "Wireless Network Connection"

15	# normally wireless LAN is not required to be set again



16	# set address name="Wireless Network Connection" source=dhcp 

17	# set address name="Wireless Network Connection" gateway=10.0.1.1 gwmetric=0

18	# set dns name="Wireless Network Connection" source=dhcp register=primary

19	# set wins name="Wireless Network Connection" source=dhcp





20	popd

21	# End of interface IP configuration

Note "#" has remarked command lines which will be ignored by netsh but will help you next time when you want to put them back. This will get rid of the message "Dhcp is already enabled on this interface". This will also speed up execution of the text file.

The funny thing is that "executing" the text file above (bare minimum) will get exactly the same setting at your NIC as in the long listing of the dumped "text.txt" above. Only Microsoft can explain why this happened. After few trials I just know how to put it right. The critical part is at line 9, 10 and 11 above.


9	set dns name="Local Area Connection" source=static addr=202.77.0.2 register=primary

10	add dns name="Local Area Connection" addr=192.168.1.218 index=1

11	add dns name="Local Area Connection" addr=202.77.0.1 index=2

From the "text.txt" listing, it has one line only


set dns name="Local Area Connection" source=static addr=192.168.1.218 register=PRIMARY

If you look up your NIC settings the normal way you'll see

TCP/IP - General TCP/IP - DNS TCP/IP - WINS TCP/IP - Advanced

To do the setting right and if the DNS server addresses are really critical in your case you have to play around with the "register=primary" and "index=?" in the "SET" and "ADD" command lines respectively. You'll have to do few trials to get it right. Note you can't use "register=primary" in the "ADD" command. Microsoft has acknowledged this as a problem, see http://support.microsoft.com/default.aspx?scid=kb;en-us;818835 This is why Method A above didn't work.

Dumping Your Settings To Text Files

When finding out why text file dumped didn't work, it was discovered that the "dump" command is available at different context in the netsh scripting tool therefore you must be careful when using the dumped text file to reload your settings. You can use "dump" within the following context of netsh


Netsh interface ip

Netsh interface ipv6

Netsh interface portproxy

Netsh ras ip

Netsh ras ipx

Netsh ras aaaa

Netsh ras appletalk

Netsh ras appletalk

Netsh routing ip

Netsh routing ipx

Netsh routing ipx netbios

Netsh routing ipx rip

Netsh routing ipx sap

Netsh bridge

Netsh diag

Netsh firewall

Give it a try you'll see the deeper you go in the context the more specific setting you'll see at the console by running "dump" at the prompt. Therefore it's safer to use bare minimum settings in a text file if you don't really want to mess around with other settings. I have tried using "exec" to reload text files dumped from the context of "netsh", "netsh interface" and "netsh interface ip" all resulted in error caused by the "register" switch.

It's fun after all, for more information about netsh visit Microsoft sites at:

  • http://support.microsoft.com/?kbid=257748
  • http://support.microsoft.com/default.aspx?scid=kb;en-us;823191

Webmaster's Note: While this article isn't ASP-related and is therefore somewhat off topic for the site, I figured that enough of our readers are probably mobile professionals to warrant us publishing it anyway. The main reason I finally decided to publish this article is because I used to be in this very situation. Our office used to have static IPs and my home network was set up to use all DHCP private IPs. Continually swapping network settings was starting to give me a real headache until I went looking for a solution and found out about netsh. I then whipped up the following pair of batch files to swap settings back and forth. Hopefully the information above (or even the simple scripts below) will help make your network hopping easier.

office.bat


@Echo On

rem

rem Set Up Network:

rem

netsh interface ip set address "Local Area Connection" static aaa.bbb.166.230 255.255.255.240 aaa.bbb.166.225 1

netsh interface ip set dns "Local Area Connection" static aaa.bbb.166.226

netsh interface ip add dns "Local Area Connection" xxx.yyy.16.83

netsh interface ip add dns "Local Area Connection" xxx.yyy.17.83



rem

rem Map Drives:

rem

net use i: \\server1\Installs /persistent:yes

net use l: \\server1\Clients

net use t: \\server1\Temp

net use z: \\server2\Backup

home.bat


@Echo On

rem

rem Set Up Network:

rem

netsh interface ip set address "Local Area Connection" dhcp

netsh interface ip set dns "Local Area Connection" dhcp



rem

rem Map Drives:

rem

net use i: /delete

net use l: /delete

net use t: /delete

net use z: /delete

Note: IPs and server names have been changed to protect the guilty!

Close    To Top
  • Prev Article-Web Design:
  • Next Article-Web Design:
  • Now: Tutorial for Web and Software Design > Web Design > ASP > Web Design Content
    Photoshop Tutorial
     

    Special Effect

      3D Effect
      Photoshop Articles
    Programming Tutorial
     

    C/C++ Tutorial

      Visual Basic
      C# Tutorial
    Database Tutorial
     

    MySQL Tutorial

      MS SQL Tutorial
      Oracle Tutorial
    Geek Tutorial
     

    Blogging Tutorial

      RSS Tutorial
      Podcasting Tutorial
    Graphic Design Tutorial
      Coreldraw Tutorial
      Illustrator Tutorial
      3D Tutorials
    Webmaster Articles
     

    Domain Service

      Web Hosting
      Site Promotion
    Java Tutorial/ Articles
     

    Java Servlets

      JavaEE Tutorial
     

    JavaBeans Tutorial

    XML Tutorial/ Articles
     

    XML Style

      AJAX Tutorial
      XML Mobile
    Flash Tutorial/ Articles
     

    Flash Video

      Action Script
      Flash Articles
    OS Tutorial/ Articles
      Linux Tutorial
      Symbian Tutorial
      MacOS Tutorial
    Personal Tech
      Hardware Tutorial
      Software Tutorial
      Online Auction