
CLI rapide d'empreinte de services pour plus de 170 protocoles (TCP/UDP/SCTP) - construit par Praetorian
Fonctionnalités • Installation • Démarrage rapide • Utilisation • Protocoles • Bibliothèque • Cas d'utilisation • Dépannage
Empreinte de services haute performance écrite en Go. Identifiez plus de 170 protocoles réseau sur les transports TCP, UDP et SCTP avec une extraction riche de métadonnées.
Nerva détecte et identifie rapidement les services s'exécutant sur des ports réseau ouverts. Utilisez-le aux côtés de scanners de ports comme Naabu pour prendre l'empreinte des services découverts, ou intégrez-le dans vos pipelines de sécurité pour une reconnaissance automatisée.
--misconfigs)--udp), et SCTP (--sctp, Linux uniquement)--fast)host:portTéléchargez un binaire précompilé depuis la page des Releases.
go install github.com/praetorian-inc/nerva/cmd/nerva@latest
### Depuis la source```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
## Démarrage rapide
Empreinte d'une cible unique :```sh
nerva -t example.com:22
# ssh://example.com:22
Obtenez des métadonnées JSON détaillées:```sh nerva -t example.com:22 --json
Pipe depuis un scanner de ports :```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 | Court | Description | Défaut |
|------|-------|-------------|---------|
| `--targets` | `-t` | Cible ou liste de cibles séparées par des virgules | — |
| `--list` | `-l` | Fichier d'entrée contenant les cibles | — |
| `--output` | `-o` | Chemin du fichier de sortie | stdout |
| `--json` | | Sortie au format JSON | false |
| `--csv` | | Sortie au format CSV | false |
| `--misconfigs` | | Activer la détection de mauvaise configuration de sécurité | false |
| `--proxy` | | URL du proxy (p. ex. socks5://127.0.0.1:1080) | — |
| `--proxy-auth` | | Authentification proxy SOCKS5 (p. ex. username:password) | — |
| `--dns-order` | | Ordre de résolution DNS : `p`, `l`, `lp`, `pl` | `lp` |
| `--fast` | `-f` | Mode rapide (ports par défaut uniquement) | false |
| `--capabilities` | `-c` | Capacités disponibles et sortie | false |
| `--udp` | `-U` | Exécuter les plugins UDP | false |
| `--sctp` | `-S` | Exécuter les plugins SCTP (Linux uniquement) | false |
| `--timeout` | `-w` | Délai d'attente en millisecondes | 2000 |
| `--verbose` | `-v` | Sortie détaillée vers stderr | false |
| `--workers` | `-W` | Travailleurs de scan simultanés | 50 |
| `--max-host-conn` | `-H` | Nombre max de connexions simultanées par IP hôte (0=illimité) | 0 |
| `--rate-limit` | `-R` | Nombre max de scans par seconde globalement (0=illimité) | 0 |
### Exemples
**Cibles multiples :**```sh
nerva -t example.com:22,example.com:80,example.com:443
Depuis le fichier :```sh nerva -l targets.txt --json -o results.json
**Scan UDP** (peut nécessiter les droits root) :```sh
sudo nerva -t example.com:53 -U
# dns://example.com:53
Scan SCTP (Linux uniquement) :```sh nerva -t telecom-server:3868 -S
**Mode rapide** (ports par défaut uniquement):```sh
nerva -l large-target-list.txt --fast --json
Routage proxy avec résolution DNS distante :```sh nerva -t target.internal:80 --proxy socks5://127.0.0.1:1080 --dns-order p
### Détection des erreurs de configuration de sécurité
Nerva peut identifier les erreurs de configuration de sécurité courantes lorsqu'elle est activée avec `--misconfigs` :```sh
nerva -t example.com:2375 --misconfigs --json
Mauvaises configurations détectées :
Exemple de sortie avec mauvaises configurations :```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" } ] }
### Prise en charge des proxys
Nerva prend en charge le routage du trafic de scan via des proxys SOCKS5 et HTTP avec une résolution DNS configurable.
**Schémas de proxy pris en charge :**
- `socks5://` - Proxy SOCKS5 avec résolution DNS locale
- `socks5h://` - Proxy SOCKS5 avec résolution DNS côté proxy (toujours)
- `http://` - Proxy HTTP CONNECT
- `https://` - Proxy HTTPS CONNECT
**Authentification du proxy :**```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
Stratégies de résolution DNS (--dns-order) :
Remarque : le schéma socks5h:// force automatiquement la résolution DNS côté proxy (équivalent à --dns-order p)
Exemple de scan via Tor :```sh
nerva -t http://example.onion:80 --proxy socks5h://127.0.0.1:9050
**UDP via proxy :**```sh
# UDP scanning through SOCKS5 proxy (limited support)
nerva -t target.com:161 --proxy socks5://127.0.0.1:1080 --udp
⚠️ Limitations UDP : L'UDP via SOCKS5 bénéficie d'un support limité. Tous les serveurs SOCKS5 ne prennent pas en charge l'association UDP. Un repli local UDP peut se produire.
Scan parallèle avec limitation de débit :```sh nerva -l large-target-list.txt -W 100 -H 5 -R 50 -v
**Arrêt en douceur** (Ctrl+C retourne les résultats partiels):```sh
nerva -l huge-target-list.txt -W 50 -v
# Press Ctrl+C to stop — collected results are still printed
170+ plugins de détection de services sur TCP, UDP et SCTP :
Détection de technologies pour services web, organisée par catégorie :
| Module | Description |
|---|---|
| Home Assistant | Plateforme d'automatisation domestique |
| UniFi/EdgeOS | Appareils réseau Ubiquiti |
| Module | Description |
|---|---|
| Go pprof | Points de terminaison de profilage Go |
| NATS | Courtier de messages |
| Protocole | Transport | Notes |
|---|---|---|
| HTTP/HTTPS | TCP | HTTP/2, détection de technologies via Wappalyzer |
| Kubernetes | TCP | Détection de serveur API |
Importez Nerva dans vos applications 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)
}
}
Voir [examples/service-fingerprinting-example.go](https://github.com/praetorian-inc/nerva/blob/HEAD/examples/service-fingerprinting-example.go) pour un exemple complet et fonctionnel.
## Cas d'utilisation
### Tests d'intrusion
Identifier rapidement les services découverts lors de la reconnaissance pour trouver des vecteurs d'attaque potentiels.
### Pipelines de découverte d'actifs
Combiner avec Naabu ou Masscan pour un inventaire d'actifs à grande échelle :```sh
naabu -host 10.0.0.0/24 -silent | nerva --json | jq '.protocol'
Intégrer dans les pipelines de déploiement pour vérifier que seuls les services attendus sont exposés.
Énumérer rapidement les services sur les cibles dans le périmètre pour trouver des points d'accès intéressants.
Empreintes des nœuds Diameter dans les réseaux LTE/5G en utilisant le transport SCTP (Linux) :```sh nerva -t mme.telecom.local:3868 -S --json
## Architecture```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 portCause : Le port est fermé ou aucun service supporté n'est détecté.
Solution : Vérifiez que le port est ouvert :```sh nc -zv example.com 80
### Erreurs de timeout
**Cause**: Le timeout par défaut de 2 secondes est trop court pour les services lents.
**Solution**: Augmentez le timeout :```sh
nerva -t example.com:80 -w 5000 # 5 seconds
Cause: Le scan UDP est désactivé par défaut.
Solution: Activer avec l'option -U (peut nécessiter les droits root):```sh
sudo nerva -t example.com:53 -U
### SCTP ne fonctionne pas
**Cause**: SCTP est uniquement pris en charge sur Linux.
**Solution**: Exécuter sur un système Linux ou un conteneur :```sh
docker run --rm nerva -t telecom:3868 -S
Si vous trouvez Nerva utile, merci de lui accorder une étoile :
Les contributions sont les bienvenues ! Voir CONTRIBUTING.md pour les directives.
Apache 2.0 — Voir LICENSE pour les détails.
Nerva est un fork maintenu de fingerprintx, initialement développé par la promotion stagiaire 2022 de Praetorian :
| Finding ID | Severity | Description |
|---|
docker-unauth-api | Critique | API Docker accessible sans authentification |
x11-unauth-access | Critique | Serveur X11 autorise les connexions non authentifiées |
smb-signing-not-required | Moyen | Signature SMB non requise (risque d'attaque par relais) |
telnet-cleartext | Moyen | Telnet transmet les identifiants en clair |
vnc-detected | Moyen | VNC détecté (souvent authentification faible) |
ssh-password-auth | Moyen | Le serveur autorise l'authentification par mot de passe |
ssh-weak-cipher | Faible | Le serveur propose des chiffrements faibles (RC4, 3DES, Blowfish) |
ssh-weak-kex | Faible | Le serveur propose des algorithmes d'échange de clés faibles |
ssh-weak-mac | Faible | Le serveur propose des algorithmes MAC faibles |
ftp-cleartext | Faible | FTP transmet les identifiants en clair |
| Option | Stratégie | Cas d'utilisation |
|---|
l | Local uniquement | DNS local standard (par défaut) |
p | Proxy uniquement | Forcer la résolution DNS côté proxy |
lp | Local, repli sur proxy | Essayer d'abord local, utiliser le proxy en cas d'échec |
pl | Proxy, repli sur local | Essayer d'abord le proxy, utiliser local en cas d'échec |
| Module | Description |
|---|
| Checkpoint | Passerelle de sécurité Check Point |
| Cisco ASA/FTD | Appareils pare-feu/VPN Cisco |
| FortiGate | Pare-feu/VPN Fortinet |
| GlobalProtect | VPN Palo Alto Networks |
| Juniper | Pare-feu Juniper SRX |
| OPNsense | Pare-feu OPNsense |
| pfSense | Pare-feu pfSense |
| SonicWall | Pare-feu SonicWall |
| AnyConnect | VPN SSL Cisco AnyConnect |
| Cisco Expressway | Passerelle de collaboration Cisco |
| BigIP | Équilibreur de charge F5 BIG-IP |
| WinRM | Gestion à distance Windows |
| Module | Description |
|---|
| Ollama | Serveur d'inférence LLM auto-hébergé |
| LocalAI | Inférence LLM auto-hébergée (compatible OpenAI) |
| Open WebUI | Interface web LLM (style ChatGPT) |
| Triton | Serveur d'inférence NVIDIA Triton |
| Weaviate | Base de données vectorielle pour l'IA |
| ChromaDB | Base de données vectorielle |
| Module | Description |
|---|
| ArangoDB | Base de données multi-modèle |
| CockroachDB | Base de données SQL distribuée |
| CouchDB | Base de données documentaire Apache |
| Elasticsearch | Moteur de recherche et d'analyse |
| etcd | Magasin clé-valeur distribué |
| Milvus | Base de données vectorielle |
| MinIO | Stockage d'objets compatible S3 |
| Pinecone | Base de données vectorielle |
| Redis Commander | Interface d'administration web Redis |
| TiDB | Base de données SQL distribuée |
| YugabyteDB | Base de données SQL distribuée |
| Qdrant | Base de données vectorielle |
| Module | Description |
|---|
| Artifactory | Dépôt d'artefacts JFrog |
| Consul | Maillage de services HashiCorp |
| Docker Registry | Registre d'images de conteneurs |
| Gitea | Service Git auto-hébergé |
| Grafana | Plateforme d'observabilité |
| Harbor | Registre de conteneurs |
| Jaeger | Traçage distribué |
| Jenkins | Automatisation CI/CD |
| Kubernetes | API d'orchestration de conteneurs |
| Portainer | Interface d'administration Docker |
| Prometheus | Système de surveillance |
| Swagger/OpenAPI | Documentation d'API |
| TeamCity | Serveur CI/CD |
| Vault | Gestion des secrets HashiCorp |
| Module | Description |
|---|
| Apache HTTPD | Serveur HTTP Apache |
| Express.js | Framework web Node.js |
| GoAhead | Serveur web embarqué |
| Gotenberg | Service de génération de PDF |
| Guacamole | Passerelle de bureau à distance Apache |
| SOAP | Services web |
| Tengine | Serveur web Alibaba |
| Tomcat | Apache Tomcat |
| WordPress | Plateforme CMS |
| UPnP | Universal Plug and Play |
| Module | Description |
|---|
| AEM | Adobe Experience Manager |
| Dynamics 365 | Microsoft Dynamics 365 / Power Apps |
| Oracle Service Cloud | Plateforme CRM Oracle |
| SAP NetWeaver | Plateforme d'entreprise SAP |
| Splunk | Plateforme de gestion de logs |
| VMware Horizon | Infrastructure de bureau virtuel |
| QNAP QTS | Gestion NAS |
| Exchange | Microsoft Exchange Server |
| Protocole | Transport | Ports par défaut |
|---|
| 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 |
| Protocole | Transport | Ports par défaut |
|---|
| SSH | TCP | 22, 2222 |
| RDP | TCP/TLS | 3389 |
| Telnet | TCP | 23 |
| VNC | TCP | 5900 |
| AnyDesk | TCP | 7070 |
| TeamViewer | TCP | 5938 |
| Protocole | Transport | Ports par défaut |
|---|
| 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 |
| Protocole | Transport | Ports par défaut |
|---|
| FTP | TCP | 21 |
| SMB | TCP | 445 |
| NFS | TCP/UDP | 2049 |
| Rsync | TCP | 873 |
| TFTP | UDP | 69 |
| SVN | TCP | 3690 |
| LDAP | TCP/TLS | 389, 636 |
| Protocole | Transport | Ports par défaut |
|---|
| 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 |
| Protocole | Transport | Ports par défaut | Notes |
|---|
| Modbus | TCP | 502 | SCADA/PLC |
| S7comm | TCP | 102 | API Siemens |
| EtherNet/IP | TCP | 44818 | Rockwell/Allen-Bradley |
| PROFINET | TCP | 34962-34964 | Industriel Siemens |
| BACnet | UDP | 47808 | Automatisation des bâtiments |
| OPC UA | TCP | 4840 | Interopérabilité industrielle |
| OMRON FINS | TCP/UDP | 9600 | API Omron |
| MELSEC-Q | TCP | 5006, 5007 | API Mitsubishi |
| KNXnet/IP | UDP | 3671 | Automatisation des bâtiments |
| IEC 104 | TCP | 2404 | SCADA réseau électrique |
| DNP3 | TCP | 20000 | SCADA réseau électrique |
| Codesys | TCP | 1200, 2455 | Exécution API |
| Fox | TCP | 1911 | Tridium Niagara |
| PC WORX | TCP | 1962 | Phoenix Contact |
| ProConOS | TCP | 20547 | Exécution API |
| HART-IP | TCP | 5094 | Automatisation des procédés |
| EtherCAT | UDP | 34980 | Contrôle de mouvement |
| Crimson v3 | TCP | 789 | IHM Red Lion |
| PCOM | TCP | 20256 | Unitronics PLC |
| GE SRTP | TCP | 18245 | API GE |
| ATG | TCP | 10001 | Jaugeurs de réservoirs |
| Protocole | Transport | Ports par défaut | Notes |
|---|
| Diameter | TCP/SCTP | 3868 | AAA LTE/5G |
| M3UA | SCTP | 2905 | SS7 sur IP |
| M2UA | SCTP | 2904 | Adaptation utilisateur MTP2 |
| M2PA | SCTP | 3565 | Adaptation pair MTP2 |
| SGsAP | SCTP | 29118 | Repli à commutation de circuits |
| X2AP | SCTP | 36422 | LTE inter-eNodeB |
| IUA | SCTP | 9900 | ISDN sur IP |
| SIP | TCP/UDP/TLS | 5060, 5061 | Signalisation VoIP |
| MEGACO/H.248 | UDP | 2944, 2945 | Passerelle multimédia |
| MGCP | UDP | 2427, 2727 | Passerelle multimédia |
| H.323 | TCP | 1720 | Visioconférence |
| SCCP/Skinny | TCP | 2000, 2443 | Téléphones IP Cisco |
| IAX2 | UDP | 4569 | Protocole Asterisk |
| GTP-C | UDP | 2123 | Contrôle GPRS |
| GTP-U | UDP | 2152 | Plan utilisateur GPRS |
| GTP' | UDP | 3386 | Facturation GPRS |
| PFCP | UDP | 8805 | Plan utilisateur 5G |
| Protocole | Transport | Ports par défaut |
|---|
| 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 |
| Protocole | Transport | Ports par défaut |
|---|
| 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 |
| Protocole | Transport | Ports par défaut |
|---|
| 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 |