Windows中通过ipconfig获得网卡信息
来源:互联网 发布:淘宝创业综合 编辑:程序博客网 时间:2024/06/10 18:46
我们在网络程序设计中有时可能会用MAC地址,如果我们用VC++的话可以用UCHAR Netbios(
PNCB pncb /* pointer to the network control block*/)获取;但是我在实际的应用过程中发现它并不是每次都管用的.在一个有无线网卡的笔记本上,我一个装有虚拟机的笔记本上都现我了获取不到MAC的情况,也许我对这个函数的用法没有深入了解吧!
我借用了JAVA程序在通用的一种获取MAC的方法,借用IPCONFIG来获得所有网卡的信息。下面我们就来看一下具体方法。
首先我们定义一个结构用于保存网卡信息:
typedef struct _tagAdapterInfo{
CString Description;//网卡描述
CString PhysicalAddr;//MAC
CString IpAddr[64];//IP地址最多64个
CString SubnetMask[64];//每个IP对的掩码最多64个
CString Gateway;//默认网关
LONG lIpNum;//网卡对应的IP数
}AdapterInfo,*PAdapterInfo;
我们定义一个获得本机所有网卡信息的方法:
int GetAllAdapterInfo(CArray<AdapterInfo,AdapterInfo>& AdapterInfoList,
CString& Error);
下面让我们来看一下实现:
int CTestDlg::GetAllAdapterInfo(
CArray<AdapterInfo,AdapterInfo>& AdapterInfoList,CString Error)
{
HANDLE hRead,hWrite;//定义输入输出句柄
CString strError;//错误信息
CString strCon,strBuf;
BOOL nReturn;
char buffer[2048]={0};
LPSTR p="ipconfig /all";
unsigned long lnReadNum;
int nIndex=0,from=0,to=0,nLoop=0;
STARTUPINFO sa;
PROCESS_INFORMATION pinfo;
SECURITY_ATTRIBUTES saPipe;
saPipe.nLength= sizeof( SECURITY_ATTRIBUTES );
saPipe.lpSecurityDescriptor = NULL;
saPipe.bInheritHandle = TRUE;
if (!CreatePipe(&hRead,&hWrite,&saPipe,0))//创建管道
{
strError.Format("CREATE PIPE ERRORCODE:%d",GetLastError());
Error=strError;
return 1;
}
memset( &sa, 0, sizeof(sa));
sa.cb=sizeof(sa);
sa.dwFlags=STARTF_USESHOWWINDOW |STARTF_USESTDHANDLES;
sa.wShowWindow = SW_HIDE;
sa.hStdOutput=hWrite;
sa.hStdError=hWrite;
//建立进程
nReturn=::CreateProcess(NULL,p,&saPipe,&saPipe,
TRUE,0,NULL,NULL,&sa,&pinfo);
if (!nReturn)
{
strError.Format("CREATE PROCESS ERRORCODE:%d",GetLastError());
Error=strError;
return 2;
}
//Sleep(1000);
CloseHandle( pinfo.hThread );
CloseHandle( pinfo.hProcess );
CloseHandle( hWrite);
//读即管道的输出
do{
memset(buffer,0,2048);
nReturn=ReadFile(hRead,buffer,MAX_PATH,&lnReadNum,NULL);
if (nReturn)
{
strBuf.Format("%s",buffer);
strCon+=strBuf;
}
}while(nReturn&&lnReadNum);
AdapterInfo info;
//输出信息里查找网卡信息
do
{
nIndex=strCon.Find("Description",nIndex);
if (nIndex<=-1)
{
break;
}
from=strCon.Find(":",nIndex)+2;
to=strCon.Find("/n",from);
info.Description=strCon.Mid(from,to-from-1);
nIndex=to;
nIndex=strCon.Find("Physical Address",nIndex);
from=strCon.Find(":",nIndex)+2;
to=strCon.Find("/n",from);
info.PhysicalAddr=strCon.Mid(from,to-from-1);
nIndex=to;
nLoop=0;
while(nLoop<64)
{
nIndex=strCon.Find("IP Address",nIndex);
if (nIndex<=-1)
{
break;
}
from=strCon.Find(":",nIndex)+2;
to=strCon.Find("/n",from);
info.IpAddr[nLoop]=strCon.Mid(from,to-from-1);
nIndex=to;
nIndex=strCon.Find("Subnet Mask",nIndex);
from=strCon.Find(":",nIndex)+2;
to=strCon.Find("/n",from);
info.SubnetMask[nLoop]=strCon.Mid(from,to-from-1);
nLoop++;
}
info.lIpNum=nLoop;
nIndex=to;
nIndex=strCon.Find("Default Gateway",nIndex);
from=strCon.Find(":",nIndex)+2;
to=strCon.Find("/n",from);
info.Gateway=strCon.Mid(from,to-from-1);
AdapterInfoList.Add(info);
}while(TRUE);
return 0;
}
方法只是管道的一种最基本的应用,拿来与大家分享一下!另外我们还可以用IP帮助函数来获得IP
- Windows中通过ipconfig获得网卡信息
- Jpcap获得网卡信息
- 获得计算机网卡信息
- vc获得网卡流量信息
- 编程获得本地网卡信息
- vc获得网卡流量信息
- C++获得所有网卡信息
- 通过WMI获得网卡MAC地址,硬盘序号,主板序号等硬件信息
- 获得网络接口信息和网卡信息
- [CF.Skills]C#中如何通过RIL获得基站信息
- C#中如何通过RIL获得基站信息
- ASP.net中通过GridViewCommandEventArgs获得当前行的信息
- Java中通过反射获得对象的属性信息
- Java中通过反射获得对象的属性信息
- Java调用ipconfig打印网卡信息和本机的MAC地址
- WINCE 获得无线网卡相关信息
- 通过WMI获得硬件信息
- windows下获取网卡信息
- 上投摩根亚太优势股票型基金
- SCJP考题4
- 干掉xp的防火墙(ICS)(支持win2003)
- BSTR、char*和CString转换
- Delphi7动态调用chm帮助文件,并使之打开指定的页面
- Windows中通过ipconfig获得网卡信息
- SCJP考题5
- 螺旋队列(转发)
- 一个算符文法分析的实现
- 让你的Windows2000和DOS7.0共存
- 制作dos7.0
- SCJP考题6
- 李阳疯狂英语突破对话(24)-我帮不上你的忙
- SCJP考题7