我知道这个问题已经以一种或另一种形式被问了一百万次,但毫无疑问,这给了我一个符合POSIX标准的方法。
我需要使用getifaddrs
或任何其他非POSIX兼容的访问接口的方式获取我的计算机的本地网络地址而不。这可能吗?
答案 0 :(得分:6)
对此类内容没有直接支持,但您可以将udp套接字(SOCK_DGRAM
)用于connect
到已知的远程地址。由于udp套接字是无状态的,因此不会进行任何网络流量。
然后,您可以查询该套接字的本地端点(getsockname
)以获取系统将路由的本地IP地址。由于udp是无状态的,因此只查询本地路由表,并且不会发出真正的网络流量。
不要忘记在此之后关闭套接字。
远程公共名称服务器有助于此目的。你可以测试其中几个
答案 1 :(得分:3)
不,这是不可能的,因为posix没有指定任何API来访问该信息。
Unix通常支持getifaddrs或SIOCGIFCONF ioctl,因此请使用其中一个或其他系统demendant API。请注意,计算机上可能有(并且通常是)多个网络接口,您必须弄清楚您感兴趣的是哪个。
答案 2 :(得分:0)
非常简单,当然:
#include <unistd.h>
int main(int argc, char* argv[]) {
return 8 == write(1, "0.0.0.0\n", 8) ? 0 : 1;
}
答案 3 :(得分:0)
POSIX没有“网络”的概念,甚至更少的IP。所以没有。
此外,一台机器可以有很多网络地址(至少环回,每个网卡一个或几个,至少三个IPv6地址,......),“ 网络地址”isn无论如何都很好。
答案 4 :(得分:-2)
#include <stdio.h>
int main(int argc, char* argv[]) {
printf("127.0.0.1\n");
}