首页 > 代码库 > 获取网卡信息

获取网卡信息

方法一:(msdn)

#include <tchar.h> #include <windows.h>#include <wincon.h>#include <stdlib.h>#include <stdio.h>#pragma comment(lib,"netapi32.lib")typedef struct _ASTAT_{   ADAPTER_STATUS adapt;   NAME_BUFFER    NameBuff [30];}ASTAT, * PASTAT;ASTAT Adapter;int main(int argc, char* argv[]){     NCB Ncb;      UCHAR uRetCode;      LANA_ENUM   lenum;      int      i;      memset( &Ncb, 0, sizeof(Ncb) );      Ncb.ncb_command = NCBENUM;      Ncb.ncb_buffer = (UCHAR *)&lenum;      Ncb.ncb_length = sizeof(lenum);      uRetCode = Netbios( &Ncb );      printf( "The NCBENUM return code is: 0x%x \n", uRetCode );      for(i=0; i < lenum.length ;i++)       {          memset( &Ncb, 0, sizeof(Ncb) );          Ncb.ncb_command = NCBRESET;          Ncb.ncb_lana_num = lenum.lana[i];          uRetCode = Netbios( &Ncb );          printf( "The NCBRESET on LANA %d return code is: 0x%x \n",                  lenum.lana, uRetCode );          memset( &Ncb, 0, sizeof (Ncb) );          Ncb.ncb_command = NCBASTAT;          Ncb.ncb_lana_num = lenum.lana[i];          strcpy( (char *)Ncb.ncb_callname,  "*               " );          Ncb.ncb_buffer = (unsigned char *) &Adapter;          Ncb.ncb_length = sizeof(Adapter);          uRetCode = Netbios( &Ncb );          printf( "The NCBASTAT on LANA %d return code is: 0x%x \n",                  lenum.lana, uRetCode );          if ( uRetCode == 0 )            {             printf( "The Ethernet Number on LANA %d is:%02x%02x%02x%02x%02x%02x\n",                  lenum.lana,                  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] );             }         }    system("pause");    return 0;}

方法二:(msdn)

