从 IPv4 地址获取网络接口名称

2023-12-15

给定 IPv4 地址,如何在 Windows 中使用 C++ 获取其关联的网络接口名称,例如“以太网适配器本地连接”?或者,如何获取本地计算机的网络接口名称和 IPv4 地址的列表?我只能使用以下命令获取 IPv4 地址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");
  }
}

正如 @sonyisda1 提到的,这取自 MSDN。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 IPv4 地址获取网络接口名称 的相关文章

随机推荐

  • 仅最初需要 git 子模块更新?

    我正在掌握 git 子模块 一厢情愿的想法 并且我提出了更具体的问题 这是一个好兆头 我试图找到超级项目引用的子模块的哪个版本 在 gitmodules and git config 但那里没有提到任何内容 这种情况是 我正在更改根位置的子
  • 与 HoloEverywhere 的相对 Gradle 项目依赖性

    我有这个目录结构 Project contrib holo everywhere library addons slider preferences app library app one app two settings gradle 我
  • 保留选定的打印机设置

    我有一个应用程序 它运行一系列预订 并以行程的形式依次打印每个预订并发送给客户 每次运行可能有 30 个左右的预订 因此需要自动化 我们已经交付了它 所有这些都可以与我们的报告软件 DELPHI 的 Report Builder 配合使用
  • 使用 / 分割 C++ 字符串

    我有一个 C 字符串 如下所示 dirname filename ini 我需要在之后得到一切 我怎样才能做到这一点 Using find and substr方法来自std string std string fullpath dirna
  • 模块构建失败(来自 ./node_modules/postcss-loader/src/index.js)

    当我运行命令时 我正在使用角度和节点npm start我收到这个错误 src styles scss 中的错误 node modules css loader dist cjs js ref 13 1 node modules postcs
  • 运算符重载,运算符+与运算符+=

    我正在阅读一些 C 源代码 并且了解了一些语法 path path operator string postPath 我想知道这是否是实际的语法以及为什么 c 不使用已经存在的运算符 而是将值应用于有问题的对象 就像您想确保对象被正确删除一
  • 按对象键过滤对象数组

    我有一个 Javascript 对象数组 var List employee Joe type holiday employee Jerry type seminar employee Joe type shore leave 我想获得两个
  • Rails 的地理定位 API [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我试图从我的 Rails 应用程序中显示某个位置的地图 我尝试检查 YM4R GM 和 GeoKit 组合 但不确定是否有更好的 Rails 3 的
  • 转换为 64 位 int

    因此 我正在使用 PHP 来转换 Steam Id 这可能是你们很多人都熟悉的 我有以下 Steam ID STEAM 0 1 1514332 现在 我需要将其转换为 64 位版本 这也是社区 ID 浏览 Steams 官方发布后 http
  • 如何在 WPF 中过滤 ListView?

    我有一个绑定到项目集合的 ListView 我不想显示属性 IsDeleted 1 的项目 我怎样才能做到这一点 我将使用 CollectionView 并将 Filter 属性设置为表达式 var view CollectionViewS
  • 如何准确测量具有已知 DPI 的鼠标的鼠标移动(以英寸或厘米为单位)

    我有一个 Logitech G500 游戏鼠标 其全 DPI 为 5700 我正在尝试用 C 编写一个程序 以物理单位准确测量鼠标的水平移动 即 厘米或英寸 我通过 WM INPUT 消息使用 Windows API 和 Windows 原
  • 将一个 html 文件包含到另一个文件中 [关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 我想将一个 html 文件包含到另一个文件中 但似乎行不通 这两个文件是 C wamp
  • 在另一个函数中访问时函数结果未定义

    我试图取回另一个函数内部函数的结果 但总是未定义 window load function var isMobile false function check OS if iPhone iPod iPad i test navigator
  • JavaScript:在没有画布的情况下获取ImageData

    是否有可能获得ImageData来自图像的对象 该图像不在画布上 而是在 DOM 树中的其他位置 正常情况下 img 如果是 怎么办 您必须创建一个内存画布 然后在此画布上绘制图像 var canvas document createEle
  • 除了“推”钩之外还有其他选择吗?

    Bitbucket Github 和其他服务往往有一个 push 钩子 这样当你将代码推送到存储库时 该服务可以点击一个 URL 可能在生产服务器上 告诉它拉取最新的代码 问题是 如果我在云中有许多服务器 根据负载进出 我无法知道在任何给定
  • QuickBooks 在解析提供的 XML 文本流时发现错误

    我正在使用适用于 QuickBooks Desktop 的 Conolibyte PHP SDK 当我尝试从 QuickBooks 桌面获取账单时 出现此错误 0x80040400 QuickBooks found an error whe
  • 输入类型 DateTime - 值格式?

    我应该以哪种格式放置日期和时间 以便在 HTML5 输入元素中使用datetime type 我努力了 1338575502 01 06 2012 19 31 01 06 2012 19 21 00 2012 06 01 2012 06 0
  • 编辑文件-纯js

    如何在纯js 无节点 中编辑文件 我得到一个带有输入字段的文件 并像这样读取其文本 var fileReader new FileReader fileReader readAsText file fileReader onload fun
  • 受 SO 启发的关系 UML 图

    我的作业是创建一个关于讨论站点的关系 UML 图 我用的是SO模式 我做了一些修改 删除了用户信息中的年龄 添加了代表 允许用户按用户名对帖子进行分类 自愿 除此之外 该模式非常相似 但很初级 你会如何改进它 澄清 代表的主要思想是对职位进
  • 从 IPv4 地址获取网络接口名称

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