简单写了一个局域网探测工具。
前言
因为公司设备太多,偶尔遇到 IP 分配冲突问题,所以写了一个可视化的 GUI 小工具来快速排查掉已被占用的 IP 地址以及分析局域网概况,包括局域网主机延迟、在线状态、系统类型、主机名、Mac地址等。
成品展示
下载软件
文图介绍
通过设置要扫描的局域网 IP 段和起始结束数值即可开始扫描。

扫描后可以查看结果信息。

通过详细模式可以查看更多细节,以及分析局域网概况,包括局域网主机延迟、在线状态、系统类型、主机名、Mac地址等。

功能设想与实现
基础检测方案:
通过基础 Ping 功能对目标 IP 发出 ICMP 数据,以取得目标 IP 状态(是否在线、延迟)。
性能优化方案:
使用多线程+线程池方式调用检测,减小等待时间,提升运行效率。
代码逻辑
通过 C# 自带的 Net 实现基础 Ping 服务
1 | Ping ping = new Ping(); |
Ping 发送后,获取目标的状态信息。
1 | // 获取状态 |
至此一个基础的探测逻辑成功实现。
代码书写:
先创建一个实体类,用来存放状态信息。
1 | internal class StatusEntity |
现在要结合多线程与遍历设置的局域网 IP 范围进行获取遍历后的状态信息结果。
1 | int startRange = 1; //IPv4 第四段开始地址 |
PingHost() 为自封装方法,通过调用 PingHost(传入 IP 地址),然后将 Ping 结果存入 List 内。
1 | private BlockingCollection<StatusEntity> statusEntities = new BlockingCollection<StatusEntity>(); |
将结果渲染成 UI 展示给用户。
1 | // 所有线程结束后,渲染 UI。 |
后续更新方向
- 有些时候 Ping 可能也不能准确获取状态,比如防火墙拦截之类的。需要多个方案配合会更稳定。
- 增加更详细的 UI 状态显示。
#工具
8
#软件开发
8
#局域网
1