-2

サーバーのIPアドレスを取得しようとしていますが、127.0.0.1ではなく127.0.1.1を取得しています。エラーはどこにありますか?また、ローカルホストアドレスではなく、実際のIPアドレスを取得するにはどうすればよいですか。

#define MAXHOSTNAME 256
#define DEBUG


    char * getIPAddress()
    {
        char myname[ MAXHOSTNAME + 1 ];
        static char IPinASCII[ MAXHOSTNAME ];   /* Oversized */
        struct hostent * hp;

        memset( myname, 0, MAXHOSTNAME + 1 );   /* Init */
        memset( IPinASCII, 0, MAXHOSTNAME );

        gethostname( myname, MAXHOSTNAME );
    #ifdef DEBUG
        printf( "hostname is %s\n", myname );
    #endif /* DEBUG */

        hp = gethostbyname( myname );
        if( hp == NULL )
        {
            perror( "gethostbyname" );
            return( "IP not found" );
        }

        inet_ntop( hp->h_addrtype, hp->h_addr_list[ 0 ], IPinASCII,
            MAXHOSTNAME ) ;

    #ifdef DEBUG
        printf( "canonical hostname is %s at IP %s\n", hp->h_name, IPinASCII );
    #endif /* DEBUG */

        return( IPinASCII );
    }

user @ user-desktop:〜/ Desktop / My Code $ ./ipprint hostname is user-desktop canonical hostname is user-desktop at IP 127.0.1.1 127.0.1.1

4

2 に答える 2

3

それはあなた/etc/hostsが示していることです。ほとんどの場合、次のようなものがあります。

127.0.0.1       localhost
127.0.1.1       user-desktop
于 2013-03-24T21:09:40.063 に答える
0

にあり/etc/hostsます。これはデフォルトのエントリであり、gethostbyname()そこにも表示されます。

于 2013-03-24T21:09:22.670 に答える