基于 Python 脚本生成的局域网 IP 扫描器

玩电脑搞网络和监控的朋友难免会使用到一些局域网内的IP扫描软件。我今天也用python编写了一个这样的小软件。现在分享给大家,有大神修改和完善添加功能的请一定要留言分享哦!

主要功能

1. 核心功能

  • IP范围扫描:扫描指定IP范围内的在线主机

  • 端口扫描:可选扫描常见服务端口

  • 主机信息获取:获取主机名、MAC地址、响应时间

  • 多线程扫描:提高扫描效率

  • 实时进度显示:显示扫描进度和当前状态

2. 用户界面组件

主窗口布局

python

self.root.title("局域网IP扫描器 by BG8EQB")
self.root.geometry("800x740")  # 固定窗口大小
self.root.resizable(False, False)  # 禁止调整大小
主要区域
  • 网络信息区域:显示本机IP和网络段

  • 扫描设置区域:IP范围、超时时间、线程数、端口扫描选项

  • 控制按钮:开始/停止扫描、获取网络信息、清空结果

  • 进度条:显示扫描进度

  • 结果表格:显示扫描结果,支持IP地址排序

  • 状态栏:显示当前状态信息

代码结构分析

1. 网络信息获取 (get_network_info)

python

def get_network_info(self):
    # 跨平台网络信息获取
    if platform.system() == "Windows":
        # 使用ipconfig命令
    else:
        # 使用ifconfig命令
  • 自动检测操作系统

  • 解析网络配置获取子网掩码

  • 计算网络段和默认IP范围

2. 扫描核心逻辑

多线程扫描机制

python

def scan_network(self):
    # 创建线程池
    for i in range(max_threads):
        thread = threading.Thread(target=self.worker, args=(timeout, scan_ports))
        thread.start()
工作线程

python

def worker(self, timeout, scan_ports):
    while self.scanning and self.scanned_ips < self.total_ips:
        # 线程安全的IP分配
        with threading.Lock():
            ip = self.ips_to_scan[self.scanned_ips]
            self.scanned_ips += 1
        # 扫描单个IP
        result = self.scan_ip(ip, timeout, scan_ports)

3. IP扫描实现 (scan_ip)

python

def scan_ip(self, ip, timeout, scan_ports):
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.settimeout(timeout)
    result = sock.connect_ex((ip, 80))  # 尝试连接80端口
  • 使用TCP连接测试主机在线状态

  • 测量响应时间

  • 可选扫描常见端口

4. 特色功能

IP地址排序

python

def sort_by_ip(self):
    # 将IP地址转换为可排序的元组格式
    def ip_to_tuple(ip_str):
        return tuple(map(int, ip_str.split('.')))
  • 点击IP地址列标题进行排序

  • 支持升序/降序切换

双击打开网页

python

def on_item_double_click(self, event):
    # 尝试用HTTP和HTTPS打开IP地址
    for protocol in ["http", "https"]:
        url = f"{protocol}://{ip_address}"
        webbrowser.open(url)
  • 方便快速访问网络设备管理界面

实时计数显示

python

def update_results_title(self):
    self.results_frame.config(text=f"扫描结果 ({self.online_hosts_count} 台在线主机)")

技术特点

优点

  1. 跨平台兼容:支持Windows、Linux、macOS

  2. 线程安全:使用锁机制保护共享资源

  3. 用户友好:实时进度显示、状态反馈

  4. 功能完整:IP扫描、端口扫描、主机信息获取

  5. 代码结构清晰:模块化设计,易于维护

可改进点

  1. 扫描准确性:仅使用80端口检测,可能漏掉某些主机

    • 建议:增加ICMP ping扫描

  2. 性能优化:线程数固定,可动态调整

  3. 错误处理:某些网络操作缺乏详细错误信息

  4. 功能扩展:可添加端口自定义、扫描报告导出等

使用说明

  1. 启动应用:运行脚本打开GUI界面

  2. 自动检测:程序自动获取本机网络信息

  3. 设置参数

    • 调整IP范围(如需)

    • 设置超时时间(默认1秒)

    • 设置线程数(默认50)

    • 选择是否扫描端口

  4. 开始扫描:点击"开始扫描"按钮

  5. 查看结果:在表格中查看在线主机信息

  6. 交互操作

    • 双击IP地址尝试网页访问

    • 点击IP地址列进行排序

这个工具适合网络管理员快速发现局域网内的活跃设备,排查网络问题,或者了解网络拓扑结构。代码质量较高,具有良好的实用性和可扩展性。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

BG8EQB

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

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

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

打赏作者

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

抵扣说明:

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

余额充值