当前位置:我的异常网» VC/MFC » 获取局域网内在线的所有主机名及其IP地址解决方案
获取局域网内在线的所有主机名及其IP地址解决方案
www.myexceptions.net 网友分享于:2013-02-02 浏览:689次
获取局域网内在线的所有主机名及其IP地址
获取局域网内在线的所有主机名及其IP地址
Author:swun911
blog.sina.com.cn/swun
偶想搜索到局域网内所有在线的主机并获得其地址,使用了API的WNetEnumResource和gethostbyname。实现倒是实现了,可就是特别的慢,请指教。不知道各位高手有什么妙招,请赐教!
My Emai:56557833@qq.com
我实现该目的部分的代码如下:
//**************************************************************************************
//获取主机名
do
{
EnumLocal = (LPNETRESOURCE) GlobalAlloc( GPTR, dwBuffer ) ;
dwResult = WNetEnumResource(hEnum,&dwEntries,EnumLocal,&dwBuffer);
if( dwResult == NO_ERROR )
{
int kyy=0;
for( register DWORD i = 0 ; i < dwEntries ; i++ )
{
CString Enumname;
Enumname = EnumLocal[i].lpRemoteName;
Enumname += " ";
Enumname +=EnumLocal[i].lpLocalName;
Enumname += " ";
Enumname +=EnumLocal[i].lpComment;
CString Filtrate = Enumname.Left(1);
if(Filtrate== '\\ ')
{
CString Inputname,IPAddress;
Inputname=Enumname.Right(Enumname.GetLength()-2);//去掉 "\\ "
Inputname=Inputname.SpanExcluding( " ");//去掉空格及其以后的部分
GetIPAddress(Inputname,IPAddress);
userinfo[kyy].h_name=Inputname;
userinfo[kyy].h_IPadd=IPAddress;
userinfo[kyy+1].h_name= "xxx ";
kyy++;
}
}
}
} while( dwResult != ERROR_NO_MORE_ITEMS );
//****************************************************************************
//IP地址
GetIPAddress(CString &HostName, CString &IPAddress)
{
struct hostent FAR *pIPHostEnt=gethostbyname(HostName);
if (pIPHostEnt==NULL)
{
IPAddress=_T( "获取地址失败! ");
return GetLastError();
}
LPSTR IPAddr=pIPHostEnt-> h_addr_list[0];
if(IPAddr)
{
struct in_addr inAddr;
memmove(&inAddr,IPAddr,4);
IPAddress=inet_ntoa(inAddr);
if(IPAddress.IsEmpty())
{
IPAddress=_T( "没有取得IP ");
AfxMessageBox(IPAddress);
}
}
return 0;
}
------解决方案--------------------
WSADATA wsaData;
文章评论