获取网卡信息(网卡MAC,ip,index,devicename)的一般方法(利用IP HELPER api)
来源:互联网 发布:数据库中查找学生名字 编辑:程序博客网 时间:2024/05/30 04:41
首先再头文件中加入
#include <Iphlpapi.h>
#pragma comment(lib,"Iphlpapi.lib")
#pragma comment(lib,"Iphlpapi.lib")
//以上表示引用一些必要的struct
typedef struct tagAdapterInfo
{
char szDeviceName[128]; // 名字
char szIPAddrStr[16]; // IP
char szHWAddrStr[18]; // MAC
DWORD dwIndex; // 编号
bool filled;//是否取得了网卡信息
}INFO_ADAPTER, *PINFO_ADAPTER;
{
char szDeviceName[128]; // 名字
char szIPAddrStr[16]; // IP
char szHWAddrStr[18]; // MAC
DWORD dwIndex; // 编号
bool filled;//是否取得了网卡信息
}INFO_ADAPTER, *PINFO_ADAPTER;
//以上是定义存储网卡信息的结构体
INFO_ADAPTER AdapterList[NetCardNumber];
//如果有多块网卡,分别取得每块的信息,结果放在上面的结构体数组中,其中NetCardNumber是#define的一个const
在源文件中加入下列函数
void CReadNetCardInfo::GetAdapterInfo()
{
char tempChar;
ULONG uListSize=1;
PIP_ADAPTER_INFO pAdapter; // 定义PIP_ADAPTER_INFO结构存储网卡信息
int nAdapterIndex = 0;
{
char tempChar;
ULONG uListSize=1;
PIP_ADAPTER_INFO pAdapter; // 定义PIP_ADAPTER_INFO结构存储网卡信息
int nAdapterIndex = 0;
DWORD dwRet = GetAdaptersInfo((PIP_ADAPTER_INFO)&tempChar, &uListSize); // 关键函数
if (dwRet == ERROR_BUFFER_OVERFLOW)
{
PIP_ADAPTER_INFO pAdapterListBuffer = (PIP_ADAPTER_INFO)new(char[uListSize]);
dwRet = GetAdaptersInfo(pAdapterListBuffer, &uListSize);
if (dwRet == ERROR_SUCCESS)
{
pAdapter = pAdapterListBuffer;
while (pAdapter) // 枚举网卡
{
CString strTemp;
//strTemp.Format(_T("%s"),pAdapter->AdapterName); // 网卡名字
//strTemp = CString("//Device//NPF_") + strTemp; // 加上前缀
//strcpy(AdapterList[nAdapterIndex].szDeviceName,strTemp);
//strcpy(AdapterList[nAdapterIndex].szIPAddrStr, pAdapter->IpAddressList.IpAddress.String );// IP
FormatMACToStr( AdapterList[nAdapterIndex].szHWAddrStr,pAdapter->Address ); // MAC!
AdapterList[nAdapterIndex].dwIndex = pAdapter->Index; // 编号
AdapterList[nAdapterIndex].filled = true;
pAdapter = pAdapter->Next;
nAdapterIndex ++;
}
delete pAdapterListBuffer;
}
}
}
if (dwRet == ERROR_BUFFER_OVERFLOW)
{
PIP_ADAPTER_INFO pAdapterListBuffer = (PIP_ADAPTER_INFO)new(char[uListSize]);
dwRet = GetAdaptersInfo(pAdapterListBuffer, &uListSize);
if (dwRet == ERROR_SUCCESS)
{
pAdapter = pAdapterListBuffer;
while (pAdapter) // 枚举网卡
{
CString strTemp;
//strTemp.Format(_T("%s"),pAdapter->AdapterName); // 网卡名字
//strTemp = CString("//Device//NPF_") + strTemp; // 加上前缀
//strcpy(AdapterList[nAdapterIndex].szDeviceName,strTemp);
//strcpy(AdapterList[nAdapterIndex].szIPAddrStr, pAdapter->IpAddressList.IpAddress.String );// IP
FormatMACToStr( AdapterList[nAdapterIndex].szHWAddrStr,pAdapter->Address ); // MAC!
AdapterList[nAdapterIndex].dwIndex = pAdapter->Index; // 编号
AdapterList[nAdapterIndex].filled = true;
pAdapter = pAdapter->Next;
nAdapterIndex ++;
}
delete pAdapterListBuffer;
}
}
}
/*所有的信息都放入了pAdapter中,我只取了网卡MAC,其余的注释掉了,FormatMACToStr是格式化函数,加入一些必要的格式化字符,看起来会漂亮一些,代码见下*/
void CReadNetCardInfo::FormatMACToStr(LPSTR lpHWAddrStr,const unsigned char *HWAddr)
{
int i;
short temp;
char szStr[3];
strcpy(lpHWAddrStr, "");
for (i=0; i<6; ++i)
{
temp = (short)(*(HWAddr + i));
_itoa(temp, szStr, 16);
if (strlen(szStr) == 1) strcat(lpHWAddrStr, "0");
strcat(lpHWAddrStr, szStr);
// if ( i < 5 ) strcat(lpHWAddrStr, "-"); // 加上 -
}
}
{
int i;
short temp;
char szStr[3];
strcpy(lpHWAddrStr, "");
for (i=0; i<6; ++i)
{
temp = (short)(*(HWAddr + i));
_itoa(temp, szStr, 16);
if (strlen(szStr) == 1) strcat(lpHWAddrStr, "0");
strcat(lpHWAddrStr, szStr);
// if ( i < 5 ) strcat(lpHWAddrStr, "-"); // 加上 -
}
}
//当运行完后,取得的信息放在了AdapterList里面,可以取来做其他用途。此篇文章是接上篇网卡MAC地址所写,因为发现上篇文章的方法有时候是不能取得网卡MAC地址的,这个方法就要可靠一些,当然,是不是万能的,我也不知道,以后慢慢试着用吧。
- 获取网卡信息(网卡MAC,ip,index,devicename)的一般方法(利用IP HELPER api)
- 使用IP Helper函数列出网卡信息MAC,IP。
- IP Helper API 简介与设置网卡的IP地址
- c# 获取所有网卡的信息(IP。MAC)
- 获取客户端网卡MAC地址和IP地址的方法
- 获取本机所有网卡的网卡名、网卡描述、网卡MAC地址、网卡IP、网卡类型等信息及网线是否插入状态
- c#获取网卡的ip等信息
- 如何获取网卡相关信息(包括mac, ip, mask, gateway等)?---利用GetAdaptersInfo
- Qt获取IP地址、MAC地址等网卡信息,区分本地网卡、无线网卡和虚拟网卡
- 获取网卡的mac和指定ip地址的mac
- C语言获取本地所有网卡的ip地址及MAC信息
- Qt: 取得网卡的MAC地址, IP等信息
- Qt: 取得网卡的MAC地址, IP等信息
- 读取网卡信息IP,MAC的GetAdaptersInfo函数
- 获取网卡IP与MAC地址
- java通过ip获取网卡MAC地址
- 获取网卡的MAC地址和IP地址
- js获取客户端网卡的IP地址、MAC地址
- 六级作文过关经典句型
- c实训!
- IA32浮点数的3种存储格式
- 关于程序,鄙人的一点感悟
- label中的文字换行显示
- 获取网卡信息(网卡MAC,ip,index,devicename)的一般方法(利用IP HELPER api)
- 累
- 获取系统网络MAC地址的三种方法
- -
- php中几个常用的函数
- 英语四六级作文五大模板
- 浅谈程序设计的艺术
- 找工近况
- Google Analytics和Yahoo统计对比