MCP Nmap快速API服务器
一个基于FastAPI的MCP风格的小型服务器,运行 nmap 按需扫描。\ 提供端点以启动扫描和轮询结果。在Docker镜像中发布,并包含Kubernetes清单。
警告:未经授权,网络扫描可能是非法的。仅扫描您拥有或明确允许测试的主机/网络。
快速启动(本地)
- 创建环境:
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt- 导出环境变量:
$ export SECRET_KEY= #required in prod; long random string
$ export AUTH_USERNAME= #— login username
$ export AUTH_PASSWORD=
#— login credentials
$ export ACCESS_TOKEN_EXPIRE_MINUTES=15 #(default 15)
$ export REFRESH_TOKEN_EXPIRE_HOURS=24 #(default 24)- 运行:
uvicorn app.main:app --host 0.0.0.0 --port 8080码头工人
构建:
docker build -t mcp-nmap-python:latest .运行:
docker run -e SECRET_KEY=replace_with_long_secret_key -e AUTH_USERNAME=username -e AUTH_PASSWORD=password -e ACCESS_TOKEN_EXPIRE_MINUTES=15 -e REFRESH_TOKEN_EXPIRE_HOURS=24 -p 8080:8080 --cap-add=NET_RAW --cap-add=NET_ADMIN mcp-nmap-python:latest注意:容器可能需要--cap add=NET_RAW来允许某些扫描类型。小心使用。
Kubernetes
清单单位为k8s/。为API密钥创建一个秘密,并应用deployment.yaml和service.yaml。例如,请参见k8s/secret.yaml。
端点
POST /auth/login--用于基于凭据生成身份验证令牌POST /auth/refresh--用于刷新访问令牌POST /scan--启动扫描(默认情况下为后台作业)。主体:{ "target": "1.2.3.4", "args": ["-sV","-p","80,443"], "max_seconds": 300 }- 如果你通过
?sync=true请求将被阻止,直到扫描完成(不建议用于长扫描)。 GET /scan/{job_id}--作业元数据和状态GET /scan/{job_id}/result--完整结果(XML和解析的JSON(如果可用))GET /health--健康检查
安全
- 使用API_KEY env var保护API(在部署中设置API_KEY)。
- 考虑容器的网络隔离和Kubernetes中的强RBAC。
- 确保日志和扫描结果的安全。
注意事项
- 此服务器使用子进程运行nmap二进制文件;确保容器已安装nmap(Dockerfile已安装)。
- 本例中的作业存储在内存中;对于生产环境,使用持久存储(Redis、DB等)。
