如何获得一个局域网(同一个网段)内的所有ip地址和主机名?

dawndu 2003-11-21 12:36:14
具体用什么函数先知道ip,然后通过ip得到主机名
...全文
9264 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
ablefirst 2003-11-26
  • 打赏
  • 举报
回复
看来只能PING了,多线程。
nail63547188 2003-11-26
  • 打赏
  • 举报
回复
gz,up
dawndu 2003-11-26
  • 打赏
  • 举报
回复
挺难说的,我要是网关都没有,怎么办?每个机器还要开启snmp服务吧?
shootingstars 2003-11-25
  • 打赏
  • 举报
回复
ping当然只是众多方法中间的一种,任何一种方式都不是万能的。
读取分析MIB库,看似好办法,但是同样存在问题:
一:并非所有设备都支持snmp。
二:读取分析MIB库工作量太大,需要大量的网络设备测试。
changlele 2003-11-25
  • 打赏
  • 举报
回复
to:楼上那些多线程并且用Ping来实现的人们
这并不是一个可行的方法,如果我把ping服务(防火墙级别设成关闭ping服务)给关了,谁能给出更好的方法,是不是只能研究最底层网络服务了
其实楼上njtlxm(njtlxm) 说的方法应该可行的(结合snmp)
yintongshun 2003-11-25
  • 打赏
  • 举报
回复
以前写的有个例子,不知道你的EMail
shootingstars 2003-11-25
  • 打赏
  • 举报
回复
楼上似乎有什么话想说又没有说出口,不知道njtlxm(njtlxm)说的:
1、并不是说开多少个线程的问题 (那是什么问题?)
2、建议多研究一下多线程的机制

多线程机制?什么机制?多线程不就是用于这种目的吗?
多线程就是为了尽量提高CPU和各种资源的利用率,在这里使用多线程是再恰当不过,不知道njtlxm(njtlxm)对此到底有什么异议.
njtlxm 2003-11-25
  • 打赏
  • 举报
回复
1、并不是说开多少个线程的问题
2、建议多研究一下多线程的机制
njtlxm 2003-11-25
  • 打赏
  • 举报
回复
另外还可以参考fluke 的one touch,看看它的搜索机制
njtlxm 2003-11-25
  • 打赏
  • 举报
回复
我认为,就这个任务而言,对于一个网段,使用多线程PING没有任何优势,在单cpu的计算机上与单线程没有什么区别.

当然,如果要全部检查一个网段的IP地址,使用结合snmp不能大幅度地缩短搜索时间.

但是,结合snmp能够在很短的时间内准确而有效地列举大多数IP地址.

第一个snmp广播包,只需要一个,就会得到本网段内所有支持snmp计算机的响应.比如说10个.

再去读取这10个计算机的MIB库(每个计算机发一个snmp Get请求),就能得到访问过这些计算机的其他IP地址.

这样在短时间内可以得到网段内重要设备的IP地址信息,在GUI显示方面可以让用户立即看到这些信息,其余的可以逐个PING验证.

shootingstars 2003-11-24
  • 打赏
  • 举报
回复
开一百个线程,每个线程ping一个ip(ping3次),每次ping的超时时间为1秒,那么检测一个IP地址的时间是3秒,考虑并行工作,检测100个IP地址的时间也大概是3秒。
检测一个255个主机地址的网段用不了10秒(考虑到启动线程的时间等其他消耗)。

这个速度并不慢。。。
njtlxm 2003-11-24
  • 打赏
  • 举报
回复
to dawndu(东南飞) :

你这个问题实际上不是“如何”而是“如何更好”,是不是?

最保险的办法是逐个ping,但是这样效率较低。

我认为优化一些的办法是结合snmp,因为一个局域网中应该有网关,而网关大多支持snmp协议。

首先是发出一个全网广播的snmp,此时会立即得到所有支持snmp的主机的回应。

然后再读取这些主机的MIB库,呵呵,接下来自己分析去。

shootingstars 2003-11-24
  • 打赏
  • 举报
回复
开255×100个线程并不现实,但是开100个线程实在不多。流光就是开的100个线程进行的网络扫描。

我自己就做过150个线程的,这对于Win2000来说并没有什么不可行的。
njtlxm 2003-11-24
  • 打赏
  • 举报
回复
楼上的真是高人!

按此计算,一个B类网段,只需要开255×100个线程,同样也是10秒钟搞定。

甚是佩服!

NicholasXu 2003-11-23
  • 打赏
  • 举报
回复
gethostbyaddr()探测不存在的IP好像特别慢!有没有同感???
ynstudio 2003-11-22
  • 打赏
  • 举报
回复
没办法,有的时候把问题写出来,好象自己才能得到解决,我早发现了。你实验的如何了?
dawndu 2003-11-21
  • 打赏
  • 举报
回复
说实话,在csdn我问问题还从来没有得到过满意的答复,最后解决问题还是靠自己。
可能这样说是伤了大家的感情,但是这的确是事实。
dawndu 2003-11-21
  • 打赏
  • 举报
回复
changlele(梦幻水晶) 下面的代码经过测试,希望对你有用,发现最近好像很多人都在问这个问题,好用就给我加分,枚举网络中的所有计算机(我拿CList测试一下,你可以拿别的测试)
-------------------------------

WNetEnumResource我早就用过了,我写的比你的要全
WNetEnumResource这个东西只可以获得网上邻居里面的的所有计算机,网络邻居也有看不到的主机,你怎么办?
我看只能一个一个ping,然后通过ip得到主机名,怎么通过ip得到主机名,gethostbyaddr也不知道可以不可以,先试一下在说
studyingpersons 2003-11-21
  • 打赏
  • 举报
回复
谢谢楼主,我有学了一招!!!
t0mychen 2003-11-21
  • 打赏
  • 举报
回复
看一下PING。Cpp的源代码,(注意-a)这参数,网上这代码太多了
加载更多回复(4)

18,356

社区成员

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

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