局域网枚举主机的方法

Night 2009-04-12 10:55:13
小弟最近想做一个局域网文件传输的软件,
需要获得局域网内所有的主机的IP,有人说可以枚举局域网主机,然后我在对其进行握手连接,但是现在不知道该如何下手,也不知道相应的函数,希望各位帮忙点拨一二,最好能有实例代码,不胜感激!!
...全文
69 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
ylywyn136 2009-04-13
  • 打赏
  • 举报
回复

InitWinSock();
struct hostent *host;

DWORD dwScope = RESOURCE_CONTEXT;
NETRESOURCE *netResource = NULL;
HANDLE hEnum;
WNetOpenEnum(dwScope, NULL, NULL, NULL, &hEnum);

if (hEnum)
{
DWORD count = 0xFFFFFFFF;
DWORD bufferSize = 2048;
LPVOID buffer = new _TCHAR[2048];
WNetEnumResource(hEnum, &count, buffer, &bufferSize);
netResource = (NETRESOURCE*)buffer;

char hostName[200];
hostName[0] = '\0';
gethostname(hostName, sizeof(hostName));
printf("Host Name:%s\n", hostName);

for(UINT i = 0; i < bufferSize / sizeof(NETRESOURCE); i++, netResource++)
{
if(netResource->dwUsage == RESOURCEUSAGE_CONTAINER && netResource->dwType == RESOURCETYPE_ANY)
{
if(netResource->lpRemoteName)
{
LPTSTR fullName = netResource->lpRemoteName;

if(fullName[0] == '\\' && fullName[1] == '\\')
{
fullName = fullName + 2;
}

host = gethostbyname(fullName);

if(host == NULL)
continue;

printf("Client:\t%s\n\t%s\n", fullName, inet_ntoa(*(struct in_addr *)host->h_addr_list[0]));
}
}
}

delete buffer;
WNetCloseEnum( hEnum );
}

CleanupWinSock();

babyding 2009-04-13
  • 打赏
  • 举报
回复
ARP扫描,你可以知道局域网里所有IP-MAC地址对应的情况,不过你要知道这个局域网的网段是什么,在这个网段扫描到所有活动主机。
Night 2009-04-13
  • 打赏
  • 举报
回复
老大我用了你的代码但是检测不到主机啊 ,这是怎么回事
bragi523 2009-04-13
  • 打赏
  • 举报
回复
我觉得可以广播
XP局域网共享设置图文教程 局域网共享是个头疼的问题,只要找到的正确的设置方法,其实也很简单。原版也需要 设置,否则也不能进行共享! 第一章:共享的前提工作: 1.更改不同的计算机名,设置相同的工作组! 2.我的电脑右键-管理-计算机管理-本地用户和组-用户:更改管理员用户名 3.手动设置IP,将ip设置在同一个网段,子网掩码和DNS解析相同及选上Microsoft网络 的文件和打印机共享; 4.如何设置DNS解析:首先你可以使用自动获取,然后在开始-运行里面输入cmd后回车 ,在命令里面输入ipconfig/all后回车 5.运行里输入services.msc回车打开服务 第二章:共享的准备工作(注意设置完成后最好重启一下生效): 1.开始-设置-控制面板-防火墙-例外-勾选"文件和打印机共享"!当然你也可以关 闭防火墙。 2.运行里面输入secpol.msc回车进入本地安全设置-本地策略-安全选项 将"网络访问:不允许SAM账户的匿名枚举"停用 注意此点只对来宾起效,将在第六章说到。 将"账户:使用空白密码的本地账户只允许进行控制台登录"停用 3.双击我的电脑打开资源管理器-工具-文件夹选项-查看-将"使用简单的文件夹共享 "前面的勾去除! 4.设置共享文件夹或共享盘符(我这里设置D盘为共享盘符,当然你可以自己设置磁盘里 面的任意文件夹为共享文件) 打开资源管理器-右键D盘-共享和安全-左键点选打开 注意:经过上两个图的共享资源设置,偶们进入对方的机子只有"只读"权限,只能看不 能动的哦! 这可是XP默认的这安全性呵呵!当然你可以设置完全控制。这样你就可以为所欲为了哈 哈。 第三章:用管理员登录的局域网共享方式 经过上面两章的设置,我们已经可以访问计算机today了 1.在主机中双击网上邻居-点击查看工作组计算机 2.双击today或是右键打开 3.还有一个更快捷的访问方法就是在主机的地址栏里面直接输入\\today后回车,出现的 界面和上面相同。 4.在登录框输入用户名play和密码(这里密码为空,所以不用输入),确定后就进入to day的共享盘符了 小提示:以后我们再次登录today的时候就不用再输入用户名和密码了呵呵 第四章:以来宾登录的局域网共享方式 经过第一和第二两章的设置,我们还要进一步设置才能做到来宾共享 1."我的电脑"右键-管理-本地用户和组-用户-启用来宾(注意:在这里启用来宾的 效果和在控制面板-用户账户里面启用来宾是一样的。区别就是在此启用后面板里面的 来宾还是显示没有启用的,而在面板里面启用来宾的话这里也就启用了。) 2..运行里输入secpol.msc启动"本地安全设置"-"用户权利指派"-将"拒绝从网络访问 这台计算机"里面的guest用户删除。 3.运行里输入secpol.msc启动"本地安全设置"-"安全选项"-"网络访问:本地账户的共 享和安全模式"-将"经典"改为"仅来宾"。 4.运行里输入secpol.msc启动"本地安全设置"-"用户权利指派"-将"拒绝作为服务器和 批作业"里面的用户删除 注意:以上设置需重启后生效 5.我们现在可以象第三章的进入方法进入today的共享资源了。 区别就是来宾登录的共享方式没有弹出登录框,不用输入用户名和密码就可以直接进入 了。 小提示:从以上的设置方法我们可以看出,管理员登录的共享方式是狭义的共享,而来 宾登录的共享方式就是广义的共享。 可以这么说:来宾共享里面已经包含了管理员共享的方式。不过启用来宾登录的方式就 去除了管理员登录的方式了呵呵 第五章:用磁盘映射,将today的共享资源直接映射到主机中。 以后在主机资源管理器里面就可以直接打开了。前提就是today在局域网内也必须开机。 1.在主机中右键"网上邻居"-点选"映射网络驱动器" 2.浏览today的共享盘符 3.完成后在主机里面出现了today的共享盘符 第六章:局域网访问常见的故障及解决方法 1.访问对方电脑时不弹出用户名框,打不开对方电脑上的共享文件夹 原因为本机的管理员用户名为Administrator,将其改为任意名即可! 注意:这个现象是用来宾登录的共享方式才会出现的。! 2.访问对方机子时,登录对话框中的用户名始终为灰色的guest不可选 解决方法:本地策略-安全选项-"网络访问:本地账户的共享和安全模式"改为"经典- 本地用户以自己的身份验证"即可! 注意:以上这种现象是用来宾登录的共享方式以后,我们不注意禁用了来宾才出现的。禁 用了来宾后我们就变成了以管理员登录的共享方式了呵呵! 3.以管理员登录的共享方式登录对方的机子时出现没有权限使用网络资源的现象 这是我们正常的共享使用之中因为在安装某些安全软件的时候给关闭了。我们只要再次 把"使用简单的文件共享"前面的勾去除即可

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