void CenumhostsDlg::OnBnClickedEnum(){ // TODO: 在此添加控件通知处理程序代码 GetDlgItem(IDC_ENUM)->EnableWindow(false);
CStringArray list; EnumHosts(list); CListBox* pList=(CListBox*)GetDlgItem(IDC_LIST); pList->ResetContent(); pList->AddString("枚举结果如下"); for(int i=0;i<list.GetSize();i++) pList->AddString(list.GetAt(i));
GetDlgItem(IDC_ENUM)->EnableWindow(true);
}
void CenumhostsDlg::EnumHosts(CStringArray& list){ list.RemoveAll();
CString strTemp; struct hostent *host; struct in_addr* ptr; DWORD dwScope=RESOURCE_CONTEXT; NETRESOURCE *NetResource=NULL; HANDLE hEnum; WNetOpenEnum(dwScope,NULL,NULL,NULL,&hEnum);
WSADATA wsaData; WSAStartup(MAKEWORD(2,2),&wsaData); if(hEnum) { DWORD Count=0xFFFFFFFF; DWORD BufferSize=8192; LPVOID Buffer=new char[8192];
WNetEnumResource(hEnum,&Count,Buffer,&BufferSize); NetResource=(NETRESOURCE*)Buffer; char szHostName[200]; for(unsigned int i=0;i<BufferSize/sizeof(NETRESOURCE);i++,NetResource++) { if(NetResource->dwUsage==RESOURCEUSAGE_CONTAINER && NetResource->dwType==RESOURCETYPE_ANY) { // if(NetResource->lpRemoteName) // { CString strFullName=NetResource->lpRemoteName; if(0==strFullName.Left(2).Compare("")) strFullName=strFullName.Right(strFullName.GetLength()-2); //gethostname(szHostName,strlen(szHostName)); //TRACE("%s/n",szHostName); host=gethostbyname(strFullName); if(host==NULL)continue; ptr=(struct in_addr*)host->h_addr_list[0];
int 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; strTemp.Format("%s-->%d.%d.%d.%d",strFullName,a,b,c,d); list.Add(strTemp); // } } } delete Buffer; WNetCloseEnum(hEnum); } WSACleanup();
