Network security workflow automation CLI tool
Project description
Neosec
Neosec 是一款面向渗透测试人员的工作流自动化 CLI 工具。通过 JSON 模板定义扫描流程,支持并行执行、条件执行、脚本插件扩展,并将结果整理到统一目录供后期分析。
特性
- 工作流自动化 — JSON 模板定义复杂渗透测试流程
- 并行执行 — 同一 order 的独立步骤自动并行,提升效率
- 条件执行 — 根据前置步骤结果(如开放端口)动态决策
- 脚本插件 — 支持 Python/Bash/Ruby/Node.js 等多语言脚本扩展工具
- 结构化输出 — 所有结果统一保存至
~/.neosec/result/<ip>/,原始 stdout 直接可读 - 内置解析器 — 自动解析 nmap XML、ffuf JSON,提取结构化数据
- HTML 提取 — 内置
html_extraction工具,去除噪声后保存页面源码供 AI 分析
安装
使用 pipx(推荐)
git clone https://github.com/Neobee714/neosec.git
cd neosec
pipx install .
pipx inject neosec beautifulsoup4 httpx
neosec init
使用 pip
git clone https://github.com/Neobee714/neosec.git
cd neosec
pip install -e .
neosec init
快速开始
初始化
neosec init
创建以下目录结构:
~/.neosec/
config.yaml # 配置文件
templates/ # 用户模板目录
scripts/ # 用户自定义脚本插件
result/ # 扫描结果(按 IP 分目录)
log/ # 日志
history/ # 执行历史
执行工作流
# Nmap 端口扫描 + ffuf 目录爆破
neosec workflow -t nmap_ffuf_workflow.json -v target:192.168.1.1
# 追加 HTML 源码提取
neosec workflow -t html_extraction_workflow.json -v target:192.168.1.1
# 指定输出文件并生成 Markdown 报告
neosec workflow -t nmap_ffuf_workflow.json \
-v target:192.168.1.1 \
--output ./results/scan.json \
--report
查看结果
ls ~/.neosec/result/192.168.1.1/
# port_scan.txt nmap 原始输出(已过滤噪声)
# ffuf_port_80.txt ffuf :80 原始输出
# ffuf_port_8080.txt ffuf :8080 原始输出
# extract_html_80.txt 去噪后的 HTML 源码
# workflow_result.json 结构化结果数据
工作流模板
{
"name": "my_workflow",
"version": "1.0.0",
"variables": { "target": "" },
"steps": [
{
"id": "port_scan",
"order": 1,
"tool": "nmap",
"args": { "-sV": true, "-p": "1-10000", "target": "{{target}}" },
"save_result_as": "port_scan_result",
"timeout": 600
},
{
"id": "ffuf_80",
"order": 2,
"depends_on": ["port_scan"],
"when": { "type": "contains", "source": "port_scan_result.open_ports", "value": 80 },
"tool": "ffuf",
"args": { "-w": "/usr/share/wordlists/dirb/common.txt", "-u": "http://{{target}}/FUZZ" },
"save_result_as": "ffuf_80_result"
},
{
"id": "extract_html",
"order": 3,
"depends_on": ["ffuf_80"],
"tool": "html_extraction",
"args": {
"source": "ffuf_80_result",
"base_url": "http://{{target}}",
"filter_status": "200,301"
}
}
]
}
脚本插件
在 ~/.neosec/scripts/ 放置脚本文件即可扩展新工具,优先级高于内置脚本:
~/.neosec/scripts/
my_tool.py # Python 脚本
my_tool.sh # Bash 脚本
my_tool.js # Node.js 脚本
脚本通过 stdin 接收 JSON 上下文,通过 stdout 返回 JSON 结果:
import json, sys
payload = json.loads(sys.stdin.read())
args = payload["args"] # 工作流 step.args
results = payload["context"]["results"] # 前置步骤结果
result_dir = payload["result_dir"] # ~/.neosec/result/<ip>/
# ... 执行逻辑,将文件写入 result_dir ...
print(json.dumps({"status": "success", "pages": 3}))
支持的语言:.py .sh .rb .js .pl .php 及可执行文件(无扩展名)
内置模板
| 模板 | 说明 |
|---|---|
nmap_ffuf_workflow.json |
Nmap 端口扫描 + ffuf 目录爆破(80/443/8080/8000/8888) |
html_extraction_workflow.json |
在 nmap_ffuf 基础上追加 HTML 源码提取 |
内置脚本插件
| 脚本 | 说明 |
|---|---|
html_extraction.py |
批量抓取 URL,清理外联 CSS/图片/script 后保存纯净 HTML |
条件类型
| 类型 | 说明 |
|---|---|
contains |
列表包含指定值 |
contains_any |
列表包含任意一个值 |
not_contains_any |
列表不包含任何指定值 |
equals |
精确匹配 |
greater_than |
大于 |
less_than |
小于 |
命令参考
neosec workflow [OPTIONS]
-t, --template TEXT 模板名称或文件路径
-v, --variables TEXT 变量(格式: key:value,可多次指定)
-o, --output TEXT 输出文件路径
--report 生成 Markdown 报告
--dry-run 干运行,不实际执行
--verbose 详细输出
--quiet 静默模式
neosec history [OPTIONS]
-n, --limit INTEGER 显示最近 N 条(默认 10)
-w, --workflow TEXT 筛选工作流名称
neosec init 初始化配置和目录
neosec version 显示版本信息
配置文件
~/.neosec/config.yaml:
tools:
nmap: nmap
ffuf: ffuf
subfinder: subfinder
nuclei: nuclei
defaults:
wordlist: /usr/share/wordlists/dirb/common.txt
timeout: 300
retry: 1
output:
default_path: ./
default_filename: workflow_result.json
log_path: ~/.neosec/log/
开发
poetry run pytest # 运行测试
poetry run black src/ # 格式化
poetry run ruff check src/ # 检查
许可证
MIT — 详见 LICENSE
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
neosec-0.1.1.tar.gz
(32.8 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
neosec-0.1.1-py3-none-any.whl
(37.1 kB
view details)
File details
Details for the file neosec-0.1.1.tar.gz.
File metadata
- Download URL: neosec-0.1.1.tar.gz
- Upload date:
- Size: 32.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.3.2 CPython/3.13.11 Linux/6.17.10+kali-amd64
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a65856c6c88db345649ea381ccb39b485ab3da095101ac00045c74669fdba50c
|
|
| MD5 |
64408ed6835782ebe81ef3052f858438
|
|
| BLAKE2b-256 |
3812eb2d69cf9a9453e9dc8f58e9f332388f042f11cd86708e58314a53aab159
|
File details
Details for the file neosec-0.1.1-py3-none-any.whl.
File metadata
- Download URL: neosec-0.1.1-py3-none-any.whl
- Upload date:
- Size: 37.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.3.2 CPython/3.13.11 Linux/6.17.10+kali-amd64
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6b865adf8d89ce4b3c6bb8d5f93dae2ad885473a75498ef0a042c35d63ab5105
|
|
| MD5 |
8119b1b47d5c9dc9fe83bc23b0b2bdb7
|
|
| BLAKE2b-256 |
7fc765a07379a6405558dc68a272a7e135c5c3fd2b71fbe5081dd1b1439d8216
|