Python 轻松扫描,快速检测:高效IP网段扫描工具全解析

Python 轻松扫描,快速检测:高效IP网段扫描工具全解析

相关资源文件已经打包成EXE文件,可双击直接运行程序,且文章末尾已附上相关源码,以供大家学习交流,博主主页还有更多Python相关程序案例,秉着开源精神的想法,望大家喜欢,点个关注不迷路!!!

1. 简介:

这款“IP网段扫描工具”是网络管理员和普通用户的必备神器,轻松帮助你检查每个网段下的IP是否在线,避免了手动逐一检查的繁琐。只需要输入网段,它便会自动生成所有IP,快速对每个IP进行Ping检测,实时展示结果并提供详细的在线/掉线统计。工具的并发扫描方式,确保了高效性,让扫描过程变得既快速又流畅。

不仅如此,它还为用户提供了丰富的功能,像是清晰的进度条、动态更新的表格、日志输出以及导出功能,都让整个扫描过程充满了互动感与可视化,数据一目了然。用户还可以随时中止扫描,避免浪费时间。

无论是日常网络维护、设备故障排查,还是批量IP监测,这款工具都能帮助你轻松搞定。简洁、实用、快速,让网络管理变得更智能,更高效。

功能模块介绍:

输入网段与IP扫描:

  • 用户可以通过输入网段(如 192.168.1,192.168.2)来启动扫描。工具会自动生成每个网段下的所有IP,并开始对每个IP进行Ping操作,快速检测其在线状态。

并发Ping操作:

  • 为了提高效率,工具在扫描时采用并发技术,最多同时检测20个IP,通过异步执行的方式提高扫描速度。

进度条:

  • 用户可以清晰看到当前扫描的进度,实时更新的进度条让等待变得更加轻松,不再觉得枯燥。

表格展示:

  • 扫描结果会自动填充到表格中,最多每行显示10个IP地址。在线IP用绿色标记,掉线IP用灰色标记,帮助用户一目了然地看到每个IP的状态。

日志输出与导出:

  • 所有扫描的日志和结果会被记录到文本框中,并且可以选择将“在线IP”或“掉线IP”导出为文本文件,或者导出完整的日志记录,方便后续查看或备份。

停止扫描:

  • 如果扫描过程中需要中断,用户可以随时点击“停止扫描”按钮,立即停止当前的Ping任务,并恢复按钮状态。

导出功能:

用户可以选择导出不同类型的数据(在线IP、掉线IP或日志记录),并将数据保存为文本文件,方便后期分析和记录。

2. 运行效果:

请添加图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

3.总 结:

这款“IP网段扫描工具”通过图形界面和异步技术,简化了IP扫描的操作流程,提升了扫描效率。它不仅能高效检测每个网段的IP状态,还能实时反馈扫描进度,并提供导出功能,方便用户进一步分析。无论是在家庭网络管理,还是公司网络安全维护中,都能作为得力助手。简单易用的界面和丰富的功能,让网络管理不再是繁琐的工作,反而带来了一些轻松的乐趣!

4. 相关源码:

import sys
import asyncio
import subprocess
from queue import Queue
from PyQt5.QtCore import QThread, pyqtSignal, QTimer
from PyQt5.QtGui import QColor, QFont
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QHBoxLayout, QPushButton, QLabel, QLineEdit, QTextEdit, QProgressBar, QTableWidget, QTableWidgetItem, QMessageBox, QFileDialog, QInputDialog

class PingThread(QThread):
    # 定义信号
    result_signal = pyqtSignal(str, str)  # 传递IP和状态
    progress_signal = pyqtSignal(int)  # 用于更新进度条的信号
    stop_signal = pyqtSignal()  # 用于停止线程的信号

    def __init__(self, ip_queue, total_ips, parent=None):
        super().__init__(parent)
        self.ip_queue = ip_queue
        self.total_ips = total_ips
        self.pinged_ips = 0  # 已ping的IP数量
        self.stop_requested = False  # 停止请求标志位
        self.online_ips = []  # 在线IP列表
        self.offline_ips = []  # 掉线IP列表

    def run(self):
        loop = asyncio.new_event_loop()
        asyncio.set_event_loop(loop)
        loop.run_until_complete(self.ping_ips())

    async def ping_ips(self):
        tasks = []
        while not self.ip_queue.empty() and not self.stop_requested:
            ip = self.ip_queue.get()
            task = asyncio.create_task(self.ping(ip))
            tasks.append(task)
            if len(tasks) >= 20:  # 每次最多并发20个请求
                await asyncio.gather(*tasks)
                tasks.clear()
        if tasks:
            await asyncio.gather(*tasks)

    async def ping(self, ip):
        res = await asyncio.to_thread(self.ping_single, ip)
        status = "在线" if res == 0 else "掉线"
        self.result_signal.emit(ip, status)  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

创客白泽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值