Windows C++获取网卡适配器接口信息
#include <pcap.h>
#ifdef _MSC_VER
#include <WinSock2.h>
#include <Iphlpapi.h>
#pragma comment(lib,"Iphlpapi.lib")
#endif
std::vector<std::string> getLocalMachineNetworkAdapterList()
{
pcap_if_t *alldevs;
pcap_if_t *d;
int i = 0;
pcap_addr_t *a;
char errbuf[PCAP_ERRBUF_SIZE];
std::vector<std::string> vecAdapter;
if (pcap_findalldevs(&alldevs, errbuf) == -1)
{
return vecAdapter;
}
for (d = alldevs; d; d = d->next)
{
++i;
if (d->description)
;
else
;
for (a = d->addresses; a; a = a->next)
{
if (!isAddressUnspecified(boost::asio::ip::address::from_string(inet_ntoa(((struct sockaddr_in *)a->addr)->sin_addr))))
{
vecAdapter.push_back(std::string(d->description) + std::string(" ") + std::string(inet_ntoa(((struct sockaddr_in *)a->addr)->sin_addr)));
}
else
{
vecAdapter.push_back(std::string(d->description) + std::string(" ") + std::string("X.X.X.X"));
}
}
}
if (i == 0)
{
printlog("\ngetLocalMachineNetworkAdapterList:No NetWork interfaces found! Make sure WinPcap is installed.");
return vecAdapter;
}
pcap_freealldevs(alldevs);
return vecAdapter;
}
std::vector<std::string> getLocalMachineNetworkAdapterDspnameList()
{
std::vector<std::string> names;
#ifdef _MSC_VER
PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();
unsigned long stSize = sizeof(IP_ADAPTER_INFO);
int nRel = GetAdaptersInfo(pIpAdapterInfo, &stSize);
int netCardNum = 0;
int IPnumPerNetCard = 0;
if (ERROR_BUFFER_OVERFLOW == nRel)
{
delete pIpAdapterInfo;
pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];
nRel = GetAdaptersInfo(pIpAdapterInfo, &stSize);
}
if (ERROR_SUCCESS == nRel)
{
while (pIpAdapterInfo)
{
names.push_back(std::string(pIpAdapterInfo->Description) + std::string(":") + std::string(pIpAdapterInfo->AdapterName));
pIpAdapterInfo = pIpAdapterInfo->Next;
}
}
if (pIpAdapterInfo)
{
delete pIpAdapterInfo;
}
#endif
return names;
}