3

次のスクリプトがあります。

#include <stdio.h>
#include <string.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netdb.h>

const char *ip="190.162.1.2";

int main(int argc, const char * argv[])
{
    in_addr host_addr;
    hostent *addr=0;
    hostent *host=0;
    inet_pton(AF_INET, ip, &host_addr);
    addr=gethostbyaddr(&host_addr, sizeof(host_addr), AF_INET);
    printf("gethostbyaddr(%s):\n",ip);
    if(!addr)
        herror("Unable to resolve host by address");
    else {
        printf(" OK\n");
        host=gethostbyname(addr->h_name); //use the hostname we got previously
        printf("gethostbyname(%s):\n",addr->h_name);
        if(!host){
            herror(" Unable to resolve host by name"); //gets here, why?
            return 0;
        } else {
            printf(" IP addresses of %s: \n",addr->h_name);
            in_addr **addr_list;
            addr_list = (in_addr **)host->h_addr_list;
            for(int i = 0; addr_list[i] != NULL; i++) {
                printf("%s \n", inet_ntoa(*addr_list[i]));
            }
        }
    }
    return 0;
}

そして、以前に成功した gethostbyaddr からのホスト名で gethostbyname が失敗するのはなぜだろうか。誰かが私に理由を説明できますか?

進捗:

gethostbyaddr(190.162.1.2):
 OK
gethostbyname(pc-2-1-162-190.cm.vtr.net):
 Unable to resolve host by name: Unknown host

ただし、173.194.34.129 (google.com) などの他の IP アドレスでも機能します。

4

1 に答える 1

0

DNS サーバーのローカル構成にエラーがある可能性があります。DNS には両方向 (IP からホスト名へ、およびホスト名から IP へ) のマッピングがあります。後者が欠けているようです。

システム管理者に確認してもらいます。

コマンドラインからホスト名を使用してホストにpingを実行すると、IPアドレスが表示されますか?

于 2014-03-27T20:09:34.423 に答える