使用说明

项目简介

Nmap MCP 服务器是一个基于 Model Context Protocol (MCP) 构建的后端应用,它将强大的网络扫描工具 Nmap 通过 MCP 协议暴露给 LLM 客户端。借助此服务器,LLM 可以安全、可控地执行网络扫描任务,并获取结构化的扫描结果用于分析和决策。

主要功能点

  • 执行 Nmap 扫描: 允许 LLM 客户端调用 'run-nmap-scan' 工具,指定目标和扫描选项来执行 Nmap 扫描。
  • 获取扫描详情: 提供 'get-scan-details' 工具,根据扫描 ID 获取特定扫描的概要信息。
  • 列出所有扫描: 使用 'list-all-scans' 工具,查看所有已执行扫描的列表。
  • 分析扫描结果: 提供 'analyze-scan' Prompt 模板,允许 LLM 客户端根据扫描 ID 和关注点(如安全、服务概览)生成分析扫描结果的 Prompt。
  • 资源管理: 将扫描结果作为资源进行管理,并可通过 'nmap://scan/{scan_id}' 格式的 URI 进行访问和读取。
  • 速率限制: 服务器内置简单的速率限制机制,防止滥用扫描功能。

安装步骤

  1. 安装 Python 依赖: 确保你的系统已安装 Python 3.10 或更高版本。然后使用 pip 安装 'python-libnmap' 库:

    pip install python-libnmap
  2. 安装 Nmap: 确保你的系统已安装 Nmap 扫描工具。

    • Debian/Ubuntu 系统:
      sudo apt-get install nmap
    • Fedora/CentOS 系统:
      sudo dnf install nmap
    • 其他系统请参考 Nmap 官方文档进行安装。
  3. 安装 Nmap MCP Server: 你可以直接从源代码运行,或者将项目安装为 Python 包。

    • 从源代码运行: 克隆仓库后,进入项目根目录,然后运行:
      python -m src.nmap_mcp
    • 安装为 Python 包: 在项目根目录运行以下命令进行安装:
      pip install -e .
      安装完成后,可以使用 'nmap-mcp' 命令启动服务器。

服务器配置

MCP 客户端需要配置以下 JSON 格式信息以连接到 Nmap MCP 服务器。

{
  "serverName": "nmap",
  "command": "nmap-mcp",
  "args": []
}

配置参数说明:

  • 'serverName': 服务器名称,固定为 "nmap"。
  • 'command': 启动服务器的命令。如果选择安装为 Python 包,则使用 "nmap-mcp";如果从源代码运行,则使用 "python -m src.nmap_mcp"。
  • 'args': 启动命令的参数,本服务器无需额外参数,保持为空列表 '[]' 即可。

基本使用方法

以下是一些基本的使用示例,展示如何通过 MCP 客户端与 Nmap MCP 服务器交互。

  1. 运行 Nmap 扫描: 客户端调用 'run-nmap-scan' 工具,并提供目标和扫描选项。例如,扫描 '192.168.1.0/24' 网段的 22, 80, 443 端口并进行版本检测:

    {
      "tool_call": {
        "tool_name": "run-nmap-scan",
        "parameters": {
          "target": "192.168.1.0/24",
          "options": "-sV -p 22,80,443"
        }
      }
    }

    服务器将返回扫描完成的消息,其中包含扫描 ID。

  2. 获取扫描详情: 使用扫描 ID 调用 'get-scan-details' 工具,获取该扫描的概要信息:

    {
      "tool_call": {
        "tool_name": "get-scan-details",
        "parameters": {
          "scan_id": "<scan_id>"  // 替换为实际的扫描 ID
        }
      }
    }

    服务器将返回包含扫描目标、选项、时间戳、主机数量等信息的文本。

  3. 列出所有扫描: 调用 'list-all-scans' 工具,无需参数,获取所有已完成扫描的列表:

    {
      "tool_call": {
        "tool_name": "list-all-scans",
        "parameters": {}
      }
    }

    服务器将返回包含所有扫描 ID、目标、选项和主机数量的列表。

  4. 分析扫描结果: 使用 'analyze-scan' Prompt 模板,指定扫描 ID 和分析焦点,生成用于分析扫描结果的 Prompt:

    {
      "get_prompt": {
        "prompt_name": "analyze-scan",
        "parameters": {
          "scan_id": "<scan_id>",  // 替换为实际的扫描 ID
          "focus": "security"      // 可选,例如 "security", "services", "overview"
        }
      }
    }

    服务器将返回包含分析指令的消息,LLM 客户端可以使用该消息来分析扫描结果资源 'nmap://scan/{scan_id}'。

请注意,执行网络扫描可能涉及安全风险和法律问题。请确保在授权的范围内进行扫描操作。

信息

分类

开发者工具