업데이트로 돌아가기
New releaseJul 21, 2026

nerva v1.42.6

빠른 서비스 핑거프린팅 CLI (170개 이상의 프로토콜 지원: TCP/UDP/SCTP) - Praetorian 제작

공유
Nerva - CLI 고속 서비스 지문 인식으로 170개 이상의 프로토콜 지원하는 네트워크 정찰 도구

Nerva
Nerva: 고속 서비스 지문 인식 CLI

릴리즈 빌드 상태 Go Report Card 라이선스 별표

기능설치빠른 시작사용법프로토콜라이브러리사용 사례문제 해결

Go로 작성된 고성능 서비스 지문 인식 도구. TCP, UDP, SCTP 전송에서 170개 이상의 네트워크 프로토콜을 식별하고 풍부한 메타데이터를 추출합니다.

Nerva는 열린 네트워크 포트에서 실행 중인 서비스를 신속하게 감지하고 식별합니다. Naabu와 같은 포트 스캐너와 함께 사용하여 발견된 서비스의 지문을 인식하거나, 보안 파이프라인에 통합하여 자동화된 정찰을 수행할 수 있습니다.

기능

  • 170개 이상의 프로토콜 플러그인 — 데이터베이스, 원격 접속, 웹 서비스, 메시징, 산업 및 통신 프로토콜
  • 76개의 HTTP 지문 인식기 — 방화벽, 데이터베이스, AI/LLM 서버 등을 포함한 웹 기술 탐지
  • 보안 오설정 탐지 — 인증되지 않은 API, 평문 프로토콜 등 일반적인 보안 문제 식별 (--misconfigs)
  • 다중 전송 지원 — TCP(기본), UDP(--udp), SCTP(--sctp, Linux 전용)
  • 프록시 지원 — SOCKS5 또는 HTTP 프록시를 통해 스캔 트래픽을 투명하게 라우팅하며 DNS 확인 설정 가능
  • 풍부한 메타데이터 — 각 서비스에서 버전, 구성, 보안 관련 세부 정보 추출
  • 고속 모드 — 빠른 정찰을 위해 기본 포트만 스캔 (--fast)
  • 유연한 출력 — JSON, CSV 또는 사람이 읽기 쉬운 형식
  • 파이프라인 친화적 — Naabu, Nmap 또는 호스트:포트를 출력하는 모든 도구에서 파이프 입력
  • 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 스캔** (루트 권한이 필요할 수 있습니다):```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 서명이 필요하지 않음 (릴레이 공격 위험)
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는 구성 가능한 DNS 확인을 통해 SOCKS5 및 HTTP 프록시를 통해 스캐닝 트래픽을 라우팅할 수 있습니다.

**지원되는 프록시 스키마:**

- `socks5://` - 로컬 DNS 확인을 사용하는 SOCKS5 프록시
- `socks5h://` - 프록시 측 DNS 확인을 사용하는 SOCKS5 프록시 (항상)
- `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 제한 사항: SOCKS5를 통한 UDP는 제한적으로 지원됩니다. 모든 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 보안 게이트웨이
Cisco ASA/FTDCisco 방화벽/VPN 어플라이언스
FortiGateFortinet 방화벽/VPN
GlobalProtectPalo Alto Networks VPN
JuniperJuniper SRX 방화벽
OPNsenseOPNsense 방화벽
pfSensepfSense 방화벽
SonicWallSonicWall 방화벽
AnyConnectCisco AnyConnect SSL VPN
Cisco ExpresswayCisco 협업 게이트웨이
BigIPF5 BIG-IP 로드 밸런서
WinRMWindows 원격 관리

AI/LLM 및 머신러닝 (6)

모듈설명
Ollama자체 호스팅 LLM 추론 서버
LocalAI자체 호스팅 LLM 추론 (OpenAI 호환)
Open WebUILLM 웹 인터페이스 (ChatGPT 스타일)
TritonNVIDIA Triton 추론 서버
WeaviateAI용 벡터 데이터베이스
ChromaDB벡터 데이터베이스

데이터베이스 및 데이터 저장소 (12)

모듈설명
ArangoDB다중 모델 데이터베이스
CockroachDB분산 SQL 데이터베이스
CouchDBApache 문서 데이터베이스
Elasticsearch검색 및 분석 엔진
etcd분산 키-값 저장소
Milvus벡터 데이터베이스
MinIOS3 호환 객체 스토리지
Pinecone벡터 데이터베이스
Redis CommanderRedis 웹 관리 UI
TiDB분산 SQL 데이터베이스
YugabyteDB분산 SQL 데이터베이스
Qdrant벡터 데이터베이스

DevOps 및 인프라 (14)

모듈설명
ArtifactoryJFrog 아티팩트 저장소
ConsulHashiCorp 서비스 메시
Docker Registry컨테이너 이미지 레지스트리
Gitea자체 호스팅 Git 서비스
Grafana옵저버빌리티 플랫폼
Harbor컨테이너 레지스트리
Jaeger분산 추적
JenkinsCI/CD 자동화
Kubernetes컨테이너 오케스트레이션 API
PortainerDocker 관리 UI
Prometheus모니터링 시스템
Swagger/OpenAPIAPI 문서화
TeamCityCI/CD 서버
VaultHashiCorp 비밀 관리

웹 서버 및 프레임워크 (10)

모듈설명
Apache HTTPDApache HTTP 서버
Express.jsNode.js 웹 프레임워크
GoAhead임베디드 웹 서버
GotenbergPDF 생성 서비스
GuacamoleApache 원격 데스크톱 게이트웨이
SOAP웹 서비스
TengineAlibaba 웹 서버
TomcatApache Tomcat
WordPressCMS 플랫폼
UPnP유니버설 플러그 앤 플레이

엔터프라이즈 및 비즈니스 (8)

모듈설명
AEMAdobe Experience Manager
Dynamics 365Microsoft Dynamics 365 / Power Apps
Oracle Service CloudOracle CRM 플랫폼
SAP NetWeaverSAP 엔터프라이즈 플랫폼
Splunk로그 관리 플랫폼
VMware Horizon가상 데스크톱 인프라
QNAP QTSNAS 관리
ExchangeMicrosoft Exchange 서버

홈 및 IoT (2)

모듈설명
Home Assistant홈 자동화 플랫폼
UniFi/EdgeOSUbiquiti 네트워크 장치

기타 (2)

모듈설명
Go pprofGo 프로파일링 엔드포인트
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를 통한 기술 탐지
KubernetesTCPAPI 서버 탐지

메시징 및 큐 (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-34964Siemens 산업용
BACnetUDP47808빌딩 자동화
OPC UATCP4840산업 상호운용성
OMRON FINSTCP/UDP9600OMRON PLC
MELSEC-QTCP5006, 5007Mitsubishi PLC
KNXnet/IPUDP3671빌딩 자동화
IEC 104TCP2404전력망 SCADA
DNP3TCP20000전력망 SCADA
CodesysTCP1200, 2455PLC 런타임
FoxTCP1911Tridium Niagara
PC WORXTCP1962Phoenix Contact
ProConOSTCP20547PLC 런타임
HART-IPTCP5094공정 자동화
EtherCATUDP34980모션 제어
Crimson v3TCP789Red Lion HMI
PCOMTCP20256Unitronics PLC
GE SRTPTCP18245GE PLC
ATGTCP10001탱크 게이지

통신 및 VoIP (17)

프로토콜전송기본 포트비고
DiameterTCP/SCTP3868LTE/5G AAA
M3UASCTP2905SS7 over IP
M2UASCTP2904MTP2 사용자 적응
M2PASCTP3565MTP2 피어 적응
SGsAPSCTP29118회선 교환 폴백
X2APSCTP36422LTE eNodeB 간
IUASCTP9900ISDN over IP
SIPTCP/UDP/TLS5060, 5061VoIP 시그널링
MEGACO/H.248UDP2944, 2945미디어 게이트웨이
MGCPUDP2427, 2727미디어 게이트웨이
H.323TCP1720화상 회의
SCCP/SkinnyTCP2000, 2443Cisco IP 전화
IAX2UDP4569Asterisk 프로토콜
GTP-CUDP2123GPRS 제어
GTP-UUDP2152GPRS 사용자 평면
GTP'UDP3386GPRS 과금
PFCPUDP88055G 사용자 평면

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 보안 스캐닝

배포 파이프라인에 통합하여 예상된 서비스만 노출되는지 확인합니다.

Bug Bounty 정찰

범위 대상의 서비스를 빠르게 열거하여 흥미로운 엔드포인트를 찾습니다.

Telecom 네트워크 분석

LTE/5G 네트워크에서 SCTP 전송을 사용하여 Diameter 노드 지문 추출 (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:portecho 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 플래그를 사용하여 활성화 (루트 권한 필요 가능):```sh sudo nerva -t example.com:53 -U

### SCTP 작동 안 함

**Cause**: SCTP는 리눅스에서만 지원됩니다.

**Solution**: 리눅스 시스템 또는 컨테이너에서 실행하세요:```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년 인턴 클래스가 개발했습니다:

카테고리