是否有符合POSIX标准的方式获取我的计算机的本地网络IP地址?
我知道这个问题已经以一种或另一种forms被问了一百万次,但没有问题给了我一个POSIX兼容的方式。
我需要获取计算机的本地网络地址, 而不使用getifaddrs
或任何其他非POSIX兼容的访问接口的方式。 那可能吗 ?
没有直接支持这样的东西,但你可以使用udp套接字( SOCK_DGRAM
) connect
到已知的远程地址。 由于udp套接字是无状态的,因此不会进行任何网络流量。
然后,您可以查询该套接字的本地端点( getsockname
)以获取系统将路由的本地IP地址。 由于udp是无状态的,因此只查询本地路由表,并且不会发出真正的网络流量。
之后别忘了关闭sockets。
远程公共名称服务器有利于此目的。 你可以测试其中几个
- 其中一个可能偶尔会失败,或者由于某种原因可能没有任何途径可以到达世界的这一部分
- 您的进程可能与服务器位于同一本地网络上,您可能只获得一些特殊的本地地址
- 测试IPv4和IPv6地址
不,这是不可能的,因为posix没有指定任何API来访问该信息。
Unix通常支持getifaddrs或SIOCGIFCONF ioctl,因此请使用其中一个或其他系统demendant API。 请注意,计算机上可能存在(通常是)多个网络接口,您必须弄清楚您感兴趣的内容。
非常简单,当然:
#include int main(int argc, char* argv[]) { return 8 == write(1, "0.0.0.0\n", 8) ? 0 : 1; }
POSIX没有“网络”的概念,甚至更少的IP。 所以不行。
此外,一台机器可以有很多网络地址(至少环回,每个网卡一个或几个,至少三个IPv6地址……),“网络地址”无论如何都没有明确定义。
#include int main(int argc, char* argv[]) { printf("127.0.0.1\n"); }