C++ socket实现获取局域网IP&MAC

来源:互联网 发布:网络语言暴力的例子 编辑:程序博客网 时间:2024/05/22 02:11

 

CString GetIp(){CString lstrv_IP = _T("");CString strSubResource = _T("");struct in_addr *ptr;struct hostent *host;DWORD dwScope = RESOURCE_CONTEXT;NETRESOURCE *NetResource = NULL;HANDLE hEnum;WSADATA wsaData;WSAStartup( MAKEWORD( 1,1 ),&wsaData );WNetOpenEnum( dwScope,NULL,NULL,NULL,&hEnum );if( hEnum ) {DWORD Count = 0xFFFFFFFF;DWORD BufferSize = 2048;LPVOID Buffer = new char[ 2048 ];WNetEnumResource( hEnum,&Count,Buffer,&BufferSize );NetResource = ( NETRESOURCE * )Buffer;for( unsigned int i = 0; i < Count; i++, NetResource++ ) {if( NetResource->lpRemoteName ) {strSubResource.Empty();}CString strFullName = NetResource->lpRemoteName;if( 0 == strFullName.Left(2).Compare( "\\\\" ) ) strFullName = strFullName.Right( strFullName.GetLength() - 2 );host = gethostbyname(strFullName);if(  NULL != host){ptr = ( struct in_addr * )host->h_addr_list[ 0 ];// Get IPint a = ptr->S_un.S_un_b.s_b1;int b = ptr->S_un.S_un_b.s_b2;int c = ptr->S_un.S_un_b.s_b3;int d = ptr->S_un.S_un_b.s_b4;lstrv_IP.Format( _T("%d.%d.%d.%d"),a,b,c,d );}delete Buffer;}}WNetCloseEnum( hEnum );WSACleanup();return lstrv_IP;}
原创粉丝点击