c++ - ->h_addr_list[0] 是我需要的地址吗?

标签 c++ ip ip-address router upnp

我正致力于在 C++ 上实现 UpNP,我需要获取路由器分配的本地内部 IP 地址以使套接字正常工作。我需要的地址是出现在路由器上的地址,它显示连接到路由器的计算机以及分配给每台计算机的本地 IP。我正在使用这个:

PHOSTENT      Addr    = NULL;
char          Host[MAX_PATH];

if( gethostname(Host, sizeof(Host)) == 0 )
{
    Address = gethostbyname( Host );
    if( Address != NULL )
    {
        //*(struct in_addr *)Address->h_addr_list[0]) <- this is my address
    }
}

这在我正在测试的计算机上工作正常,但是那台计算机只有一个网卡,所以我想知道当一台计算机有多个网卡或网络设备时,Address->h_addr_list[0] 可能不是我需要的,它可能在该数组的另一个索引中。

[0] 是否总是检索路由器分配的 IP?

最佳答案

(假设这里是 winsock,按照前面的问题)

您不应该假设第一个地址是正确的(因为可能有多个接口(interface),并且可能有多个接口(interface)处于事件状态)

我建议使用 getaddrinfo 枚举地址使用空的 pNodeName 参数,或 GetAdaptersAddresses .

这两个都返回一个链接列表,其中包含您系统的注册地址

关于c++ - ->h_addr_list[0] 是我需要的地址吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6052529/

相关文章:

c++ - 从 LLVM::ModuleRef 中提取 LLVM::Module

java - UnknownHostException 安卓客户端套接字

c# - 将十六进制值解析为 IPAddress C# 时的 long.Parse 和新 IPAddress 行为

amazon-web-services - 如何在cloudwatch中添加IP地址到日志流名称

C++ 运算符重载逻辑运算符

c++ - Lua/SWIG 从 Lua 中包装用户数据

c++ - 为什么 std::inner_product 比原始实现慢?

c# - ip地址递增问题

javafx 文本框ip地址

php - 私有(private)IP公开