我是有一终端,现在不知道它的IP,但是这个终端可能和我的计算机不在同一网段,如果写个程序用ping的原理来实现,用的时间太长,有点不现实,我想请教一下高手,看看有没有它更好的可行方法!

解决方案 »

  1.   

    用PING吧,可能是最直接、有效的方法。
      

  2.   

    你说的终端是什么意思啊?
    如果能够连接到你计算机, 就可以得到它的连接信息的啊!
    不知道IP, 不知道计算机名字, 无从ping起的啊.
      

  3.   

    用ARP考虑一下看能不能实现?
      

  4.   

    如果对那台主机一无所知的话就不好办,枚举所有的存活的IP倒是可以,但是具体哪个IP才是你想要的,就要自己去想办法了
      

  5.   

    //获得指定网卡序号的Mac地址
    void CGetMacAddrDlg::GetOneMac(int AdapterIndex)
    {
        NCB ncb;
        UCHAR uRetCode;
    ASTAT Adapter;
        memset( &ncb, 0, sizeof(ncb) );
        ncb.ncb_command = NCBRESET;
        ncb.ncb_lana_num = AdapterIndex;   // 指定网卡号

    //首先对选定的网卡发送一个NCBRESET命令,以便进行初始化 
    uRetCode = Netbios( &ncb );    memset( &ncb, 0, sizeof(ncb) );
        ncb.ncb_command = NCBASTAT;
        ncb.ncb_lana_num = AdapterIndex;  // 指定网卡号    strcpy( (char *)ncb.ncb_callname,"*" );
    // 指定返回的信息存放的变量 
        ncb.ncb_buffer = (unsigned char *) &Adapter;
    ncb.ncb_length = sizeof(Adapter); // 发送NCBASTAT命令以获取网卡的信息 
    uRetCode = Netbios( &ncb );
        if ( uRetCode == 0 )
        {
    // 把网卡MAC地址格式化成常用的16进制形式,如0010-A4E4-5802 
    CString strMacAddr;
    strMacAddr.Format( "%02X%02X-%02X%02X-%02X%02X\n",
    Adapter.adapt.adapter_address[0],
    Adapter.adapt.adapter_address[1],
    Adapter.adapt.adapter_address[2],
    Adapter.adapt.adapter_address[3],
    Adapter.adapt.adapter_address[4],
    Adapter.adapt.adapter_address[5] ); //将网卡地址和序号存入数组中
    ADPTSTRCT AdptSt;
    AdptSt.nIndex = AdapterIndex;
    AdptSt.strMac = strMacAddr;
    m_arrAdapters.Add(AdptSt);
        }
    }
    void CGetMacAddrDlg::OnGetaddr() 
    {
    NCB Ncb; 
        UCHAR uRetCode; 
    LANA_ENUM lenum; 
    int i = 0; 

    memset(&Ncb, 0, sizeof(Ncb)); 
    Ncb.ncb_command = NCBENUM; 
    Ncb.ncb_buffer = (UCHAR *)&lenum; 
    Ncb.ncb_length = sizeof(lenum);  //向网卡发送NCBENUM命令,以获取当前机器的网卡信息,如有多少个网卡、每张网卡的编号等 
    uRetCode = Netbios( &Ncb ); 
    //获得所有网卡信息
    for(i=0; i < lenum.length ;i++)
    {
    GetOneMac(lenum.lana[i]);
    }

    //将保存到数组中的所有网卡信息在列表中显示
    int iActualItem;
    LV_ITEM lvitem;
    TCHAR buffer[128];
    for(int iItem=0;iItem<m_arrAdapters.GetSize();iItem++)
    {
    for(int iSubItem=0;iSubItem<2;iSubItem++)
    {
    lvitem.mask = LVIF_TEXT|(iSubItem == 0? LVIF_IMAGE : 0);
    lvitem.iItem = (iSubItem == 0)? iItem : iActualItem;
    lvitem.iSubItem = iSubItem;
    lvitem.iImage = (iItem%2)?0:2;

    if (iSubItem == 0)
    {//序号
    sprintf(buffer,"%d", m_arrAdapters.GetAt(iItem).nIndex);
    lvitem.pszText = buffer;
    iActualItem = m_ctrlAdaptersLst.InsertItem(&lvitem);
    }
    else
    {//Mac地址
    sprintf(buffer,"%s",m_arrAdapters.GetAt(iItem).strMac);
    lvitem.pszText = buffer;
    m_ctrlAdaptersLst.SetItem(&lvitem);
    }
    }
    }
         
    }