获得局域网内IP地址和主机名

源代码:

#pragma comment(lib,"Mpr.lib")   //否则编译不能通过

void GetNameAndIp(CStringArray& NameArray,CStringArray& IpArray)
{
 NameArray.RemoveAll();
 IpArray.RemoveAll();

 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(1,1),&wsaData);  
    
 if(hEnum)
 {
  DWORD   Count  = 0xFFFFFFFF;
  DWORD   BufferSize = 10240;  
  LPVOID   Buffer  =  new char[10240];  
  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(_T("\\\\")))
      strFullName  =  strFullName.Right(strFullName.GetLength()-2);
      gethostname(szHostName,strlen(szHostName));
      USES_CONVERSION;
      char *pchar = strFullName.GetBuffer();
      host = gethostbyname(pchar);  
    
     if(host   ==   NULL)   continue;    
     ptr   =   (struct in_addr *)   host->h_addr_list[0]; 
         
      int   a   =   ptr->S_un.S_un_b.s_b1;     //   211  
      int   b   =   ptr->S_un.S_un_b.s_b2;     //   40  
      int   c   =   ptr->S_un.S_un_b.s_b3;     //   35  
      int   d   =   ptr->S_un.S_un_b.s_b4;     //   76  
      CString   strTemp;  
      strTemp.Format(_T("%d.%d.%d.%d"),a,b,c,d);
      NameArray.Add(strFullName);
      IpArray.Add(strTemp);  
    }
   }
  }
  delete   Buffer;  
  WNetCloseEnum(hEnum);  
  }   
  WSACleanup();    
}

客户端就可以调用GetNameAndIp接口来获得所有的ip地址和主机名:

CString csName;
CString csIp;

CStringArray m_csNameArray;
CStringArray m_csIpArray;


GetNameAndIp(m_csNameArray,m_csIpArray);
 for(int i=0;i<m_csNameArray.GetCount();i++)
 {
  csName = m_csNameArray.GetAt(i);
  csIp = m_csIpArray.GetAt(i);
  }

 

在一个局域网内测试发现,局域网内有的PC没有找到,调查发现因为这些PC不在同一个工作组。

右击我的电脑-〉属性->计算机名 查看工作组是不是在同一个组内。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值