zoukankan      html  css  js  c++  java
  • 获取网卡信息

    方法一:(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 
    ", 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 
    ",
                      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 
    ",
                      lenum.lana, uRetCode );
              if ( uRetCode == 0 )
                {
                 printf( "The Ethernet Number on LANA %d is:%02x%02x%02x%02x%02x%02x
    ",
                      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
    ");
            printf("        getadapteraddresses 4 (for IPv4)
    ");
            printf("        getadapteraddresses 6 (for IPv6)
    ");
            printf("        getadapteraddresses A (for both IPv4 and IPv6)
    ");
            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
    ");
        if (family == AF_INET6)
            printf("AF_INET6
    ");
        if (family == AF_UNSPEC)
            printf("AF_UNSPEC
    
    ");
    
        // 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
    ");
                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("	Length of the IP_ADAPTER_ADDRESS struct: %ld
    ",
                       pCurrAddresses->Length);
                printf("	IfIndex (IPv4 interface): %u
    ", pCurrAddresses->IfIndex);
                printf("	Adapter name: %s
    ", pCurrAddresses->AdapterName);
    
                pUnicast = pCurrAddresses->FirstUnicastAddress;
                if (pUnicast != NULL) {
                    for (i = 0; pUnicast != NULL; i++)
                        pUnicast = pUnicast->Next;
                    printf("	Number of Unicast Addresses: %d
    ", i);
                } else
                    printf("	No Unicast Addresses
    ");
    
                pAnycast = pCurrAddresses->FirstAnycastAddress;
                if (pAnycast) {
                    for (i = 0; pAnycast != NULL; i++)
                        pAnycast = pAnycast->Next;
                    printf("	Number of Anycast Addresses: %d
    ", i);
                } else
                    printf("	No Anycast Addresses
    ");
    
                pMulticast = pCurrAddresses->FirstMulticastAddress;
                if (pMulticast) {
                    for (i = 0; pMulticast != NULL; i++)
                        pMulticast = pMulticast->Next;
                    printf("	Number of Multicast Addresses: %d
    ", i);
                } else
                    printf("	No Multicast Addresses
    ");
    
                pDnServer = pCurrAddresses->FirstDnsServerAddress;
                if (pDnServer) {
                    for (i = 0; pDnServer != NULL; i++)
                        pDnServer = pDnServer->Next;
                    printf("	Number of DNS Server Addresses: %d
    ", i);
                } else
                    printf("	No DNS Server Addresses
    ");
    
                printf("	DNS Suffix: %wS
    ", pCurrAddresses->DnsSuffix);
                printf("	Description: %wS
    ", pCurrAddresses->Description);
                printf("	Friendly name: %wS
    ", pCurrAddresses->FriendlyName);
    
                if (pCurrAddresses->PhysicalAddressLength != 0) {
                    printf("	Physical address: ");
                    for (i = 0; i < (int) pCurrAddresses->PhysicalAddressLength;
                         i++) {
                        if (i == (pCurrAddresses->PhysicalAddressLength - 1))
                            printf("%.2X
    ",
                                   (int) pCurrAddresses->PhysicalAddress[i]);
                        else
                            printf("%.2X-",
                                   (int) pCurrAddresses->PhysicalAddress[i]);
                    }
                }
                printf("	Flags: %ld
    ", pCurrAddresses->Flags);
                printf("	Mtu: %lu
    ", pCurrAddresses->Mtu);
                printf("	IfType: %ld
    ", pCurrAddresses->IfType);
                printf("	OperStatus: %ld
    ", pCurrAddresses->OperStatus);
                printf("	Ipv6IfIndex (IPv6 interface): %u
    ",
                       pCurrAddresses->Ipv6IfIndex);
                printf("	ZoneIndices (hex): ");
                for (i = 0; i < 16; i++)
                    printf("%lx ", pCurrAddresses->ZoneIndices[i]);
                printf("
    ");
    
                printf("	Transmit link speed: %I64u
    ", pCurrAddresses->TransmitLinkSpeed);
                printf("	Receive link speed: %I64u
    ", pCurrAddresses->ReceiveLinkSpeed);
    
                pPrefix = pCurrAddresses->FirstPrefix;
                if (pPrefix) {
                    for (i = 0; pPrefix != NULL; i++)
                        pPrefix = pPrefix->Next;
                    printf("	Number of IP Adapter Prefix entries: %d
    ", i);
                } else
                    printf("	Number of IP Adapter Prefix entries: 0
    ");
    
                printf("
    ");
    
                pCurrAddresses = pCurrAddresses->Next;
            }
        } else {
            printf("Call to GetAdaptersAddresses failed with error: %d
    ",
                   dwRetVal);
            if (dwRetVal == ERROR_NO_DATA)
                printf("	No addresses were found for the requested parameters
    ");
            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("	Error: %s", lpMsgBuf);
                    LocalFree(lpMsgBuf);
                    if (pAddresses)
                        FREE(pAddresses);
                    exit(1);
                }
            }
        }
    
        if (pAddresses) {
            FREE(pAddresses);
        }
    
        return 0;
    }
  • 相关阅读:
    雨课堂知识点总结(六)
    软件构造雨课堂知识点总结(五)
    软件构造雨课堂知识点总结(四)
    软件构造雨课堂知识点总结(三)
    0-N-0计数的优化写法
    Nginx TP5环境配置
    小程序跳转H5及其他页面
    mysql中varchar类型和datetime类型字段进行比较
    微信小程序开发者工具更新后报很多错误
    php后台解决跨域
  • 原文地址:https://www.cnblogs.com/duyy/p/3892362.html
Copyright © 2011-2022 走看看