从IPv4地址获取网络接口名称 [英] Get network interface name from IPv4 address

查看:186
本文介绍了从IPv4地址获取网络接口名称的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

给定IPv4地址,如何在Windows中使用C ++获取其关联的网络接口名称,如以太网适配器本地连接?或者,如何获取本地计算机的网络接口名称和IPv4地址的列表?我只能使用 getaddrinfo inet_ntoa 获得IPv4地址。

Given an IPv4 address, how can I obtain its associated network interface name, like "Ethernet adapter Local Area Connection", in Windows using C++? Alternately, how can I obtain a list of both network interface names and IPv4 addresses for the local computer? I'm able to get only the IPv4 addresses using getaddrinfo and inet_ntoa.

推荐答案

#include <windows.h>
#include <iphlpapi.h>
#include <stdio.h>

#pragma comment(lib, "iphlpapi.lib")

int
main(int argc, char** argv) {
  PIP_ADAPTER_INFO pAdapterInfo;
  pAdapterInfo = (IP_ADAPTER_INFO *) malloc(sizeof(IP_ADAPTER_INFO));
  ULONG buflen = sizeof(IP_ADAPTER_INFO);

  if(GetAdaptersInfo(pAdapterInfo, &buflen) == ERROR_BUFFER_OVERFLOW) {
    free(pAdapterInfo);
    pAdapterInfo = (IP_ADAPTER_INFO *) malloc(buflen);
  }

  if(GetAdaptersInfo(pAdapterInfo, &buflen) == NO_ERROR) {
    PIP_ADAPTER_INFO pAdapter = pAdapterInfo;
    while (pAdapter) {
      printf("\tAdapter Name: \t%s\n", pAdapter->AdapterName);
      printf("\tAdapter Desc: \t%s\n", pAdapter->Description);
      printf("\tAdapter Addr: \t%ld\n", pAdapter->Address);
      printf("\tIP Address: \t%s\n", pAdapter->IpAddressList.IpAddress.String);
      printf("\tIP Mask: \t%s\n", pAdapter->IpAddressList.IpMask.String);
      printf("\tGateway: \t%s\n", pAdapter->GatewayList.IpAddress.String);
      if(pAdapter->DhcpEnabled) {
        printf("\tDHCP Enabled: Yes\n");
        printf("\t\tDHCP Server: \t%s\n", pAdapter->DhcpServer.IpAddress.String);
        printf("\tLease Obtained: %ld\n", pAdapter->LeaseObtained);
      } else {
        printf("\tDHCP Enabled: No\n");
      }
      if(pAdapter->HaveWins) {
        printf("\tHave Wins: Yes\n");
        printf("\t\tPrimary Wins Server: \t%s\n", pAdapter->PrimaryWinsServer.IpAddress.String);
        printf("\t\tSecondary Wins Server: \t%s\n", pAdapter->SecondaryWinsServer.IpAddress.String);
      } else {
        printf("\tHave Wins: No\n");
      }
      pAdapter = pAdapter->Next;
    }
  } else {
    printf("Call to GetAdaptersInfo failed.\n");
  }
}

这篇关于从IPv4地址获取网络接口名称的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