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 --allper incloure ponts reconeguts, enllaços de contenidors/VM i fonts especials de captura ocultes a la vista per defecte. Utilitzeu--checkper 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 defecte | Descripció |
|---|---|---|
--domain | — | Filtrar per patró de domini (glob: *.example.com) |
--domains-file | — | Carregar patrons de domini d’un fitxer |
--dns-port | 53 | Ports DNS, separats per comes |
--udp-only | false | Capturar només DNS UDP (omet TCP) |
--track-queries | true | Correlació de consulta/resposta amb RTT |
--detect-tunneling | true | Detecció 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 defecte | Descripció |
|---|---|---|
--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-port | 443 | Ports TLS, separats per comes |
--track-connections | true | Correlació 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 defecte | Descripció |
|---|---|---|
--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-body | false | Activar la captura del cos per cercar paraules clau |
--max-body-size | 65536 | Mida màxima del cos en bytes |
--http-port | 80,8080,8000,3000,8888 | Ports HTTP |
--tls-keylog | — | Camí SSLKEYLOGFILE per al desxifratge HTTPS |
--track-requests | true | Correlació 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 defecte | Descripció |
|---|---|---|
--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 |
--protocol | all | Protocol: smtp, imap, pop3, all |
--smtp-port | 25,587,465 | Ports SMTP |
--imap-port | 143,993 | Ports IMAP |
--pop3-port | 110,995 | Ports POP3 |
--capture-body | false | Activar la captura del cos |
--track-sessions | true | Seguiment 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 defecte | Descripció |
|---|---|---|
--radius-port | 1812,1813 | Ports 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-timeout | 30s | Durada 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 curta | Valor per defecte | Descripció |
|---|---|---|---|
--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 | -R | 10000-32768 | Intervals de ports RTP |
--udp-only | -U | false | Mode heretat només UDP; ocult i obsolet |
--tcp-performance-mode | -M | — | Perfil TCP: balanced, throughput, latency, memory |
--gpu-backend | -g | auto | Motor GPU en compilacions CUDA: auto, cuda, opencl, cpu-simd, disabled |
--pcap-grace-period | — | 5s | Període de gràcia abans de tancar els PCAP per trucada |
--esp-null | — | false | Desencapsular ESP mitjançant validació del tràiler/SPI |
--esp-heuristic | — | false | Desencapsular 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:
| Perfil | Pressupost de memòria | Ideal per a |
|---|---|---|
balanced | 100 MB | La majoria de casos d’ús (per defecte) |
throughput | 500 MB | Entorns amb molt trànsit |
latency | 200 MB | Anàlisi en temps real |
memory | 25 MB | Sistemes 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.
| Motor | Valor de l’opció | Requisits |
|---|---|---|
| CUDA | cuda | GPU NVIDIA i conjunt d’eines CUDA, make build-cuda |
| CPU SIMD | cpu-simd | Compatibilitat amb AVX2 o SSE4.2 |
| Detecció automàtica | auto | Selecciona 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 defecte | Descripció |
|---|---|---|
-V / --virtual-interface | false | Activar la interfície virtual |
--vif-name | lc0 | Nom de la interfície |
--vif-type | tap | Tipus: tap (capa 2) o tun (capa 3) |
--vif-startup-delay | 3s | Retard abans d’iniciar la injecció |
--vif-replay-timing | false | Respectar la temporització original dels paquets PCAP |
--vif-buffer-size | 65536 | Mida 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 |