Click here to Skip to main content
Licence CPOL
First Posted 7 Dec 2006
Views 60,087
Downloads 995
Bookmarked 37 times

Network Adapter MAC / IP Address Info Display Application Using C# and .NET

By | 14 Aug 2007 | Article
Network Adapter MAC / IP Address Info Display Application in C# .NET

Sample Image - AdapterInfo.jpg

Introduction

The AdapterInfo project is a simple C# .NET project that will report the "friendly" adapter name, the IP address assigned, and the physical (MAC) address for the user. This is helpful when an application needs to retrieve the MAC address for a certain IP address, or vice versa, when having only one piece of the puzzle. The project also demonstrates simple registry reads.

Project highlights

I found it advantageous to write this application because of the fact that the MAC address of a network adapter is not stored in an easy to get to location, such as the Registry. So, I needed a mechanism to connect the IP address of an adapter to the MAC address of it. Once the two are "matched", I then have the MAC address for my use. This is done by retrieving the "AdapterName" field form the IP_Adapter_Addresses data structure.

IntPtr PAdaptersAddresses = new IntPtr();
bool AdapterFound = false;
uint pOutLen = 100;

PAdaptersAddresses = Marshal.AllocHGlobal(100);
uint ret = GetAdaptersAddresses(0, 0, (IntPtr)0, 
               PAdaptersAddresses, ref pOutLen);

// if 111 error, use 
if (ret == 111)
{
    Marshal.FreeHGlobal(PAdaptersAddresses);
    PAdaptersAddresses = Marshal.AllocHGlobal((int) pOutLen);
    ret = GetAdaptersAddresses(0, 0, (IntPtr)0, 
                               PAdaptersAddresses, ref pOutLen);
}

IP_Adapter_Addresses adds = new IP_Adapter_Addresses();
IntPtr pTemp = PAdaptersAddresses;
IntPtr pTempIP = new IntPtr();

while (pTemp != (IntPtr)0)
{
    Marshal.PtrToStructure(pTemp, adds);
    string adapterName = Marshal.PtrToStringAnsi(adds.AdapterName);
    string FriendlyName = Marshal.PtrToStringAuto(adds.FriendlyName);
    string tmpString = string.Empty;
    for (int i = 0; i < 6; i++)
    {
        tmpString += string.Format("{0:X2}", adds.PhysicalAddress[i]);
        if (i < 5)
        {
            tmpString += ":";
        }
    }

    RegistryKey theLocalMachine = Registry.LocalMachine; 
    RegistryKey theSystem = theLocalMachine.OpenSubKey(@"SYSTEM\Current" + 
                            @"ControlSet\Services\Tcpip\Parameters\Interfaces"); 
    RegistryKey theInterfaceKey = theSystem.OpenSubKey(adapterName); 

    if (theInterfaceKey != null)
    {
        string DhcpIPAddress = (string)theInterfaceKey.GetValue("DhcpIPAddress");
        // system is using DHCP
        if (DhcpIPAddress != null)
        {
            string tArray = (string)
            theInterfaceKey.GetValue("DhcpIPAddress", theInterfaceKey);
            AdapterInfoTextBox.Text += "Network adapter: " + 
                                       FriendlyName.ToString() + "\r\n";
            AdapterInfoTextBox.Text += "IP Address: " + tArray + "\r\n";
            AdapterInfoTextBox.Text += "MAC Address: " + tmpString + "\r\n\r\n";
            AdapterFound = true;
        }
        else
        {
            string[] tArray = (string[])
            theInterfaceKey.GetValue("IPAddress", theInterfaceKey);
            AdapterInfoTextBox.Text += "Network adapter: " + 
                                       FriendlyName.ToString() + "\r\n";
            for (int Interface = 0; Interface < tArray.Length; Interface++)
            {
                AdapterInfoTextBox.Text += "IP Address: " + 
                                           tArray[Interface] + "\r\n";
                AdapterFound = true;
            }
            AdapterInfoTextBox.Text += "MAC Address: " + tmpString + "\r\n\r\n";
        }
    }
    pTemp = adds.Next;
}

if (AdapterFound != true)
{
    AdapterInfoTextBox.Text += "No network adapters configured/present\r\n";
}

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

About the Author

Brian Riek

Engineer

United States United States

Member

Wisconsin native enjoying the lack of snow and cold weather in Arizona!
 
Device driver and application development for most OSes.
 
brian.d.riek@gmail.com

Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
You must Sign In to use this message board. (secure sign-in)
 
Search this forum  
 FAQ
    Noise  Layout  Per page   
  Refresh
Questionget inf from network card only Pinmemberimans6220:33 22 Jun '10  
GeneralThe recommended method of calling the GetAdaptersAddresses... PinmemberJeffrey Walton10:57 2 Jun '10  
Generali am not getting the exact ip address PinmemberGop'z2:19 14 Aug '07  
GeneralRe: i am not getting the exact ip address PinmemberBrian D. Riek8:33 14 Aug '07  
GeneralRe: i am not getting the exact ip address PinmemberBrian D. Riek14:05 10 Oct '07  
GeneralEasier way PinmemberGarth Watkins23:26 6 Mar '07  
GeneralRe: Easier way PinmemberBrian D. Riek9:47 23 Apr '07  
GeneralRe: Easier way Pinmemberlextm21:36 9 Jul '07  
GeneralRe: Easier way PinmemberBrian D. Riek6:18 19 Jul '07  
GeneralThanx! this is Simple but useful article Pinmemberhackrogenius21:13 30 Dec '06  
GeneralRe: Thanx! this is Simple but useful article PinmemberGop'z23:25 13 Aug '07  

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

Permalink | Advertise | Privacy | Mobile
Web01 | 2.5.120517.1 | Last Updated 14 Aug 2007
Article Copyright 2006 by Brian Riek
Everything else Copyright © CodeProject, 1999-2012
Terms of Use
Layout: fixed | fluid