使用说明
Nmap MCP服务器
一种模型上下文协议(MCP)服务器,为AI助手和其他MCP客户端提供Nmap扫描功能。
特性
- TCP连接端口扫描:对指定目标执行TCP连接扫描
- 版本检测:使用
-sV检测服务版本 - 脚本扫描:使用以下命令运行Nmap脚本
-sC或自定义脚本 - 脚本搜索:按名称、类别或关键字搜索可用的Nmap脚本
- 多种扫描类型:支持TCP连接、SYN和UDP扫描
- 灵活端口规格:支持端口范围、列表、前N个端口和所有端口
- 定时控制:可配置的定时模板(T0-T5)
- 多个目标:在单个操作中扫描多个主机或IP范围
- 扫描历史记录:扫描结果的持久存储和检索
- SSE支持:基于web的MCP客户端的服务器发送事件
- JSON输出:结构化JSON响应,便于解析
需求
- Python 3.10+
- Nmap安装在系统上
- uv包管理器(推荐)
安装
使用紫外线(推荐)
# Clone the repository
git clone <repository-url>
cd nmap-mcp
# Run directly with uv (will install dependencies automatically)
uv run nmap_mcp.py
使用pip
# Install dependencies
pip install mcp asyncio-sse python-nmap
# Run the server
python nmap_mcp.py
使用Docker
# Build the container
docker build -t nmap-mcp .
# Run in SSE mode for web clients
docker run -p 3001:3001 nmap-mcp
# Run in stdio mode (for direct MCP client connection)
docker run -i nmap-mcp uv run nmap_mcp.py
用法
命令行选项
python nmap_mcp.py [options]
Options:
-d, --daemon Run in daemon mode (only available with --sse)
--sse Enable SSE mode for web clients
--port PORT Port for SSE server (default: 3001)
--host HOST Host for SSE server (default: localhost)
可用工具
1. tcp_scan
对一个或多个目标执行TCP端口扫描。
参数:
targets(必填):IP地址、主机名或CIDR范围列表ports(必填):端口规格(例如,“80443”、“1-1000”、“全部”、“前1000”)scan_type:扫描类型(“连接”、“syn”、“udp”)-默认值:“连接”timing:Nmap定时模板(“T0”到“T5”)-默认值:“T3”skip_ping:跳过主机发现(布尔值)-默认值:falseverbose:启用详细输出(布尔值)-默认值:false
例子:
{
"targets": ["192.168.1.1", "google.com"],
"ports": "top-1000",
"scan_type": "syn",
"timing": "T4"
}
2. version_scan
对指定端口执行版本检测扫描。
参数:
targets(必填):要扫描的目标列表ports(必填):端口规格timing:定时模板-默认值:“T3”skip_ping:跳过主机发现-默认值:falseverbose:启用详细输出-默认值:false
例子:
{
"targets": ["192.168.1.1"],
"ports": "22,80,443",
"timing": "T3"
}
3. script_scan
使用默认或自定义脚本执行Nmap脚本扫描。
参数:
targets(必填):要扫描的目标列表ports(必填):端口规格scripts(必需):脚本规范(-sC的“默认”或特定脚本名称)timing:定时模板-默认值:“T3”skip_ping:跳过主机发现-默认值:falseverbose:启用详细输出-默认值:false
例子:
{
"targets": ["192.168.1.1"],
"ports": "80,443",
"scripts": "http-enum,http-headers"
}
4. search_scripts
按名称、类别或关键字搜索可用的Nmap脚本。
参数:
query(必填):搜索脚本名称、类别或关键字category:按脚本类别筛选(可选)
例子:
{
"query": "http",
"category": "discovery"
}
5. get_scan_history
使用可选筛选检索扫描历史记录。
参数:
limit:要返回的最大扫描次数-默认值:10target_filter:按目标筛选扫描(部分匹配)
例子:
{
"limit": 5,
"target_filter": "192.168.1"
}
扫描历史记录
扫描结果会自动存储在内存中,并可以持久保存到 scan_history.json 当服务器正常关闭时。历史包括:
- 扫描ID和时间戳
- 扫描类型和参数
- 已执行完整的Nmap命令
- 原始和解析输出
- 执行时间和状态
发展
运行测试
# Install development dependencies
uv sync --extra dev
# Run tests
uv run pytest
代码格式化
# Format code
uv run black nmap_mcp.py
uv run isort nmap_mcp.py
# Type checking
uv run mypy nmap_mcp.py
许可证
此项目根据MIT许可证获得许可-有关详细信息,请参阅许可证文件。
贡献
- 分叉存储库
- 创建要素分支
- 进行更改
- 如果适用,添加测试
- 提交拉取请求
故障排除
“Nmap在此系统上不可用”
确保Nmap已安装并可在PATH中访问:
# On Ubuntu/Debian
sudo apt-get install nmap
# On macOS
brew install nmap
# On Red Hat/CentOS
sudo yum install nmap
权限问题
某些Nmap扫描类型(如SYN扫描)需要root权限:
# Run with sudo if needed
sudo uv run nmap_mcp.py
港口准入问题
如果在SSE模式下运行并且无法访问web界面:
- 检查端口(默认3001)是否未被防火墙阻止
- 确保主机绑定正确(外部访问使用“0.0.0.0”)
- 验证没有其他服务正在使用同一端口
Claude桌面配置
要在Claude Desktop中使用nmap mcp服务器,您需要将其添加到mcp配置文件中。
步骤1:查找配置文件
Claude Desktop配置文件位于:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - 视窗:
%APPDATA%\Claude\claude_desktop_config.json
步骤2:添加服务器配置
编辑配置文件以包含nmap mcp服务器:
{
"mcpServers": {
"nmap-mcp": {
"command": "uv",
"args": [
"run",
"--directory",
"/path/to/nmap-mcp",
"nmap_mcp.py"
],
"env": {
"UV_PROJECT_ENVIRONMENT": "/path/to/nmap-mcp/.venv"
}
}
}
}
重要:替换 /path/to/nmap-mcp 使用nmap-mcp安装目录的实际路径。
步骤3:替代配置(Python)
如果你更喜欢直接使用Python而不是uv:
{
"mcpServers": {
"nmap-mcp": {
"command": "python",
"args": [
"/path/to/nmap-mcp/nmap_mcp.py"
],
"env": {
"PYTHONPATH": "/path/to/nmap-mcp"
}
}
}
}
步骤4:重新启动克劳德桌面
保存配置文件后,重新启动Claude Desktop以使更改生效。
步骤5:验证连接
一旦Claude Desktop重新启动,您应该能够在对话中使用nmap扫描功能。您可以通过要求Claude进行测试:
- “扫描scanme.nmap.org上的前100个端口”
- “搜索与HTTP相关的Nmap脚本”
- “显示扫描历史记录”
配置示例
用于开发(本地安装)
{
"mcpServers": {
"nmap-mcp": {
"command": "uv",
"args": [
"run",
"--directory",
"/Users/username/Dev/nmap-mcp",
"nmap_mcp.py"
]
}
}
}
用于系统安装
{
"mcpServers": {
"nmap-mcp": {
"command": "nmap-mcp",
"args": []
}
}
}
使用自定义定时(更快的扫描)
{
"mcpServers": {
"nmap-mcp": {
"command": "uv",
"args": [
"run",
"--directory",
"/path/to/nmap-mcp",
"nmap_mcp.py"
],
"env": {
"NMAP_DEFAULT_TIMING": "T4"
}
}
}
}
克劳德桌面集成故障排除
找不到服务器
- 验证nmap mcp目录的路径是否正确
- 确保uv已安装并可在PATH中访问
- 检查nmap_mcp.py是否具有执行权限
权限不足
- 确保Claude Desktop有权执行服务器
- 对于SYN扫描,您可能需要以提升的权限运行Claude Desktop
- 考虑使用不需要root访问权限的TCP连接扫描
连接超时
- 检查Nmap是否已安装且可访问
- 验证目标扫描的网络连接
- 尝试手动运行服务器以测试功能:
cd /path/to/nmap-mcp uv run nmap_mcp.py
配置验证
您可以通过检查Claude Desktop日志或独立测试服务器来验证您的配置:
# Test server startup
cd /path/to/nmap-mcp
python test_setup.py
# Test MCP communication
python example_client.py