Pesquisa de site

TCPflow - Analisar e depurar tráfego de rede no Linux


TCPflow é uma poderosa ferramenta gratuita, de código aberto e baseada em linha de comando para analisar o tráfego de rede em sistemas do tipo Unix, como o Linux. Ele captura dados recebidos ou transferidos por meio de conexões TCP e os armazena em um arquivo para análise posterior, em um formato útil que permite análise e depuração de protocolo.

Leia também: 16 melhores ferramentas de monitoramento de largura de banda para analisar o uso da rede no Linux

Na verdade, é uma ferramenta semelhante ao tcpdump, pois processa pacotes da rede ou de um arquivo armazenado. Ele suporta as mesmas expressões de filtragem poderosas suportadas por sua contraparte. A única diferença é que o tcpflow coloca todos os pacotes TCP em ordem e monta cada fluxo em um arquivo separado (um arquivo para cada direção do fluxo) para análise posterior.

Seu conjunto de recursos inclui um sistema de plug-in avançado para descompactar conexões HTTP compactadas, desfazer a codificação MIME ou invocar programas de terceiros para pós-processamento e muito mais.

Existem muitos casos de uso para tcpflow que incluem a compreensão dos fluxos de pacotes de rede e também suporte para realização de análise forense de rede e divulgação do conteúdo de sessões HTTP.

Como instalar o TCPflow em sistemas Linux

TCPflow está disponível nos repositórios oficiais das principais distribuições GNU/Linux, você pode instalá-lo usando seu gerenciador de pacotes, conforme mostrado.

sudo apt install tcpflow	#Debian/Ubuntu
sudo yum install tcpflow	#CentOS/RHEL
sudo dnf install tcpflow	#Fedora 22+

Depois de instalar o tcpflow, você pode executá-lo com privilégios de superusuário, caso contrário, use o comando sudo. Observe que ele escuta na interface de rede ativa (por exemplo enp0s3).

sudo tcpflow

tcpflow: listening on enp0s3

Por padrão, o tcpflow armazena todos os dados capturados em arquivos que possuem nomes no formato (isso pode ser diferente se você usar certas opções como timestamp).

sourceip.sourceport-destip.destport
192.168.043.031.52920-216.058.210.034.00443

Agora vamos fazer uma listagem de diretórios para ver se o fluxo tcp foi capturado em algum arquivo.

ls -1

total 20
-rw-r--r--. 1 root    root     808 Sep 19 12:49 192.168.043.031.52920-216.058.210.034.00443
-rw-r--r--. 1 root    root      59 Sep 19 12:49 216.058.210.034.00443-192.168.043.031.52920

Como mencionamos anteriormente, cada fluxo TCP é armazenado em seu próprio arquivo. Pela saída acima, você pode ver que existem três arquivos de transcrição, que indicam o tcpflow em duas direções opostas, sendo o IP de origem no primeiro arquivo e o IP de destino no segundo arquivo e vice-versa.

O primeiro arquivo 192.168.043.031.52920-216.058.210.034.00443 contém dados transferidos do host 192.168.043.031 (o localhost no qual o tcpflow foi executado) via porta 52920, para hospedar 216.058.210.034 (o host remoto) através da porta 443.

E o segundo arquivo 216.058.210.034.00443-192.168.043.031.52920 contém dados enviados do host 216.058.210.034 (o host remoto) através da porta 443 para hospedar 192.168.043.031 (o localhost no qual o tcpflow foi executado) através da porta 52920.

Também é gerado um relatório XML, que contém informações sobre o programa, como como ele foi compilado e o computador em que foi executado, além de um registro de cada conexão TCP.

Como você deve ter notado, o tcpflow armazena os arquivos de transcrição no diretório atual por padrão. A opção -o pode ajudá-lo a especificar o diretório de saída onde os arquivos de transcrição serão gravados.

sudo tcpflow -o tcpflow_files
$ sudo ls -l tcpflow_files

