获取IP地址功能不正常

时间:2013-03-24 21:08:01

标签: c sockets ip

我试图获取服务器的IP地址,但它获得127.0.1.1而不是127.0.0.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是用户桌面 规范主机名是IP 127.0.1.1的用户桌面 127.0.1.1

2 个答案:

答案 0 :(得分:3)

这就是你的/etc/hosts所表明的。它很可能有类似的东西:

127.0.0.1       localhost
127.0.1.1       user-desktop

答案 1 :(得分:0)

它在/etc/hosts。这是一个默认条目,gethostbyname()也在那里。