Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles
(untagged)

A Class for Getting NetCard Adapter Information

0.00/5 (No votes)
10 Sep 2002 1  
This class can be used to get netcard adapter information such as MAC,IP,DHCP

Sample Image - NetcardInfo.jpg

Introduction

I provide you a class CxNetCardInfo which can be used to get the local machine Netcard Adapter information such as IP address, MAC, DHCP, Subnet mask, WINS etc. For more detailed information, let's go to the next section.

How to use CxNetCardInfo

Usage of CxNetCardInfo is easy! For example:

void CNetCardInfoDlg::OnButtonGetinfo() 
{
  // TODO: Add your control notification handler code here

  CString tmp( _T("") );

  CxNetCardInfo NCI;

  tmp += _T("NetCard type:\t") + NCI.GetNetCardType() + _T("\r\n");
  tmp += _T("IP Address:\t") + NCI.GetNetCardIPAddress() + _T("\r\n" );
  tmp += _T("Subnet Mask:\t") + NCI.GetNetCardSubnetMask() + _T("\r\n");
  tmp += _T("Gateway:\t") + NCI.GetNetCardGateWay() + _T("\r\n");
  tmp += _T("DHCP Server:\t") + NCI.GetDHCPServer() + _T("\r\n");
  tmp += _T("MAC Address:\t") + NCI.GetNetCardMACAddress() + _T("\r\n");
  tmp += _T("Device name:\t") + NCI.GetNetCardDeviceName() + _T("\r\n");
  tmp += _T("Wins Server:\t") + NCI.GetNetCardWINS() + ("\r\n");
  tmp += NCI.GetErrorMsg() + _T("\r\n");

  CEdit *pEdit = (CEdit *)GetDlgItem(IDC_EDIT_INFO);
  pEdit->SetWindowText(tmp);
}

The CxNetCardInfo class

Header file

// xNetCardInfo.h: interface for the CxNetCardInfo class.

//

//////////////////////////////////////////////////////////////////////


#if 
 !defined(AFX_XNETCARDINFO_H__FC408BC6_3516_4481_AF7E_0B875C0E2B2C__INCLUDED_)
#define AFX_XNETCARDINFO_H__FC408BC6_3516_4481_AF7E_0B875C0E2B2C__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000


class CxNetCardInfo  
{
public:
  CxNetCardInfo();
  virtual ~CxNetCardInfo();

private:
  void ParseData();
  void GetInfo();

public:
  CString GetErrorMsg();
  CString GetNetCardWINS();
  CString GetNetCardDeviceName();
  CString GetNetCardMACAddress();
  CString GetDHCPServer();
  CString GetNetCardGateWay();
  CString GetNetCardSubnetMask();
  CString GetNetCardIPAddress();
  CString GetNetCardType();

private:
  BYTE m_data[4096];
  CString ErrMsg;
  CString macaddress;
  CString description;
  CString type;
  CString subnet;
  CString IpAddress;
  CString gateway;
  CString PrimaryWinsServer;
  CString dhcp;

  unsigned long len;
  PIP_ADAPTER_INFO pinfo;
};

#endif 
//!defined(AFX_XNETCARDINFO_H__FC408BC6_3516_4481_AF7E_0B875C0E2B2C__INCLUDED_)

Implementation file

// xNetCardInfo.cpp: implementation of the CxNetCardInfo class.

//

//////////////////////////////////////////////////////////////////////


#include "stdafx.h"

#include "NetCardInfo.h"

#include "xNetCardInfo.h"


#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////

// Construction/Destruction

//////////////////////////////////////////////////////////////////////


CxNetCardInfo::CxNetCardInfo()
{
  ErrMsg = _T( "" );

  macaddress = _T( "" );
  description = _T( "" );
  type = _T( "" );
  subnet = _T( "" );
  IpAddress = _T( "" );
  gateway = _T( "" );
  PrimaryWinsServer = _T( "" );
  dhcp = _T( "" );

  ZeroMemory( m_data,4096 );
  len = 0;
  pinfo = ( PIP_ADAPTER_INFO )m_data;

  GetInfo();
}

CxNetCardInfo::~CxNetCardInfo()
{

}

void CxNetCardInfo::GetInfo()
{
  ErrMsg = _T( "Success!" );

  unsigned long nError;

  nError = GetAdaptersInfo( pinfo,&len );

  switch( nError ) { // Not all return value processed here!

    case 0:
      ParseData();
      break;
    case ERROR_NO_DATA:
      ErrMsg = _T( "No net device information!" );
      break;
    case ERROR_NOT_SUPPORTED:
      ErrMsg = _T( "The system not support GetAdaptersInfo API function!" );
      break;
    case ERROR_BUFFER_OVERFLOW:
      nError = GetAdaptersInfo( pinfo,&len );
      if( nError == 0 ) ParseData();
      else ErrMsg = _T("Unknow error!");
      break;
  }
}

void CxNetCardInfo::ParseData()
{
  macaddress.Format( _T("%02X:%02X:%02X:%02X:%02X:%02X"),
    pinfo->Address[0],pinfo->Address[1],
    pinfo->Address[2],pinfo->Address[3],
    pinfo->Address[4],pinfo->Address[5] );
  description = pinfo->Description;
  type.Format(_T("%d"),pinfo->Type);

  PIP_ADDR_STRING pAddressList = &(pinfo->IpAddressList);
  IpAddress = _T("");
  do {
    IpAddress += pAddressList->IpAddress.String;
    pAddressList = pAddressList->Next;
    if( pAddressList != NULL ) IpAddress += _T( "\r\n" );
  }while( pAddressList != NULL );

  subnet.Format( _T("%s"),pinfo->IpAddressList.IpMask.String );
  gateway.Format( _T("%s"),pinfo->GatewayList.IpAddress.String );
  if( pinfo->HaveWins )
    PrimaryWinsServer.Format( _T("%s"),
      pinfo->PrimaryWinsServer.IpAddress.String );
  else
    PrimaryWinsServer.Format( _T("%s"),_T("N/A") );
  if( pinfo->DhcpEnabled )
    dhcp.Format( _T("%s"),pinfo->DhcpServer.IpAddress.String );
  else
    dhcp.Format( _T("%s"),_T("N/A") );
  pinfo = pinfo->Next;
}

CString CxNetCardInfo::GetNetCardType()
{
  return type;
}

CString CxNetCardInfo::GetNetCardIPAddress()
{
  return IpAddress;
}

CString CxNetCardInfo::GetNetCardSubnetMask()
{
  return subnet;
}

CString CxNetCardInfo::GetNetCardGateWay()
{
  return gateway;
}

CString CxNetCardInfo::GetDHCPServer()
{
  return dhcp;
}

CString CxNetCardInfo::GetNetCardMACAddress()
{
  return macaddress;
}

CString CxNetCardInfo::GetNetCardDeviceName()
{
  return description;
}

CString CxNetCardInfo::GetNetCardWINS()
{
  return PrimaryWinsServer;
}

CString CxNetCardInfo::GetErrorMsg()
{
  return ErrMsg;
}

Notes

The CxNetCardInfo is not strong enough for serious usage, but someone can modify it and make it better hopefully!

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