getnamebyadrr()得到的是域的名称,而不是机器名称.
例如:
我可以根据192.168.0.5得到名称是hsr.sve.com,但是却得不到机器的名称hsr
但是我通过ping hsr或者ping hsr.sve.com都可以得到IP.
我如何才能根据IP得到hsr呢?
请大家帮忙,小弟先谢了!

解决方案 »

  1.   

    如何获取远程机器名与Mac地址添加时间:2002-8-19  来源:瑞星  阅读485次 
     #include "stdio.h" 
    #include "stdlib.h" 
    #include "Winsock2.h" 
    #include "iphlpapi.h" #pragma comment ( lib, "ws2_32.lib" ) 
    #pragma comment ( lib, "Iphlpapi.lib" ) void main( int argc, char ** argv ) 

    //处理命令行参数 
    if ( argc != 2 ) 

     printf( "RmtHost v0.1 - Get remote HostName /MacAddress\n" ); 
     printf( "by ShotgunLabs ( [email protected] )\n\n" ); 
     printf( "Usage :\n\tRmtHost.exe [RemoteIP]\n\n"); 
     printf( "Example:\n\tRmtHost.exe 192.168.0.3\n\n"); 
     exit( 0 ); 
    } printf( "\nIpAddress : %s\n", argv[1] ); 
    //初始化SOCKET 
    WSADATA wsaData; 
    int iRet = WSAStartup(MAKEWORD(2,1), &wsaData); 
    if ( iRet != 0 ) 

     printf( "WSAStartup Error:%d\n", GetLastError() ); 
     exit( 0 ); 

    //获取远程机器名 
    hostent * remoteHostent = (hostent*)malloc( sizeof( hostent )); 
    int nRemoteAddr = inet_addr( argv[1] ); 
    remoteHostent = gethostbyaddr( (char*)&nRemoteAddr,sizeof( in_addr ), AF_INET ); 
    if ( remoteHostent ) 
     printf( "HostName : %s\n",remoteHostent->h_name ); 
    else 
     printf( "gethostbyaddr Error:%d\n", GetLastError()); //发送ARP查询包获得远程MAC地址 
    unsigned char macAddress[6]; 
    ULONG macAddLen = 6; 
    iRet = SendARP( nRemoteAddr, NULL, (PULONG)&macAddress,&macAddLen ); 
    if ( iRet == NO_ERROR ) 

     printf( "MacAddress: " ); 
     for( int i =0; i<6; i++ ) 
     { 
      printf( "%.2x", macAddress ); 
      if ( i<5 ) printf( "-" ); 
     } 

    else 
     printf( "SendARP Error:%d\n", GetLastError() ); 
    printf( "\n" );