扫描局域网内的其他计算机

本代码可以获取局域网内的其他计算机的名称和ip地址。

如图所示:本地IP地址为:10.128.8.176.而通过程序枚举出如下的局域网内的计算机信息。对于这些计算机,在不联网的情况下,我通过ping的方式,可以与这些计算机ping通,说明这些计算机是真实存在在局域网的范畴内。

核心代码:

void CEnumHostsDlg::EnumHosts(CStringArray& list)
{
	//先清空列表
	list.RemoveAll();

	CString strTemp;	
	struct hostent *host;
	struct in_addr *ptr;	// 获得IP地址 	

	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 = 2048;
		LPVOID Buffer = new char[2048];
		// 调用WSAStartup后调用WNetEnumResource做进一步的枚举工作
		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 ) );
					//由主机名获得跟它对应的主机信息
					host = gethostbyname(strFullName);
					if(host == NULL) continue; 
					ptr = (struct in_addr *) host->h_addr_list[0];					

					// 提取IP地址信息,地址形式如下: 211.40.35.76 				
					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

					strTemp.Format("%s -->  %d.%d.%d.%d",strFullName,a,b,c,d);
					// 加入到链表中
					list.Add(strTemp);
				}
			}
		}
		delete Buffer;
		// 结束枚举工作
		WNetCloseEnum( hEnum );	
	}

	// 卸载Winsock.dll
	WSACleanup();

}

详细代码在:http://download.csdn.net/detail/u010951938/9461509

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值