Click here to Skip to main content
6,306,412 members and growing! (19,499 online)
Email Password   helpLost your password?
General Programming » Internet / Network » General     Intermediate

Programmatically Changing IP address, Domain Name Server and Gateways

By ThatsAlok

This article shows how we can change the IP address with corresponding subnet mask, gateway with corresponding metric, and DNS of local computer through programming.
VC6Win2K, WinXP, MFC, ATL, Architect, Dev
Posted:6 Jul 2004
Updated:15 Jul 2004
Views:101,049
Bookmarked:34 times
Announcements
Loading...
 
Search    
Advanced Search
printPrint   Broken Article?Report       add Share
  Discuss Discuss   Recommend Article Email
31 votes for this article.
Popularity: 4.50 Rating: 3.02 out of 5
10 votes, 33.3%
1
3 votes, 10.0%
2
3 votes, 10.0%
3
3 votes, 10.0%
4
11 votes, 36.7%
5

Sample Image - testreg.gif

Introduction

Please forgive me for some bad English grammar I am going to use in this article, really I am very bad at English. Now, let me explain about this article.

This article helps you to change the IP address, DNS and gateway dynamically through programming.

Basically, the secret weapon for changing these are hidden in the registry. These two registry keys hold the key for that.

  1. HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft \Windows\CurrentVersion\NetworkCards

    Holds the information about all the cards installed on you computer in its subkeys that start from 1 to last.

  2. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet \Services\TcpIp\Parameters
\Interfaces \%s

Here %s is card name you got from above key.

Here is the screen shot for key #2 showing all the Regeditor structure:

Sample image

Now I'll explain each and every function used in this project. Basically, the IP address and gateways are stored in registry in REG_MULTI_SZ format, so I have created different functions for each type of network.

  BOOL ViewNumberOfCard(CStringArray *arCard, 
                           CStringArray *arCardName);

  //this function send the current status in program

  BOOL ViewGateway(CStringArray &card,CStringArray  &ipaddress);
  void ViewGateWayMetrics(CStringArray &card,CStringArray  &ipaddress);
  BOOL ViewSubnetMask(CStringArray &card,CStringArray  &ipaddress);
  BOOL ViewDNSSubnet (CStringArray &card,CStringArray  &ipaddress,int var);
  BOOL ViewIPAddress (CStringArray &card,CStringArray  &ipaddress);
        
  ////function change the cuurnet status

  
  BOOL ChangeGateway(CString card,CStringArray  &ipaddress);
  BOOL ChangeGateWayMetrics(CString card,CStringArray  &ipaddress);
  BOOL ChangeDNSSubnet (CString card,CStringArray  &ipaddress,int ver);
  BOOL ChangeSubnetMask(CString card,CStringArray  &ipaddress);
  BOOL ChangeIpAddress (CString card,CStringArray  &ipaddress);

OK, now I'll explain to you the working of each function. Basically, each function's working is same but each is deal with different network identities.

BOOL ViewNumberOfCard(CStringArray *arCard,CStringArray *arCardName);

This function will return card number with the card name.

//this function send the current status in program


BOOL ViewGateway(CStringArray &card,CStringArray  &ipaddress);
void ViewGateWayMetrics(CStringArray &card,CStringArray  &ipaddress);
BOOL ViewSubnetMask(CStringArray &card,CStringArray  &ipaddress);
BOOL ViewDNSSubnet (CStringArray &card,CStringArray  &ipaddress,int var);
BOOL ViewIPAddress (CStringArray &card,CStringArray  &ipaddress);

Working of all functions are same. First parameter returns corresponding card number with its IP address except in ViewDNSSubnet in which the third variable is used to retrieve the DNS from single user version.

////function change the current status


BOOL ChangeGateway(CString card,CStringArray  &ipaddress);
BOOL ChangeGateWayMetrics(CString card,CStringArray  &ipaddress);
BOOL ChangeDNSSubnet (CString card,CStringArray  &ipaddress,int ver);
BOOL ChangeSubnetMask(CString card,CStringArray  &ipaddress);
BOOL ChangeIpAddress (CString card,CStringArray  &ipaddress);

Working of these functions are also the same. They change the network identity of the computer.

Also, here is a small code for helping you view the IP address and to retrieve the value from the complicated REG_MULTI_SZ format:

