Назад к обновлениям
New releaseAug 26, 2026

nerva v1.69.2

Быстрый CLI для идентификации сервисов по 170+ протоколам (TCP/UDP/SCTP) — разработан компанией Praetorian

Поделиться
Nerva — быстрый CLI для фингерпринтинга сервисов при сетевой разведке с поддержкой 170+ протоколов

Nerva
Nerva: быстрый CLI для фингерпринтинга сервисов

Release Build Status Go Report Card License Stars

ВозможностиУстановкаБыстрый стартИспользованиеПротоколыБиблиотекаСценарии использованияУстранение неполадок

Высокопроизводительный фингерпринтинг сервисов, написанный на Go. Определяйте 170+ сетевых протоколов через транспорты TCP, UDP и SCTP с извлечением подробных метаданных.

Nerva быстро обнаруживает и идентифицирует сервисы, работающие на открытых сетевых портах. Используйте её вместе со сканерами портов, такими как Naabu, для фингерпринтинга обнаруженных сервисов или интегрируйте её в свои конвейеры безопасности для автоматизированной разведки.

Возможности

  • 170+ плагинов протоколов — базы данных, удалённый доступ, веб-сервисы, обмен сообщениями, промышленные и телекоммуникационные протоколы
  • 76 HTTP-фингерпринтеров — обнаружение веб-технологий, включая межсетевые экраны, базы данных, серверы AI/LLM и многое другое
  • Обнаружение ошибок конфигурации безопасности — выявление распространённых проблем безопасности, таких как неаутентифицированные API и протоколы с передачей данных в открытом виде (--misconfigs)
  • Поддержка нескольких транспортов — TCP (по умолчанию), UDP (--udp) и SCTP (--sctp, только Linux)
  • Поддержка прокси — прозрачная маршрутизация трафика сканирования через SOCKS5 или HTTP-прокси с настраиваемым разрешением DNS
  • Подробные метаданные — извлечение версий, конфигураций и сведений, значимых для безопасности, из каждого сервиса
  • Быстрый режим — сканирование только портов по умолчанию для оперативной разведки (--fast)
  • Гибкий вывод — форматы JSON, CSV или удобочитаемый для человека
  • Удобство для конвейеров — передача данных из Naabu, Nmap или любого инструмента, выводящего host:port
  • Библиотека Go — импорт непосредственно в ваши приложения на Go

Установка

Релизы

Скачайте готовый бинарный файл со страницы Releases.

Из 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":{...}}

Pipe из сканера портов:```sh
naabu -host example.com -silent | nerva
# http://example.com:80
# ssh://example.com:22
# https://example.com:443

Полный справочник — каждая подкоманда, псевдоним и флаг, включая скрытые от --help — генерируется в docs/CLI.md.

Использование```

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

### Примеры

**Несколько целей:**```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

### Обнаружение ошибок конфигурации безопасности

Nerva может выявлять распространённые ошибки конфигурации безопасности при включении флага `--misconfigs`:```sh
nerva -t example.com:2375 --misconfigs --json

Обнаруженные ошибки конфигурации:

Finding IDSeverityDescription
docker-unauth-apiCriticalDocker API доступен без аутентификации
x11-unauth-accessCriticalX11-сервер допускает неаутентифицированные подключения
smb-signing-not-requiredMediumПодписывание SMB не требуется (риск relay-атаки)
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: Поддержка UDP через SOCKS5 ограничена. Не все 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)

Определение технологий для веб-сервисов, организованное по категориям:

Межсетевые экраны и сетевая безопасность (12)

МодульОписание
CheckpointCheck Point Security Gateway
Cisco ASA/FTDМежсетевые экраны/VPN-устройства Cisco
FortiGateМежсетевой экран/VPN Fortinet
GlobalProtectVPN Palo Alto Networks
JuniperМежсетевые экраны Juniper SRX
OPNsenseМежсетевой экран OPNsense
pfSenseМежсетевой экран pfSense
SonicWallМежсетевые экраны SonicWall
AnyConnectSSL VPN Cisco AnyConnect
Cisco ExpresswayШлюз для совместной работы Cisco
BigIPБалансировщик нагрузки F5 BIG-IP
WinRMWindows Remote Management

ИИ/LLM и машинное обучение (6)

МодульОписание
OllamaСервер вывода LLM для самостоятельного размещения
LocalAIВывод LLM для самостоятельного размещения (совместим с OpenAI)
Open WebUIВеб-интерфейс для LLM (в стиле ChatGPT)
TritonNVIDIA Triton Inference Server
WeaviateВекторная база данных для ИИ
ChromaDBВекторная база данных

Базы данных и хранилища данных (12)

МодульОписание
ArangoDBМультимодельная база данных
CockroachDBРаспределённая SQL-база данных
CouchDBДокументная база данных Apache
ElasticsearchПоисковый и аналитический движок
etcdРаспределённое хранилище ключ-значение
MilvusВекторная база данных
MinIOОбъектное хранилище, совместимое с S3
PineconeВекторная база данных
Redis CommanderВеб-интерфейс управления Redis
TiDBРаспределённая SQL-база данных
YugabyteDBРаспределённая SQL-база данных
QdrantВекторная база данных

