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

nerva v1.42.9

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

Поделиться
Nerva - Fast service fingerprinting CLI for network reconnaissance supporting 170+ protocols

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-приложения

Установка

Релизы

Загрузите готовый бинарник со страницы Релизы.

Из 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 scanning** (может потребоваться 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

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

ID находкиСерьезностьОписание
docker-unauth-apiКритическаяDocker API доступен без аутентификации
x11-unauth-accessКритическаяСервер X11 разрешает неаутентифицированные подключения
smb-signing-not-requiredСредняяПодпись SMB не требуется (риск атаки relay)
telnet-cleartextСредняяTelnet передает учетные данные в открытом виде
vnc-detectedСредняяОбнаружен VNC (часто слабая аутентификация)
ssh-password-authСредняяСервер разрешает аутентификацию по паролю
ssh-weak-cipherНизкаяСервер предлагает слабые шифры (RC4, 3DES, Blowfish)
ssh-weak-kexНизкаяСервер предлагает слабые алгоритмы обмена ключами
ssh-weak-macНизкаяСервер предлагает слабые алгоритмы MAC
ftp-cleartextНизкаяFTP передает учетные данные в открытом виде

Пример вывода с неверными конфигурациями:```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 resolution strategies (--dns-order):

OptionStrategyUse Case
lLocal onlyStandard local DNS (default)
pProxy onlyForce proxy-side DNS resolution
lpLocal, fallback to proxyTry local first, use proxy on failure
plProxy, fallback to localTry proxy first, use local on failure

Note: socks5h:// scheme automatically forces proxy-side DNS (equivalent to --dns-order p)

Tor scanning example:```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Межсетевые экраны Cisco / VPN-устройства
FortiGateМежсетевой экран / VPN Fortinet
GlobalProtectVPN Palo Alto Networks
JuniperМежсетевые экраны Juniper SRX
OPNsenseМежсетевой экран OPNsense
pfSenseМежсетевой экран pfSense
SonicWallМежсетевые экраны SonicWall
AnyConnectCisco AnyConnect SSL VPN
Cisco ExpresswayШлюз взаимодействия Cisco
BigIPБалансировщик нагрузки F5 BIG-IP
WinRMУдалённое управление Windows

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

МодульОписание
OllamaСамостоятельно размещаемый сервер LLM
LocalAIСамостоятельно размещаемый LLM (совместимый с OpenAI)
Open WebUIВеб-интерфейс LLM (в стиле ChatGPT)
TritonNVIDIA Triton Inference Server
WeaviateВекторная база данных для AI
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Распределённая трассировка
JenkinsCI/CD автоматизация
KubernetesAPI оркестрации контейнеров
PortainerВеб-интерфейс управления Docker
PrometheusСистема мониторинга
Swagger/OpenAPIДокументация API
TeamCityCI/CD сервер
VaultУправление секретами HashiCorp

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

МодульОписание
Apache HTTPDApache HTTP Server
Express.jsВеб-фреймворк Node.js
GoAheadВстроенный веб-сервер
GotenbergСервис генерации PDF
GuacamoleШлюз удалённого рабочего стола Apache
SOAPВеб-сервисы
TengineВеб-сервер Alibaba
TomcatApache Tomcat
WordPressCMS платформа
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/ПЛК
S7commTCP102Siemens PLC
EtherNet/IPTCP44818Rockwell/Allen-Bradley
PROFINETTCP34962-34964Siemens industrial
BACnetUDP47808Автоматизация зданий
OPC UATCP4840Промышленная интеграция
OMRON FINSTCP/UDP9600OMRON PLC
MELSEC-QTCP5006, 5007Mitsubishi PLC
KNXnet/IPUDP3671Автоматизация зданий
IEC 104TCP2404SCADA энергосистем
DNP3TCP20000SCADA энергосистем
CodesysTCP1200, 2455Среда выполнения ПЛК
FoxTCP1911Tridium Niagara
PC WORXTCP1962Phoenix Contact
ProConOSTCP20547Среда выполнения ПЛК
HART-IPTCP5094Автоматизация процессов
EtherCATUDP34980Управление движением
Crimson v3TCP789Red Lion HMI
PCOMTCP20256Unitronics PLC
GE SRTPTCP18245GE PLC
ATGTCP10001Уровнемеры

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

ПротоколТранспортПорты по умолчаниюПримечания
DiameterTCP/SCTP3868AAA для LTE/5G
M3UASCTP2905SS7 поверх IP
M2UASCTP2904MTP2 User Adaptation
M2PASCTP3565MTP2 Peer Adaptation
SGsAPSCTP29118Circuit-switched fallback
X2APSCTP36422LTE inter-eNodeB
IUASCTP9900ISDN поверх IP
SIPTCP/UDP/TLS5060, 5061Сигнализация VoIP
MEGACO/H.248UDP2944, 2945Медиашлюз
MGCPUDP2427, 2727Медиашлюз
H.323TCP1720Видеоконференции
SCCP/SkinnyTCP2000, 2443Cisco IP-телефоны
IAX2UDP4569Протокол Asterisk
GTP-CUDP2123GPRS control
GTP-UUDP2152GPRS user plane
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/HEAD/examples/service-fingerprinting-example.go).

## Варианты использования

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

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

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

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

CI/CD Security Scanning

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

Bug Bounty Reconnaissance

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

Telecom Network Analysis

Снимайте отпечатки узлов 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]

Why Nerva?

vs Nmap

  • Более разумные настройки по умолчанию: Nerva сначала проверяет наиболее вероятный протокол на основе номера порта
  • Структурированный вывод: Нативная поддержка JSON/CSV для легкого разбора и интеграции в конвейеры
  • Сфокусированность: Только определение сервисов — объединяйте с выделенными сканерами портов для обнаружения

vs zgrab2

  • Автоопределение: Не нужно заранее указывать протокол
  • Проще в использовании: nerva -t host:port против echo host | zgrab2 http -p port

Troubleshooting

No output

Cause: Port is closed or no supported service detected.

Solution: Verify the port is open:```sh nc -zv example.com 80

### Timeout errors

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

**Solution**: Increase timeout:```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 году:

Категории