c - getnameinfo() 给了我奇怪的主机名

标签 c ip hostname getnameinfo

我有问题。 我想将 IP 地址 (81.2.195.254) 转换为主机名 (www.farnost-hranice.cz)。
这里你可以尝试转换一下这个IP地址看看是否正确:
https://whatismyipaddress.com/hostname-ip
我的问题是,当我尝试将 IP 地址转换为主机名时,它给了我奇怪的(甚至无法访问)主机名:
254.195.forpsi.net

我做错了什么?

我的代码在这里:

#include <stdio.h>  //scanf , printf
#include <string.h> //strtok
#include <stdlib.h> //realloc
#include <sys/socket.h> //socket
#include <netinet/in.h> //sockaddr_in
#include <arpa/inet.h>  //getsockname
#include <netdb.h>  //hostent
#include <unistd.h> //close
#include <getopt.h> //getopt

int main(void)
{


    struct sockaddr_in sa; // could be IPv4 if you want
        char host[1024];

        sa.sin_family = AF_INET;
        sa.sin_addr.s_addr = inet_addr("81.2.195.254");

        getnameinfo((struct sockaddr*)&sa, sizeof sa, host, sizeof host, NULL, 0, 0);
        printf("hostname: %s", host);
    return 0;
}

最佳答案

正如预期的那样,IP 地址 81.2.195.254 的反向主机名(又名 PTR 记录)确实是 254.195.forpsi.net

您可以自己检查一下,例如使用程序“host”:

$ host 81.2.195.254

254.195.2.81.in-addr.arpa domain name pointer 254.195.forpsi.net.

主机名 www.farnost-hranice.cz 也指向 IP 地址 81.2.195.254,这是正确的,但没有相反的链接.

关于c - getnameinfo() 给了我奇怪的主机名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58488960/

相关文章:

networking - 发送方计算机如何知道接收方计算机上自定义进程的端口号?

javascript - 如何用JS元素填充VALUE

java - 如何在 "hostnames"方法中传递 "InetAddress"数组而不是传递一个主机名

c - 如何按值传递 char ** 指针?

c - 'SIGPIPE' : undeclared identifier in luasocket-2. 0.2

networking - 现代路由器/网络设备/ISP 是否可以防止伪造的 IP header ?

php - 限制同一IP的用户访问多个页面

mysql - 仅当 @@hostname 等于某个值时插入一行

java - Kinect 2 对象跟踪最佳方法

c - 通过 c 中的管道而不是文件将数据数组传递给 gnuplot