Click here to Skip to main content
15,885,141 members
Articles / Desktop Programming / MFC
Article

A Class for Getting NetCard Adapter Information

Rate me:
Please Sign up or sign in to vote.
3.80/5 (4 votes)
10 Sep 2002 256.7K   1.9K   34   23
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


Written By
Web Developer
China China
Hi,I'm YangTze!

Comments and Discussions

 
QuestionCan't get the disable netcard adapter. Pin
ly751925-Jul-13 23:08
ly751925-Jul-13 23:08 
Can't get the disable netcard adapter.
Generalwell done! i am chinese too. Pin
redice16-Jun-08 21:40
redice16-Jun-08 21:40 
QuestionHow to distinguish Wireless Adapter from other Adapers? Pin
iprowq6-Apr-08 16:09
iprowq6-Apr-08 16:09 
GeneralClass Rewrite Pin
Blake Miller26-Feb-04 10:55
Blake Miller26-Feb-04 10:55 
GeneralRe: Class Rewrite Pin
olegxxx9-Dec-04 2:38
olegxxx9-Dec-04 2:38 
GeneralMAC address length Pin
David Crow5-Sep-03 8:07
David Crow5-Sep-03 8:07 
QuestionWhy different Mac address with two methods? Pin
ziyoo4-Aug-03 21:11
ziyoo4-Aug-03 21:11 
QuestionHow to Get the real MacAddress? Pin
Anonymous1-Jul-03 22:01
Anonymous1-Jul-03 22:01 
Generalconsult Pin
hailiang13-Apr-03 17:26
hailiang13-Apr-03 17:26 
GeneralGateway IP under Win NT Pin
Koep17-Feb-03 4:54
Koep17-Feb-03 4:54 
GeneralRe: Gateway IP under Win NT Pin
geo_m17-Feb-03 5:15
geo_m17-Feb-03 5:15 
GeneralRe: Gateway IP under Win NT Pin
Koep17-Feb-03 5:22
Koep17-Feb-03 5:22 
GeneralRe: Gateway IP under Win NT Pin
geo_m17-Feb-03 5:30
geo_m17-Feb-03 5:30 
Generalabout pOutBufLen Pin
Panr11-Dec-02 20:11
Panr11-Dec-02 20:11 
GeneralRe: about pOutBufLen Pin
Panr11-Dec-02 20:14
Panr11-Dec-02 20:14 
Generalµ¥Íø¿¨ Pin
dzyd759-Dec-02 14:21
dzyd759-Dec-02 14:21 
GeneralNetCard Disabler Pin
DrCool28-Nov-02 6:24
DrCool28-Nov-02 6:24 
GeneralAND ... Pin
Germi Massimo12-Sep-02 8:42
Germi Massimo12-Sep-02 8:42 
GeneralRe: AND ... Pin
Tomaž Štih12-Sep-02 21:27
Tomaž Štih12-Sep-02 21:27 
GeneralRe: AND ... Pin
adrianw23-Nov-03 17:58
adrianw23-Nov-03 17:58 
General请教 Pin
jngxx11-Sep-02 17:12
jngxx11-Sep-02 17:12 
GeneralRe: Çë½Ì Pin
YangTze11-Sep-02 18:44
YangTze11-Sep-02 18:44 
GeneralRe: Çë½Ì Pin
jngxx11-Sep-02 23:01
jngxx11-Sep-02 23:01 

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

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