total 32
-rw-r--r--. 1 root root 1665 Sep 19 12:56 157.240.016.035.00443-192.168.000.103.45986
-rw-r--r--. 1 root root   45 Sep 19 12:56 169.044.082.101.00443-192.168.000.103.55496
-rw-r--r--. 1 root root 2738 Sep 19 12:56 172.217.166.046.00443-192.168.000.103.39954
-rw-r--r--. 1 root root   68 Sep 19 12:56 192.168.000.102.00022-192.168.000.103.42436
-rw-r--r--. 1 root root  573 Sep 19 12:56 192.168.000.103.39954-172.217.166.046.00443
-rw-r--r--. 1 root root 4067 Sep 19 12:56 192.168.000.103.45986-157.240.016.035.00443
-rw-r--r--. 1 root root   38 Sep 19 12:56 192.168.000.103.55496-169.044.082.101.00443
-rw-r--r--. 1 root root 3159 Sep 19 12:56 report.xml

Você também pode imprimir o conteúdo dos pacotes em stdout conforme eles são recebidos, sem armazenar quaisquer dados capturados em arquivos, usando o sinalizador -c como segue.

Para testar isso de forma eficaz, abra um segundo terminal e execute um ping ou navegue na Internet. Você poderá ver os detalhes do ping ou os detalhes da navegação sendo capturados pelo tcpflow.

sudo tcpflow -c

É possível capturar todo o tráfego em uma determinada porta, por exemplo, porta 80 (HTTP). No caso do tráfego HTTP, você poderá ver os cabeçalhos HTTP seguidos pelo conteúdo todo no stdout ou em um arquivo se a opção -c for removida.

sudo tcpflow port 80

Para capturar pacotes de uma interface de rede específica, use o sinalizador -i para especificar o nome da interface.

sudo tcpflow -i eth0 port 80

Você também pode especificar um host de destino (os valores aceitos são endereço IP, nome de host ou domínios), conforme mostrado.

sudo tcpflow -c host 192.68.43.1
OR
sudo tcpflow -c host www.google.com 

Você pode ativar todo o processamento usando todos os scanners com o sinalizador -a, isso é equivalente à opção -e all.

sudo tcpflow -a  
OR
sudo tcpflow -e all

Um scanner específico também pode ser ativado; os scanners disponíveis incluem md5, http, netviz, tcpdemux e wifiviz (execute tcpflow -H para visualizar informações detalhadas sobre cada scanner).

sudo tcpflow -e http
OR
sudo tcpflow -e md5
OR
sudo tcpflow -e netviz
OR
sudo tcpflow -e tcpdemux
OR
sudo tcpflow -e wifiviz

O exemplo a seguir mostra como habilitar todos os scanners, exceto tcpdemux.

sudo tcpflow -a -x tcpdemux 

O TCPflow geralmente tenta colocar a interface de rede em modo promíscuo antes de capturar pacotes. Você pode evitar isso usando o sinalizador -p conforme mostrado.

sudo tcpflow -p -i eth0

Para ler pacotes de um arquivo tcpdump pcap, use o sinalizador -r.

sudo tcpflow -f file.pcap

Você pode ativar o modo detalhado usando as opções -v ou -d 10.

sudo tcpflow -v
OR
sudo tcpflow -d 10

Importante: Uma limitação do tcpflow é que, no momento, ele não entende fragmentos IP, portanto, dados transmitidos como parte de conexões TCP contendo fragmentos de IP não serão capturados corretamente.

Para obter mais informações e opções de uso, consulte a página de manual do tcpflow.

man tcpflow 

Repositório TCPflow Github: https://github.com/simsong/tcpflow

É tudo por agora! TCPflow é um poderoso gravador de fluxo TCP que é útil para entender fluxos de pacotes de rede, realizar análises forenses de rede e muito mais. Experimente e compartilhe sua opinião conosco nos comentários.