我是有一终端,现在不知道它的IP,但是这个终端可能和我的计算机不在同一网段,如果写个程序用ping的原理来实现,用的时间太长,有点不现实,我想请教一下高手,看看有没有它更好的可行方法!
解决方案 »
- 程序走到BroadcastSystemMessage就不走了,怎么回事?
- 关于<<c++编程思想>>的源码和答案
- 为什么我下载的API 参考手册都没有 SHELL API ,例如 SHGetFileInfo()
- 急求:获取MAC地址的程序写好了,但运行时获取不到?
- 今天活见鬼了,郁闷
- 用MFC或API怎样在桌面背景上写几个字?
- *****UP有分!!!关于CFileDialog的使用!!!******
- 调试dll时的问题!
- atl和com的朋友看过来!!
- 请问各位vc高手
- 在不同网段不知道终端名,怎么才能知道它的IP地址?请高手帮忙分不够再加!
- 如何在对话框中使用tool bar 添加一个tool bar之后,怎么设置?
如果能够连接到你计算机, 就可以得到它的连接信息的啊!
不知道IP, 不知道计算机名字, 无从ping起的啊.
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);
}
}
}
}