0

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

1 回答 1

0

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

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

TLDR

向外部主机发出请求:

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

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

于 2012-08-28T09:51:51.770 回答