我想知道如何使用C编程语言获取服务器的公共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;
}
答案 0 :(得分:0)
你不能靠自己做,没有可靠的方法。假设你在NAT盒子后面:你永远不会知道内部全局地址(即NAT盒使用的公共地址)。更重要的是,NAT盒可能有多个公共地址。
这是因为您的公开地址不是您的地址。公共场所只是海市蜃楼,即外部主人认为你的方式。所以它是有道理的:你只能通过询问外部主机来找到它。
向外部主持人提出请求:
[cnicutar@fresh ~]$ curl ifconfig.me
192.0.2.42
使用libcurl
或使用您自己的套接字来完成它是微不足道的。