【问题标题】:Indy getting all local interface information (cross platform)Indy 获取所有本地接口信息(跨平台)
【发布时间】:2013-03-08 02:40:27
【问题描述】:

我正在将一个包含网络接口列表的单元转换为跨平台。当前版本使用 raw winsock 获取系统中每个网络接口的地址、掩码和广播地址。

我认为制作这个跨平台的最简单方法是使用 Indy。我发现AddLocalAddressesToList 是获取所有接口的 IP 地址的一种非常简单的方法,但我不知道如何获取我需要的其他信息(掩码和广播地址)。 我想我可以计算出广播地址,所以它真的只是我无法弄清楚的掩码。

仅供参考。这是我找到的获取所有接口IP地址的代码。

TIdStack.IncUsage;
try
  GStack.AddLocalAddressesToList(Memo1.Lines);
finally
  TIdStack.DecUsage;
end;

【问题讨论】:

    标签: delphi cross-platform indy indy10 delphi-xe3


    【解决方案1】:

    WinSock 不支持报告此类信息。您必须改用特定于操作系统的 API。在 Windows 上,这意味着使用 Win32 API GetAdaptersInfo()GetAdaptersAddresses() 函数。在其他平台上,您可以在可用的情况下使用getifaddrs() 函数。

    Indy 目前不支持您的要求。另外请注意,目前AddLocalAddressesToList() 仅支持大多数平台上的 IPv4 地址,包括 Windows。

    目前正在支持检索本地 IPv6 地址以及其他信息(如子网掩码),但目前尚无关于其可用性的 ETA。

    【讨论】:

    • 你是对的,它们不是winsock fucntions,但那些是我在当前单元中使用的那些。我假设那么在 OSX 下一定有类似的功能?
    • 就像我说的,你可以在支持它的平台上使用getifaddrs()函数,包括OSX。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-21
    • 2015-03-09
    • 1970-01-01
    • 1970-01-01
    • 2012-08-15
    相关资源
    最近更新 更多