是否有符合 POSIX 标准的方法来获取我的计算机的本地网络 IP 地址?

问题描述 投票:0回答:6

我知道这个问题已经以某种形式被问了一百万次,但没有一个问题给了我一种符合 POSIX 标准的方法。

我需要使用 getifaddrs 或任何其他不符合 POSIX 标准的访问接口的方式来获取我的计算机的本地网络地址。这可能吗?

    

c posix
6个回答
7
投票
SOCK_DGRAM

)

connect
到已知的远程地址。由于 udp 套接字是无状态的,因此不会产生任何网络流量。

然后您可以查询该套接字的本地端点 (

getsockname

) 以获取系统将通过其路由的本地 IP 地址。同样,由于 udp 是无状态的,这只会查询您的本地路由表,并且不会发出真正的网络流量。


之后不要忘记关闭套接字。

远程公共域名服务器非常适合此目的。您可以测试其中几个

其中一个可能偶尔会宕机或者可能没有路由 去世界那个地方的一些理由
  • 您的进程可能与服务器和您位于同一本地网络上 可能只能获取一些特殊的本地地址
  • 测试 IPv4 和 IPv6 地址

3
投票

Unix 通常支持 getifaddrs 或 SIOCGIFCONF ioctl ,因此请使用其中之一或其他一些系统所需的 API。请注意,一台机器上可以有(并且通常有)多个网络接口,您必须弄清楚您对哪个网络接口感兴趣。


0
投票


-1
投票

#include <unistd.h> int main(int argc, char* argv[]) { return 8 == write(1, "0.0.0.0\n", 8) ? 0 : 1; }



-1
投票

此外,一台机器可以有很多网络地址(至少有环回,每个网卡一个或多个,至少三个 IPv6 地址,...),“

网络地址”无论如何都没有明确定义。


-2
投票
	
© www.soinside.com 2019 - 2024. All rights reserved.