gpt4 book ai didi

c - gethostbyname()不工作

转载 作者:太空宇宙 更新时间:2023-11-04 08:49:33 24 4
gpt4 key购买 nike

我正在尝试查找源的 IP,但它不起作用。

void getSourceIp(struct hostent *sourceHost, struct ip *ipStruct)
{
char sourceName[100];

if (gethostname(sourceName,sizeof(sourceName)) < 0)
{
perror("Error in function gethostname().\n");
exit(EXIT_FAILURE);
}

if ((sourceHost = gethostbyname(sourceName)) == NULL)
{
std::cout << "The source " << sourceName << " is unknown.\n";
exit(EXIT_FAILURE);
}

ipStruct->ip_src = (*(struct in_addr *) sourceHost->h_addr_list);
std::cout << "IP Address: " << inet_ntoa(ipStruct->ip_src);
}

主要功能:

int main(int argc, char *argv[])
{
struct hostent *sourceHostent = NULL;
struct hostent *destinationHostent = NULL;
struct ip *ip = NULL;

getSourceIp(sourceHostent,ip);
return 0;
}

我得到的输出是“来源 macbook 未知。”

最佳答案

正如我在对该问题的评论中提到的,您的方法有几个问题。首先是结果不会传回调用函数。您需要使用双指针来执行此操作。

接下来,gethostbyname 返回的值被分配到静态内存中,因此下次调用该函数时可以覆盖它。您需要将结果复制到您自己的内存中。这很重要,因为您需要深度复制它,而不仅仅是 malloc(sizeof(struct hosting))。这样做的复杂性是 gethostbyname 被贬低的原因。根据您的目标平台,有更好的 DNS 查找选项。

即使在您的代码中查找成功,您也会得到 SEGFAULT。您正在为 ipStruct 传递值 NULL,然后尝试取消引用并写入它。如果你取消引用一个 NULL 指针,你将有一段糟糕的时光。您应该花一些时间了解 C 中使用 mallocfree 的内存管理。

没有看到更多的代码,我不确定你想用你的struct ip做什么。看起来您正在尝试以 char * 的形式获取主机的一个或多个 IP 地址,但您已经错过了相当多的目标。如果您能详细说明意图,我可以提供更多帮助。

这最后一段是风格化的,但是在 if 语句中进行赋值很容易出错,而且通常是个坏主意。你应该改掉这样做的习惯。

关于c - gethostbyname()不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20166758/

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