我的电脑上有一块有线网卡和一块无线网卡,在程序里我怎么判断一个IP地址是有线网卡还是无线网卡的 我的电脑上有一块有线网卡和一块无线网卡,在程序里我怎么判断一个IP地址是有线网卡还是无线网卡的 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 对呀,根据IP地址取出MAC地址不就知道了? GetAdaptersInfo看看这个函数行不行 //获得指定网卡序号的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); } } } } 由ip地址得到mac地址 和网卡类型,这样可以判断了啊! 求教高手:Debug Assertion Failed 怎么让VC在指针对象后输入-> 出现对象成员提示? Link 出现问题,求救 为什么我的键盘只触发一次就不好用了呢 当有文件新建或修改时,我怎样才能知道是哪个进程执行这些操作? 大型服务器设计的讨论(参加讨论者就送分) 如何在Visual C++中判断一个进程是正常终了,还是异常终了? COM的接口函数为什么不能传递HANDLE型变量,怎么才能将此类型变量传进去,初学者的疑问,各位老大帮忙!!! 请教:CScrollBar类的重写,需要改变滚动条的外形 谁能解决此问题? 祝大家中秋快乐! COM组件注册时,弹出对话框,大家帮忙看看啊啊
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);
}
}
{
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);
}
}
}
}