Review of the Network Adapters Parameters

Environment: VC6 + Microsoft SDK, VC7, Windows 98/ME/NT/2000/XP

This article describes the program that shows the information about different network interfaces operating at the current moment.

The basis of this utility is the use of such API functions as GetAdaptersInfo(), inet_addr(), and gethostbyaddr(). The program displays the adapters' names in the system, protocol type (PPP, Ethernet, and so forth), IP addresses of the given computer and gateway, and their NetBIOS names.

You need to include in the program the following header files besides the standard: Iphlpapi.h, IPIfCons.h, and Winsock2.h. And it is also necessary to include in the project such libraries as Iphlpapi.lib and Ws2_32.lib.

Let's examine the function prototype GetAdaptersInfo():

DWORD GetAdaptersInfo(
  PIP_ADAPTER_INFO pAdapterInfo,
  PULONG pOutBufLen
);

The first argument is a pointer to a buffer, where the connected list of structures IP_ADAPTER_INFO is stored; every one of these structures carries the information about one of the system network adapters. The second argument is a pointer to the variable of the unsigned long type that stores the buffer size.

Let's examine the structure IP_ADAPTER_INFO:

struct IP_ADAPTER_INFO {
  struct _IP_ADAPTER_INFO* Next;
  DWORD ComboIndex;
  char AdapterName[MAX_ADAPTER_NAME_LENGTH + 4];
  char Description[MAX_ADAPTER_DESCRIPTION_LENGTH + 4];
  UINT AddressLength;
  BYTE Address[MAX_ADAPTER_ADDRESS_LENGTH];
  DWORD Index;
  UINT Type;
  UINT DhcpEnabled;
  PIP_ADDR_STRING CurrentIpAddress;
  IP_ADDR_STRING IpAddressList;
  IP_ADDR_STRING GatewayList;
  IP_ADDR_STRING DhcpServer;
  BOOL HaveWins;
  IP_ADDR_STRING PrimaryWinsServer;
  IP_ADDR_STRING SecondaryWinsServer;
  time_t LeaseObtained;
  time_t LeaseExpires;
}

The fields' names are clear for understanding. The structure contains a lot of useful information.

After we have the connected list of these structures, we have to go through it and get the needed information. It can be done this way, for example:

PIP_ADAPTER_INFO pCurAdapt = &buffer[0];

do {

  //getting the needed information from the structure.

} while ((pCurAdapt = pCurAdapt->Next) != NULL);

We will get the type of the network protocol from the structure Type member IP_ADAPTER_INFO the following way:

char* GetType(UINT type) {
  switch (type) {
  case MIB_IF_TYPE_OTHER:
    return "Unknown";
  case MIB_IF_TYPE_ETHERNET:
    return "Ethernet";
  case MIB_IF_TYPE_TOKENRING:
    return "Token ring";
  case MIB_IF_TYPE_FDDI:
    return "FDDI";
  case MIB_IF_TYPE_PPP:
    return "PPP";
  case MIB_IF_TYPE_LOOPBACK:
    return "Loop Back";
  case MIB_IF_TYPE_SLIP:
    return "SLIP";
  }

  return "Unknown";
}

At last, we have to examine the process of receiving the computer name through its IP address. We will get the IP address through the IP_ADDR_STRING structure.

struct IP_ADDR_STRING {
  struct _IP_ADDR_STRING* Next;
  IP_ADDRESS_STRING IpAddress;
  IP_MASK_STRING IpMask;
  DWORD Context;
}

The function that receives the host name through IP address is below.

bool GetDN(char* ip, char* host, unsigned int len) {
  unsigned long res;
  WSADATA wsaData;
  HOSTENT* pHost;

  res = inet_addr(ip);

  if ((res == INADDR_NONE) || (res   == 0)) {
       strcpy(host, "unable to resolve");
       return false;
  }

  if (WSAStartup(MAKEWORD(1, 1), &wsaData)) {
      strcpy(host, "unable to resolve");
      return false;
  }

  pHost = gethostbyaddr((char*)&res, sizeof(res), AF_INET);
  WSACleanup();
  if (pHost == NULL) {
      strcpy(host, "unable to resolve");
      return false;
  }

  if (strlen(pHost->h_name)>len) {

    strcpy(host, "buffer too small");
    return false;
  }

  strcpy(host, pHost->h_name);

  return true;
}

It is called the following way:

// ...
  char host[1024];

GetDN(pCurIP->IpAddress.String, host, sizeof(host));

Links

Our home site (for software, IT related links, sources, and articles) is http://www.brigsoft.com

Downloads

Download demo - 4 Kb


Comments

  • About your demo

    Posted by Legacy on 05/15/2003 12:00am

    Originally posted by: X

    Your demo displays only local IP address and its adaptor.
    "At last, we have to examine the process of receiving the computer name through its IP address."...

    Reply
  • Change IP ?

    Posted by Legacy on 05/13/2003 12:00am

    Originally posted by: Sonu Kapoor

    Hey

    Any Idea how to change the current IP ?

    Thanks, Sonu

    Reply
Leave a Comment
  • Your email address will not be published. All fields are required.

Top White Papers and Webcasts

  • Live Event Date: February 25, 2015 @ 2:00 p.m. ET / 11:00 a.m. PT Secure Shell (SSH) keys provide unmitigated access for privileged users and applications. However, managing and securing these critical privileged credentials poses a real challenge for organizations, putting sensitive data at risk. In fact, more than 50% of organizations report experiencing an SSH Key related compromise. Check out this upcoming eSeminar and join Adam Bosnian, EVP of Global Business Development at CyberArk, as he discusses the …

  • The 3rd Platform of computing, based around the four pillars of mobile computing, social media, big data and analytics, and cloud, is redefining what IT infrastructure needs to provide. Endpoint solutions must meet not only traditional data protection requirements, but also a new set of requirements driven by the explosion in mobile computing. This IDC white paper explores the customer challenges associated with safeguarding data residing on various endpoint devices, including laptops, tablets, and …

Most Popular Programming Stories

More for Developers

RSS Feeds

Thanks for your registration, follow us on our social networks to keep up-to-date