Python 资产扫描教程

资产扫描是信息安全领域中一个重要的环节,目的是识别和了解网络中存在哪些资产,以及它们的状态。作为一名新手开发者,掌握如何使用 Python 进行资产扫描将对你的职业生涯非常有益。本文将带你一步步学习如何实现 Python 资产扫描,下面是我们整个流程的概述。

资产扫描流程概述

步骤 描述
1 确定扫描目标
2 扫描网络并收集设备信息
3 收集服务和开放端口信息
4 结果分析与储存

详细步骤

1. 确定扫描目标

首先,你需要定义要扫描的网络范围。这通常是一个 IP 地址范围,例如 192.168.1.0/24

2. 扫描网络并收集设备信息

接下来,使用 scapy 库来扫描网络,这是一种强大的 Python 库,用于包处理。

from scapy.all import ARP, Ether, srp

# 确定要扫描的目标网络
target_ip = "192.168.1.0/24"

# 创建 ARP 请求
arp = ARP(pdst=target_ip)
ether = Ether(dst="ff:ff:ff:ff:ff:ff")
packet = ether/arp

# 发送数据包并接收应答
result = srp(packet, timeout=3, verbose=0)[0]

# 建立一个列表用于存储设备信息
devices = []

# 解析应答并存储设备信息
for sent, received in result:
    devices.append({'ip': received.psrc, 'mac': received.hwsrc})

# 打印发现的设备
for device in devices:
    print(f"IP: {device['ip']}, MAC: {device['mac']}")

代码说明

  • 引入 scapy 库中的必要类。
  • 使用 ARP 协议创建请求报文,建立与网络内所有设备的连接。
  • 将每个响应的设备信息收集到列表中。

3. 收集服务和开放端口信息

接着,使用 socket 库来获取每个设备上开放的端口信息。

import socket

# 检查开放端口的函数
def scan_ports(ip):
    open_ports = []
    for port in range(1, 1025):  # 扫描1到1024的端口
        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        sock.settimeout(0.5)  # 设置超时时间
        result = sock.connect_ex((ip, port))
        if result == 0:  # 如果连接成功
            open_ports.append(port)
        sock.close()
    return open_ports

# 对发现的每个设备进行端口扫描
for device in devices:
    open_ports = scan_ports(device['ip'])
    print(f"IP: {device['ip']} has open ports: {open_ports}")

代码说明

  • 定义一个 scan_ports 函数,遍历 1 到 1024 端口。
  • 如果能成功连接某个端口,则认为该端口是开放的,并将其记录。

4. 结果分析与储存

最后,将扫描结果保存至 JSON 文件,便于后续分析。

import json

# 将设备信息和开放端口写入 JSON 文件
with open('scan_results.json', 'w') as f:
    json.dump(devices, f, indent=4)

print("Scan results saved to scan_results.json")

代码说明

  • 使用 json 库将结果保存为 JSON 格式,便于后续阅读和处理。

总结

通过以上步骤,我们实现了一个简单的 Python 资产扫描工具。如下是整个流程的序列图:

sequenceDiagram
    participant User
    participant Scanner as Python Scanner
    participant Result as Results Storage

    User->>Scanner: 输入目标 IP
    Scanner->>Scanner: 执行 ARP 扫描网络
    Scanner->>Scanner: 收集设备信息
    Scanner->>Scanner: 对设备执行端口扫描
    Scanner->>Result: 保存扫描结果至文件

希望这篇文章能帮助你快速上手 Python 资产扫描的工作。随着经验的积累,你可以尝试使用更多的库和工具,来增强资产扫描的功能和准确性。不断学习和实践,相信你会成为一名优秀的开发者!