当前位置: 首页 > news >正文

局域网 IP 扫描工具 Ping IP 检查局域网设备

多线程局域网 IP 扫描工具:一键秒测,高效发现在线设备

你是否还在逐个 Ping IP 检查局域网设备?耗时久、效率低,错过关键在线设备?这款多线程 Ping 工具专为解决此痛点而生,让局域网扫描快如闪电!

核心优势

  • 多线程并发,速度飙升:摒弃单线程串行扫描,同时发起多个 Ping 请求,254 个 IP 地址扫描仅需数秒,效率提升 10 倍以上
  • 自动识别网段,无需手动配置:智能获取当前网络网关,自动解析局域网网段(如 192.168.1.x),小白也能轻松上手
  • 实时可视化结果:清晰标注在线设备(绿色 [+])与离线设备(红色 [-]),扫描过程实时呈现,结果一目了然
  • 线程安全设计:采用线程锁与 UI 调度机制,避免多线程冲突,确保程序稳定运行
  • 智能网段识别
    自动从无线/WiFi 适配器获取本机 IP 与子网掩码,无需手动输入网段,适配各类家庭或办公网络。

    高并发无卡顿
    通过线程池与信号量控制,并发 Ping 多个主机(默认 30 线程),30 秒内完成全网段扫描,同时保持 UI 流畅响应。

    精准结果输出
    实时显示 Ping 通的 IP 地址,支持日志记录与结果导出,便于后续 SSH 登录、服务探测或设备管理

适用场景

  • 网络管理员快速排查局域网在线设备
  • 家庭用户查找路由器连接的智能设备(摄像头、智能家居等)
  • 办公环境检测设备网络连通性
  • 渗透测试前期的局域网 recon 阶段

使用说明

  1. 运行程序,点击「开始扫描」按钮
  2. 工具自动获取当前网络网关与网段
  3. 实时显示扫描进度与结果
  4. 扫描完成后,汇总所有在线设备 IP 地址

