gpt4 book ai didi

c - Linux 网络 (gethostbyaddr)

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:10:00 26 4
gpt4 key购买 nike

我正在尝试获取有关 IP 地址为 89.249.207.231 的主机的主机信息。我知道它存在,因为当我在浏览器的 url 字段中键入 IP 地址时,它会找到该页面。这是我的 C 代码。

#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <stdio.h>
#include <errno.h>

int main()
{
struct in_addr addr;
inet_aton("89.249.207.231", &addr);
struct hostent* esu = gethostbyaddr((const char*)&addr),sizeof(addr), AF_INET);
printf("%s\n", esu->h_name);
return 0;
}

当我编译并运行它时,它给出“Segmentation fault”。我无法理解我的代码的问题。

如有任何提示和建议,我们将不胜感激。

谢谢!

最佳答案

即使主机存在,您也可能无法提取其主机名。

例如,以下代码在不使用您使用的已弃用函数的情况下会给出结果 host=google-public-dns-a.google.com 而使用您的主机地址会给出 could不解析主机名

你的段错误的原因是 esuNULL,因为该函数无法通过给定的 IP 解析主机名。

代码如下:

#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>

int main()
{
struct sockaddr_in sa; /* input */
socklen_t len; /* input */
char hbuf[NI_MAXHOST];

memset(&sa, 0, sizeof(struct sockaddr_in));

/* For IPv4*/
sa.sin_family = AF_INET;
sa.sin_addr.s_addr = inet_addr("8.8.8.8");
len = sizeof(struct sockaddr_in);

if (getnameinfo((struct sockaddr *) &sa, len, hbuf, sizeof(hbuf),
NULL, 0, NI_NAMEREQD)) {
printf("could not resolve hostname\n");
}
else {
printf("host=%s\n", hbuf);
}

return 0;
}

关于c - Linux 网络 (gethostbyaddr),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28566424/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com