NERVA(1)

NAME

nervaFast service fingerprinting CLI for 120+ protocols (TCP/UDP/SCTP) - built by Praetorian

SYNOPSIS

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

INFO

246 stars
23 forks
0 views

DESCRIPTION

Fast service fingerprinting CLI for 120+ protocols (TCP/UDP/SCTP) - built by Praetorian

README

Nerva - Fast service fingerprinting CLI for network reconnaissance supporting 120+ protocols

Nerva
Nerva: Fast Service Fingerprinting CLI

Release Build Status Go Report Card License Stars

FeaturesInstallationQuick StartUsageProtocolsLibraryUse CasesTroubleshooting

High-performance service fingerprinting written in Go. Identify 120+ network protocols across TCP, UDP, and SCTP transports with rich metadata extraction.

Nerva rapidly detects and identifies services running on open network ports. Use it alongside port scanners like Naabu to fingerprint discovered services, or integrate it into your security pipelines for automated reconnaissance.

Features

  • 120+ Protocol Plugins — Databases, remote access, web services, messaging, industrial, and telecom protocols
  • Multi-Transport Support — TCP (default), UDP (--udp), and SCTP (--sctp, Linux only)
  • Rich Metadata — Extract versions, configurations, and security-relevant details from each service
  • Fast Mode — Scan only default ports for rapid reconnaissance (--fast)
  • Flexible Output — JSON, CSV, or human-readable formats
  • Pipeline Friendly — Pipe from Naabu, Nmap, or any tool that outputs host:port
  • Go Library — Import directly into your Go applications

Installation

Releases

Download a prebuilt binary from the Releases page.

From GitHub

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

From Source

git clone https://github.com/praetorian-inc/nerva.git
cd nerva
go build ./cmd/nerva
./nerva -h

Docker

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

Quick Start

Fingerprint a single target:

nerva -t example.com:22
# ssh://example.com:22

Get detailed JSON metadata:

nerva -t example.com:22 --json
# {"host":"example.com","ip":"93.184.216.34","port":22,"protocol":"ssh","transport":"tcp","metadata":{...}}

Pipe from a port scanner:

naabu -host example.com -silent | nerva
# http://example.com:80
# ssh://example.com:22
# https://example.com:443

Usage

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

Flags

FlagShortDescriptionDefault
--targets-tTarget or comma-separated target list
--list-lInput file containing targets
--output-oOutput file pathstdout
--jsonOutput in JSON formatfalse
--csvOutput in CSV formatfalse
--fast-fFast mode (default ports only)false
--capabilities-clist available capabilities and exitfalse
--udp-URun UDP pluginsfalse
--sctp-SRun SCTP plugins (Linux only)false
--timeout-wTimeout in milliseconds2000
--verbose-vVerbose output to stderrfalse

Examples

Multiple targets:

nerva -t example.com:22,example.com:80,example.com:443

From file:

nerva -l targets.txt --json -o results.json

UDP scanning (may require root):

sudo nerva -t example.com:53 -U
# dns://example.com:53

SCTP scanning (Linux only):

nerva -t telecom-server:3868 -S
# diameter://telecom-server:3868

Fast mode (default ports only):

nerva -l large-target-list.txt --fast --json

Supported Protocols

120+ service detection plugins across TCP, UDP, and SCTP:

HTTP Fingerprint Modules (24)

Technology detection for web services:

ModuleDescription
AnyConnectCisco AnyConnect SSL VPN
ArangoDBMulti-model database
ArtifactoryJFrog artifact repository
BigIPF5 BIG-IP load balancer
ChromaDBVector database
ConsulHashiCorp service mesh
CouchDBApache document database
ElasticsearchSearch engine
etcdDistributed key-value store
FortiGateFortinet firewall/VPN
GlobalProtectPalo Alto VPN
GrafanaObservability platform
JaegerDistributed tracing
JenkinsCI/CD automation
KubernetesContainer orchestration API
NATSMessage broker
PineconeVector database
PrometheusMonitoring system
QNAP QTSNAS management
SOAPWeb services
TeamCityCI/CD server
UPnPUniversal Plug and Play
VaultHashiCorp secrets management
WinRMWindows Remote Management

Databases (20)

ProtocolTransportDefault Ports
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

Remote Access (4)

ProtocolTransport
SSHTCP
RDPTCP
TelnetTCP
VNCTCP

Web & API (2)

ProtocolTransportNotes
HTTP/HTTPSTCPHTTP/2, tech detection via Wappalyzer
KubernetesTCPAPI server detection

Messaging & Queues (10)

ProtocolTransportDefault Ports
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

File & Directory Services (7)

ProtocolTransportDefault Ports
FTPTCP21
SMBTCP445
NFSTCP/UDP2049
RsyncTCP873
TFTPUDP69
SVNTCP3690
LDAPTCP/TLS389, 636

Network Services (10 UDP)

ProtocolTransport
DNSTCP/UDP
DHCPUDP
NTPUDP
SNMPUDP
NetBIOS-NSUDP
STUNUDP
OpenVPNUDP
IPsecUDP
IPMIUDP
EchoTCP/UDP

Industrial Control Systems (15)