技术特性

  • 基于 C# 异步编程模型,结合 Task.WhenAll 实现高效并发
  • 采用 Ping 类发送 ICMP 请求,超时时间可自定义(默认 1 秒)
  • 自动过滤 IPv6 与回环地址,聚焦有效局域网 IP
  • 支持批量扫描(默认每批 20 个 IP),平衡速度与网络压力
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Net;
    using System.Net.NetworkInformation;
    using System.Threading.Tasks;
    using System.Windows.Forms;public partial class YourForm : Form
    {private static readonly int MaxConcurrency = 30;public async void GetIp(){// 1. 自动获取当前 WLAN 适配器的 IPv4 和子网掩码(string ip, string mask) = GetLocalWlanIpAddressAndMask();if (string.IsNullOrEmpty(ip)){MessageBox.Show("未找到有效的无线局域网 IPv4 地址。", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);return;}// 2. 计算网段前缀(如 192.168.1)string networkPrefix = GetNetworkPrefix(ip, mask);if (string.IsNullOrEmpty(networkPrefix)){MessageBox.Show("无法计算网段,请检查网络配置。", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);return;}AppendToRichTextBox($"🔍 检测到网段: {networkPrefix}.0/24\n");AppendToRichTextBox($"📡 开始 Ping 扫描 {networkPrefix}.1 ~ {networkPrefix}.254...\n\n");var successfulIps = new List<string>();var semaphore = new SemaphoreSlim(MaxConcurrency, MaxConcurrency);var tasks = new List<Task>();richTextBox1.Clear(); // 可选:清空日志for (int i = 1; i <= 254; i++){int suffix = i;tasks.Add(Task.Run(async () =>{await semaphore.WaitAsync();try{string targetIp = $"{networkPrefix}.{suffix}";bool isSuccess = await PingIpAddress(targetIp);AppendToRichTextBox($"[XXX] {targetIp} ");if (isSuccess){AppendToRichTextBox($"[+++] {targetIp} 可以 Ping 通\n");lock (successfulIps){successfulIps.Add(targetIp);}}}finally{semaphore.Release();}}));}await Task.WhenAll(tasks);AppendToRichTextBox($"\n✅ 扫描完成!共发现 {successfulIps.Count} 个活跃主机。\n");// 可选:显示结果列表// successfulIps.ForEach(ip => AppendToRichTextBox($"- {ip}\n"));}// 获取无线适配器的 IPv4 地址和子网掩码private (string ip, string mask) GetLocalWlanIpAddressAndMask(){foreach (NetworkInterface ni in NetworkInterface.GetAllNetworkInterfaces()){// 只处理无线适配器,且状态为 UPif (ni.NetworkInterfaceType == NetworkInterfaceType.Wireless80211 &&ni.OperationalStatus == OperationalStatus.Up){foreach (UnicastIPAddressInformation ip in ni.GetIPProperties().UnicastAddresses){if (ip.Address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork) // IPv4{string ipAddress = ip.Address.ToString();string subnetMask = ip.IPv4Mask.ToString();return (ipAddress, subnetMask);}}}}return (null, null);}// 根据 IP 和子网掩码计算网段前缀(假设 /24,也可扩展支持其他掩码)private string GetNetworkPrefix(string ipAddress, string subnetMask){try{IPAddress ip = IPAddress.Parse(ipAddress);IPAddress mask = IPAddress.Parse(subnetMask);byte[] ipBytes = ip.GetAddressBytes();byte[] maskBytes = mask.GetAddressBytes();// 计算网络地址(IP & Mask)byte[] networkBytes = new byte[4];for (int i = 0; i < 4; i++){networkBytes[i] = (byte)(ipBytes[i] & maskBytes[i]);}// 假设是 /24 网段(255.255.255.0),直接取前三段if (subnetMask == "255.255.255.0"){string[] parts = ipAddress.Split('.');return $"{parts[0]}.{parts[1]}.{parts[2]}";}// 更通用:返回网络地址(但通常我们只扫 .1~.254)// 这里简化处理:只支持 /24(最常见)if (maskBytes[3] == 0){return $"{networkBytes[0]}.{networkBytes[1]}.{networkBytes[2]}";}// 其他掩码(如 /16)可扩展,但家庭网络多为 /24return $"{networkBytes[0]}.{networkBytes[1]}.{networkBytes[2]}";}catch{return null;}}// 线程安全更新 RichTextBoxprivate void AppendToRichTextBox(string text){if (richTextBox1.InvokeRequired){richTextBox1.Invoke(new Action(() => AppendToRichTextBox(text)));}else{richTextBox1.AppendText(text);richTextBox1.ScrollToCaret();}}// 异步 Pingprivate static async Task<bool> PingIpAddress(string ipAddress){try{using (var ping = new Ping()){PingReply reply = await ping.SendPingAsync(ipAddress, 800); // 800ms 超时return reply?.Status == IPStatus.Success;}}catch{return false;}}
    }

http://www.dtcms.com/a/605893.html

相关文章:

  • 共模电感与差模电感作用有哪些?
  • 网站正能量大全wordpress添加专题功能
  • 网站怎样做公众号免费dedecms企业网站模板
  • 诗人做的网站大连巨人网络推广有限公司
  • MongoDB的基本操作(适配Node.js全栈项目)
  • 产品全生命周期运营建设简析
  • GPT-4V 赋能癌症病理诊断:上下文学习(ICL)创新方法与实现全解析
  • 方案分享:一款基于高性能单片机的落日灯方案
  • 大模型如何赋能游戏行业的智能体
  • 房产网站开发用什么语言好做网站要哪些架包
  • 音频在线剪切助手网页版源码
  • 什么是爬虫?
  • 【解决】华为欧拉系统上遇到能 ping 通 IP 地址(如 8.8.8.8)但无法 ping 通域名(如 www.baidu.com)的情况
  • SOME/IP-SD 协议中 Entry 与 Option 的定义、分类及协同机制
  • Streaming for Chat Models in LangChain
  • 海天建设集团网站网站空间ftp
  • CSS 选择器空格使用区别详解
  • 高并发内存池9 —— Page Cache 回收
  • #Harmony篇:Navigation导航
  • 找个为公司做网站的零下一度网站建设
  • 百度开启AI新纪元,让智能从成本变成超级生产力
  • 【OpenCV + VS】图像翻转与旋转
  • 工业互联利器!EtherNet/IP 转 ModbusTCP 网关,让跨协议通信零门槛
  • 网站服务器异常是什么意思西安网站开发工资
  • 网站建设甲方给乙方的需求方案长宁区公司网站建设
  • Oracle跨用户表授权+同义词创建的标准脚本模板
  • 网站建设基本资料wordpress可以做门户网站
  • Codeforces Global 30 Div1+2(ABCDE)
  • 自学网站建设多久少女免费观看完整电视电影
  • 流程驱动,协同致胜:现代OA系统构筑企业智能办公中枢