0

问题的一点背景:

我最近对 ​​Microsoft 和套接字绑定有过一次濒死体验。我正在测试生产代码,其中一台测试 PC 一直失败。我最终建议该函数存在错误,这bind()是最古老的函数之一。

我提交了错误(请参阅CAsyncSocket Create 的绑定实现在 Visual Studio 的开发人员社区反馈论坛中有一个错误),但被移交给了 Windows 团队(请参阅他们的反馈中心中的“__imp_bind 实现有一个长期存在的情境错误”) ,谁从来没有做过任何事情。

由于我无法调试bind(),而且微软拒绝提供帮助,经过 2 周的开发工作后,我最终发现,有问题的测试机器启用了 Hyper-V,而我的接口解析代码正在获取这个虚假AF_INET地址并对其进行解析的真实IP地址。

我不能指望我的客户仅仅为了运行我的软件而关闭不需要的 Hyper-V 功能,因此我需要使我的解析代码更加精细。

我的问题:

我需要做的是能够获取特定地址的详细名称,例如 for ipconfig /all。我可以看到其他人问过这个问题,比如 Ivan 的如何确定接口名称和 tez 的Linux 获取所有网络接口名称。Ivan 的答案是使用getsockname(),tez 的答案是使用if_nameindex(). 其中任何一个都不会返回详细的接口名称,如ipconfig.

那么,有人知道那会是什么函数调用吗?

4

1 回答 1

0

Remy Lebeau的答案是使用GetAdaptersAddresses. 该函数的示例代码显示了如何遍历套接字适配器接口并获取大量接口数据。但是,要回答这个问题(即 get ipconfig-like 冗长),您需要单独的 IP 地址。这些在LPSOCKADDR lpSockaddr成员中可用,它们是GetAdaptersAddresses调用的输出,其中一个示例是pUnicast->Address.lpSockaddr.

于 2019-09-03T14:21:14.717 回答