Как определить, какой MAC-адрес является MAC-адресом WIFI, а какой IP-адрес является IP-адресом WIFI? - PullRequest
1 голос
/ 16 сентября 2011

У меня есть следующие функции:

Эта функция будет получать все IP-адреса с локального компьютера.

void GetIP()
{
WORD wVersionRequested;
WSADATA wsaData;
char name[ 255 ];
PHOSTENT hostinfo;
wVersionRequested = MAKEWORD( 1, 1 );
char *ip;

if ( WSAStartup( wVersionRequested, &wsaData ) == 0 )
{
    if( gethostname ( name, sizeof( name ) ) == 0 )
    {
        if ( ( hostinfo = gethostbyname( name ) ) != NULL )
        {
            int nCount = 0;
            while ( hostinfo->h_addr_list[ nCount ] )
            {
                ip = inet_ntoa( *(struct in_addr *)hostinfo->h_addr_list[ nCount ] );

                //printf( "IP #%d: %s\n", ++nCount, ip );
                printf( "IP                 : %s\n", ip );
                ++nCount;
            }
        }
    }
}
}//GetIP

А вот моя вторая функция, которая будет получать каждый MAC-адрес с локальной машины:

void GetMACaddress()
{
IP_ADAPTER_INFO AdapterInfo[ 16 ];              // Allocate information for up to 16 NICs
DWORD dwBufLen = sizeof( AdapterInfo );         // Save the memory size of buffer

DWORD dwStatus = GetAdaptersInfo(               // Call GetAdapterInfo
                                        AdapterInfo,// [out] buffer to receive data
                                        &dwBufLen   // [in] size of receive data buffer
                                    );  

    assert( dwStatus == ERROR_SUCCESS );            // Verify return value is valid, no buffer overflow

    PIP_ADAPTER_INFO pAdapterInfo = AdapterInfo;    // Contains pointer to current adapter info

    do 
    {
        printf( "MAC                : %02X:%02X:%02X:%02X:%02X:%02X\n", pAdapterInfo->Address[ 0 ], 
                                                                    pAdapterInfo->Address[ 1 ], 
                                                                    pAdapterInfo->Address[ 2 ], 
                                                                    pAdapterInfo->Address[ 3 ], 
                                                                    pAdapterInfo->Address[ 4 ], 
                                                                    pAdapterInfo->Address[ 5 ]  );
                    pAdapterInfo = pAdapterInfo->Next;          // Progress through linked list

    }while( pAdapterInfo );                         // Terminate if last adapter
}//GetMACaddress

Итак, мой вопрос: Как я узнаю, принадлежит ли запрашиваемый MAC-адрес и запрашиваемый IP-адрес WiFi?

Спасибо!

Ответы [ 2 ]

1 голос
/ 17 сентября 2011

Этот код, который вы используете для запроса MAC-адресов, также выбирает тип интерфейса.

Начиная с Vista, для интерфейса WiFi, поле Type будет IF_TYPE_IEEE80211 Youтакже может идентифицировать коммутируемые (MIB_IF_TYPE_PPP) соединения и виртуальные интерфейсы обратной связи (MIB_IF_TYPE_LOOPBACK).

Как Реми говорит , вам следует извлечь IP-адреса из той же структуры данных(есть поле IpAddressList).

0 голосов
/ 17 сентября 2011

Вы можете использовать GetAdaptersInfo() и GetAdaptersAddresses() для получения IP-адресов, а также MAC-адресов. Недавно я обнаружил, что, хотя обычно используется (даже мое), использование gethostname() и gethostbyname() может время от времени возвращать вводящие в заблуждение данные, поскольку gethostbyname() является поиском DNS и может возвращать адреса, которые на самом деле не локальны, если имя хоста имеет дополнительные Настройки DNS настроены (балансировка нагрузки и т. Д.). GetAdaptersInfo() и GetAdaptersAddresses() возвращают только локальные настройки.

В любом случае, API не предоставляют информацию о том, является ли сетевой адаптер LAN, WAN, WiFi и т. Д. Операционная система на самом деле не нуждается в этой информации, и вы не должны. Все, что его волнует, это то, что данный адаптер обеспечивает доступ к данной сети. То, как это происходит, является частной реализацией и зависит от устройства. Вы можете использовать адаптеры взаимозаменяемо, не беспокоясь о том, какие они типы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...