JakobBartoschek/porthawk

GitHub: JakobBartoschek/porthawk

一款纯 Python 异步端口扫描器,集成 CVE 关联查询、操作系统指纹识别、蜜罐检测和红队规避技术,支持 Web 仪表盘和 CI/CD 集成。

Stars: 3 | Forks: 0

``` ██████╗ ██████╗ ██████╗ ████████╗██╗ ██╗ █████╗ ██╗ ██╗██╗ ██╗ ██╔══██╗██╔═══██╗██╔══██╗╚══██╔══╝██║ ██║██╔══██╗██║ ██║██║ ██╔╝ ██████╔╝██║ ██║██████╔╝ ██║ ███████║███████║██║ █╗ ██║█████╔╝ ██╔═══╝ ██║ ██║██╔══██╗ ██║ ██╔══██║██╔══██║██║███╗██║██╔═██╗ ██║ ╚██████╔╝██║ ██║ ██║ ██║ ██║██║ ██║╚███╔███╔╝██║ ██╗ ╚═╝ ╚═════╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝╚═╝ ╚═╝ ╚══╝╚══╝ ╚═╝ ╚═╝ Async port scanner. Authorized targets only. ``` [![CI](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/45ba4ca0f9085830.svg)](https://github.com/JakobBartoschek/porthawk/actions/workflows/ci.yml) [![codecov](https://codecov.io/gh/JakobBartoschek/porthawk/branch/main/graph/badge.svg)](https://codecov.io/gh/JakobBartoschek/porthawk) [![Python 3.10+](https://img.shields.io/badge/python-3.10%2B-blue.svg)](https://www.python.org/) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE) [![Authorized Use Only](https://img.shields.io/badge/use-authorized%20targets%20only-red)](DISCLAIMER.md) PortHawk 是一个纯 Python 编写的异步 TCP/UDP 端口扫描器。它可以扫描端口,从 Banner 中提取服务版本,查询相关 CVE,并以实时终端 UI、JSON、CSV 或独立的 HTML 报告形式输出结果。无需 nmap,无需外部二进制文件。 ## 功能特性 - **Web 仪表盘** — 面向非技术用户的 Streamlit UI。侧边栏设置、实时扫描、Altair 图表、PyVis 网络图、差异对比视图、一键下载报告。无需 CLI。(`pip install porthawk[dashboard]`,然后 `python start_dashboard.py`) - **通过 `asyncio` 的异步 TCP 扫描** — 默认 500 个并发连接,可配置 - **UDP 扫描** — 针对 DNS、NTP、SNMP、SSDP、NetBIOS、mDNS、IKE、TFTP 的特定协议 Payload。验证响应,提取 Banner。通过 ICMP 不可达检测关闭的端口。默认扫描前 20 个 UDP 端口。 - **Nmap XML 导入 + 差异对比** — 加载任何 Nmap `-oX` 输出并比较两次扫描以查看变化:新开放的端口、消失的服务、版本升级。也适用于 PortHawk JSON。 - **GitHub Action** — 在任何工作流中添加 `uses: jakobbartoschek/porthawk@v1.0.0`。扫描主机,在 Security 标签页中获取作为 SARIF 警报的开放端口,下载作为构件的报告。 - **SARIF 输出** — `-o sarif` 写入 SARIF 2.1.0 文件。开放端口变为 Security 标签页警报,风险严重程度映射到 SARIF 级别。 - **来自 TTL 值的 OS 指纹识别** — Linux/Unix、Windows、网络设备 - **服务检测** — 具有版本提取功能的协议感知 Banner 抓取,支持 SSH、FTP、SMTP、POP3、IMAP、VNC、MySQL、Redis、Memcached - **通过 NVD API 的 CVE 查询** — 版本感知: "OpenSSH 8.9" 返回相关 CVE,而不仅仅是所有标记为 "ssh" 的内容。双层缓存(内存 + 磁盘,24 小时 TTL)以保持在速率限制内 - **ML 端口优先级排序** — 基于互联网范围扫描频率训练的逻辑回归,针对私有 IP 范围和 OS 提示进行调整(`pip install porthawk[ml]`) - **蜜罐检测** — 基于 Banner 签名、ICS 端口模式、端口数量、延迟均匀性等,对主机的蜜罐可能性进行 0.0–1.0 评分 - **自适应扫描速度** — AIMD 并发控制:起步保守,在稳定网络上加速,在超时激增时回退。RFC 6298 SRTT/RTTVAR 用于抖动检测。 - **SYN 扫描 (半开)** — 发送原始 SYN 数据包而不完成 TCP 握手。可用时使用 Scapy,回退到 Linux 原始套接字。需要 root/管理员权限。(`pip install porthawk[syn]`) - **IDS/IPS 规避** — 针对红队场景的 "Slow & Low" 模式:IP 分片、指数级时间抖动、诱饵源 IP、自定义 TCP 标志组合(FIN、NULL、XMAS、ACK、Maimon) - **被动 OS 指纹识别** — 来自 SYN-ACK 响应的 TCP/IP 协议栈分析:TTL、窗口大小、MSS、TCP 选项、DF 位。基于规则的评分 + KNN 分类器,16 条签名字典。OS 系族准确率 >80%。 - **Webhook 警报** — `--slack-webhook` / `--discord-webhook` CLI 标志(或环境变量)在发现高风险端口时发送消息。仪表盘有一个通知面板用于相同目的。无需额外依赖。 - **IPv6 支持** — 传递 `2001:db8::1`、`[::1]` 或 `2001:db8::/64` 作为目标。TCP、UDP、Banner 抓取、CVE 查询和 OS 指纹识别均通过 IPv6 工作。接受方括号表示法以便从浏览器 URL 复制粘贴。 - **服务数据库** — 约 200 个常见端口及其名称和描述 - **风险评分** — 基于现实世界暴露风险对每个开放端口进行 HIGH / MEDIUM / LOW 评级 - **实时终端 UI** — 进度条 + 实时更新的开放端口表 + 扫描期间的事件日志 - **多格式输出** — Rich 终端表格、JSON、CSV、独立 HTML - **CIDR 支持** — 扫描 `192.168.1.0/24`,自动展开 - **隐蔽模式** — 单线程,3 秒超时,减少线路上的噪声 - **Top N 端口** — 跳过 65535 全端口扫描,专注于重要端口 - **Python API** — `await porthawk.scan(...)` 用于编程使用 ## 架构 ``` flowchart TD CLI["cli.py"] API["api.py"] SCAN["scanner.py"] FP["fingerprint.py"] PRED["predictor.py"] SDB["service_db.py"] CVE["cve.py"] HP["honeypot.py"] TH["throttle.py"] SYN["syn_scan.py"] EXC["exceptions.py"] REP["reporter.py"] OUT_JSON["JSON"] OUT_CSV["CSV"] OUT_HTML["HTML"] OUT_TERM["Terminal"] CLI --> PRED CLI --> SCAN CLI --> CVE CLI --> HP CLI --> TH CLI --> SYN API --> SCAN SCAN --> TH API --> CVE API --> EXC SCAN --> FP SCAN --> SDB FP --> REP SDB --> REP CVE --> REP HP --> REP REP --> OUT_JSON REP --> OUT_CSV REP --> OUT_HTML REP --> OUT_TERM ``` ## 安装 ``` pip install porthawk ``` 带 ML 端口优先级排序: ``` pip install porthawk[ml] ``` 带 SYN 扫描支持: ``` pip install porthawk[syn] ``` 或从源码安装: ``` git clone https://github.com/JakobBartoschek/porthawk cd porthawk pip install . ``` **Docker:** ``` docker build -t porthawk . docker run --rm porthawk scan -t 192.168.1.1 --common # SYN scan 需要 NET_RAW capability docker run --rm --cap-add=NET_RAW porthawk scan -t 192.168.1.1 --common --syn ``` ## 使用方法 **扫描单个主机的前 100 个端口:** ``` porthawk -t 192.168.1.1 --common ``` **服务版本检测 + OS 指纹识别:** ``` porthawk -t 192.168.1.1 --common --banners --os ``` **CVE 查询 — 开放端口上实际可利用的内容:** ``` porthawk -t 192.168.1.1 --common --banners --cve ``` **保存为 JSON 和 HTML:** ``` porthawk -t 192.168.1.1 -p 1-1024 --banners --cve -o json,html ``` **扫描 /24 网络,前 50 个端口:** ``` porthawk -t 192.168.1.0/24 --top-ports 50 ``` **带自定义超时的全端口扫描:** ``` porthawk -t scanme.nmap.org --full --timeout 2.0 --threads 200 ``` **带 ML 端口排序的隐蔽模式 — 可能开放的端口优先:** ``` porthawk -t 10.0.0.1 --common --stealth --smart-order ``` **检查目标是否看起来像蜜罐:** ``` porthawk -t 10.0.0.1 --common --banners --honeypot ``` **自适应扫描 — 自动提升并发:** ``` porthawk -t 192.168.1.1 -p 1-1024 --adaptive ``` **半开 SYN 扫描(需要 admin/root + Scapy 或 Linux):** ``` sudo porthawk -t 192.168.1.1 --common --syn ``` **Slow & Low — 红队规避模式:** ``` sudo porthawk -t 192.168.1.1 --common --slow-low ``` **带 5 秒抖动的 XMAS 扫描:** ``` sudo porthawk -t 192.168.1.1 -p 80,443 --evasion-type xmas --jitter 5.0 ``` **诱饵扫描 — 隐藏在虚假源 IP 中:** ``` sudo porthawk -t 192.168.1.1 --common --slow-low --decoys "1.2.3.4,5.6.7.8" ``` **被动 OS 指纹识别 — 来自 SYN-ACK 的 TCP 协议栈分析:** ``` sudo porthawk -t 192.168.1.1 --common --passive-os ``` **UDP 扫描 — 协议感知,默认为前 20 个 UDP 端口:** ``` # 带协议特定 payloads 的 Top 20 UDP ports porthawk -t 192.168.1.1 --udp # 仅限特定 ports porthawk -t 192.168.1.1 --udp -p 53,123,161,1900 # 较慢网络 —— 增加 timeout porthawk -t 192.168.1.1 --udp --timeout 3.0 ``` **比较两次扫描 — 查看 Monday 和 Friday 之间的变化:** ``` # PortHawk JSON 和 Nmap XML 均可 porthawk diff scan_monday.json scan_friday.json # Include 未发生变化的 ports(默认 omitted —— 通常是 noise) porthawk diff scan_a.json scan_b.json --show-stable # 如果出现任何新 open ports 则以 code 1 Exit(在 CI 中有用) porthawk diff baseline.json current.json --exit-on-new # 仅显示新 ports porthawk diff baseline.json current.json --only-new # 将 diff 保存为 JSON porthawk diff scan_a.json nmap_output.xml -o diff_report.json # 混合 formats —— 比较旧的 PortHawk scan 和新的 Nmap run porthawk diff last_month.json nmap -oX current.xml 192.168.1.1; porthawk diff last_month.json current.xml ``` **直接加载 Nmap XML(编程方式):** ``` from porthawk import load_results, compute_diff old = load_results("baseline.json") # PortHawk JSON new = load_results("nmap_output.xml") # Nmap -oX diff = compute_diff(old, new, label_a="baseline", label_b="current") print(f"New open ports: {len(diff.new_ports)}") for change in diff.new_ports: print(change.describe()) ``` **Web 仪表盘 — 无需 CLI,适用于 Windows/macOS/Linux:** ``` pip install porthawk[dashboard] # Windows —— 双击 start_dashboard.bat,或: python start_dashboard.py # macOS / Linux: ./start_dashboard.sh # 或:porthawk-dashboard ``` 在 `http://localhost:8501` 打开。输入目标,点击 **⚡ Quick Scan — Start!**,结果会在几秒钟内出现。开放端口在发现时立即显示在表格中 — 无需等待完整扫描完成。 **您可以在仪表盘中执行的操作(完整 CLI 同等功能):** - **⚡ Quick Scan 预设** — 一键设置常用端口、0.5 秒超时、300 线程、关闭所有丰富功能。如果已输入目标,扫描立即开始。无需第二次点击。 - **实时结果** — 开放端口在发现时立即出现在表格中,进度条显示已检查 X/Y 端口。适用于所有扫描持续时间。 - **5 种扫描模式** — TCP、UDP、Stealth、SYN (root)、Evasion (root) - **Evasion 设置** — TCP 标志类型(SYN/FIN/NULL/XMAS/ACK/Maimon)、抖动、数据包分片、诱饵 IP - **丰富功能** — Banner、OS 检测、CVE 查询、自适应速度、蜜罐检测、被动 OS 指纹识别 - **智能端口排序** — 基于 ML 的重新排序,将可能开放的端口放在首位 - **结果标签页** — OS Banner、蜜罐徽章、每个端口的 CVE 展开器、TTL 列 - **图表标签页** — 风险分布、热门服务、主机×风险热力图、延迟图表 - **图谱标签页** — PyVis 网络图(`pip install pyvis`),按风险颜色编码 - **Diff 标签页** — 比较两个扫描文件(PortHawk JSON 或 Nmap XML) - **导出标签页** — 下载 JSON、CSV、HTML 或 SARIF 报告 **针对高风险端口的 Slack/Discord 警报:** ``` # 一次性 porthawk scan -t 10.0.0.1 --common --slack-webhook https://hooks.slack.com/services/… # 通过 env vars(添加到 .bashrc / CI secrets) export PORTHAWK_SLACK_WEBHOOK=https://hooks.slack.com/services/… export PORTHAWK_DISCORD_WEBHOOK=https://discord.com/api/webhooks/… porthawk scan -t 10.0.0.1 --common ``` 如果没有高风险发现,则不会触发任何操作。每次扫描一条消息。 **禁用实时 UI(用于脚本、管道、CI):** ``` porthawk -t 192.168.1.1 --common --no-live ``` **设置 NVD_API_KEY 以消除速率限制(在 nvd.nist.gov 免费获取):** ``` NVD_API_KEY=your-key porthawk -t 192.168.1.1 --common --cve --banners ``` **终端输出示例(带 `--banners --cve`):** ``` PortHawk — scanning 192.168.1.1 (1 host, 100 ports, TCP) ┏━━━━━━━━━━━┳━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━┓ ┃ Port ┃ State ┃ Service ┃ Risk ┃ Banner ┃ Top CVE ┃ ┡━━━━━━━━━━━╇━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━┩ │ 22/tcp │ open │ ssh │ MEDIUM │ SSH OpenSSH_8.9p1 │ CVE-2023-38408 (9.8) │ │ 80/tcp │ open │ http │ LOW │ server: nginx/1.24 │ CVE-2023-44487 (7.5) │ │ 443/tcp │ open │ https │ LOW │ HTTP 200 │ — │ │ 3306/tcp │ open │ mysql │ MEDIUM │ MySQL 8.0.33 │ CVE-2023-22005 (4.9) │ │ 6379/tcp │ open │ redis │ HIGH │ Redis 7.0.11 │ CVE-2022-0543 (10.0) │ └───────────┴──────────┴────────────┴──────────┴────────────────────┴──────────────────────────┘ Open: 5 / 100 scanned ``` ## Python API PortHawk 可作为库使用。无需 CLI。 ``` import asyncio import porthawk # 带 banners 和 CVE lookup 的 Full scan results = asyncio.run(porthawk.scan( "192.168.1.1", ports="common", banners=True, cve_lookup=True, )) for r in results: version = r.service_version or "unknown version" top_cve = r.cves[0]["cve_id"] if r.cves else "—" print(f"{r.port}/{r.protocol} {r.service_name} {version} {top_cve}") ``` ``` # Context manager —— 同一 target,多次 scans async with porthawk.Scanner("192.168.1.1", timeout=2.0) as scanner: web = await scanner.scan(ports="80,443,8080,8443", banners=True) infra = await scanner.scan(ports="22,3306,5432,6379", cve_lookup=True) ``` ``` # 生成 report 并 export report = porthawk.build_report("192.168.1.1", results) html_path = porthawk.reporter.save_html(report) ``` ``` # 检查 host 是否像 honeypot hp = porthawk.score_honeypot(results) print(f"{hp.verdict} score={hp.score:.2f} confidence={hp.confidence}") for ind in hp.indicators: print(f" [{ind.weight:.2f}] {ind.name}: {ind.description}") ``` ``` # Half-open SYN scan(需要 root/admin) results = asyncio.run(porthawk.syn_scan_host("192.168.1.1", [22, 80, 443], timeout=1.0)) print(porthawk.get_syn_backend()) # e.g. "scapy 2.5.0" or "raw socket (Linux)" ``` ``` # Slow & Low evasion scan —— red-team preset(需要 root/admin) cfg = porthawk.slow_low_config() cfg.decoys = ["1.2.3.4", "5.6.7.8"] # optional: add decoy IPs results = asyncio.run( porthawk.evasion_scan_host("192.168.1.1", [22, 80, 443], config=cfg, max_concurrent=2) ) # custom config —— 带有 10s max jitter 和 IP fragmentation 的 XMAS scan cfg = porthawk.EvasionConfig(scan_type="xmas", max_delay=10.0, fragment=True) results = asyncio.run(porthawk.evasion_scan_host("192.168.1.1", [80, 443], config=cfg)) ``` ``` # Passive OS fingerprinting —— 分析一个 SYN-ACK response(需要 root/admin 或 Scapy) match = porthawk.passive_os_scan("192.168.1.1") if match: print(f"{match.os_family} {match.os_detail} confidence={match.confidence}") # e.g. "Windows Windows 10 / 11 / Server 2019+ confidence=HIGH" # 从 raw packet bytes 分类 OS(例如来自你自己的 capture) raw_pkt = bytes(...) # raw IP+TCP bytes match = porthawk.fingerprint_os(raw_pkt) # 仅 TTL fallback —— 无需 privileges,始终为 LOW confidence match = porthawk.ttl_only_os(64) # → "Linux/Unix" ``` ``` # UDP scan —— 协议特定 payloads,ICMP unreachable 检测 results = asyncio.run( porthawk.udp_scan_host("192.168.1.1", ports=[53, 123, 161, 1900], timeout=2.0) ) for r in results: print(r.port, r.state, r.banner) # e.g. 53 OPEN "DNS" # e.g. 123 OPEN "NTP stratum=2 refid=GPS" # 默认 top 20 UDP ports(DNS, NTP, SNMP, NetBIOS, SSDP, IKE, mDNS, ...) ports = porthawk.get_udp_top_ports() results = asyncio.run(porthawk.udp_scan_host("192.168.1.1", ports=ports)) ``` 完整 API 参考:[`docs/api.md`](docs/api.md) ## GitHub Action [![GitHub Marketplace](https://img.shields.io/badge/Marketplace-PortHawk%20Security%20Scan-blue?logo=github)](https://github.com/marketplace/actions/porthawk-security-scan) 在任何 GitHub Actions 工作流中运行 PortHawk。开放端口作为代码扫描警报出现在 **Security 标签页** 中。 ``` # .github/workflows/port-scan.yml name: Port Scan on: schedule: - cron: '0 6 * * 1' # every Monday at 06:00 workflow_dispatch: permissions: security-events: write # needed for SARIF upload jobs: scan: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Scan staging server uses: jakobbartoschek/porthawk@v1.4.0 with: target: ${{ secrets.STAGING_HOST }} ports: common fail-on-ports: '21,23,3389' # fail if FTP, Telnet, or RDP is open - name: Scan with UDP uses: jakobbartoschek/porthawk@v1.4.0 with: target: ${{ secrets.STAGING_HOST }} scan-mode: udp timeout: '2.0' output-formats: html ``` 该操作自动将扫描报告上传为工作流构件,并将 SARIF 文件推送到 Security 标签页。无需额外步骤。 **输入:** | Input | Default | Description | |-------|---------|-------------| | `target` | — | IP、主机名或 CIDR(必填) | | `ports` | `common` | `common`、`full`、范围或列表 | | `scan-mode` | `tcp` | `tcp`、`udp`、`syn`、`stealth` | | `timeout` | `1.0` | 每端口超时(秒) | | `threads` | `100` | 最大并发连接数 | | `output-formats` | — | `html`、`csv` 或 `html,csv` | | `upload-sarif` | `true` | 推送到 GitHub Security 标签页 | | `upload-artifacts` | `true` | 上传报告作为构件 | | `fail-on-ports` | — | 如果开放则导致工作流失败的端口 | **输出:** `open-ports`、`open-count`、`report-path`、`sarif-path` ## 输出示例 (JSON) ``` { "metadata": { "target": "192.168.1.1", "scan_time": "2026-03-26T14:30:00", "total_ports": 100, "open_ports": 5, "protocol": "tcp", "version": "0.9.0", "timeout": 1.0, "max_concurrent": 500 }, "results": [ { "host": "192.168.1.1", "port": 22, "protocol": "tcp", "state": "open", "banner": "SSH OpenSSH_8.9p1", "service_name": "ssh", "service_version": "OpenSSH_8.9p1", "risk_level": "MEDIUM", "os_guess": "Linux/Unix", "ttl": 64, "latency_ms": 0.8, "cves": [ { "cve_id": "CVE-2023-38408", "cvss_score": 9.8, "severity": "CRITICAL", "description": "Remote code execution in ssh-agent...", "published": "2023-07-19", "url": "https://nvd.nist.gov/vuln/detail/CVE-2023-38408" } ] } ] } ``` ## MITRE ATT&CK 映射 | Technique | ID | Description | |-----------|-----|-------------| | Network Service Discovery | [T1046](https://attack.mitre.org/techniques/T1046/) | TCP/UDP 端口扫描以识别开放服务 | | Active Scanning: Scanning IP Blocks | [T1595.001](https://attack.mitre.org/techniques/T1595/001/) | 跨 IP 块的 CIDR 范围扫描 | | Gather Victim Host Info: Client Configurations | [T1592.004](https://attack.mitre.org/techniques/T1592/004/) | 通过 TTL 进行 OS 指纹识别,基于 Banner 的版本检测 | ## 测试 ``` # 安装 test dependencies pip install -r requirements-dev.txt # 带 coverage 运行 tests pytest tests/ --cov=porthawk --cov-report=term-missing # 运行特定 test file pytest tests/test_scanner.py -v # 以 short output 运行 pytest tests/ --tb=short ``` 覆盖率目标:所有模块 **>90%**。 所有网络调用均为模拟 — 测试在没有任何真实连接的情况下运行。 ## 路线图 - [x] 通过 NVD API 对检测到的服务/版本进行 CVE 查询 - [x] 版本感知的服务检测(SSH、FTP、MySQL、Redis 等) - [x] 通过逻辑回归进行 ML 端口优先级排序 - [x] 带 TTL 的持久化 CVE 磁盘缓存 - [x] 蜜罐检测 — 针对 Cowrie、Dionaea、Conpot、T-Pot 的基于评分的检测 - [x] 自适应扫描速度 — AIMD 并发控制与 RFC 6298 RTT 平滑 - [x] SYN 扫描 — 通过 Scapy 或原始套接字的半开 TCP - [x] IDS/IPS 规避 — Slow & Low 模式:IP 分片、抖动、诱饵、自定义 TCP 标志- [x] 被动 OS 指纹识别 — 来自 SYN-ACK 的 TCP 协议栈分析,基于规则 + KNN 分类器 - [x] UDP 扫描 — 特定协议 Payload、ICMP 不可达检测、8 种协议 - [x] GitHub Action — `uses: jakobbartoschek/porthawk@v1.0.0`,SARIF 到 Security 标签页,构件上传 - [x] Nmap XML 导入和差异/比较模式 — `porthawk diff a.json b.xml`,新增/消失/变更检测 - [x] Web 仪表盘 — Streamlit,`pip install porthawk[dashboard]`,适用于所有平台的一键启动器 - [x] 针对高风险开放端口的 Slack 和 Discord webhook 警报 — `--slack-webhook`、`--discord-webhook`、环境变量、仪表盘面板 - [x] IPv6 支持 — 通过 IPv6 的 TCP/UDP/Banner/CVE/OS、方括号表示法、CIDR 前缀展开 ## 贡献 有关设置说明、分支命名、代码风格以及如何编写优秀的 PR,请参阅 [CONTRIBUTING.md](CONTRIBUTING.md)。 ## 法律声明 PortHawk 仅用于 **授权渗透测试**。 在扫描之前,您必须获得目标所有者的书面许可。 未经授权的端口扫描可能违反 CFAA(美国)、Computer Misuse Act(英国)、§202a StGB(德国)以及您所在司法管辖区的同等法律。 有关完整的法律免责声明,请参阅 [DISCLAIMER.md](DISCLAIMER.md)。 ## 许可证 MIT 许可证 — 详见 [LICENSE](LICENSE) 文件。
标签:Apex, Banner抓取, Claude, CVE检测, HTML报告, Kubernetes, Python, Qt框架, TCP扫描, 只读文件系统, 密码管理, 异步扫描器, 插件系统, 操作系统指纹识别, 数据统计, 无后门, 服务识别, 机器学习, 端口扫描, 纯Python, 网络安全, 计算机取证, 请求拦截, 逆向工具, 隐私保护