基于 Python 的网站信息探测工具设计与实现


基于 Python 的网站信息探测工具设计与实现

摘要

在渗透测试与网络安全评估中,信息探测是最基础且关键的一步。通过对目标网站的操作系统、服务器、CMS、端口、目录结构等信息进行自动化探测,可为后续攻击路径识别提供基础数据支撑。传统工具如WhatWeb、FOFA等虽功能强大,但在定制化与扩展性方面受限。

本文设计并实现了一款基于 Python 的轻量级网站信息探测工具,支持URL/IP扫描、开放端口探测、CMS识别、Web指纹识别、WAF识别、敏感目录扫描等功能。工具采用模块化设计,使用requests、socket、re、threading等Python标准库构建,界面简洁、可嵌入自动化安全测试流程。实验表明,该工具可快速准确地获取目标网站的核心信息,具备良好的实用性与拓展性。


1. 研究背景

1.1 网站信息探测的意义

网站信息探测(Information Gathering)是渗透测试中的首要步骤,目标是获取系统运行环境、服务版本、目录结构等非认证数据,为后续漏洞扫描和攻击提供“情报”。常见信息探测内容包括:

  • 域名与IP解析;
  • 端口与服务识别;
  • 操作系统/服务器类型;
  • 中间件(如Nginx/Tomcat);
  • CMS识别(如WordPress/Dedecms);
  • 常见敏感路径扫描;
  • WAF检测。

1.2 现有工具分析

工具名称 优点 缺点
WhatWeb CMS识别准确 插件扩展复杂,Python不友好
Nmap 端口识别强大 安装复杂,慢速
FOFA 全网搜索 需授权Token,采集不可控
Python脚本 定制灵活 功能碎片化

本文以“灵活 + 轻量 + 自动化”为设计目标,自主开发一款网站信息探测工具,整合多个功能模块,适配Python生态。


2. 系统设计

2.1 系统功能结构图

+-----------------------------+
|       主控逻辑模块         |
+-----------------------------+
        |         |         |
  +-----+     +---+---+  +--+------+
  |  URL解析模块  |  CMS识别模块  |  WAF检测模块
  +--------------+----------+-------------+
        |         |         |
   端口扫描   目录扫描   指纹识别

2.2 技术选型

模块 技术 说明
网络请求 requests 发起GET/HEAD请求,支持自定义UA
Socket socket 实现TCP连接扫描
解析 re / urllib URL解析、匹配内容
并发 threading 多线程扫描加速
命令行 argparse 支持命令行参数调用

3. 功能模块实现

3.1 URL/IP处理模块

from urllib.parse import urlparse
import socket

def parse_target(url):
    parsed = urlparse(url if url.startswith("http") else "http://" + url)
    hostname = parsed.hostname
    ip = socket.gethostbyname(hostname)
    return hostname, ip

3.2 端口扫描模块

import threading
import socket

open_ports = []

def scan_port(ip, port):
    try:
        sock = socket.socket()
        sock.settimeout(0.5)
        sock.connect((ip, port))
        open_ports.append(port)
        sock.close()
    except:
        pass

def port_scan(ip, ports=[80, 443, 22, 21, 3306]):
    threads = []
    for port in ports:
        t = threading.Thread(target=scan_port, args=(ip, port))
        threads.append(t)
        t.start()
    for t in threads:
        t.join()
    return open_ports

3.3 CMS识别模块(基于路径+特征字符串)

import requests

cms_rules = {
    "wordpress": ["/wp-login.php", "wp-content"],
    "dedecms": ["/plus/", "DedeCMS"],
    "discuz": ["/forum.php", "Discuz!"],
}

def detect_cms(url):
    try:
        for cms, rule in cms_rules.items():
            r = requests.get(url + rule[0], timeout=3)
            if rule[1] in r.text:
                return cms
    except:
        pass
    return "Unknown"

3.4 指纹识别模块(Server头/Title)

def get_fingerprint(url):
    try:
        r = requests.get(url, timeout=3)
        server = r.headers.get("Server", "N/A")
        title = re.findall(r"(.*?)", r.text)
        return {"server": server, "title": title[0] if title else ""}
    except:
        return {"server": "N/A", "title": "N/A"}

3.5 敏感目录扫描模块

def dir_scan(url, paths=["admin", "login", "test", ".git", "phpinfo.php"]):
    found = []
    for path in paths:
        test_url = url.rstrip("/") + "/" + path
        r = requests.get(test_url)
        if r.status_code == 200:
            found.append(test_url)
    return found

3.6 WAF检测模块

def waf_check(url):
    payload = "' OR 1=1--"
    try:
        r = requests.get(url, params={"id": payload}, timeout=3)
        if r.status_code in [403, 406] or "waf" in r.text.lower():
            return True
    except:
        pass
    return False

4. 主程序控制逻辑

if __name__ == "__main__":
    import argparse
    parser = argparse.ArgumentParser()
    parser.add_argument("target", help="目标网址/IP")
    args = parser.parse_args()
    
    print("[*] 开始解析目标...")
    hostname, ip = parse_target(args.target)
    print(f"[+] 主机名: {hostname}, IP地址: {ip}")
    
    print("[*] 开始端口扫描...")
    ports = port_scan(ip)
    print(f"[+] 开放端口: {ports}")
    
    print("[*] CMS识别中...")
    cms = detect_cms(args.target)
    print(f"[+] CMS识别结果: {cms}")
    
    print("[*] 指纹识别中...")
    fp = get_fingerprint(args.target)
    print(f"[+] Server: {fp['server']}, Title: {fp['title']}")
    
    print("[*] 敏感目录扫描中...")
    dirs = dir_scan(args.target)
    print(f"[+] 可访问敏感路径: {dirs}")
    
    print("[*] WAF检测...")
    has_waf = waf_check(args.target)
    print(f"[+] WAF存在: {has_waf}")

5. 实验与评估

5.1 实验环境

  • 本地环境测试目标:DVWA、Vulhub;
  • 外网测试目标:测试用开源CMS站点;
  • 工具对比对象:WhatWeb、wafw00f。

5.2 测试效果

功能 本工具 WhatWeb Nmap
URL/IP解析
端口扫描
CMS识别
指纹识别
敏感目录
WAF检测

6. 总结与展望

本文设计并实现了一款基于 Python 的网站信息探测工具,集成了多种常用功能,包括CMS识别、指纹信息提取、端口扫描、敏感路径发现及WAF识别。与传统工具相比,该工具具有结构清晰、定制性强、部署简单等优势,适用于信息安全教学、靶场测试、轻量化渗透准备等场景。

未来改进方向:

  • 增加 GUI 界面支持;
  • 引入异步框架(如asyncio)提升性能;
  • 支持批量扫描与导出报告;
  • 引入AI辅助指纹识别与CMS判断。

基于 Python 的网站信息探测工具设计与实现_第1张图片
基于 Python 的网站信息探测工具设计与实现_第2张图片
基于 Python 的网站信息探测工具设计与实现_第3张图片
基于 Python 的网站信息探测工具设计与实现_第4张图片

你可能感兴趣的:(python,网络,服务器)