int CheckAdapterType(char *adaptername)
{
try
{
LPADAPTER hAdapter;
char openadaptername[512]; memset(openadaptername,'\0',sizeof(openadaptername));
strcpy(openadaptername,"\\Device\\NPF_");
strcat(openadaptername,adaptername); hAdapter = PacketOpenAdapter(openadaptername);
if (!hAdapter || (hAdapter->hFile == INVALID_HANDLE_VALUE))
return 2; PPACKET_OID_DATA OidData = (PPACKET_OID_DATA)malloc(512);
if (OidData == NULL)
{
free(OidData);
PacketCloseAdapter(hAdapter);
return 2;
} OidData->Oid = OID_802_3_CURRENT_ADDRESS;
OidData->Length = 256;
ZeroMemory(OidData->Data, 256);
if (!PacketRequest(hAdapter, FALSE, OidData))
{
free(OidData);
PacketCloseAdapter(hAdapter);
return 2;
}
CString str;
str = OidData->Data;
int adalen;
adalen = str.GetLength();
PacketCloseAdapter(hAdapter);
free(OidData);
if (adalen==0) return 0 ; else return 1;
}
catch(CException e)
{
return 2;
}
}
上面是我自己瞎琢磨出的一个区分虚拟网卡和物理网卡的方法;
adalen==0是物理网卡,adalen>=1是虚拟网卡;实际使用中,该方法不太可靠啊;经常会错误的分辨物理网卡和虚拟网卡;Ntddndis.h中,申明了非常多的OID,不知道哪个能分辨虚拟网卡和物理网卡?或者大家有其他的好建议能分辨此2者!
{
try
{
LPADAPTER hAdapter;
char openadaptername[512]; memset(openadaptername,'\0',sizeof(openadaptername));
strcpy(openadaptername,"\\Device\\NPF_");
strcat(openadaptername,adaptername); hAdapter = PacketOpenAdapter(openadaptername);
if (!hAdapter || (hAdapter->hFile == INVALID_HANDLE_VALUE))
return 2; PPACKET_OID_DATA OidData = (PPACKET_OID_DATA)malloc(512);
if (OidData == NULL)
{
free(OidData);
PacketCloseAdapter(hAdapter);
return 2;
} OidData->Oid = OID_802_3_CURRENT_ADDRESS;
OidData->Length = 256;
ZeroMemory(OidData->Data, 256);
if (!PacketRequest(hAdapter, FALSE, OidData))
{
free(OidData);
PacketCloseAdapter(hAdapter);
return 2;
}
CString str;
str = OidData->Data;
int adalen;
adalen = str.GetLength();
PacketCloseAdapter(hAdapter);
free(OidData);
if (adalen==0) return 0 ; else return 1;
}
catch(CException e)
{
return 2;
}
}
上面是我自己瞎琢磨出的一个区分虚拟网卡和物理网卡的方法;
adalen==0是物理网卡,adalen>=1是虚拟网卡;实际使用中,该方法不太可靠啊;经常会错误的分辨物理网卡和虚拟网卡;Ntddndis.h中,申明了非常多的OID,不知道哪个能分辨虚拟网卡和物理网卡?或者大家有其他的好建议能分辨此2者!
ggz
我也想知道
MIB_IF_TYPE_ETHERNET
MIB_IF_TYPE_TOKENRING
MIB_IF_TYPE_FDDI
MIB_IF_TYPE_PPP
MIB_IF_TYPE_LOOPBACK
MIB_IF_TYPE_SLIP ??
呵呵,不太会,不知道对不对
用GetAdapterInfo得到的就是一个网卡啊
可能包含多个网卡的信息