Как определить физический NIC? - PullRequest
0 голосов
/ 28 февраля 2019

Мне нужно определить IP-адрес физической сетевой карты для привязки к сокету, потому что моему приложению нужно связываться только по Ethernet (только по физической сетевой карте).

Я использовал GetAdaptersInfo () чтобы получить список адаптеров и показать информацию об адаптере vEthernet.

Итак, как отличить информацию о физическом адаптере.

Мой код здесь. ( Источник кода )

#include "pch.h"
#include <iostream>
#include <winsock2.h>
#include <iphlpapi.h>
#include <stdlib.h>
#pragma comment(lib, "IPHLPAPI.lib")
#include <Windows.h>


int main()
{
    IP_ADAPTER_INFO  *pAdapterInfo;
    ULONG            ulOutBufLen;
    DWORD            dwRetVal;

    pAdapterInfo = (IP_ADAPTER_INFO *)malloc(sizeof(IP_ADAPTER_INFO));
    ulOutBufLen = sizeof(IP_ADAPTER_INFO);


    if (GetAdaptersInfo(pAdapterInfo, &ulOutBufLen) != ERROR_SUCCESS) {
        free(pAdapterInfo);
        pAdapterInfo = (IP_ADAPTER_INFO *)malloc(ulOutBufLen);
    }

    if ((dwRetVal = GetAdaptersInfo(pAdapterInfo, &ulOutBufLen)) != ERROR_SUCCESS) {
        printf("GetAdaptersInfo call failed with %d\n", dwRetVal);
    }

    PIP_ADAPTER_INFO pAdapter = pAdapterInfo;
    while (pAdapter) {
        if (pAdapter->Type == MIB_IF_TYPE_ETHERNET)
        {
            if (pAdapter->DhcpEnabled) {
                printf("\tDHCP Enabled: Yes\n");
                printf("\t\tDHCP Server: \t%s\n", pAdapter->DhcpServer.IpAddress.String);
            }
            else
                printf("\tDHCP Enabled: No\n");

            printf("\t***\n");

            printf("Adapter Name: %s\n", pAdapter->AdapterName);
            printf("Adapter Desc: %s\n", pAdapter->Description);
            printf("\tAdapter Addr: \t");
            for (UINT 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("IP Address: %s\n", pAdapter->IpAddressList.IpAddress.String);
            printf("IP Mask: %s\n", pAdapter->IpAddressList.IpMask.String);
            printf("\tGateway: \t%s\n", pAdapter->GatewayList.IpAddress.String);


            if (pAdapter->Type == MIB_IF_TYPE_ETHERNET)
                printf("\tIt's an Ethernet NIC\n");
            else if (pAdapter->Type == IF_TYPE_IEEE80211)
                printf("\tIt's an Wifi NIC\n");
        }
        pAdapter = pAdapter->Next;

    }
    getchar();
}

Спасибо.

...