BOOL CNMPNetworkChange::ViewIPAddress(CStringArray &card, 
                                        CStringArray  &ipaddress)
 {
  //declare some useful variable

   char *szValue=new char[600];
   CString str;
   DWORD pdw=599;
   int i=0;
   //registry variable come from header file ATLBASE.h 

   CRegKey key;

   for(int flag=1;flag<=100;flag++)
   {   
    szValue[0]=NULL;
    pdw=599;
    key.Close();
    //this flag variable check number of network card in computer

    
    str.Format("SOFTWARE\\Microsoft\\Windows NT
                \\CurrentVersion\\NetworkCards\\%d",flag);  

    if(key.Open(HKEY_LOCAL_MACHINE,str,KEY_READ)==ERROR_SUCCESS)
      {
     key.QueryValue(szValue,"ServiceName",&pdw);
     key.Close();

     str.Format("SYSTEM\\CurrentControlSet\\Services
           \\TcpIp\\Parameters\\Interfaces\\%s",szValue);

     if(key.Open(HKEY_LOCAL_MACHINE,str,KEY_READ)!=ERROR_SUCCESS)
     {

     }

   char *szValue1=new char[2000];
     pdw=1999;

     //querry the REG_MULTI_SZ value

     RegQueryValueEx(key.m_hKey,
                    TEXT("IPAddress"),
                    NULL,
                    NULL,
                    (LPBYTE)szValue1,
                    &pdw);

     char *temp=new char[20];
     int j=0;
    str.Format("%d",flag);
    //NOw this is logic of retriving the value from the REG_MULTI_SZ


     for(i=0;i<(int)pdw;i++)
     {
      if(szValue1[i]!=NULL)
      {
       temp[j++]=szValue1[i];
      }
      else
      {
        temp[j]=NULL;
       if(strcmp(temp,"")!=0)
       {
        card.Add(str);
        ipaddress.Add(temp);
       }
       j=0;
      }
     }
     delete[] temp;
     delete[] szValue1;
     key.Close();
    }
   }
   delete[] szValue;
   return TRUE;
 }

I think I explained much. If the user encounters some problem while using my s/w, feel free to mail to me because while solving your problem, I'll learn something new.

Special thanks to my project team mates Mr. Rakesh Pant and Mr. Jatin Kumar.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here

About the Author

ThatsAlok


Member
He used to have biography here Smile, but now he will hire someone (for free offcourse Big Grin), Who writes his biography on his behalf Smile

He is Great Fan of Mr. Johan Rosengren (his idol),Lim Bio Liong (Great Programmer) , Nishant S(Is he need any introduction?) and DavidCrow and Believes that, he will EXCEL in his life by following there steps!!!


In October 2005, He joined the League of Visual C++ MVP Smile
Occupation: Software Developer
Company: Finacial
Location: India India

Other popular Internet / Network articles:

Article Top
You must Sign In to use this message board.
FAQ FAQ 
 
Noise Tolerance  Layout  Per page   
 Msgs 1 to 25 of 27 (Total in Forum: 27) (Refresh)FirstPrevNext
GeneralMemory leaks PinmemberRandor19:27 21 Apr '07  
GeneralRe: Memory leaks PinmemberThatsAlok19:48 21 Apr '07  
GeneralThe WIN32 way: use IPHELPER Pinmemberahz5:53 17 Dec '05  
GeneralRe: The WIN32 way: use IPHELPER PinmemberRoland_W22:38 25 Jan '06  
Generalhow to really chane IP,Domain,Gateway.. Pinmemberiverboy1:01 30 Nov '05  
GeneralRe: how to really chane IP,Domain,Gateway.. PinmemberThatsAlok1:12 30 Nov '05  
GeneralRe: how to really chane IP,Domain,Gateway.. Pinmemberiverboy1:25 30 Nov '05  
GeneralRe: how to really chane IP,Domain,Gateway.. Pinmemberiverboy1:36 30 Nov '05  
GeneralRe: how to really chane IP,Domain,Gateway.. Pinmemberahz5:47 17 Dec '05  
GeneralRe: how to really chane IP,Domain,Gateway.. Pinmemberahz6:46 17 Dec '05  
GeneralRe: how to really chane IP,Domain,Gateway.. PinmemberFuxing18:13 23 Apr '06  
Questionthanks for your code! Pinsusscalvin200001:21 22 Oct '05  
GeneralLAN traffic PinmemberVasil Nikolov23:12 25 Jul '05  
GeneralNot good PinmemberTeeBee3036:04 16 Jul '04  
GeneralRe: Not good PinmemberThatsAlok17:12 16 Jul '04  
GeneralRe: Not good PinmemberTeeBee30321:15 18 Jul '04  
GeneralRe: Not good PinmemberThatsAlok3:45 19 Jul '04  
QuestionRe: Not good Pinmemberiverboy8:33 30 Nov '05  
GeneralRe: Not good PinsussMsftone12:18 27 Jan '05  
GeneralRe: Not good PinmemberThatsAlok19:34 23 Mar '05  
GeneralChange between dynamic & static IP Adress? PinmemberRemco Overman7:16 13 Jul '04  
GeneralRe: Change between dynamic & static IP Adress? Pinmember ThatsAlok 20:51 13 Jul '04  
GeneralRe: Change between dynamic & static IP Adress? PinmemberThatsAlok4:30 25 Sep '04  
GeneralWin95/98/Me ? PinmemberDimitris Vassiliades11:06 7 Jul '04  
GeneralRe: Win95/98/Me ? PinmemberAlok the programmer21:43 7 Jul '04  

General General    News News    Question Question    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

PermaLink | Privacy | Terms of Use
Last Updated: 15 Jul 2004
Editor: Smitha Vijayan
Copyright 2004 by ThatsAlok
Everything else Copyright © CodeProject, 1999-2009
Web17 | Advertise on the Code Project