[英]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.