利用C++编程实现检测一台计算机上多张网卡与其他外接设备的网络连接状态

vc实现检测计算机上所有网络的连接状态,显示网络连接名字,IP地址,MAC地址等等信息

该回答引用ChatGPT-3.5

以下是用C++实现检测计算机上所有网络连接状态的示例代码:

#include <iostream>
#include <windows.h>
#include <iphlpapi.h>
#include <stdio.h>
#pragma comment(lib, "IPHLPAPI.lib")
using namespace std;

int main()
{
    DWORD dwRetVal = 0;
    ULONG ulOutBufLen = sizeof(IP_ADAPTER_INFO);
    PIP_ADAPTER_INFO pAdapterInfo = (IP_ADAPTER_INFO *)malloc(sizeof(IP_ADAPTER_INFO));
    if (pAdapterInfo == NULL) {
        printf("Error allocating memory needed to call GetAdaptersinfo\n");
        return 1;
    }

    // Make an initial call to GetAdaptersInfo to get the necessary size of buffer
    dwRetVal = GetAdaptersInfo(pAdapterInfo, &ulOutBufLen);
    if (dwRetVal == ERROR_BUFFER_OVERFLOW) {
        free(pAdapterInfo);
        pAdapterInfo = (IP_ADAPTER_INFO *)malloc(ulOutBufLen);
        if (pAdapterInfo == NULL) {
            printf("Error allocating memory needed to call GetAdaptersinfo\n");
            return 1;
        }
        dwRetVal = GetAdaptersInfo(pAdapterInfo, &ulOutBufLen);
    }
    if (dwRetVal != NO_ERROR) {
        printf("GetAdaptersInfo failed with error: %d\n", dwRetVal);
        return 1;
    }

    PIP_ADAPTER_INFO pAdapter = pAdapterInfo;
    while (pAdapter) {
        printf("Network Connection Name: %s\n", pAdapter->AdapterName);
        printf("IP Address: %s\n", pAdapter->IpAddressList.IpAddress.String);
        printf("Subnet Mask: %s\n", pAdapter->IpAddressList.IpMask.String);
        printf("Default Gateway: %s\n", pAdapter->GatewayList.IpAddress.String);
        printf("MAC Address: ");
        for (int i = 0; i < pAdapter->AddressLength; i++) {
            if (i == (pAdapter->AddressLength - 1)) {
                printf("%.2X\n", (int)pAdapter->Address[i]);
            } else {
                printf("%.2X-", (int)pAdapter->Address[i]);
            }
        }
        printf("\n");
        pAdapter = pAdapter->Next;
    }
    free(pAdapterInfo);
    return 0;
}

代码通过使用Windows API中的GetAdaptersInfo函数来获取计算机上所有网络连接的信息,包括连接名字、IP地址、子网掩码、默认网关和MAC地址。然后通过遍历返回的链表打印出这些信息。