O Shark é um analisador de protocolo de rede. Ele permite capturar dados de pacotes de uma rede ao vivo ou ler pacotes de um arquivo de captura salvo anteriormente, imprimindo uma forma decodificada desses pacotes na saída padrão ou gravando os pacotes em um arquivo. O formato de arquivo de captura nativo do TShark é o formato libpcap, que também é o formato usado pelo tcpdump e várias outras ferramentas. ## Comandos Introdutórios ```shell # Buscar por interfaces disponíveis no linux. $ sudo tshark -D # Especificar a interface para capturar. $ sudo tshark -i enun0 # Leitura de captura de pcaps $ tshark -r demo.pcapng # Capture uma quantidade especifica de pacotes. $ tshark -c 10 # Capture os pacotes e jogue para um arquivo de saída.pcap. $ sudo tshark -w saida.pcap  # Capturar mais detalhes da conexão $ sudo tshark -V -i enum0 # Opção para não mostrar output $ sudo tshark -q  # Opção para mostrar os bytes dos pacotes.     $ tshark -x # Como mostrar o resultado da busca colorida. $ tshark --color ``` %%teste%% ## Comandos para captura com filtros. | Flag | Nome | Aplica **quando**? | Sintaxe | Baseada em | | ---- | ------------------ | ------------------ | --------- | ------------------------------------ | | `-f` | **Capture Filter** | Antes da captura | BPF | **Camada de rede** (baixo nível) | | `-Y` | **Display Filter** | Depois da captura | Wireshark | **Camada de aplicação** (alto nível) | A opção `-f` É um **filtro aplicado durante a captura** dos pacotes. Ou seja, ele **evita que certos pacotes sequer sejam coletados**. Já a opção `-Y` é aplicado **depois da captura**. Todos os pacotes são coletados, mas **só os que batem com o filtro são mostrados** na saída. ```shell # Filtro por Host $ tshark -f "host 10.10.10.10" # Filtro por Network $ tshark -f "net 10.10.10.0/24" # Filtro por porta $ tshark -f "port 80" # Filtro por range de portas. $ tshark -f "portrange 80-100" # Filtro por direção (origem) $ tshark -f "src host 10.10.10.10" # Filtro por direção (destino) $ tshark -f "dst host 10.10.10.10" # Filtrar os pacotes em tempo real por F e R que estejam retransmitindo. $ tshark -i <interface> -f "tcp" -R "tcp.analysis.retransmission" # Filtro por protocolos (arp | ether | icmp | ip | ip6 | tcp | udp) $ tshark -f "tcp" $ tshark -f "ether host F8:DB:C5:A2:5D:81" $ tshark -f "ip proto 1" # https://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml  # Usando filtros em arquivos pcap. $ tshark -Y 'ip.addr == 10.10.10.10' $ tshark -Y "http.response.code == 200" $ tshark -Y 'tcp.srcport == 80' $ tshark -Y 'dns.qry.type == 1' # Capturar pacotes HTTP e mostrar apenas os detalhes da camada. $ tshark -i tun0 -V -Y 'http' -O http    # Filtrar o pacote por sua posição e detalhes das camadas: $ tshark -r credentials.pcap -Y 'frame.number == 37' $ tshark -r credentials.pcap -Y 'frame.number == 37' -V ``` ## Mostrando estatísticas de rede. ```shell # Como filtrar modelos de estatisticas $ tshark -r demo.pcapng -z teste -q 2>&1 | grep dns # Mostrar estatisticas (hierarquia de protocolos) $ tshark -r demo.pcapng -z io,phs -q $ tshark -r demo.pcapng -z io,phs,udp -q # Arvore de comprimento de pacotes. $ tshark -r demo.pcapng -z plen,tree -q # Visualizar os principais endpoints. $ tshark -r demo.pcapng -z endpoints,ip -q # Conversas $ tshark -r demo.pcapng -z conv,ip -q # Informações de especialistas $ tshark -r demo.pcapng -z expert -q  # Estatisticas IP com IP protocolos $ tshark -r demo.pcapng -z ptype,tree -q # Mostrar estatisticas de todos os IPs $ tshark -r demo.pcapng -z ip_hosts,tree -q # Mostrar estatisticas de origem e destino em IPv4 $ tshark -r demo.pcapng -z ip_srcdst,tree -q $ tshark -r demo.pcapng -z ipv6_srcdst,tree -q   # Estatisticas de DNS $ tshark -r demo.pcapng -z dns,tree -q # Pacotes com status codes HTTP. $ tshark -r demo.pcapng -z http,tree -q $ tshark -r demo.pcapng -z http2,tree -q $ tshark -r demo.pcapng -z http_req,tree -q $ tshark -r demo.pcapng -z http_srv,tree -q $ tshark -r demo.pcapng -z http_seq,tree -q ``` ## Fluxos, objetos e credenciais | Main Parameter | Protocol | View Mode | Stream Number | Additional Parameter | | -------------- | ----------------------------------- | ---------------- | -------------------- | -------------------- | | -z follow | - TCP<br>- UDP<br>- HTTP<br>- HTTP2 | - HEX<br>- ASCII | 0 \| 1 \| 2 \| 3 ... | -q | ```shell # Exemplos: $ tshark -r demo.pcapng -z follow,tcp,ascii,1 -q $ tshark -r demo.pcapng -z follow,tcp,ascii,0 -q $ tshark -r demo.pcapng -z follow,udp,ascii,0 -q $ tshark -r demo.pcapng -z follow,http,ascii,0 -q ``` ### Exportando Objetos | Main Parameter | Protocol | Target Folder | Additional Parameter | | ---------------- | --------------------------------------------- | -------------------------------- | -------------------- | | --export-objects | - DICOM<br>- HTTP<br>- IMF<br>- SMB<br>- TFTP | Target folder to save the files. | -q | ```shell # Exemplos $ tshark -r demo.pcapng --export-objects http,/home/user/folder/ -q ``` ### Exportando Credenciais ```shell #Exemplos $ tshark -r credentials.pcap -z credentials -q ``` ### Opções Avançadas de Filtragem Extraindo Filtros/Colunas ```shell # Como filtrar os filtros disponíveis. $ tshark -G fields | grep websocket # Exemplo $ tshark -r demo.pcapng -T fields -e ip.src -e ip.dst -E header=y -c 5 ``` Filtro "Contains" ```bash # Filtrando o conteúdo que tem Apache. $ tshark -r demo.pcapng -Y 'http.server contains "Apache"' # Filtrando o que possui Apache e mostrando apenas colunas especificas. $ tshark -r demo.pcapng -Y 'http.server contains "Apache"' -T fields -e ip.src -e ip.dst -e http.server -E header=y ``` Filtro "Matchs" ```bash # Filtrando pelos requests que são GET ou POST $ tshark -r demo.pcapng -Y 'http.request.method matches "(GET|POST)"' $ tshark -r demo.pcapng -Y 'http.request.method matches "(GET|POST)"' -T fields -e ip.src -e ip.dst -e http.request.method -E header=y ``` ## Exemplos práticos ```shell # Extrair os hostnames e agrupar/ordenar por quantidade. $ tshark -r hostnames.pcapng -T fields -e dhcp.option.hostname | awk NF | sort -r | uniq -c | sort -r # Extrair os User-Agent e agrupar/ordenar pela quantidade. $ tshark -r user-agents.pcap -T fields -e http.user_agent | awk NF | sort -r | uniq -c | sort -r # Extrair entradas DNS e agrupar/ordenar pela quantidade. $ tshark -r dns-queries.pcap -T fields -e dns.qry.name | awk NF | sort -r | uniq -c | sort -r # Extrair o host e endpoints de um arquivo pcap. $ tshark -i eth0 -Y "http.request" -T fields -e http.host -e http.request.uri ```