
Schnelle Service-Fingerprinting-CLI für 170+ Protokolle (TCP/UDP/SCTP) - entwickelt von Praetorian
Funktionen • Installation • Schnellstart • Verwendung • Protokolle • Bibliothek • Anwendungsfälle • Fehlerbehebung
Hochleistungsfähiges Dienst-Fingerprinting, geschrieben in Go. Identifiziert über 170 Netzwerkprotokolle über TCP-, UDP- und SCTP-Transporte mit umfangreicher Metadatenextraktion.
Nerva erkennt und identifiziert schnell Dienste, die auf offenen Netzwerk-Ports laufen. Verwenden Sie es zusammen mit Port-Scannern wie Naabu, um entdeckte Dienste zu fingerprinten, oder integrieren Sie es in Ihre Sicherheits-Pipelines für automatisierte Erkundung.
--misconfigs)--udp) und SCTP (--sctp, nur Linux)--fast)host:port ausgibtLaden Sie ein vorgefertigtes Binärprogramm von der Seite Veröffentlichungen herunter.
go install github.com/praetorian-inc/nerva/cmd/nerva@latest
### Aus dem Quellcode```sh
git clone https://github.com/praetorian-inc/nerva.git
cd nerva
go build ./cmd/nerva
./nerva -h
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
## Schnellstart
Ein einzelnes Ziel fingerprinten:```sh
nerva -t example.com:22
# ssh://example.com:22
Holen Sie detaillierte JSON-Metadaten:```sh nerva -t example.com:22 --json
Pipe von einem Port-Scanner:```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
### Flags
| Flag | Short | Beschreibung | Standard |
|------|-------|--------------|----------|
| `--targets` | `-t` | Ziel oder durch Komma getrennte Zielliste | — |
| `--list` | `-l` | Eingabedatei mit Zielen | — |
| `--output` | `-o` | Ausgabedateipfad | stdout |
| `--json` | | Ausgabe im JSON-Format | false |
| `--csv` | | Ausgabe im CSV-Format | false |
| `--misconfigs` | | Sicherheitskonfigurationserkennung aktivieren | false |
| `--proxy` | | Proxy-URL (z.B. socks5://127.0.0.1:1080) | — |
| `--proxy-auth` | | SOCKS5-Proxy-Authentifizierung (z.B. Benutzername:Passwort) | — |
| `--dns-order` | | DNS-Auflösungsreihenfolge: `p`, `l`, `lp`, `pl` | `lp` |
| `--fast` | `-f` | Schnellmodus (nur Standard-Ports) | false |
| `--capabilities` | `-c` | Verfügbare Fähigkeiten auflisten und beenden | false |
| `--udp` | `-U` | UDP-Plugins ausführen | false |
| `--sctp` | `-S` | SCTP-Plugins ausführen (nur Linux) | false |
| `--timeout` | `-w` | Timeout in Millisekunden | 2000 |
| `--verbose` | `-v` | Ausführliche Ausgabe auf stderr | false |
| `--workers` | `-W` | Gleichzeitige Scan-Arbeiter | 50 |
| `--max-host-conn` | `-H` | Maximale gleichzeitige Verbindungen pro Host-IP (0=unbegrenzt) | 0 |
| `--rate-limit` | `-R` | Maximale Scans pro Sekunde global (0=unbegrenzt) | 0 |
### Beispiele
**Mehrere Ziele:**```sh
nerva -t example.com:22,example.com:80,example.com:443
Aus Datei:```sh nerva -l targets.txt --json -o results.json
**UDP scanning** (erfordert möglicherweise root):```sh
sudo nerva -t example.com:53 -U
# dns://example.com:53
SCTP-Scanning (nur Linux):```sh nerva -t telecom-server:3868 -S
**Schnellmodus** (nur Standardports):```sh
nerva -l large-target-list.txt --fast --json
Proxy-Routing mit entfernter DNS-Auflösung:```sh nerva -t target.internal:80 --proxy socks5://127.0.0.1:1080 --dns-order p
### Erkennung von Sicherheitsfehlkonfigurationen
Nerva kann häufige Sicherheitsfehlkonfigurationen erkennen, wenn es mit `--misconfigs` aktiviert wird:```sh
nerva -t example.com:2375 --misconfigs --json
Erkannte Fehlkonfigurationen:
Beispielausgabe mit Fehlkonfigurationen:```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" } ] }
### Proxy-Unterstützung
Nerva unterstützt die Weiterleitung von Scan-Verkehr durch SOCKS5- und HTTP-Proxys mit konfigurierbarer DNS-Auflösung.
**Unterstützte Proxy-Schemata:**
- `socks5://` - SOCKS5-Proxy mit lokaler DNS-Auflösung
- `socks5h://` - SOCKS5-Proxy mit proxyseitiger DNS-Auflösung (immer)
- `http://` - HTTP-CONNECT-Proxy
- `https://` - HTTPS-CONNECT-Proxy
**Proxy-Authentifizierung:**```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-Auflösungsstrategien (--dns-order):
Hinweis: socks5h://-Schema erzwingt automatisch Proxy-seitige DNS (äquivalent zu --dns-order p)
Tor-Scan-Beispiel:```sh
nerva -t http://example.onion:80 --proxy socks5h://127.0.0.1:9050
**UDP über Proxy:**```sh
# UDP scanning through SOCKS5 proxy (limited support)
nerva -t target.com:161 --proxy socks5://127.0.0.1:1080 --udp
⚠️ UDP-Einschränkungen: UDP über SOCKS5 wird nur eingeschränkt unterstützt. Nicht alle SOCKS5-Server unterstützen UDP-Assoziation. Lokaler UDP-Fallback kann auftreten.
Paralleles Scannen mit Ratenbegrenzung:```sh nerva -l large-target-list.txt -W 100 -H 5 -R 50 -v
**Sanftes Herunterfahren** (Ctrl+C gibt Teilergebnisse zurück):```sh
nerva -l huge-target-list.txt -W 50 -v
# Press Ctrl+C to stop — collected results are still printed
170+ Serviceerkennungs-Plugins über TCP, UDP und SCTP:
Technologieerkennung für Webdienste, nach Kategorie organisiert:
| Modul | Beschreibung |
|---|---|
| Home Assistant | Home-Automation-Plattform |
| UniFi/EdgeOS | Ubiquiti-Netzwerkgeräte |
| Modul | Beschreibung |
|---|---|
| Go pprof | Go-Profilierungs-Endpunkte |
| NATS | Message Broker |
| Protokoll | Transport | Anmerkungen |
|---|---|---|
| HTTP/HTTPS | TCP | HTTP/2, Technologieerkennung via Wappalyzer |
| Kubernetes | TCP | API-Servererkennung |
Importieren Sie Nerva in Ihre Go-Anwendungen:```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)
}
}
Siehe [examples/service-fingerprinting-example.go](https://github.com/praetorian-inc/nerva/blob/HEAD/examples/service-fingerprinting-example.go) für ein vollständiges funktionierendes Beispiel.
## Anwendungsfälle
### Penetrationstests
Fingerabdrücke von Diensten, die während der Aufklärung entdeckt wurden, schnell erstellen, um potenzielle Angriffsvektoren zu identifizieren.
### Asset Discovery Pipelines
Kombinieren Sie mit Naabu oder Masscan für großangelegte Bestandsaufnahmen von Assets:```sh
naabu -host 10.0.0.0/24 -silent | nerva --json | jq '.protocol'
In Bereitstellungspipelines integrieren, um zu überprüfen, dass nur erwartete Dienste exponiert sind.
Dienste schnell über Zielbereiche hinweg aufzählen, um interessante Endpunkte zu finden.
Fingerabdruck von Diameter-Knoten in LTE/5G-Netzen mittels SCTP-Transport (Linux):```sh nerva -t mme.telecom.local:3868 -S --json
## Architektur```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 -t host:port vs echo host | zgrab2 http -p portUrsache: Port ist geschlossen oder kein unterstützter Dienst erkannt.
Lösung: Überprüfen Sie, ob der Port geöffnet ist:```sh nc -zv example.com 80
### Timeout-Fehler
**Ursache**: Standard-Timeout von 2 Sekunden zu kurz für langsame Dienste.
**Lösung**: Timeout erhöhen:```sh
nerva -t example.com:80 -w 5000 # 5 seconds
Ursache: UDP-Scanning standardmäßig deaktiviert.
Lösung: Aktivieren mit dem Flag -U (erfordert möglicherweise Root-Rechte):```sh
sudo nerva -t example.com:53 -U
### SCTP funktioniert nicht
**Ursache**: SCTP wird nur unter Linux unterstützt.
**Lösung**: Führen Sie es auf einem Linux-System oder in einem Container aus:```sh
docker run --rm nerva -t telecom:3868 -S
Wenn Sie Nerva nützlich finden, erwägen Sie bitte, einen Stern zu vergeben:
Wir begrüßen Beiträge! Siehe CONTRIBUTING.md für Richtlinien.
Apache 2.0 — siehe LICENSE für Details.
Nerva ist ein gepflegter Fork von fingerprintx, ursprünglich entwickelt von Praetorians Praktikantenklasse von 2022:
| Fund-ID | Schweregrad | Beschreibung |
|---|
docker-unauth-api | Kritisch | Docker-API ohne Authentifizierung zugänglich |
x11-unauth-access | Kritisch | X11-Server erlaubt unauthentifizierte Verbindungen |
smb-signing-not-required | Mittel | SMB-Signierung nicht erforderlich (Relay-Angriffsrisiko) |
telnet-cleartext | Mittel | Telnet überträgt Anmeldedaten im Klartext |
vnc-detected | Mittel | VNC erkannt (oft schwache Authentifizierung) |
ssh-password-auth | Mittel | Server erlaubt Passwort-Authentifizierung |
ssh-weak-cipher | Niedrig | Server bietet schwache Chiffren (RC4, 3DES, Blowfish) |
ssh-weak-kex | Niedrig | Server bietet schwache Schlüsselaustauschalgorithmen |
ssh-weak-mac | Niedrig | Server bietet schwache MAC-Algorithmen |
ftp-cleartext | Niedrig | FTP überträgt Anmeldedaten im Klartext |
| Option | Strategie | Anwendungsfall |
|---|
l | Nur lokal | Standardmäßige lokale DNS (Standard) |
p | Nur Proxy | Erzwinge Proxy-seitige DNS-Auflösung |
lp | Lokal, Fallback auf Proxy | Zuerst lokal versuchen, bei Fehler Proxy verwenden |
pl | Proxy, Fallback auf lokal | Zuerst Proxy versuchen, bei Fehler lokal verwenden |
| Modul | Beschreibung |
|---|
| Checkpoint | Check Point Security Gateway |
| Cisco ASA/FTD | Cisco Firewall/VPN-Appliances |
| FortiGate | Fortinet Firewall/VPN |
| GlobalProtect | Palo Alto Networks VPN |
| Juniper | Juniper SRX Firewalls |
| OPNsense | OPNsense Firewall |
| pfSense | pfSense Firewall |
| SonicWall | SonicWall Firewalls |
| AnyConnect | Cisco AnyConnect SSL VPN |
| Cisco Expressway | Cisco Collaboration Gateway |
| BigIP | F5 BIG-IP Load Balancer |
| WinRM | Windows Remote Management |
| Modul | Beschreibung |
|---|
| Ollama | Selbstgehosteter LLM-Inferenzserver |
| LocalAI | Selbstgehostete LLM-Inferenz (OpenAI-kompatibel) |
| Open WebUI | LLM-Weboberfläche (ChatGPT-Stil) |
| Triton | NVIDIA Triton Inference Server |
| Weaviate | Vektordatenbank für KI |
| ChromaDB | Vektordatenbank |
| Modul | Beschreibung |
|---|
| ArangoDB | Multi-Modell-Datenbank |
| CockroachDB | Verteilte SQL-Datenbank |
| CouchDB | Apache-Dokumentendatenbank |
| Elasticsearch | Such- und Analyse-Engine |
| etcd | Verteilter Key-Value-Speicher |
| Milvus | Vektordatenbank |
| MinIO | S3-kompatibler Objektspeicher |
| Pinecone | Vektordatenbank |
| Redis Commander | Redis-Webverwaltungsoberfläche |
| TiDB | Verteilte SQL-Datenbank |
| YugabyteDB | Verteilte SQL-Datenbank |
| Qdrant | Vektordatenbank |
| Modul | Beschreibung |
|---|
| Artifactory | JFrog-Artefakt-Repository |
| Consul | HashiCorp Service Mesh |
| Docker Registry | Container-Image-Registry |
| Gitea | Selbstgehosteter Git-Dienst |
| Grafana | Observability-Plattform |
| Harbor | Container-Registry |
| Jaeger | Verteiltes Tracing |
| Jenkins | CI/CD-Automatisierung |
| Kubernetes | Container-Orchestrierungs-API |
| Portainer | Docker-Verwaltungsoberfläche |
| Prometheus | Überwachungssystem |
| Swagger/OpenAPI | API-Dokumentation |
| TeamCity | CI/CD-Server |
| Vault | HashiCorp Secrets Management |
| Modul | Beschreibung |
|---|
| Apache HTTPD | Apache HTTP Server |
| Express.js | Node.js-Webframework |
| GoAhead | Eingebetteter Webserver |
| Gotenberg | PDF-Generierungsdienst |
| Guacamole | Apache Remote Desktop Gateway |
| SOAP | Webdienste |
| Tengine | Alibaba-Webserver |
| Tomcat | Apache Tomcat |
| WordPress | CMS-Plattform |
| UPnP | Universal Plug and Play |
| Modul | Beschreibung |
|---|
| AEM | Adobe Experience Manager |
| Dynamics 365 | Microsoft Dynamics 365 / Power Apps |
| Oracle Service Cloud | Oracle CRM-Plattform |
| SAP NetWeaver | SAP-Unternehmensplattform |
| Splunk | Log-Management-Plattform |
| VMware Horizon | Virtual Desktop Infrastructure |
| QNAP QTS | NAS-Verwaltung |
| Exchange | Microsoft Exchange Server |
| Protokoll | Transport | Standard-Ports |
|---|
| PostgreSQL | TCP | 5432 |
| MySQL | TCP | 3306 |
| MSSQL | TCP | 1433 |
| Oracle | TCP | 1521 |
| MongoDB | TCP | 27017 |
| Redis | TCP/TLS | 6379, 6380 |
| Cassandra | TCP | 9042 |
| InfluxDB | TCP | 8086 |
| Neo4j | TCP/TLS | 7687 |
| DB2 | TCP | 446, 50000 |
| Sybase | TCP | 5000 |
| Firebird | TCP | 3050 |
| Memcached | TCP | 11211 |
| ZooKeeper | TCP | 2181 |
| Milvus | TCP | 19530, 9091 |
| CouchDB | HTTP | 5984 |
| Elasticsearch | HTTP | 9200 |
| ArangoDB | HTTP | 8529 |
| ChromaDB | HTTP | 8000 |
| Pinecone | HTTP | 443 |
| Protokoll | Transport | Standard-Ports |
|---|
| SSH | TCP | 22, 2222 |
| RDP | TCP/TLS | 3389 |
| Telnet | TCP | 23 |
| VNC | TCP | 5900 |
| AnyDesk | TCP | 7070 |
| TeamViewer | TCP | 5938 |
| Protokoll | Transport | Standard-Ports |
|---|
| Kafka | TCP/TLS | 9092, 9093 |
| MQTT 3/5 | TCP/TLS | 1883, 8883 |
| AMQP | TCP/TLS | 5672, 5671 |
| ActiveMQ | TCP/TLS | 61616, 61617 |
| NATS | TCP/TLS | 4222, 6222 |
| Pulsar | TCP/TLS | 6650, 6651 |
| SMTP | TCP/TLS | 25, 465, 587 |
| POP3 | TCP/TLS | 110, 995 |
| IMAP | TCP/TLS | 143, 993 |
| SMPP | TCP | 2775, 2776 |
| Protokoll | Transport | Standard-Ports |
|---|
| FTP | TCP | 21 |
| SMB | TCP | 445 |
| NFS | TCP/UDP | 2049 |
| Rsync | TCP | 873 |
| TFTP | UDP | 69 |
| SVN | TCP | 3690 |
| LDAP | TCP/TLS | 389, 636 |
| Protokoll | Transport | Standard-Ports |
|---|
| DNS | TCP/UDP | 53 |
| DHCP | UDP | 67, 68 |
| NTP | UDP | 123 |
| SNMP | UDP | 161 |
| NetBIOS-NS | UDP | 137 |
| STUN | UDP | 3478 |
| OpenVPN | UDP | 1194 |
| IPsec | UDP | 500 |
| IPMI | UDP | 623 |
| CoAP | UDP | 5683 |
| Echo | TCP/UDP | 7 |
| Protokoll | Transport | Standard-Ports | Anmerkungen |
|---|
| Modbus | TCP | 502 | SCADA/SPS |
| S7comm | TCP | 102 | Siemens SPS |
| EtherNet/IP | TCP | 44818 | Rockwell/Allen-Bradley |
| PROFINET | TCP | 34962-34964 | Siemens Industrie |
| BACnet | UDP | 47808 | Gebäudeautomatisierung |
| OPC UA | TCP | 4840 | Industrielle Interoperabilität |
| OMRON FINS | TCP/UDP | 9600 | OMRON SPS |
| MELSEC-Q | TCP | 5006, 5007 | Mitsubishi SPS |
| KNXnet/IP | UDP | 3671 | Gebäudeautomatisierung |
| IEC 104 | TCP | 2404 | Stromnetz-SCADA |
| DNP3 | TCP | 20000 | Stromnetz-SCADA |
| Codesys | TCP | 1200, 2455 | SPS-Laufzeit |
| Fox | TCP | 1911 | Tridium Niagara |
| PC WORX | TCP | 1962 | Phoenix Contact |
| ProConOS | TCP | 20547 | SPS-Laufzeit |
| HART-IP | TCP | 5094 | Prozessautomation |
| EtherCAT | UDP | 34980 | Bewegungssteuerung |
| Crimson v3 | TCP | 789 | Red Lion HMI |
| PCOM | TCP | 20256 | Unitronics SPS |
| GE SRTP | TCP | 18245 | GE SPS |
| ATG | TCP | 10001 | Tankfüllstandsmessung |
| Protokoll | Transport | Standard-Ports | Anmerkungen |
|---|
| Diameter | TCP/SCTP | 3868 | LTE/5G AAA |
| M3UA | SCTP | 2905 | SS7 über IP |
| M2UA | SCTP | 2904 | MTP2-Benutzeranpassung |
| M2PA | SCTP | 3565 | MTP2-Peer-Anpassung |
| SGsAP | SCTP | 29118 | Leitungsvermittelter Fallback |
| X2AP | SCTP | 36422 | LTE Inter-eNodeB |
| IUA | SCTP | 9900 | ISDN über IP |
| SIP | TCP/UDP/TLS | 5060, 5061 | VoIP-Signalisierung |
| MEGACO/H.248 | UDP | 2944, 2945 | Media Gateway |
| MGCP | UDP | 2427, 2727 | Media Gateway |
| H.323 | TCP | 1720 | Videokonferenz |
| SCCP/Skinny | TCP | 2000, 2443 | Cisco IP-Telefone |
| IAX2 | UDP | 4569 | Asterisk-Protokoll |
| GTP-C | UDP | 2123 | GPRS-Steuerung |
| GTP-U | UDP | 2152 | GPRS-Nutzerebene |
| GTP' | UDP | 3386 | GPRS-Abrechnung |
| PFCP | UDP | 8805 | 5G-Nutzerebene |
| Protokoll | Transport | Standard-Ports |
|---|
| SSH | TCP | 22, 2222 |
| OpenVPN | UDP | 1194 |
| WireGuard | UDP | 51820 |
| IPsec/IKEv2 | UDP | 500, 4500 |
| L2TP | UDP | 1701 |
| SSTP | TCP | 443 |
| GlobalProtect | HTTP | 443 |
| AnyConnect | HTTP | 443 |
| FortiGate | HTTP | 443 |
| STUN/TURN | UDP | 3478, 5349 |
| Kerberos | TCP | 88 |
| Protokoll | Transport | Standard-Ports |
|---|
| RDP | TCP/TLS | 3389 |
| VNC | TCP | 5900 |
| Telnet | TCP | 23 |
| WinRM | HTTP | 5985, 5986 |
| IPMI | UDP | 623 |
| SNMP | UDP | 161 |
| Zabbix Agent | TCP | 10050 |
| NRPE | TCP/TLS | 5666 |
| Docker | TCP/TLS | 2375, 2376 |
| X11 | TCP | 6000-6063 |
| Protokoll | Transport | Standard-Ports |
|---|
| HTTP/HTTPS | TCP | 80, 443, 8080, 8443 |
| Java RMI | TCP | 1099 |
| JDWP | TCP | 5005 |
| RTSP | TCP | 554 |
| Linux RPC | TCP | 111 |
| JetDirect | TCP | 9100 |
| CUPS/IPP | TCP | 631 |
| SonarQube | TCP | 9000 |