扫描在线设备(优化)

icmp是目前最便捷通用的判断主机是否在线的方式。说更浅显一点就是ping.

自己写一个ping,就是使用socket向目标发送icmp数据包,根据收到的icmp数据包中的类型,代码字段判断ping的主机是否在线。(在线的含义为,与请求主机在互相可达的网络中,并且tcp/ip协议正常安装运行)

实现上面这个步骤是基础。下面要优化获取一个网段的主机了!

使用逐一ping的方式固然可以完成这个工作。但是,试想,如果一个192.168.1.0/24的网络,只有192.168.1.254在线,二其他主机都不可达,那么要每一个读等到超时后,再判断下一个主机在线?

这种令人不快的结果似乎在tcp协议中就有现成的解决方案。没错——滑动窗口。

滑动窗口的精髓,就是在发送出去一个package之后,异步的发送下一个package,直到发送数量达到窗口大小;等收到一个Package之后,就可以移动窗口,继续发送下一个package了。以此来避免阻塞,等待。



OK,基于这样的设计,可以使用fd_set这样的读写选择结构,源码中可以看到fd_set的空间限制是64个file_handle,所以一次开启的读监听socket为64个以内。当收到其中一个的回响后,发送新的icmp包,继续在fd_set上阻塞。那么之前的假设便是:1-64耗费4秒钟(4秒钟超时),65-128耗费4秒钟,129-192耗费4秒钟,193-254耗费4秒钟。并最终成功得到254在线的信息。

使用先人的智慧,运用在今天的问题上。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值