返回更新列表
新发布Aug 8, 2026

nerva v1.64.3

快速服务指纹识别CLI,支持170多种协议(TCP/UDP/SCTP)- 由Praetorian构建

分享
Nerva - 用于网络侦察的快速服务指纹识别CLI,支持170+协议

Nerva
Nerva: 快速服务指纹识别CLI

发布 构建状态 Go报告卡 许可证 星标

功能安装快速开始使用方法支持的协议库使用使用场景故障排除

用Go编写的高性能服务指纹识别。 支持170+网络协议,涵盖TCP、UDP和SCTP传输,并提供丰富的元数据提取。

Nerva 快速检测和识别开放网络端口上运行的服务。可配合端口扫描器(如 Naabu)对发现的服务进行指纹识别,或集成到安全流水线中实现自动化侦察。

功能

  • 170+ 协议插件 — 数据库、远程访问、Web服务、消息传递、工业及电信协议
  • 76 个HTTP指纹识别器 — 检测包括防火墙、数据库、AI/LLM服务器等在内的Web技术
  • 安全配置错误检测 — 识别常见安全问题,如未认证API和明文协议(--misconfigs
  • 多传输支持 — TCP(默认)、UDP(--udp)和SCTP(--sctp,仅限Linux)
  • 代理支持 — 通过SOCKS5或HTTP代理透明路由扫描流量,支持可配置DNS解析
  • 丰富的元数据 — 从每个服务中提取版本、配置和与安全相关的详细信息
  • 快速模式 — 仅扫描默认端口以实现快速侦察(--fast
  • 灵活的输出 — JSON、CSV或可读格式
  • 管道友好 — 从Naabu、Nmap或任何输出host:port的工具接收输入
  • Go库 — 直接导入到Go应用中使用

安装

发布版本

发布页面下载预编译的二进制文件。

从GitHub安装```sh

go install github.com/praetorian-inc/nerva/cmd/nerva@latest

### 来自源```sh
git clone https://github.com/praetorian-inc/nerva.git
cd nerva
go build ./cmd/nerva
./nerva -h

Docker```sh

git clone https://github.com/praetorian-inc/nerva.git cd nerva docker build -t nerva . docker run --rm nerva -h docker run --rm nerva -t example.com:80 --json

## 快速开始

对单个目标进行指纹识别:```sh
nerva -t example.com:22
# ssh://example.com:22

获取详细的 JSON 元数据:```sh nerva -t example.com:22 --json

{"host":"example.com","ip":"93.184.216.34","port":22,"protocol":"ssh","transport":"tcp","metadata":{...}}

来自端口扫描器的管道:```sh
naabu -host example.com -silent | nerva
# http://example.com:80
# ssh://example.com:22
# https://example.com:443

用法```

nerva [flags]

TARGET SPECIFICATION: Requires host:port or ip:port format. Assumes ports are open.

EXAMPLES: nerva -t example.com:80 nerva -t example.com:80,example.com:443 nerva -l targets.txt nerva --json -t example.com:80 cat targets.txt | nerva

### 标志

| 标志 | 缩写 | 描述 | 默认值 |
|------|------|------|--------|
| `--targets` | `-t` | 目标或逗号分隔的目标列表 | — |
| `--list` | `-l` | 包含目标的输入文件 | — |
| `--output` | `-o` | 输出文件路径 | stdout |
| `--json` | | 以 JSON 格式输出 | false |
| `--csv` | | 以 CSV 格式输出 | false |
| `--misconfigs` | | 启用安全配置错误检测 | false |
| `--proxy` | | 代理 URL(例如 socks5://127.0.0.1:1080) | — |
| `--proxy-auth` | | SOCKS5 代理认证(例如 username:password) | — |
| `--dns-order` | | DNS 解析顺序:`p`, `l`, `lp`, `pl` | `lp` |
| `--fast` | `-f` | 快速模式(仅默认端口) | false |
| `--capabilities` | `-c` | 列出可用功能并退出 | false |
| `--udp` | `-U` | 运行 UDP 插件 | false |
| `--sctp` | `-S` | 运行 SCTP 插件(仅 Linux) | false |
| `--timeout` | `-w` | 超时时间(毫秒) | 2000 |
| `--verbose` | `-v` | 详细输出到 stderr | false |
| `--workers` | `-W` | 并发扫描工作线程数 | 50 |
| `--max-host-conn` | `-H` | 每个主机 IP 的最大并发连接数(0=无限制) | 0 |
| `--rate-limit` | `-R` | 全局每秒最大扫描数(0=无限制) | 0 |

### 示例

**多个目标:**```sh
nerva -t example.com:22,example.com:80,example.com:443

来自文件:```sh nerva -l targets.txt --json -o results.json

**UDP扫描**(可能需要root权限):```sh
sudo nerva -t example.com:53 -U
# dns://example.com:53

SCTP扫描(仅限Linux):```sh nerva -t telecom-server:3868 -S

diameter://telecom-server:3868

**快速模式**(仅默认端口):```sh
nerva -l large-target-list.txt --fast --json

代理路由与远程DNS解析:```sh nerva -t target.internal:80 --proxy socks5://127.0.0.1:1080 --dns-order p

### 安全配置错误检测

当使用 `--misconfigs` 选项启用时,Nerva 可以识别常见的安全配置错误:```sh
nerva -t example.com:2375 --misconfigs --json

检测到的错误配置:

Finding IDSeverityDescription
docker-unauth-apiCriticalDocker API 无需认证即可访问
x11-unauth-accessCriticalX11 服务器允许未认证的连接
smb-signing-not-requiredMediumSMB 签名未要求(存在中继攻击风险)
telnet-cleartextMediumTelnet 以明文传输凭据
vnc-detectedMedium检测到 VNC(通常认证较弱)
ssh-password-authMedium服务器允许密码认证
ssh-weak-cipherLow服务器提供弱加密算法(RC4、3DES、Blowfish)
ssh-weak-kexLow服务器提供弱密钥交换算法
ssh-weak-macLow服务器提供弱 MAC 算法
ftp-cleartextLowFTP 以明文传输凭据

包含错误配置的示例输出:```json { "host": "example.com", "port": 2375, "protocol": "docker", "anonymous_access": true, "security_findings": [ { "id": "docker-unauth-api", "severity": "critical", "description": "Docker API accessible without authentication", "evidence": "Successfully queried /version endpoint without credentials" } ] }

### 代理支持

Nerva 支持通过 SOCKS5 和 HTTP 代理路由扫描流量,并可配置 DNS 解析。

**支持的代理协议:**

- `socks5://` - SOCKS5 代理,使用本地 DNS 解析
- `socks5h://` - SOCKS5 代理,始终使用代理端 DNS 解析
- `http://` - HTTP CONNECT 代理
- `https://` - HTTPS CONNECT 代理

**代理认证:**```sh
# Inline authentication (URL format)
nerva -t example.com:80 --proxy socks5://username:[email protected]:1080

# Separate authentication flag
nerva -t example.com:80 --proxy socks5://127.0.0.1:1080 --proxy-auth username:password

DNS 解析策略--dns-order):

选项策略使用场景
l仅本地标准本地 DNS(默认)
p仅代理强制代理端 DNS 解析
lp本地,回退到代理优先尝试本地,失败时使用代理
pl代理,回退到本地优先尝试代理,失败时使用本地

注意: socks5h:// 方案会自动强制代理端 DNS(等同于 --dns-order p

Tor 扫描示例:```sh

Scan .onion services through Tor (SOCKS5 proxy on port 9050)

nerva -t http://example.onion:80 --proxy socks5h://127.0.0.1:9050

**UDP 通过代理:**```sh
# UDP scanning through SOCKS5 proxy (limited support)
nerva -t target.com:161 --proxy socks5://127.0.0.1:1080 --udp

⚠️ UDP 限制: 通过 SOCKS5 的 UDP 支持有限。并非所有 SOCKS5 服务器都支持 UDP 关联。可能会发生本地 UDP 回退。

带速率限制的并行扫描:```sh nerva -l large-target-list.txt -W 100 -H 5 -R 50 -v

**优雅关机**(Ctrl+C 返回部分结果):```sh
nerva -l huge-target-list.txt -W 50 -v
# Press Ctrl+C to stop — collected results are still printed

支持的协议

170+ 服务检测插件,覆盖 TCP、UDP 和 SCTP:

HTTP 指纹模块(66 个)

Web 服务技术检测,按类别组织:

防火墙与网络安全(12 个)

模块描述
CheckpointCheck Point 安全网关
Cisco ASA/FTDCisco 防火墙/VPN 设备
FortiGateFortinet 防火墙/VPN
GlobalProtectPalo Alto Networks VPN
JuniperJuniper SRX 防火墙
OPNsenseOPNsense 防火墙
pfSensepfSense 防火墙
SonicWallSonicWall 防火墙
AnyConnectCisco AnyConnect SSL VPN
Cisco ExpresswayCisco 协作网关
BigIPF5 BIG-IP 负载均衡器
WinRMWindows 远程管理

AI/LLM 与机器学习(6 个)

模块描述
Ollama自托管 LLM 推理服务器
LocalAI自托管 LLM 推理(兼容 OpenAI)
Open WebUILLM Web 界面(ChatGPT 风格)
TritonNVIDIA Triton 推理服务器
WeaviateAI 向量数据库
ChromaDB向量数据库

数据库与数据存储(12 个)

模块描述
ArangoDB多模型数据库
CockroachDB分布式 SQL 数据库
CouchDBApache 文档数据库
Elasticsearch搜索与分析引擎
etcd分布式键值存储
Milvus向量数据库
MinIOS3 兼容对象存储
Pinecone向量数据库
Redis CommanderRedis Web 管理界面
TiDB分布式 SQL 数据库
YugabyteDB分布式 SQL 数据库
Qdrant向量数据库

DevOps 与基础设施(14 个)

模块描述
ArtifactoryJFrog 制品仓库
ConsulHashiCorp 服务网格
Docker Registry容器镜像仓库
Gitea自托管 Git 服务
Grafana可观测性平台
Harbor容器仓库
Jaeger分布式追踪
JenkinsCI/CD 自动化
Kubernetes容器编排 API
PortainerDocker 管理界面
Prometheus监控系统
Swagger/OpenAPIAPI 文档
TeamCityCI/CD 服务器
VaultHashiCorp 密钥管理

Web 服务器与框架(10 个)

模块描述
Apache HTTPDApache HTTP 服务器
Express.jsNode.js Web 框架
GoAhead嵌入式 Web 服务器
GotenbergPDF 生成服务
GuacamoleApache 远程桌面网关
SOAPWeb 服务
Tengine阿里 Web 服务器
TomcatApache Tomcat
WordPressCMS 平台
UPnP通用即插即用

企业级与商业(8 个)

模块描述
AEMAdobe Experience Manager
Dynamics 365Microsoft Dynamics 365 / Power Apps
Oracle Service CloudOracle CRM 平台
SAP NetWeaverSAP 企业平台
Splunk日志管理平台
VMware Horizon虚拟桌面基础设施
QNAP QTSNAS 管理
ExchangeMicrosoft Exchange 服务器

家庭与物联网(2 个)

模块描述
Home Assistant家庭自动化平台
UniFi/EdgeOSUbiquiti 网络设备

其他(2 个)

模块描述
Go pprofGo 性能分析端点
NATS消息代理

数据库(20 个)

协议传输层默认端口
PostgreSQLTCP5432
MySQLTCP3306
MSSQLTCP1433
OracleTCP1521
MongoDBTCP27017
RedisTCP/TLS6379, 6380
CassandraTCP9042
InfluxDBTCP8086
Neo4jTCP/TLS7687
DB2TCP446, 50000
SybaseTCP5000
FirebirdTCP3050
MemcachedTCP11211
ZooKeeperTCP2181
MilvusTCP19530, 9091
CouchDBHTTP5984
ElasticsearchHTTP9200
ArangoDBHTTP8529
ChromaDBHTTP8000
PineconeHTTP443

远程访问(6 个)

协议传输层默认端口
SSHTCP22, 2222
RDPTCP/TLS3389
TelnetTCP23
VNCTCP5900
AnyDeskTCP7070
TeamViewerTCP5938

Web 与 API(2 个)

协议传输层备注
HTTP/HTTPSTCPHTTP/2,通过 Wappalyzer 进行技术检测
KubernetesTCPAPI 服务器检测

消息与队列(10 个)

协议传输层默认端口
KafkaTCP/TLS9092, 9093
MQTT 3/5TCP/TLS1883, 8883
AMQPTCP/TLS5672, 5671
ActiveMQTCP/TLS61616, 61617
NATSTCP/TLS4222, 6222
PulsarTCP/TLS6650, 6651
SMTPTCP/TLS25, 465, 587
POP3TCP/TLS110, 995
IMAPTCP/TLS143, 993
SMPPTCP2775, 2776

文件与目录服务(7 个)

协议传输层默认端口
FTPTCP21
SMBTCP445
NFSTCP/UDP2049
RsyncTCP873
TFTPUDP69
SVNTCP3690
LDAPTCP/TLS389, 636

网络服务(11 个)

协议传输层默认端口
DNSTCP/UDP53
DHCPUDP67, 68
NTPUDP123
SNMPUDP161
NetBIOS-NSUDP137
STUNUDP3478
OpenVPNUDP1194
IPsecUDP500
IPMIUDP623
CoAPUDP5683
EchoTCP/UDP7

工业控制系统(18 个)

协议传输层默认端口备注
ModbusTCP502SCADA/PLC
S7commTCP102西门子 PLC
EtherNet/IPTCP44818Rockwell/Allen-Bradley
PROFINETTCP34962-34964西门子工业
BACnetUDP47808楼宇自动化
OPC UATCP4840工业互操作
OMRON FINSTCP/UDP9600欧姆龙 PLC
MELSEC-QTCP5006, 5007三菱 PLC
KNXnet/IPUDP3671楼宇自动化
IEC 104TCP2404电网 SCADA
DNP3TCP20000电网 SCADA
CodesysTCP1200, 2455PLC 运行时
FoxTCP1911Tridium Niagara
PC WORXTCP1962菲尼克斯电气
ProConOSTCP20547PLC 运行时
HART-IPTCP5094过程自动化
EtherCATUDP34980运动控制
Crimson v3TCP789Red Lion HMI
PCOMTCP20256Unitronics PLC
GE SRTPTCP18245GE PLC
ATGTCP10001液位仪

电信与 VoIP(17 个)

协议传输层默认端口备注
DiameterTCP/SCTP3868LTE/5G AAA
M3UASCTP2905SS7 over IP
M2UASCTP2904MTP2 用户适配层
M2PASCTP3565MTP2 对等适配层
SGsAPSCTP29118电路域回落
X2APSCTP36422LTE 基站间接口
IUASCTP9900ISDN over IP
SIPTCP/UDP/TLS5060, 5061VoIP 信令
MEGACO/H.248UDP2944, 2945媒体网关
MGCPUDP2427, 2727媒体网关
H.323TCP1720视频会议
SCCP/SkinnyTCP2000, 2443Cisco IP 电话
IAX2UDP4569Asterisk 协议
GTP-CUDP2123GPRS 控制面
GTP-UUDP2152GPRS 用户面
GTP'UDP3386GPRS 计费
PFCPUDP88055G 用户面

VPN 与安全(11 个)

协议传输层默认端口
SSHTCP22, 2222
OpenVPNUDP1194
WireGuardUDP51820
IPsec/IKEv2UDP500, 4500
L2TPUDP1701
SSTPTCP443
GlobalProtectHTTP443
AnyConnectHTTP443
FortiGateHTTP443
STUN/TURNUDP3478, 5349
KerberosTCP88

远程访问与管理(10 个)

协议传输层默认端口
RDPTCP/TLS3389
VNCTCP5900
TelnetTCP23
WinRMHTTP5985, 5986
IPMIUDP623
SNMPUDP161
Zabbix AgentTCP10050
NRPETCP/TLS5666
DockerTCP/TLS2375, 2376
X11TCP6000-6063

开发者工具(8 个)

协议传输层默认端口
HTTP/HTTPSTCP80, 443, 8080, 8443
Java RMITCP1099
JDWPTCP5005
RTSPTCP554
Linux RPCTCP111
JetDirectTCP9100
CUPS/IPPTCP631
SonarQubeTCP9000

库使用方式

将 Nerva 导入 Go 应用程序:```go package main

import ( "context" "fmt" "log" "net/netip" "time"

"github.com/praetorian-inc/nerva/pkg/plugins"
"github.com/praetorian-inc/nerva/pkg/scan"

)

func main() { // Configure scan config := scan.Config{ DefaultTimeout: 2 * time.Second, FastMode: false, UDP: false, Proxy: "socks5://127.0.0.1:1080", // optional ProxyAuth: "username:password", // optional DNSOrder: "p", // resolver strategy }

// Create target
ip, _ := netip.ParseAddr("93.184.216.34")
target := plugins.Target{
    Address: netip.AddrPortFrom(ip, 22),
    Host:    "example.com",
}

// Run scan
results, err := scan.ScanTargets(context.Background(), []plugins.Target{target}, config)
if err != nil {
    log.Fatal(err)
}

// Process results
for _, result := range results {
    fmt.Printf("%s:%d - %s (%s)\n",
        result.Host, result.Port,
        result.Protocol, result.Transport)
}

}

参见 [examples/service-fingerprinting-example.go](https://github.com/praetorian-inc/nerva/blob/HEAD/examples/service-fingerprinting-example.go) 获取完整的工作示例。

## 用例

### 渗透测试

快速识别侦察期间发现的服务,以识别潜在攻击向量。

### 资产发现流水线

结合 Naabu 或 Masscan 进行大规模资产盘点:```sh
naabu -host 10.0.0.0/24 -silent | nerva --json | jq '.protocol'

CI/CD 安全扫描

集成到部署流水线中,以验证仅曝露预期的服务。

漏洞赏金侦察

快速枚举跨范围目标的服务,以发现有趣的端点。

电信网络分析

使用 SCTP 传输(Linux)识别 LTE/5G 网络中的 Diameter 节点:```sh nerva -t mme.telecom.local:3868 -S --json

## 架构```mermaid
graph LR
    A[host:port input] --> B[Target Parser]
    B --> C[Scan Engine]
    C --> D{Transport}
    D -->|TCP| E[TCP Plugins]
    D -->|UDP| F[UDP Plugins]
    D -->|SCTP| G[SCTP Plugins]
    E --> H[Service Detection]
    F --> H
    G --> H
    H --> I[Metadata Extraction]
    I --> J[JSON/CSV/Text Output]

为什么选择 Nerva?

对比 Nmap

  • 更智能的默认设置:Nerva 会根据端口号首先检查最可能的协议
  • 结构化输出:原生 JSON/CSV 支持,便于解析和管道集成
  • 专注:仅进行服务指纹识别 — 配合专用端口扫描器进行发现

对比 zgrab2

  • 自动检测:无需提前指定协议
  • 更简单的用法nerva -t host:port vs echo host | zgrab2 http -p port

故障排除

无输出

原因:端口关闭或未检测到受支持的服务。

解决方案:验证端口是否开放:```sh nc -zv example.com 80

### 超时错误

**原因**:默认2秒超时对于慢速服务来说太短。

**解决方法**:增加超时时间:```sh
nerva -t example.com:80 -w 5000  # 5 seconds

未检测到的 UDP 服务

原因:默认情况下 UDP 扫描处于禁用状态。

解决方法:使用 -U 标志进行启用(可能需要 root 权限):```sh sudo nerva -t example.com:53 -U

### SCTP 无法工作

**原因**:SCTP仅支持Linux系统。

**解决方案**:在Linux系统或容器中运行:```sh
docker run --rm nerva -t telecom:3868 -S

术语

  • 服务:端口上运行的网络服务(SSH、HTTP、PostgreSQL 等)
  • 指纹识别:检测并识别服务类型、版本和配置
  • 插件:协议特定的检测模块
  • 快速模式:仅扫描每种协议的默认端口(80/20 优化)
  • 传输层:网络层协议(TCP、UDP 或 SCTP)

支持

如果您觉得 Nerva 有用,请考虑给它一个星标:

GitHub stars

贡献

我们欢迎贡献!请参阅 CONTRIBUTING.md 了解指南。

许可证

Apache 2.0 — 详见 LICENSE

致谢

Nerva 是 fingerprintx 的一个维护分支,最初由 Praetorian 2022 年实习生团队开发:

分类