枚举局域网计算机

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();
 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值