
Demultiplexador de pacotes TCP/IP. Baixar de:
Diretório de downloads: http://digitalcorpora.org/downloads/tcpflow/
A maioria das distribuições GNU/Linux comuns inclui tcpflow em seus repositórios. Então, no Debian/Ubuntu/etc você pode digitar
sudo apt-get install tcpflow
e no Fedora/RedHat/CentOS/etc você pode digitar
sudo dnf install tcpflow
E é isso. Se isso não for suficiente por qualquer motivo, você pode compilar a partir do código fonte:
Para compilar no Linux
Certifique-se de ter os pré-requisitos necessários. Existem arquivos no diretório raiz que farão isso por você, dependendo do seu sistema operacional:
CONFIGURE_ARCH_17_8.sh CONFIGURE_FEDORA_18.sh CONFIGURE_FEDORA_26.sh CONFIGURE_UBUNTU_16_04.sh
Dependendo do seu sistema operacional, execute:
# sudo bash CONFIGURE_<YOUROS>.sh
Depois de configurar seu sistema operacional, compile e instale com:
./configure
make
sudo make install
Se você quiser baixar a árvore de desenvolvimento com git, certifique-se de fazer um checkout completo com --recursive e então execute bootstrap.sh, configure e make:
git clone --recursive https://github.com/simsong/tcpflow.git
cd tcpflow
bash bootstrap.sh
./configure
make
sudo make install
Para baixar e compilar para Amazon AMI:
ssh ec2-user@<your ec2 instance>
sudo bash yum -y install git make gcc-c++ automake autoconf boost-devel cairo-devel libpcap-devel openssl-devel zlib-devel
git clone --recursive https://github.com/simsong/tcpflow.git
sh bootstrap.sh
Para compilar para Windows com mingw no Fedora Core:
yum -y install mingw64-gcc mingw64-gcc-c++ mingw64-boost mingw64-cairo mingw64-zlib
mingw64-configure
make
Para usar o CMake, consulte as instruções detalhadas: cmake/README.md
A partir de um repositório limpo como usuário normal (não root):
./bootstrap.sh # Gera o arquivo ./configure
./configure # Gera o arquivo tcpflow.spec
rpmbuild -bb tcpflow.spec --build-in-place
Verifique o arquivo spec e o RPM resultante:
rpmlint tcpflow.spec
rpmlint ~/rpmbuild/RPMS/x86_64/tcpflow-....rpm
Instalar:
sudo dnf install ~/rpmbuild/RPMS/x86_64/tcpflow-....rpm
tcpflow é um programa que captura dados transmitidos como parte de conexões TCP (fluxos) e armazena os dados de forma conveniente para análise de protocolo e depuração. Cada fluxo TCP é armazenado em seu próprio arquivo. Assim, o fluxo TCP típico será armazenado em dois arquivos, um para cada direção. tcpflow também pode processar fluxos de pacotes 'tcpdump' armazenados.
tcpflow armazena todos os dados capturados em arquivos que têm nomes da forma:
[timestampT]sourceip.sourceport-destip.destport[--VLAN][cNNNN]
onde:
timestamp é um registro de data e hora opcional do momento em que o primeiro pacote foi visto
T é um delimitador que indica que um timestamp foi fornecido
sourceip é o endereço IP de origem
sourceport é a porta de origem
destip é o endereço IP de destino
destport é a porta de destino
VLAN é a porta VLAN
c é um delimitador que indica que múltiplas conexões estão presentes
NNNN é um contador de conexões, quando há múltiplas conexões com
a mesma combinação [timestamp]/sourceip/sourceport/destip/destport.
Observe que a contagem de conexões raramente ocorre quando o prefixo de timestamp é usado.
AQUI estão alguns exemplos:
128.129.130.131.02345-010.011.012.013.45103
O conteúdo do arquivo acima seria dados transmitidos do host 128.129.131.131 porta 2345, para o host 10.11.12.13 porta 45103.
128.129.130.131.02345-010.011.012.013.45103c0005
A sexta conexão de 128.129.131.131 porta 2345, para o host 10.11.12.13 porta 45103.
1325542703T128.129.130.131.02345-010.011.012.013.45103
Uma conexão de 128.129.131.131 porta 2345, para o host 10.11.12.13 porta 45103, que começou às 17:19 (-0500) em 2 de janeiro de 2012
128.129.130.131.02345-010.011.012.013.45103--3
Uma conexão de 128.129.131.131 porta 2345, para o host 10.11.12.13 porta 45103 que foi vista na porta VLAN 3.
Você pode alterar o modelo usado para criar nomes de arquivos com as opções -F e -T. Se um diretório aparecer no modelo, o diretório será criado automaticamente.
Se você usar a opção -a, o tcpflow interpretará automaticamente as respostas HTTP.
If the output file is
208.111.153.175.00080-192.168.001.064.37314,
Then the post-processing will create the files:
208.111.153.175.00080-192.168.001.064.37314-HTTP
208.111.153.175.00080-192.168.001.064.37314-HTTPBODY
If the HTTPBODY was compressed with GZIP, you may get a
third file as well:
208.111.153.175.00080-192.168.001.064.37314-HTTPBODY-GZIP
Additional information about these streams, such as their MD5
hash value, is also written to the DFXML file
tcpflow é semelhante ao 'tcpdump', pois ambos processam pacotes da rede ou de um arquivo armazenado. Mas é diferente porque reconstrói os fluxos de dados reais e armazena cada fluxo em um arquivo separado para análise posterior.
tcpflow entende números de sequência e reconstruirá corretamente os fluxos de dados independentemente de retransmissões ou entrega fora de ordem. No entanto, o tcpflow atualmente não entende fragmentos IP; fluxos contendo fragmentos IP não serão gravados corretamente.
tcpflow pode gerar um arquivo de relatório resumido no formato DFXML. Este arquivo inclui informações sobre o sistema no qual o programa tcpflow foi compilado, onde foi executado, e cada fluxo TCP, incluindo endereços IP e portas de origem e destino, número de bytes, número de pacotes e (opcionalmente) o hash MD5 de cada fluxo de bytes.
tcpflow usa a LBL Packet Capture Library (disponível em ftp://ftp.ee.lbl.gov/libpcap.tar.Z) e, portanto, suporta as mesmas expressões de filtragem ricas que programas como 'tcpdump' suportam. Ele deve compilar sob as versões mais populares do UNIX; consulte o arquivo INSTALL para detalhes.
tcpflow é uma ferramenta útil para entender fluxos de pacotes de rede e realizar perícia forense de rede. Ao contrário de programas como WireShark, que mostram muitos pacotes ou uma única conexão TCP, o tcpflow pode mostrar centenas, milhares ou centenas de milhares de conexões TCP em contexto.
Um uso comum do tcpflow é revelar o conteúdo de sessões HTTP. Usando o tcpflow você pode reconstruir páginas web baixadas via HTTP. Você pode até extrair malware entregue como 'downloads drive-by.'
Jeremy Elson originalmente escreveu este programa para capturar os dados enviados por vários programas que usam protocolos de rede não documentados na tentativa de fazer engenharia reversa desses protocolos. RealPlayer (e a maioria dos outros players de mídia de streaming), ICQ e AOL IM são bons exemplos desse tipo de aplicativo. Mais tarde, foi usado para análise de protocolo HTTP.
Simson Garfinkel fundou a Sandstorm Enterprises em 1998. A Sandstorm criou um programa semelhante ao tcpflow chamado TCPDEMUX e outra versão do programa chamada NetIntercept. Esses programas são comerciais. Depois que Simson deixou a Sandstorm, ele precisou de um programa de remontagem de fluxo TCP. Ele encontrou o tcpflow e assumiu sua manutenção.
Por favor, reporte bugs no rastreador de problemas do github
tcpflow atualmente não entende fragmentos IP. Fluxos contendo fragmentos IP não serão gravados corretamente. A fragmentação IP é cada vez mais rara, então isso não parece ser um problema significativo.
Se você está escrevendo um artigo sobre tcpflow, por favor cite nosso relatório técnico:
Simson L. Garfinkel [email protected]
Continuo portando bulk_extractor, tcpflow, be13_api e dfxml para C++ moderno. Após pesquisar os padrões, decidi usar C++17 e não C++14, pois o suporte ao 17 agora é generalizado. (Provavelmente não preciso do 20). Estou mantendo o autotools, embora pareça haver uma forte razão para migrar para CMake. Estou mantendo be13_api e dfxml como módulos incluídos, ao estilo Python, em vez de torná-los bibliotecas independentes vinculadas. Não tenho 100% de certeza de que essa seja a decisão correta, no entanto.
O projeto está demorando mais do que o previsto porque também estou fazendo uma refatoração geral do código. A principal coisa que está tomando tempo é descobrir como desembaraçar todos os objetos C++ relacionados às opções e configuração do analisador.
Dado que tcpflow e bulk_extractor usam be13_api, minha atenção se concentrou em usar tcpflow para tornar o be13_api operacional, pois é um programa mais simples. Estou cerca de três quartos do caminho agora. Antecipo ter algo pronto antes do final de 2020.
--- Simson Garfinkel, 18 de outubro de 2020
Agradecimentos a: