Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Captura CLI amb lc sniff

lc sniff és la base de lippycat: una eina CLI de captura de paquets semblant a tcpdump o tshark, amb anàlisi de protocols integrada i compatibilitat amb VoIP.

La vostra primera captura

Selecció d’una interfície

Primer, esbrineu quines interfícies estan disponibles:

lc list interfaces

Això mostra les interfícies de captura amb el tipus, l’estat operatiu i les adreces IP, incloent-hi el bucle local, interfícies VPN/túnel i interfícies inactives. Una indicació de la ruta per defecte, quan està disponible, ajuda a identificar les interfícies de sortida de l’amfitrió. Trieu la interfície connectada a la xarxa que voleu supervisar. Utilitzeu --json per obtenir metadades estructurades o --names per obtenir un nom d’interfície per línia.

Consell: utilitzeu lc list interfaces --all per incloure ponts reconeguts, enllaços de contenidors/VM i fonts especials de captura ocultes a la vista per defecte. Utilitzeu --check per provar breument l’accés de captura sense mode promiscu ni lectura de paquets; s’ometen les fonts especials de captura. El llistat per si sol no comprova els permisos.

Captura bàsica

Iniciar la captura en una interfície:

sudo lc sniff -i eth0

La interfície per defecte és any (totes les interfícies). Podeu indicar diverses interfícies separades per comes:

sudo lc sniff -i eth0,eth1

Premeu Ctrl+C per aturar la captura. lippycat mostra un resum dels paquets capturats.

Format de sortida

lc sniff escriu cada paquet capturat a stdout com una línia de JSON. Això facilita passar-lo a jq, grep o altres eines. Canvieu al format de text per obtenir una sortida fàcil de llegir:

sudo lc sniff -i eth0 --format text

Consulteu Treballar amb la sortida JSON per canalitzar, filtrar i desar la sortida de paquets.

Utilitzeu -q (mode silenciós) per suprimir la sortida de paquets i millorar el rendiment quan només necessiteu fitxers PCAP.

Filtratge bàsic

Utilitzeu filtres BPF amb -f / --filter per centrar-vos en trànsit concret (consulteu l’Apèndix C: referència de filtres BPF per veure la sintaxi completa):

Capturar només trànsit DNS:

sudo lc sniff -i eth0 -f "port 53"

Capturar trànsit cap a un amfitrió concret o des d’aquest:

sudo lc sniff -i eth0 -f "host 10.0.0.1"

Capturar només trànsit TCP al port 5060 (SIP):

sudo lc sniff -i eth0 -f "tcp port 5060"

Combinar condicions:

sudo lc sniff -i eth0 -f "host 10.0.0.1 and port 5060"

Mode promiscu

Per defecte, la interfície només captura trànsit destinat a la vostra màquina. Activeu el mode promiscu per veure tot el trànsit del segment:

sudo lc sniff -i eth0 -p

Lectura de fitxers PCAP

Analitzar fitxers PCAP existents en lloc d’interfícies en viu:

lc sniff -r capture.pcap

No calen privilegis elevats per llegir fitxers.

Registres estructurats de protocols

Establiu --log-dir per escriure fitxers de protocols normalitzats tot mantenint la sortida de paquets existent a stdout. Aquestes opcions de l’ordre pare funcionen amb totes les subordres de protocol:

lc sniff http -r capture.pcap --log-dir ./logs --log-streams conn,http,files

El registre està desactivat per defecte. La sortida és TSV d’estil Zeek per defecte, o JSONL amb --log-format json. Les cues són limitades: ateneu els avisos de descart i utilitzeu una aturada ordenada per buidar els buffers als fitxers. Consulteu Registres estructurats de protocols per veure tots els esquemes, les opcions, la rotació, la semàntica de completesa i les indicacions de privadesa.

Treballar amb la sortida JSON

Tots els analitzadors de protocols comparteixen la mateixa estructura de sortida JSON basada en PacketDisplay. Cada paquet té camps comuns (marca de temps, IP i port d’origen/destinació, protocol, longitud) i un objecte opcional de metadades específiques del protocol (VoIPData, DNSData, TLSData, HTTPData, EmailData o RADIUSData).

Separació de stdout i stderr

lippycat segueix les convencions Unix: les dades de paquets van a stdout i els missatges de registre a stderr. Això permet canalitzar les dades de paquets de manera neta sense deixar de veure els registres:

Canalitzar els paquets cap a jq mantenint els registres visibles al terminal:

sudo lc sniff dns -i eth0 | jq '.DNSData.QueryName'

Redirigir els registres a un fitxer i canalitzar els paquets per processar-los:

sudo lc sniff dns -i eth0 2>dns-capture.log | jq '.DNSData.QueryName'

Descartar completament els registres:

sudo lc sniff dns -i eth0 2>/dev/null | jq '.DNSData.QueryName'

Anàlisi entre protocols

Com que tots els protocols comparteixen els mateixos camps bàsics, podeu capturar sense una subordre de protocol i filtrar per metadades específiques de protocol amb jq:

Capturar trànsit general i després filtrar DNS i TLS:

sudo lc sniff -i eth0 2>/dev/null | \
  jq -r 'if .DNSData then
    "DNS: " + .DNSData.QueryName
  elif .TLSData then
    "TLS: " + (.TLSData.SNI // "no-sni")
  else empty end'

Desament i reproducció

Combineu la sortida JSON amb l’escriptura PCAP per obtenir anàlisi estructurada i fidelitat completa dels paquets:

Escriure PCAP i JSON simultàniament:

sudo lc sniff dns -i eth0 -w dns-traffic.pcap 2>/dev/null > dns-analysis.jsonl

Reproduir el PCAP més tard amb un analitzador de protocol diferent:

lc sniff tls -r dns-traffic.pcap

El fitxer PCAP conté els paquets en brut i es pot tornar a analitzar amb qualsevol subordre de protocol o obrir amb Wireshark.

Modes de protocol

lc sniff té subordres específiques de protocol que permeten una anàlisi detallada. Cadascuna afegeix filtratge, correlació i sortida adaptats al protocol.

Anàlisi de DNS

sudo lc sniff dns -i eth0

Captura consultes i respostes DNS amb correlació de consulta/resposta i seguiment del temps de resposta.

Opcions principals:

OpcióValor per defecteDescripció
--domain—Filtrar per patró de domini (glob: *.example.com)
--domains-file—Carregar patrons de domini d’un fitxer
--dns-port53Ports DNS, separats per comes
--udp-onlyfalseCapturar només DNS UDP (omet TCP)
--track-queriestrueCorrelació de consulta/resposta amb RTT
--detect-tunnelingtrueDetecció de túnels DNS mitjançant anàlisi d’entropia

Inspecció de TLS

sudo lc sniff tls -i eth0

Analitza negociacions TLS sense desxifrar el trànsit. Extreu SNI, detalls de certificats, conjunts de xifratge i empremtes TLS.

Opcions principals:

OpcióValor per defecteDescripció
--sni—Filtrar per patró SNI (glob: *.example.com)
--sni-file—Carregar patrons SNI d’un fitxer
--ja3—Filtrar pel hash de l’empremta JA3
--ja3s—Filtrar pel hash de l’empremta JA3S
--ja4—Filtrar per empremta JA4
--tls-port443Ports TLS, separats per comes
--track-connectionstrueCorrelació de ClientHello/ServerHello

Cada opció d’empremta té una variant -file corresponent per a la càrrega massiva des de fitxers.

Captura HTTP

sudo lc sniff http -i eth0

Reconstrueix parelles de petició/resposta HTTP dels fluxos TCP amb mesurament de RTT.

Opcions principals:

OpcióValor per defecteDescripció
--host—Filtrar per patró d’amfitrió (glob)
--path—Filtrar per patró de camí URL (glob)
--method—Filtrar per mètodes HTTP (GET,POST)
--status—Filtrar per codis d’estat (404, 4xx, 400-499)
--user-agent—Filtrar per patró User-Agent
--content-type—Filtrar per patró Content-Type
--capture-bodyfalseActivar la captura del cos per cercar paraules clau
--max-body-size65536Mida màxima del cos en bytes
--http-port80,8080,8000,3000,8888Ports HTTP
--tls-keylog—Camí SSLKEYLOGFILE per al desxifratge HTTPS
--track-requeststrueCorrelació de petició/resposta amb RTT

Cada opció de patró té una variant -file corresponent per a la càrrega massiva (p. ex., --hosts-file, --paths-file). La cerca massiva de paraules clau utilitza l’algoritme Aho-Corasick mitjançant --keywords-file.

Monitoratge de correu electrònic

sudo lc sniff email -i eth0

Captura sessions SMTP, IMAP i POP3 amb seguiment de sessions.

Opcions principals:

OpcióValor per defecteDescripció
--address—Filtrar per adreça de correu (remitent O destinatari)
--sender—Filtrar per adreça del remitent (MAIL FROM)
--recipient—Filtrar per adreça del destinatari (RCPT TO)
--subject—Filtrar per patró d’assumpte
--protocolallProtocol: smtp, imap, pop3, all
--smtp-port25,587,465Ports SMTP
--imap-port143,993Ports IMAP
--pop3-port110,995Ports POP3
--capture-bodyfalseActivar la captura del cos
--track-sessionstrueSeguiment i correlació de sessions

Autenticació i comptabilització RADIUS

sudo lc sniff radius -i eth0

Captura missatges UDP RADIUS visibles d’autenticació i comptabilització, associa respostes amb peticions observades i elimina els atributs que contenen credencials de la sortida habitual. Quan calgui, restringiu la captura a un compte exacte o a una identitat de línia vinculada al desplegament:

sudo lc sniff radius -i eth0 --radius-username 'alice@example.test'

Opcions principals:

OpcióValor per defecteDescripció
--radius-port1812,1813Ports UDP RADIUS addicionals
--radius-username—User-Name complet exacte
--radius-mac—Calling-Station-Id exacta en majúscules amb guionets
--radius-mac-profile—Obligatori amb MAC: calling-station-id-uppercase-hyphen-v1
--radius-attribute—AVP hexadecimal complet; repetiu-lo per a coincidències conjuntives
--radius-line-profile—Font de la identitat de línia: nas-port-id o agent-circuit-id
--radius-line-id—Valor exacte de la identitat de línia
--radius-transaction-timeout30sDurada de l’associació de petició/resposta

El capítol de captura RADIUS i POI documenta totes les opcions compartides, la vinculació d’àmbit, els límits d’estat i el lliurament LI opcional.

Anàlisi de VoIP

VoIP és el mode de protocol de lippycat amb més funcions:

Iniciar una captura VoIP bàsica:

sudo lc sniff voip -i eth0

Filtrar per un usuari SIP (s’admeten comodins):

sudo lc sniff voip -i eth0 -u alicent

Utilitzar una coincidència de sufix:

sudo lc sniff voip -i eth0 -u "*456789"

Filtrar diversos usuaris:

sudo lc sniff voip -i eth0 -u "alicent,robb"

Restringir la captura a un port SIP concret:

sudo lc sniff voip -i eth0 -S 5060

Utilitzar un interval de ports RTP personalitzat:

sudo lc sniff voip -i eth0 -R 8000-9000

Opcions principals:

OpcióForma curtaValor per defecteDescripció
--sip-user-u—Usuari SIP/telèfon que cal comparar (comodins, separats per comes)
--sip-port-S—Ports SIP, separats per comes
--rtp-port-range-R10000-32768Intervals de ports RTP
--udp-only-UfalseMode heretat només UDP; ocult i obsolet
--tcp-performance-mode-M—Perfil TCP: balanced, throughput, latency, memory
--gpu-backend-gautoMotor GPU en compilacions CUDA: auto, cuda, opencl, cpu-simd, disabled
--pcap-grace-period—5sPeríode de gràcia abans de tancar els PCAP per trucada
--esp-null—falseDesencapsular ESP mitjançant validació del tràiler/SPI
--esp-heuristic—falseDesencapsular ESP inspeccionant el contingut de la càrrega útil
--esp-icv-size—-1 (automàtic)Mida ICV en bytes: 0, 8, 12 o 16

Desencapsulació ESP-NULL

La desencapsulació ESP està desactivada per defecte: sense --esp-null o --esp-heuristic, els paquets ESP es transmeten intactes i el filtre BPF de VoIP no els admet.

Activeu-la per al trànsit VoIP dins de túnels ESP-NULL (habituals en desplegaments IPsec on el xifratge està desactivat però es manté l’emmarcament ESP):

sudo lc sniff voip -i eth0 --esp-null --esp-icv-size 12

lippycat elimina la capçalera ESP i el tràiler ICV, exposant els paquets UDP/SIP/RTP interns per a l’anàlisi normal. Amb --esp-icv-size -1 (valor per defecte), la mida ICV es detecta automàticament.

--esp-heuristic identifica ESP-NULL inspeccionant el contingut de la càrrega útil en lloc del tràiler ESP. Preferiu --esp-null quan se sap que la SA utilitza xifratge NULL: en SA realment xifrades, l’heurística de contingut pot confondre text xifrat amb trànsit intern.

Sortida de fitxers PCAP

Escriptura de fitxers PCAP

Desar els paquets capturats per a l’anàlisi fora de línia amb -w:

sudo lc sniff -i eth0 -w capture.pcap

El fitxer resultant es pot obrir amb Wireshark, analitzar amb tshark o tornar a llegir amb lc watch file.

Cada subordre de protocol també admet -w:

Per a DNS:

sudo lc sniff dns -i eth0 -w dns-traffic.pcap

Per a VoIP:

sudo lc sniff voip -i eth0 -w voip-traffic.pcap

PCAP per trucada (VoIP)

En mode VoIP, l’opció -w crea automàticament fitxers PCAP separats per trucada, dividits entre senyalització SIP i contingut multimèdia RTP:

sudo lc sniff voip -i eth0 --sip-user alicent -w /var/capture/alicent

Això crea /var/capture/alicent_sip_<callid>.pcap i /var/capture/alicent_rtp_<callid>.pcap.

Per veure funcions més avançades de PCAP per trucada (organització de directoris, patrons de nom de fitxer i accions de finalització), consulteu Agregació central amb lc process i Mode autònom amb lc tap.

Ajust del rendiment

Modes de rendiment TCP

El reassemblatge TCP és necessari per a SIP sobre TCP i HTTP. lippycat ofereix perfils de rendiment preconfigurats mitjançant -M / --tcp-performance-mode:

PerfilPressupost de memòriaIdeal per a
balanced100 MBLa majoria de casos d’ús (per defecte)
throughput500 MBEntorns amb molt trànsit
latency200 MBAnàlisi en temps real
memory25 MBSistemes encastats, poc trànsit
sudo lc sniff voip -i eth0 -M throughput

Per a un control detallat, es poden ajustar paràmetres TCP individuals (límits de goroutines, mides de buffer, temps d’espera). Consulteu lc sniff voip --help per veure la llista completa.

Restricció de ports

En xarxes amb molt trànsit TCP, utilitzeu restriccions explícites de ports SIP i RTP per centrar la captura tot permetent SIP sobre TCP quan n’hi hagi:

sudo lc sniff voip -i eth0 -S 5060 -R 10000-20000

L’antiga opció VoIP --udp-only encara s’accepta per compatibilitat, però està oculta i és obsoleta perquè pot ometre trànsit SIP TCP.

Acceleració GPU

Traslladar la comparació de patrons dels filtres d’aplicació a CUDA per a captures d’alt cabal:

sudo lc sniff voip -i eth0 -g auto

Les opcions GPU de sniff voip només es registren en compilacions CUDA, com ara binaris compilats amb make build-cuda.

MotorValor de l’opcióRequisits
CUDAcudaGPU NVIDIA i conjunt d’eines CUDA, make build-cuda
CPU SIMDcpu-simdCompatibilitat amb AVX2 o SSE4.2
Detecció automàticaautoSelecciona la millor opció disponible

Actualment OpenCL no està implementat. El valor s’accepta per compatibilitat de configuració, però es recorre a la comparació amb CPU. L’anàlisi de SIP i l’extracció de Call-ID també es mantenen a la CPU.

Consulteu Optimització del rendiment per veure la configuració GPU i les proves de rendiment.

Injecció en una interfície virtual

Injectar paquets filtrats en una interfície de xarxa virtual perquè altres eines els utilitzin:

sudo lc sniff voip -i eth0 -V --vif-name lc0

Això crea una interfície TAP lc0 des de la qual altres eines (Wireshark, tcpdump) poden capturar, veient només el trànsit filtrat seleccionat per lippycat.

OpcióValor per defecteDescripció
-V / --virtual-interfacefalseActivar la interfície virtual
--vif-namelc0Nom de la interfície
--vif-typetapTipus: tap (capa 2) o tun (capa 3)
--vif-startup-delay3sRetard abans d’iniciar la injecció
--vif-replay-timingfalseRespectar la temporització original dels paquets PCAP
--vif-buffer-size65536Mida de la cua d’injecció (paquets)
--vif-netns—Espai de noms de xarxa per a l’aïllament
--vif-drop-privileges—Canviar a aquest usuari després de crear la interfície