ProtocolTransportDefault PortsNotes
ModbusTCP502SCADA/PLC
S7commTCP102Siemens PLC
EtherNet/IPTCP44818Rockwell/Allen-Bradley
PROFINETTCP34962-34964Siemens industrial
BACnetUDP47808Building automation
OPC UATCP4840Industrial interop
OMRON FINSTCP/UDP9600OMRON PLC
MELSEC-QTCP5006, 5007Mitsubishi PLC
KNXnet/IPUDP3671Building automation
IEC 104TCP2404Power grid SCADA
FoxTCP1911Tridium Niagara
PC WORXTCP1962Phoenix Contact
ProConOSTCP20547PLC runtime
HART-IPTCP5094Process automation
EtherCATUDP34980Motion control
Crimson v3TCP789Red Lion HMI
PCOMTCP20256Unitronics PLC
GE SRTPTCP18245GE PLC
ATGTCP10001Tank gauges

Telecom & VoIP (15)

ProtocolTransportDefault PortsNotes
DiameterTCP/SCTP3868LTE/5G AAA
M3UASCTP2905SS7 over IP
SGsAPSCTP29118Circuit-switched fallback
X2APSCTP36422LTE inter-eNodeB
IUASCTP9900ISDN over IP
SIPTCP/UDP/TLS5060, 5061VoIP signaling
MEGACO/H.248UDP2944, 2945Media gateway
MGCPUDP2427, 2727Media gateway
H.323TCP1720Video conferencing
SCCP/SkinnyTCP2000, 2443Cisco IP phones
IAX2UDP4569Asterisk protocol
GTP-CUDP2123GPRS control
GTP-UUDP2152GPRS user plane
GTP'UDP3386GPRS charging
PFCPUDP88055G user plane

VPN & Security (10)

ProtocolTransportDefault Ports
SSHTCP22, 2222
OpenVPNUDP1194
WireGuardUDP51820
IPsec/IKEv2UDP500, 4500
L2TPUDP1701
GlobalProtectHTTP443
AnyConnectHTTP443
FortiGateHTTP443
STUN/TURNUDP3478, 5349
KerberosTCP88

Remote Access & Management (10)

ProtocolTransportDefault Ports
RDPTCP/TLS3389
VNCTCP5900
TelnetTCP23
WinRMHTTP5985, 5986
IPMIUDP623
SNMPUDP161
Zabbix AgentTCP10050
NRPETCP/TLS5666
DockerTCP/TLS2375, 2376
X11TCP6000-6063

Developer Tools (8)

ProtocolTransportDefault Ports
HTTP/HTTPSTCP80, 443, 8080, 8443
Java RMITCP1099
JDWPTCP5005
RTSPTCP554
Linux RPCTCP111
JetDirectTCP9100
CUPS/IPPTCP631
SonarQubeTCP9000

Library Usage

Import Nerva into your Go applications:

package main

import ( "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, }

// 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([]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)
}

}

See examples/service-fingerprinting-example.go for a complete working example.

Use Cases

Penetration Testing

Rapidly fingerprint services discovered during reconnaissance to identify potential attack vectors.

Asset Discovery Pipelines

Combine with Naabu or Masscan for large-scale asset inventory:

naabu -host 10.0.0.0/24 -silent | nerva --json | jq '.protocol'

CI/CD Security Scanning

Integrate into deployment pipelines to verify only expected services are exposed.

Bug Bounty Reconnaissance

Quickly enumerate services across scope targets to find interesting endpoints.

Telecom Network Analysis

Fingerprint Diameter nodes in LTE/5G networks using SCTP transport (Linux):

nerva -t mme.telecom.local:3868 -S --json

Architecture

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]

Why Nerva?

vs Nmap

  • Smarter defaults: Nerva checks the most likely protocol first based on port number
  • Structured output: Native JSON/CSV support for easy parsing and pipeline integration
  • Focused: Service fingerprinting only — pair with dedicated port scanners for discovery

vs zgrab2

  • Auto-detection: No need to specify protocol ahead of time
  • Simpler usage: nerva -t host:port vs echo host | zgrab2 http -p port

Troubleshooting

No output

Cause: Port is closed or no supported service detected.

Solution: Verify the port is open:

nc -zv example.com 80

Timeout errors

Cause: Default 2-second timeout too short for slow services.

Solution: Increase timeout:

nerva -t example.com:80 -w 5000  # 5 seconds

UDP services not detected

Cause: UDP scanning disabled by default.

Solution: Enable with -U flag (may require root):

sudo nerva -t example.com:53 -U

SCTP not working

Cause: SCTP only supported on Linux.

Solution: Run on a Linux system or container:

docker run --rm nerva -t telecom:3868 -S

Terminology

  • Service: A network service running on a port (SSH, HTTP, PostgreSQL, etc.)
  • Fingerprinting: Detecting and identifying the service type, version, and configuration
  • Plugin: A protocol-specific detection module
  • Fast Mode: Scanning only the default port for each protocol (80/20 optimization)
  • Transport: Network layer protocol (TCP, UDP, or SCTP)

Support

If you find Nerva useful, please consider giving it a star:

GitHub stars

Contributing

We welcome contributions! See CONTRIBUTING.md for guidelines.

License

Apache 2.0 — see LICENSE for details.

Acknowledgements

Nerva is a maintained fork of fingerprintx, originally developed by Praetorian's intern class of 2022:

SEE ALSO

clihub3/4/2026NERVA(1)