DevOps и инфраструктура (14)

МодульОписание
ArtifactoryРепозиторий артефактов JFrog
ConsulСервисная сетка HashiCorp
Docker RegistryРеестр образов контейнеров
GiteaСамостоятельно размещаемый сервис Git
GrafanaПлатформа наблюдаемости
HarborРеестр контейнеров
JaegerРаспределённая трассировка
JenkinsАвтоматизация CI/CD
KubernetesAPI оркестрации контейнеров
PortainerИнтерфейс управления Docker
PrometheusСистема мониторинга
Swagger/OpenAPIДокументация API
TeamCityСервер CI/CD
VaultУправление секретами HashiCorp

Веб-серверы и фреймворки (10)

МодульОписание
Apache HTTPDApache HTTP Server
Express.jsВеб-фреймворк Node.js
GoAheadВстраиваемый веб-сервер
GotenbergСервис генерации PDF
GuacamoleШлюз удалённого рабочего стола Apache
SOAPВеб-сервисы
TengineВеб-сервер Alibaba
TomcatApache Tomcat
WordPressПлатформа CMS
UPnPUniversal Plug and Play

Корпоративные и бизнес-решения (8)

МодульОписание
AEMAdobe Experience Manager
Dynamics 365Microsoft Dynamics 365 / Power Apps
Oracle Service CloudCRM-платформа Oracle
SAP NetWeaverКорпоративная платформа SAP
SplunkПлатформа управления логами
VMware HorizonИнфраструктура виртуальных рабочих столов
QNAP QTSУправление NAS
ExchangeMicrosoft Exchange Server

Домашние и IoT-устройства (2)

МодульОписание
Home AssistantПлатформа домашней автоматизации
UniFi/EdgeOSСетевые устройства Ubiquiti

Прочее (2)

МодульОписание
Go pprofПрофилировочные эндпоинты Go
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

Веб и API (2)

ПротоколТранспортПримечания
HTTP/HTTPSTCPHTTP/2, определение технологий через Wappalyzer
KubernetesTCPОпределение API-сервера

Обмен сообщениями и очереди (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
S7commTCP102Siemens PLC
EtherNet/IPTCP44818Rockwell/Allen-Bradley
PROFINETTCP34962-34964Промышленные системы Siemens
BACnetUDP47808Автоматизация зданий
OPC UATCP4840Промышленная совместимость
OMRON FINSTCP/UDP9600OMRON PLC
MELSEC-QTCP5006, 5007Mitsubishi PLC
KNXnet/IPUDP3671Автоматизация зданий
IEC 104TCP2404SCADA энергосетей
DNP3TCP20000SCADA энергосетей
CodesysTCP1200, 2455Среда выполнения PLC
FoxTCP1911Tridium Niagara
PC WORXTCP1962Phoenix Contact
ProConOSTCP20547Среда выполнения PLC
HART-IPTCP5094Автоматизация процессов
EtherCATUDP34980Управление движением
Crimson v3TCP789Red Lion HMI
PCOMTCP20256Unitronics PLC
GE SRTPTCP18245GE PLC
ATGTCP10001Датчики уровня в резервуарах

Телекоммуникации и VoIP (17)

ПротоколТранспортПорты по умолчаниюПримечания
DiameterTCP/SCTP3868LTE/5G AAA
M3UASCTP2905SS7 over IP
M2UASCTP2904MTP2 User Adaptation
M2PASCTP3565MTP2 Peer Adaptation
SGsAPSCTP29118Circuit-switched fallback
X2APSCTP36422LTE inter-eNodeB
IUASCTP9900ISDN over IP
SIPTCP/UDP/TLS5060, 5061Сигнализация VoIP
MEGACO/H.248UDP2944, 2945Медиашлюз
MGCPUDP2427, 2727Медиашлюз
H.323TCP1720Видеоконференции
SCCP/SkinnyTCP2000, 2443IP-телефоны Cisco
IAX2UDP4569Протокол Asterisk
GTP-CUDP2123Управление GPRS
GTP-UUDP2152Пользовательская плоскость GPRS
GTP'UDP3386Тарификация GPRS
PFCPUDP8805Пользовательская плоскость 5G

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/main/examples/service-fingerprinting-example.go) для полного рабочего примера.

## Сценарии использования

### Тестирование на проникновение

Быстрое определение сервисов, обнаруженных в ходе разведки, для выявления потенциальных векторов атак.

### Конвейеры обнаружения активов

Объедините с Naabu или Masscan для крупномасштабной инвентаризации активов:```sh
naabu -host 10.0.0.0/24 -silent | nerva --json | jq '.protocol'

Сканирование безопасности CI/CD

Интегрируйте в конвейеры развёртывания, чтобы убедиться, что открыты только ожидаемые сервисы.

Разведка для Bug Bounty

Быстро перечисляйте сервисы по целевым областям, чтобы находить интересные конечные точки.

Анализ телекоммуникационных сетей

Определяйте узлы Diameter в сетях LTE/5G с использованием транспорта SCTP (Linux):```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 против 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 года:

Категории