Eu suspeito que tcpflow
faria o seu trabalho bem o suficiente, o que pode levar um arquivo pcap e dividi-lo em suas partes componentes. Por exemplo, eu fiz o seguinte como um teste:
sudo tcpdump -i eth0 -n -s 0 -w /tmp/capt -v port 80
Em seguida, recarregou sua pergunta, interrompeu tcpdump
e depois executou:
tcpflow -r /tmp/capt
E tenho cerca de 20 arquivos, cada um contendo uma única solicitação HTTP ou resposta (conforme apropriado).
Por outro lado, eu costumo ir à opção soft e abrir meus arquivos de captura em wireshark, cujo modo "Analisar - > Seguir TCP Stream" é incrível (codificado por cores e tudo ).
Ambas as ferramentas, por sinal, também podem fazer a captura de pacotes - você não precisa alimentá-las com uma captura de pacotes existente via tcpdump
.
Se você tem uma necessidade específica de analisar o tráfego HTTP depois de dividi-lo, é bem trivial: o protocolo HTTP é muito simples. No caso trivial (não-keepalive / pipeline), você pode usar o seguinte para obter o cabeçalho request ou response:
sed '/^\r$/q' <connectionfile>
E isso para obter o corpo da solicitação / resposta:
sed -n '/^\r$/,$p' <connectionfile>
(Você também pode canalizar coisas através desses comandos sed, se quiser).
Em conexões keepalive, você precisa começar a fazer um pequeno scripty, mas mesmo assim são 20 linhas de script para processar os dois arquivos (A para B, B para A), extrair os cabeçalhos, ler o Content-Length depois leia o corpo - e se você estiver fazendo algum tipo de processamento automatizado, você estará escrevendo código para fazer essas coisas de qualquer maneira, então um pouco de dissecação HTTP não aumenta consideravelmente a carga de trabalho.