gpt4 book ai didi

c 获取服务器公共(public)IP

转载 作者:行者123 更新时间:2023-11-30 17:58:33 25 4
gpt4 key购买 nike

我想知道如何使用 C 编程语言获取服务器的公共(public) ip。
我已经知道如何使用 libcurl 执行此操作,但现在我想了解如何使用套接字编程获取此信息(如果可能的话)
我已经尝试过 struct hostent *hp但我只得到本地地址 127.0.0.1
这是我使用过的代码:

int main(int argc, char *argv[]){
struct hostent *hp;
int i=0;
if((hp=gethostbyname(argv[1])) == NULL){
herror("gethostbyname()");
exit(1);
}
fprintf(stdout, "Hostname: %s\n", hp->h_name);
/* fprintf (stdout,"IP server: %s\n",inet_ntoa(*((struct in_addr *)hp->h_addr))); con questa printo solo 1 ip */
while (hp->h_addr_list[i] != NULL) { /* mentre così printo tutti gli eventuali ip */
printf("IP: %s\n", inet_ntoa(*(struct in_addr*)(hp->h_addr_list[i])));
i++;
}
return 0;
}

最佳答案

你无法自己做到这一点,没有可靠的方法。假设您位于 NAT 框后面:您永远无法知道内部全局地址(即 NAT 框使用的公共(public)地址)。此外,NAT 盒可能有多个公共(public)地址。

发生这种情况是因为您的公共(public)地址不是您的地址。公共(public)地址只是一个海市蜃楼,即外部主机感知您的方式。所以这是有道理的:你只能通过询问外部主机来找到它。

TLDR

向外部主机发出请求:

[cnicutar@fresh ~]$ curl ifconfig.me
192.0.2.42

使用 libcurl 或使用您自己的套接字来完成此操作很简单。

关于c 获取服务器公共(public)IP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12155199/

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