gpt4 book ai didi

c - 获取环回地址而不是实际地址?

转载 作者:行者123 更新时间:2023-11-30 17:43:35 26 4
gpt4 key购买 nike

/* program to print the IP address of the Host*/
------------------------------------------------

我正在尝试打印主机 IP 地址。当我执行以下程序时 我得到的环回地址是127.0.0.1。我应该改变什么才能获得 实际IP地址。

# include <stdio.h>
# include <stdlib.h>
# include <arpa/inet.h>
# include <string.h>
# include <sys/types.h>
# include <sys/socket.h>
# include <netdb.h>
# include <netinet/in.h>

int main () {

void *addr;
char ipstr[INET6_ADDRSTRLEN];
int rv;
struct addrinfo hints, *res, *p;

memset ( &hints, 0, sizeof hints );
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;
//hints.ai_flags = AI_ADDRCONFIG;
hints.ai_flags = AI_PASSIVE;

if ((rv = getaddrinfo(NULL ,"3490" , &hints, &res)) != 0) {
fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(rv));
return 1;
}

for(p = res;p != NULL; p = p->ai_next) {

struct sockaddr_in *ipv4 = (struct sockaddr_in *)p->ai_addr;
addr = &(ipv4->sin_addr);
inet_ntop(p->ai_family, addr, ipstr, sizeof ipstr);
printf(" %s\n", ipstr);
}

}

最佳答案

只要您的开发计算机未连接到网络,您就会获得环回地址(当然,这对于本地网络完全有效)。一旦将机器连接到网络,您就可以确定“正确”的地址。ipconfig,顺便说一句,行为相同。

如果您使用 NULL 作为节点名称(第一个参数)调用 getaddrinfo ,则与使用“localhost”调用它时的效果相同。您将获得环回IP。但是,如果您使用“真实”主机名,您将获得“真实”IP。

关于c - 获取环回地址而不是实际地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20212212/

26 4 0