hostent
gethostbyaddr?
还是什么

解决方案 »

  1.   

    获得远程机器名和工作组名代码如下。楼主可参考用UDP协议,向对方的137端口发送这一串:
    BYTE bs[50]={0x0,0x00,0x0,0x10,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x20,0x43,0x4b,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x0,0x0,0x21,0x0,0x1};
    然后接收500个字节的数据,就什么都有啦,比如对方网卡序列号,当前用户,工作组,机器名等,接收到后的分析代码如下:这个代码在VC知识库里有,
    void CNBTSTATDlg::OnReceive()
    {

    BYTE Buf[500];
    //m_UDPSocket.Receive(Buf,500,0); CString str,strIP,strHost,strHex,strMac,Host,Group,User;
    UINT dport;
    m_UDPSocket.ReceiveFrom(Buf,500,strIP,dport,0); if(strIP==(char)NULL||strIP==strOldIP)return;
    strOldIP=strIP; int index=m_ListView.InsertItem(0,strIP); strHost="";
    strHex="";
    User="?";
    Host="\\";

    int tem=0,num=0;
    bool bAdd=true; //if(m_strIP==strIP)
    for(i=57;i<500;i++) //57-72
    {
    if(Buf[i]==0xcc)break; 
    if(Buf[i]==0x20)bAdd=false;
    if(bAdd)
    {
    str.Format("%c",Buf[i]);
    if(Buf[i]>=' ')strHost+=str; str.Format("%02x.",Buf[i]);
    strHex+=str;
    } if((++tem)%18==0)
    {
                bAdd=true; 
    //m_ListBox.AddString(strHost);//
    strHost.TrimRight((char)NULL);
    if(strHost=="")
    {
        strMac.Delete(17,strMac.GetLength()-17);
    m_ListView.SetItem(index,4,LVIF_TEXT,strMac, 0, 0, 0,0);
    break;
    }
    if(num==0&&strHost!="")
    {
    m_ListView.SetItem(index,2,LVIF_TEXT,strHost, 0, 0, 0,0);
    Host=strHost;
    num++;
    }
    else
    {
    if(Host!=strHost&&num==1&&strHost!="")
    {
    m_ListView.SetItem(index,1,LVIF_TEXT,strHost, 0, 0, 0,0);
    Group=strHost;
    //AfxMessageBox(strHost);
        num++;
    }
    else 
    {
    if(strHost!=Host&&strHost!=Group&&num==2&&strHost!="")
    {
    User=strHost;
    if(User!="__MSBROWSE__")
    {
    m_ListView.SetItem(index,3,LVIF_TEXT,User, 0, 0, 0,0);
    num++;
    }
    //num++;
    }
    } }

    strMac=strHex;
    strHost="";
    strHex="";

    }

    }
    SetEvent(wait_handle);
    }