Python 使用 ICMP 协议扫描 C 段存活机器

ICMP(Internet Control Message Protocol)协议通常用于网络设备之间的通信,最常见的应用是 ping 命令。我们可以使用 Python 的 scapy 库来实现 ICMP 协议的 C 段存活扫描。

1. 安装 scapy

首先,你需要安装 scapy 库。可以使用以下命令进行安装:

pip install scapy

2. C 段存活扫描器示例代码

以下是一个使用 ICMP 协议扫描 C 段存活机器的示例代码。

from scapy.all import ICMP, IP, sr1, conf
import ipaddress
from concurrent.futures import ThreadPoolExecutor

def is_alive(ip):
    """检查 IP 是否存活"""
    packet = IP(dst=str(ip))/ICMP()  # 创建 ICMP 数据包
    response = sr1(packet, timeout=1, verbose=False)  # 发送数据包并等待响应
    return response is not None  # 如果有响应,表示存活

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. 逐步解析代码

  • 导入模块:我们导入 scapy 中的 ICMPIP 类用于构建 ICMP 数据包,sr1 函数用于发送数据包并接收响应,ipaddress 用于处理 IP 地址,ThreadPoolExecutor 用于并发扫描。
  • 检查 IP 是否存活is_alive 函数创建一个 ICMP 数据包并发送到指定 IP。如果有响应,返回 True,否则返回 False
  • 扫描 C 段scan_c_segment 函数使用线程池并发扫描指定 C 段中的所有 IP 地址,并记录存活的主机。
  • 主程序:在主程序中,获取用户输入的 C 段,并调用 scan_c_segment 函数进行扫描。

4. 运行程序

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

5. 注意事项

  • 权限:使用 ICMP 协议进行扫描通常需要管理员权限。在 Linux 系统上,可能需要使用 sudo 运行脚本。
  • 防火墙:某些防火墙可能会阻止 ICMP 请求,导致扫描结果不准确。
  • 合法性:确保在合法和授权的情况下进行网络扫描,避免侵犯他人网络安全。

6. 总结

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

7. 练习

尝试扩展功能,例如:

  • 扫描其他 ICMP 类型:允许用户选择不同的 ICMP 类型(如回显请求、时间戳请求等)。
  • 结果输出:将扫描结果保存到文件中,便于后续分析。
  • 图形界面:使用 tkinter 创建一个简单的图形用户界面,方便用户输入参数。

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

Logo

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

更多推荐