Nic*_*ick 3 c networking posix ip-address
我希望获得我自己的 IP 地址,以便将该信息发布到对等网络中。在 POSIX/C 中,我们有getaddrinfo(NULL, ...),但这似乎总是返回INADDR_ANYor INADDR_LOOPBACK,这对我来说没用。
有什么建议?
问题之一是,即使您获得了本地 IP 地址,Internet 其余部分看到的 IP 地址也可能不同,因为NAT的杂乱无章,不幸的是非常普遍。使用 IPv6 可能会抑制这个问题,但现在它可能不是你的选择。
要获取公共IP 地址,您需要为此目的制定的协议,例如STUN ( RFC 5389 )。在 C 中有公共 STUN 服务器和已经存在的STUN 客户端。
所有的点对点程序都有类似的问题,所以要了解其他人在做什么,我强烈建议阅读RFC 5128,“跨网络地址转换器 (NAT) 的点对点 (P2P) 通信状态”。