我正在尝试将 MacOSX 应用程序移植到 Windows,但遇到了有关 getifaddrs 的问题。基本上windows不支持它。我试图找到一种重新实现它的方法(对于 AF_INET 和 AF_INET6),但 Windows 上的“等效”功能似乎与 MacOSX 支持完全不同。
以前有人做过这种转换吗?如果是这样,有没有一种好方法可以让 Windows 像 MacOSX 一样向我报告界面信息?
我正在尝试将 MacOSX 应用程序移植到 Windows,但遇到了有关 getifaddrs 的问题。基本上windows不支持它。我试图找到一种重新实现它的方法(对于 AF_INET 和 AF_INET6),但 Windows 上的“等效”功能似乎与 MacOSX 支持完全不同。
以前有人做过这种转换吗?如果是这样,有没有一种好方法可以让 Windows 像 MacOSX 一样向我报告界面信息?
Windows 上最接近的函数是GetAdaptersInfo和GetAdaptersAddresses。MSDN 文档非常全面,因此您应该找到所需的一切。
getifaddrs()
不是一个可移植的解决方案,所以如果你需要支持多个平台,你应该考虑使用getaddrinfo
POSIX 和 Windows 友好的。乍一看有点复杂,但实际上并没有那么糟糕。这个 SO question有一些关于该主题的很好的答案和链接。(特别是,Beej 页面showip.c
上的示例非常有帮助,这里是一个 Windows 示例;请注意,它顶部缺少一个,并确保链接到.)#include <stdio.h>
Ws2_32.lib
我已经在这里完成了,包括 Wine 的单独版本,因为与 IP 版本无关的例程当前无法按预期工作,
http://code.google.com/p/openpgm/source/browse/trunk/openpgm/pgm/getifaddrs.c
LGPL 2.1 许可证
编辑: Wine 1.3 修复了 IPv4 和 IPv6 友好 API 遇到的问题。
也许libpcap的win32端口可以帮助你?
(或 libnet 的端口,如果存在)