用 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
- 为什么是localhost地址反了?是否应该打印
127.0.0.1
?
- 老实说,我期待获得我需要的 ip
示例
$ ifconfig
... 不是本地主机!我是不是误解了 INADDR_LOOBACK
的作用?
INADDR_LOOPBACK
按 主机字节顺序 ,即 0x7f000001
。顺便说一下,它是 IPv4 地址 127.0.0.1
.
in_addr1->s_addr
必须采用 网络字节顺序 。
您的计算机是小端计算机,主机字节顺序与网络字节顺序不匹配。您必须使用 htonl
将环回地址转换为网络字节顺序。
我正在尝试获取一个字符串,其中包含我机器的点分十进制形式的 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
- 为什么是localhost地址反了?是否应该打印
127.0.0.1
? - 老实说,我期待获得我需要的 ip
示例
$ ifconfig
... 不是本地主机!我是不是误解了INADDR_LOOBACK
的作用?
INADDR_LOOPBACK
按 主机字节顺序 ,即 0x7f000001
。顺便说一下,它是 IPv4 地址 127.0.0.1
.
in_addr1->s_addr
必须采用 网络字节顺序 。
您的计算机是小端计算机,主机字节顺序与网络字节顺序不匹配。您必须使用 htonl
将环回地址转换为网络字节顺序。