#include <winsock2.h>#include <iphlpapi.h>#include <stdio.h>#include <stdlib.h>// Link with Iphlpapi.lib#pragma comment(lib, "IPHLPAPI.lib")#define WORKING_BUFFER_SIZE 15000#define MAX_TRIES 3#define MALLOC(x) HeapAlloc(GetProcessHeap(), 0, (x))#define FREE(x) HeapFree(GetProcessHeap(), 0, (x))/* Note: could also use malloc() and free() */int __cdecl main(int argc, char **argv){    /* Declare and initialize variables */    DWORD dwSize = 0;    DWORD dwRetVal = 0;    unsigned int i = 0;    // Set the flags to pass to GetAdaptersAddresses    ULONG flags = GAA_FLAG_INCLUDE_PREFIX;    // default to unspecified address family (both)    ULONG family = AF_UNSPEC;    LPVOID lpMsgBuf = NULL;    PIP_ADAPTER_ADDRESSES pAddresses = NULL;    ULONG outBufLen = 0;    ULONG Iterations = 0;    PIP_ADAPTER_ADDRESSES pCurrAddresses = NULL;    PIP_ADAPTER_UNICAST_ADDRESS pUnicast = NULL;    PIP_ADAPTER_ANYCAST_ADDRESS pAnycast = NULL;    PIP_ADAPTER_MULTICAST_ADDRESS pMulticast = NULL;    IP_ADAPTER_DNS_SERVER_ADDRESS *pDnServer = NULL;    IP_ADAPTER_PREFIX *pPrefix = NULL;    if (argc != 2) {        printf(" Usage: getadapteraddresses family\n");        printf("        getadapteraddresses 4 (for IPv4)\n");        printf("        getadapteraddresses 6 (for IPv6)\n");        printf("        getadapteraddresses A (for both IPv4 and IPv6)\n");        exit(1);    }    if (atoi(argv[1]) == 4)        family = AF_INET;    else if (atoi(argv[1]) == 6)        family = AF_INET6;    printf("Calling GetAdaptersAddresses function with family = ");    if (family == AF_INET)        printf("AF_INET\n");    if (family == AF_INET6)        printf("AF_INET6\n");    if (family == AF_UNSPEC)        printf("AF_UNSPEC\n\n");    // Allocate a 15 KB buffer to start with.    outBufLen = WORKING_BUFFER_SIZE;    do {        pAddresses = (IP_ADAPTER_ADDRESSES *) MALLOC(outBufLen);        if (pAddresses == NULL) {            printf                ("Memory allocation failed for IP_ADAPTER_ADDRESSES struct\n");            exit(1);        }        dwRetVal =            GetAdaptersAddresses(family, flags, NULL, pAddresses, &outBufLen);        if (dwRetVal == ERROR_BUFFER_OVERFLOW) {            FREE(pAddresses);            pAddresses = NULL;        } else {            break;        }        Iterations++;    } while ((dwRetVal == ERROR_BUFFER_OVERFLOW) && (Iterations < MAX_TRIES));    if (dwRetVal == NO_ERROR) {        // If successful, output some information from the data we received        pCurrAddresses = pAddresses;        while (pCurrAddresses) {            printf("\tLength of the IP_ADAPTER_ADDRESS struct: %ld\n",                   pCurrAddresses->Length);            printf("\tIfIndex (IPv4 interface): %u\n", pCurrAddresses->IfIndex);            printf("\tAdapter name: %s\n", pCurrAddresses->AdapterName);            pUnicast = pCurrAddresses->FirstUnicastAddress;            if (pUnicast != NULL) {                for (i = 0; pUnicast != NULL; i++)                    pUnicast = pUnicast->Next;                printf("\tNumber of Unicast Addresses: %d\n", i);            } else                printf("\tNo Unicast Addresses\n");            pAnycast = pCurrAddresses->FirstAnycastAddress;            if (pAnycast) {                for (i = 0; pAnycast != NULL; i++)                    pAnycast = pAnycast->Next;                printf("\tNumber of Anycast Addresses: %d\n", i);            } else                printf("\tNo Anycast Addresses\n");            pMulticast = pCurrAddresses->FirstMulticastAddress;            if (pMulticast) {                for (i = 0; pMulticast != NULL; i++)                    pMulticast = pMulticast->Next;                printf("\tNumber of Multicast Addresses: %d\n", i);            } else                printf("\tNo Multicast Addresses\n");            pDnServer = pCurrAddresses->FirstDnsServerAddress;            if (pDnServer) {                for (i = 0; pDnServer != NULL; i++)                    pDnServer = pDnServer->Next;                printf("\tNumber of DNS Server Addresses: %d\n", i);            } else                printf("\tNo DNS Server Addresses\n");            printf("\tDNS Suffix: %wS\n", pCurrAddresses->DnsSuffix);            printf("\tDescription: %wS\n", pCurrAddresses->Description);            printf("\tFriendly name: %wS\n", pCurrAddresses->FriendlyName);            if (pCurrAddresses->PhysicalAddressLength != 0) {                printf("\tPhysical address: ");                for (i = 0; i < (int) pCurrAddresses->PhysicalAddressLength;                     i++) {                    if (i == (pCurrAddresses->PhysicalAddressLength - 1))                        printf("%.2X\n",                               (int) pCurrAddresses->PhysicalAddress[i]);                    else                        printf("%.2X-",                               (int) pCurrAddresses->PhysicalAddress[i]);                }            }            printf("\tFlags: %ld\n", pCurrAddresses->Flags);            printf("\tMtu: %lu\n", pCurrAddresses->Mtu);            printf("\tIfType: %ld\n", pCurrAddresses->IfType);            printf("\tOperStatus: %ld\n", pCurrAddresses->OperStatus);            printf("\tIpv6IfIndex (IPv6 interface): %u\n",                   pCurrAddresses->Ipv6IfIndex);            printf("\tZoneIndices (hex): ");            for (i = 0; i < 16; i++)                printf("%lx ", pCurrAddresses->ZoneIndices[i]);            printf("\n");            printf("\tTransmit link speed: %I64u\n", pCurrAddresses->TransmitLinkSpeed);            printf("\tReceive link speed: %I64u\n", pCurrAddresses->ReceiveLinkSpeed);            pPrefix = pCurrAddresses->FirstPrefix;            if (pPrefix) {                for (i = 0; pPrefix != NULL; i++)                    pPrefix = pPrefix->Next;                printf("\tNumber of IP Adapter Prefix entries: %d\n", i);            } else                printf("\tNumber of IP Adapter Prefix entries: 0\n");            printf("\n");            pCurrAddresses = pCurrAddresses->Next;        }    } else {        printf("Call to GetAdaptersAddresses failed with error: %d\n",               dwRetVal);        if (dwRetVal == ERROR_NO_DATA)            printf("\tNo addresses were found for the requested parameters\n");        else {            if (FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |                    FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,                     NULL, dwRetVal, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),                       // Default language                    (LPTSTR) & lpMsgBuf, 0, NULL)) {                printf("\tError: %s", lpMsgBuf);                LocalFree(lpMsgBuf);                if (pAddresses)                    FREE(pAddresses);                exit(1);            }        }    }    if (pAddresses) {        FREE(pAddresses);    }    return 0;}