在一个nbt内,可以用
nbtstat -A [ipaddr]获得机器名称;用
ping -a [ipaddr]得到的不是我所想要的;请问有什么工具或api可以实现这个功能吗?

解决方案 »

  1.   

    struct HOSTENT FAR * gethostbyaddr (
      const char FAR * addr,  
      int len,                
      int type                
    );
      

  2.   

    举个例子吧, 我用nbtstatC:\>nbtstat -A 166.111.227.2本地连接:
    Node IpAddress: [166.111.227.140] Scope Id: []           NetBIOS Remote Machine Name Table       Name               Type         Status
        ---------------------------------------------
        HU-JXBWQBDBXBHH<00>  UNIQUE      Registered
        ...用 pingC:\>ping -a 166.111.227.2Pinging tu227002.tsinghua.edu.cn [166.111.227.2] with 32 bytes of data:Reply from 166.111.227.2: bytes=32 time=10ms TTL=128
    ...用gethostbyaddr(), 得到的是ping的结果, 就是tu227002.tsinghua.edu.cn; 但我希望能返回nbtstat的结果: HU-JXBWQBDBXBHH, 因为tu227002.tsinghua.edu.cn好像是系统自动加的(我也不知道怎么描述), HU-JXBWQBDBXBHH才是自己在系统/属性中设置的;可是用nbtstat只能对同一个nbt的才能获得机器名, 如果不在一个nbt内, 有方法获得机器名吗?
      

  3.   

    CString CFindComputerDlg::GetHostNameByIP(char cIP[])
    {
    CString strHostName;
    struct hostent * pHost; 
    WSADATA wsaData;
    WSAStartup(0x202, &wsaData );

    pHost = gethostbyaddr(cIP,4,AF_INET);
    int nErrCode = WSAGetLastError();
    if(nErrCode)
    {
    AfxMessageBox(_T("Searching is failed!"));
    WSACleanup();
    return _T("");
    }
    strHostName = pHost->h_name;
    WSACleanup();
    return strHostName;
    }