Python 实现 C 段存活机器扫描

C 段扫描是指扫描一个特定的子网(例如,192.168.1.0/24),以确定该子网中哪些 IP 地址是存活的。我们可以使用 Python 的 socketthreading 模块来实现这个功能。以下是一个简单的 C 段存活机器扫描器示例。

1. 使用 socket 模块

我们将使用 socket 模块尝试连接到每个 IP 地址的特定端口(通常使用 80 或 443 端口)来检查其是否存活。

2. 存活机器扫描器示例代码

import socket
import ipaddress
from concurrent.futures import ThreadPoolExecutor

def is_alive(ip):
    """检查 IP 是否存活"""
    try:
        # 尝试连接到 IP 的 80 端口
        socket.setdefaulttimeout(1)  # 设置超时时间为 1 秒
        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        result = sock.connect_ex((str(ip), 80))  # 尝试连接
        sock.close()
        return result == 0  # 如果返回 0,表示存活
    except Exception as e:
        return False  # 发生异常,表示不存活

def scan_c_segment(c_segment):
    """扫描 C 段中的所有 IP"""
    alive_hosts = []
    with ThreadPoolExecutor(max_workers=100) as executor:
        futures = {executor.submit(is_alive, ip): ip for ip in ipaddress.IPv4Network(c_segment)}
        for future in futures:
            ip = futures[future]
            if future.result():
                alive_hosts.append(str(ip))
                print(f"存活主机: {ip}")
    return alive_hosts

if __name__ == "__main__":
    c_segment_input = input("请输入要扫描的 C 段(例如 192.168.1.0/24):")
    print(f"开始扫描 {c_segment_input} 中的存活主机...")
    alive_hosts = scan_c_segment(c_segment_input)
    print("扫描完成。存活主机列表:")
    print(alive_hosts)

3. 逐步解析代码

  • 导入模块:我们导入 socket 用于网络连接,ipaddress 用于处理 IP 地址,ThreadPoolExecutor 用于并发扫描。
  • 检查 IP 是否存活is_alive 函数尝试连接到指定 IP 的 80 端口。如果连接成功,返回 True,否则返回 False
  • 扫描 C 段scan_c_segment 函数使用线程池并发扫描指定 C 段中的所有 IP 地址,并记录存活的主机。
  • 主程序:在主程序中,获取用户输入的 C 段,并调用 scan_c_segment 函数进行扫描。

4. 运行程序

将上述代码复制到 Python 环境中运行。输入要扫描的 C 段(例如 192.168.1.0/24),程序将输出存活的主机列表。

5. 注意事项

  • 权限:某些操作系统可能需要管理员权限才能进行网络扫描。
  • 合法性:确保在合法和授权的情况下进行网络扫描,避免侵犯他人网络安全。
  • 速度:可以通过调整 max_workers 的值来控制并发线程的数量,从而影响扫描速度。

6. 总结

通过以上步骤,你已经实现了一个简单的 C 段存活机器扫描器。这个扫描器可以扫描指定 C 段中的 IP 地址,帮助你了解哪些主机是存活的。

7. 练习

尝试扩展功能,例如:

  • 扫描其他端口:允许用户指定要扫描的端口。
  • 结果输出:将扫描结果保存到文件中,便于后续分析。
  • 图形界面:使用 tkinter 创建一个简单的图形用户界面,方便用户输入参数。

这篇文章为你提供了一个全面的 Python C 段存活机器扫描实现指南,适合初学者和有一定经验的开发者。希望你能在实践中不断提高!

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