网络扫描服务

一个基于FastAPI的MCP风格服务器,提供按需运行nmap扫描的功能,支持Docker和Kubernetes部署。

  • by c0d3sh3lf
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 c0d3sh3lf/nmap-mcp-python

使用说明

MCP Nmap快速API服务器

一个基于FastAPI的MCP风格的小型服务器,运行 nmap 按需扫描。
提供端点以启动扫描和轮询结果。在Docker镜像中发布,并包含Kubernetes清单。

警告:未经授权,网络扫描可能是非法的。仅扫描您拥有或明确允许测试的主机/网络。

快速启动(本地)

  1. 创建环境:
    python -m venv .venv
    source .venv/bin/activate
    pip install -r requirements.txt
    
  2. 导出环境变量:
    $ export SECRET_KEY=<YOURSECRETKEY> #required in prod; long random string
    $ export AUTH_USERNAME=<USERNAME> #— login username
    $ export AUTH_PASSWORD=<PASSWORD> #— login credentials
    $ export ACCESS_TOKEN_EXPIRE_MINUTES=15 #(default 15)
    $ export REFRESH_TOKEN_EXPIRE_HOURS=24 #(default 24)
    
  3. 运行:
    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等)。