用 C 以点分十进制获取我机器的 ip 地址?

Getting the ip address of my machine in dotted decimal with C?

我正在尝试获取一个字符串,其中包含我机器的点分十进制形式的 IP 地址。我所做的是尝试使用以下代码从 INADDR_LOOPBACK 获取字符串。

char addr[INET_ADDRSTRLEN];
struct in_addr *in_addr1 = malloc(sizeof(struct in_addr));
in_addr1->s_addr = INADDR_LOOPBACK;
inet_ntop(AF_INET, in_addr1, addr, INET_ADDRSTRLEN);
printf("addr: %s\n", addr);

这是我从 printf 得到的:

1.0.0.127

  1. 为什么是localhost地址反了?是否应该打印 127.0.0.1?
  2. 老实说,我期待获得我需要的 ip 示例 $ ifconfig... 不是本地主机!我是不是误解了 INADDR_LOOBACK 的作用?

INADDR_LOOPBACK 主机字节顺序 ,即 0x7f000001。顺便说一下,它是 IPv4 地址 127.0.0.1.

in_addr1->s_addr 必须采用 网络字节顺序

您的计算机是小端计算机,主机字节顺序与网络字节顺序不匹配。您必须使用 htonl 将环回地址转换为网络字节顺序。