繁体   English   中英

如何识别哪个MAC地址是WIFI MAC地址,哪个IP是WIFI IP地址?

[英]How to identify which MAC address is a WIFI MAC address, and which IP is a WIFI IP Address?

我具有以下功能:

此功能将从本地计算机获取每个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?

谢谢!

您用于查询MAC地址的代码也将获取接口类型。

从Vista开始, 对于WiFi接口,“ Type字段将为IF_TYPE_IEEE80211您还可以标识拨号( MIB_IF_TYPE_PPP )连接和回送( MIB_IF_TYPE_LOOPBACK )虚拟接口。

正如Remy所说 ,您应该从相同的数据结构(有一个IpAddressList字段)中提取IP地址。

您可以使用GetAdaptersInfo()GetAdaptersAddresses()来获取IP和MAC。 最近,我发现尽管使用gethostname()gethostbyname()尽管很常用(甚至是我本人),但由于gethostbyname()是DNS查找,有时会返回误导性数据,并且如果主机名包含其他内容,则返回的地址实际上不是本地地址DNS条目已配置(负载平衡等)。 GetAdaptersInfo()GetAdaptersAddresses()仅返回本地设置。

在任何情况下,API都不会公开有关网络适配器是否为LAN,WAN,WiFi等的信息。OS确实不需要该信息,您也不需要。 它只关心给定的适配器提供对给定网络的访问。 它是如何实现的,是私有实现细节和特定于设备的。 您可以互换使用适配器,而不必担心适配器的类型。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM