Nmap MCP Server

Nmap MCP Server

Enables network security scanning using Nmap through MCP protocol. Supports quick port scans, full port scans with service detection, and custom Nmap commands with async task management.

Category
访问服务器

README

Nmap MCP Server

GitHub License Python

基于 FastMCP 框架开发的 Nmap 扫描服务,通过 Streamable HTTP 协议提供远程调用能力,支持 MCP (Model Context Protocol) 客户端集成。

截图预览

在 DeepSOC 中使用 Nmap MCP Server 进行端口扫描:

DeepSOC with Nmap MCP

功能特性

  • 快速扫描 - 扫描目标主机的常用端口(约 100 个)
  • 全量扫描 - 扫描全部 65535 个端口,支持服务版本检测
  • 自定义扫描 - 支持任意 Nmap 命令参数
  • 异步任务 - 长时间扫描自动转为后台任务,通过任务 ID 查询结果
  • Token 鉴权 - 支持 URL 参数和 Bearer Token 两种认证方式
  • 结构化输出 - 快速/全量扫描返回 JSON 格式的结构化数据

工作机制

┌─────────────┐     HTTP/MCP      ┌─────────────────┐
│  MCP Client │ ◄───────────────► │  Nmap MCP Server │
└─────────────┘                   └────────┬────────┘
                                           │
                                           ▼
                                  ┌─────────────────┐
                                  │   Task Manager  │
                                  │    (SQLite)     │
                                  └────────┬────────┘
                                           │
                                           ▼
                                  ┌─────────────────┐
                                  │     Scanner     │
                                  │  (Nmap + XML)   │
                                  └─────────────────┘
  1. 请求处理:MCP Client 通过 Streamable HTTP 协议发送扫描请求
  2. 任务调度:服务器创建任务记录并存入 SQLite 数据库
  3. 同步等待:在配置的超时时间内(默认 30 秒)尝试完成扫描
  4. 异步降级:若超时未完成,任务转入后台执行,返回任务 ID 供后续查询
  5. 结果解析:Nmap 以 XML 格式输出,服务器解析后返回结构化 JSON

安装

环境要求

  • Python 3.10+
  • Nmap(系统需已安装)

安装步骤

# 克隆项目
git clone <repository-url>
cd nmap-mcp-http

# 创建虚拟环境
python3 -m venv venv
source venv/bin/activate  # Linux/macOS
# 或 venv\Scripts\activate  # Windows

# 安装依赖
pip install -r requirements.txt

# 生成配置文件模板
python server.py --init

# 编辑配置文件
cp config.example.json config.json
vim config.json  # 修改 token 等配置

配置

配置文件 config.json 示例:

{
  "host": "0.0.0.0",
  "port": 3004,
  "path": "/mcp",
  "token": "your_secret_token_here",
  "sync_timeout": 30,
  "max_concurrent_tasks": 10,
  "db_path": "nmap_tasks.db",
  "nmap_path": "nmap"
}
参数 说明 默认值
host 监听地址 0.0.0.0
port 监听端口 3004
path MCP 服务路径 /mcp
token 鉴权令牌 自动生成
sync_timeout 同步等待超时(秒) 30
max_concurrent_tasks 最大并发任务数 10
db_path SQLite 数据库路径 nmap_tasks.db
nmap_path Nmap 可执行文件路径 nmap

使用方法

启动服务

# 使用默认配置文件 (config.json)
python server.py

# 指定配置文件
python server.py -c /path/to/config.json

# 生成配置模板
python server.py --init

MCP 客户端配置

服务启动后会打印 MCP 客户端配置,支持两种鉴权方式:

方式 1:URL Token

{
  "mcpServers": {
    "nmap-scanner": {
      "name": "Nmap Scanner",
      "type": "streamableHttp",
      "description": "Nmap 端口扫描服务",
      "isActive": true,
      "baseUrl": "http://127.0.0.1:3004/mcp?token=your_token"
    }
  }
}

方式 2:Bearer Token

{
  "mcpServers": {
    "nmap-scanner": {
      "name": "Nmap Scanner",
      "type": "streamableHttp",
      "description": "Nmap 端口扫描服务",
      "isActive": true,
      "baseUrl": "http://127.0.0.1:3004/mcp",
      "headers": {
        "Authorization": "Bearer your_token"
      }
    }
  }
}

测试验证

项目自带测试客户端程序,可快速验证 MCP Server 是否正常工作。

# 激活虚拟环境
source venv/bin/activate

# 运行测试(需要先启动服务)
python test_client.py <your_token>

# 示例
python test_client.py your_secret_token_here

测试内容包括:

  1. URL Token 鉴权方式
  2. HTTP Header Bearer Token 鉴权方式
  3. 无 Token 请求(验证拒绝)
  4. 错误 Token 请求(验证拒绝)

测试程序会自动调用快速扫描工具并查询任务状态,确保所有功能正常运行。

可用工具

Nmap MCP Server 提供的工具列表:

Nmap MCP Available Tools

quick_scan

快速扫描目标主机的常用端口(约 100 个)。

参数:

  • target (必填): 目标 IP、域名或 CIDR 格式
  • timeout (可选): 同步等待超时,5-300 秒

示例:

{"target": "192.168.1.1"}
{"target": "example.com", "timeout": 60}

full_scan

全量扫描目标主机的所有端口(1-65535),包含服务版本检测。

参数:

  • target (必填): 目标 IP、域名或 CIDR 格式
  • timeout (可选): 同步等待超时,5-600 秒

示例:

{"target": "10.0.0.1", "timeout": 300}

custom_scan

执行自定义 Nmap 命令。

参数:

  • command (必填): Nmap 命令参数(不含 nmap 命令本身)
  • timeout (可选): 同步等待超时,5-600 秒

示例:

{"command": "-sS -p 80,443,8080 192.168.1.1"}
{"command": "-sV -sC -p 22 example.com"}
{"command": "--script vuln 192.168.1.1", "timeout": 120}

get_task_status

查询扫描任务状态。

参数:

  • task_id (必填): 任务 ID(UUID 格式)

返回状态:

  • pending: 等待执行
  • running: 正在扫描
  • completed: 扫描完成
  • failed: 扫描失败

get_task_result

获取扫描任务的完整结果。

参数:

  • task_id (必填): 任务 ID(UUID 格式)

返回结果示例

同步完成

{
  "status": "completed",
  "task_id": "550e8400-e29b-41d4-a716-446655440000",
  "result": {
    "target": "192.168.1.1",
    "scan_time": 2.5,
    "hosts": [
      {
        "address": "192.168.1.1",
        "status": "up",
        "ports": [
          {
            "port": 22,
            "protocol": "tcp",
            "state": "open",
            "service": "ssh",
            "version": "OpenSSH 8.0"
          },
          {
            "port": 80,
            "protocol": "tcp",
            "state": "open",
            "service": "http",
            "version": "nginx 1.18.0"
          }
        ]
      }
    ]
  }
}

异步任务

{
  "status": "pending",
  "task_id": "550e8400-e29b-41d4-a716-446655440000",
  "message": "扫描任务已提交,请使用 get_task_status 或 get_task_result 查询结果"
}

注意事项

安全相关

  1. Token 保护:请务必修改默认 Token,避免未授权访问
  2. 网络隔离:建议在可信网络环境中运行,或配合防火墙使用
  3. 权限控制:本服务不限制扫描目标,请确保仅用于授权的安全测试
  4. 命令注入custom_scan 工具接受任意 Nmap 参数,请评估风险

性能相关

  1. 并发限制:默认最多 10 个并发任务,超出时请求会被拒绝
  2. 超时设置:全量扫描耗时较长,建议使用异步任务模式
  3. 资源占用:大范围扫描(如 /16 网段)会消耗大量系统资源

部署建议

  1. 容器化部署:推荐使用 Docker 部署,便于隔离和管理
  2. 日志监控:建议配置日志收集,监控扫描活动
  3. 定期清理:SQLite 数据库会持续增长,建议定期清理历史任务

项目结构

nmap-mcp-http/
├── server.py          # MCP 服务器主程序
├── config.py          # 配置管理模块
├── models.py          # 数据模型定义
├── scanner.py         # Nmap 扫描器封装
├── task_manager.py    # 任务管理器(SQLite)
├── auth.py            # Token 鉴权中间件
├── test_client.py     # 测试客户端
├── config.json        # 配置文件(需自行创建)
├── config.example.json # 配置文件模板
├── requirements.txt   # Python 依赖
├── VERSION            # 版本号
├── LICENSE            # MIT 开源许可证
├── README.md          # 项目说明
└── images/            # 截图资源
    ├── deepsoc-with-nmap-mcp.png
    └── nmap-mcp-available-tools.png

贡献

欢迎提交 Issue 和 Pull Request!本项目完全开源,期待社区的参与和贡献。

许可证

本项目采用 MIT License 开源许可证。

Copyright (c) 2025 上海雾帜智能科技有限公司 (Shanghai Wuzhi Intelligent Technology Co., Ltd.)

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选