c获取服务器公共IP

时间:2012-08-28 08:11:16

标签: c sockets ip

我想知道如何使用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;
}

1 个答案:

答案 0 :(得分:0)

你不能靠自己做,没有可靠的方法。假设你在NAT盒子后面:你永远不会知道内部全局地址(即NAT盒使用的公共地址)。更重要的是,NAT盒可能有多个公共地址。

这是因为您的公开地址不是您的地址。公共场所只是海市蜃楼,即外部主人认为你的方式。所以它是有道理的:你只能通过询问外部主机来找到它。

TLDR

向外部主持人提出请求:

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

使用libcurl或使用您自己的套接字来完成它是微不足道的。