ferramenta para dividir arquivos pcap por conexão TCP? [fechadas]

16

Existe uma ferramenta para dividir um arquivo de captura de pacote (no formato pcap) em arquivos separados para cada conexão TCP? (exceto um script de shell desenvolvido em casa que provavelmente precisa ser executado duas vezes durante a captura ...). Algo como o 'follow TCP stream' do wireshark, mas para a linha de comando (receio que o wireshark consuma uma grande quantidade de memória ao exibir uma captura de pacote de 700 MB)

Eu olhei para o tcpflow, mas ele parece produzir arquivos muito maiores que os arquivos pcap originais e eles parecem não estar no formato pcap.

Andre Holzner
fonte
Os arquivos resultantes do tcpflow não são pcaps, são as cargas úteis reais do tcp.
Chris23 /

Respostas:

9

Você também pode usar o PcapSplitter, que faz parte do pacote PcapPlusPlus . Ele faz exatamente o que você precisa (que está dividindo arquivos pcap por conexão TCP ou UDP), é multiplataforma e não tem limite no número de conexões no arquivo original (para que você possa usá-lo para dividir um grande número arquivo pcap contendo milhares de conexões ou mais). O link acima é para o código fonte, mas se você quiser um binário compilado - aqui está um link para binários que criei para várias plataformas

EDIT: aparentemente uma nova versão do PcapPlusPlus foi lançada e contém binários PcapSplitter para várias plataformas (Windows, Ubuntu 12.04 / 14.04, Mac OSX Mavericks / Yosemite / El Captian). Eu acho que é melhor usar esses binários do que o link que eu forneci anteriormente. Você pode encontrá-lo aqui

fx23
fonte
10

Você pode usar tcpdumppara extrair as partes do pcap que deseja ... suponha que você esteja procurando pacotes em uma conexão de soquete entre o TCP / 55777 em um host e o TCP / 80 em outro. Seu arquivo de origem é bigfile.pcap, que é um snipfer dump de muitas sessões HTTP para o host em questão ...

tcpdump -r bigfile.pcap -w session.pcap -s0 tcp and port 55777

Isso puxará todos os pacotes que entram bigfile.pcape saem do TCP / 55777 e os copia para session.pcap.

Mike Pennington
fonte
Tem -s0algum efeito quando usado junto -r?
kasperd
4

Um pouco exagerado, mas usando tshark(fornecido com wireshark), você pode fazer com zsh:

file=file.pcap
tshark -Tfields -e tcp.stream \
                -e frame.time_epoch \
                -e ip.src \
                -e tcp.srcport \
                -e ip.dst \
                -e tcp.dstport -r $file |
  sort -snu |
  while read -A f; do 
    tshark -r $file -2R "tcp.stream == $f[1]" -w ${(j:-:)f[2,-1]}.pcap
  done

O que gera arquivos com o nome like 1509466312.202450000-10.0.0.1-58892-10.0.0.2-80.pcap(com base no primeiro pacote visto para cada conexão).

sch
fonte
3

tcpflow é o que você deseja - divide pcaps em um arquivo por sessão TCP

http://www.circlemud.org/jelson/software/tcpflow/

Sam
fonte
3
como mencionado na pergunta, eu tentei e não entendia por que os arquivos de saída resultantes eram muito maiores do que a entrada arquivos (pcap) ...
Andre Holzner
11
também tcpflow não parece capaz de gerar arquivos pcap.
takumar
2

Parece haver essa ferramenta que pode funcionar (eu não a usei pessoalmente)

http://www.netresec.com/?page=SplitCap (baseado em Windows)

SplitCap é um divisor de arquivos pcap de código aberto gratuito (como na cerveja). O SplitCap divide um grande arquivo pcap em vários arquivos com base nas sessões TCP e UDP, um arquivo pcap por sessão. O SplitCap também pode ser usado para dividir um arquivo pcap em um arquivo pcap por par de hosts em vez de sessão.

pensador livre
fonte
1

inspirado por @sch aqui está uma versão do bash:

file=cap.pcap
$tshark -Tfields -e tcp.stream \
                -e frame.time_epoch \
                -e ip.src \
                -e tcp.srcport \
                -e ip.dst \
                -e tcp.dstport -r $file |
  sort -snu |
  while read -a f; do 
  [[ "${f[5]}" ]] || continue  # sometimes there is no stream number ex. UDP
  fileout=$(echo ${f[0]}__${f[1]}__${f[2]}__${f[3]}__${f[4]}__${f[5]} | tr -d '\r'  )
    $tshark -r $file -2R "tcp.stream == ${f[0]}" -w "$fileout.pcap"
  done
read

o nome do arquivo será assim: stream number__time__source IP__port__destination IP__port.pcap

tr -d '\r' é para usuários do Windows, porque o tshark no Windows gera CR LF.

Editar :

esta solução com o tshark é muito lenta, mas segura. O SplitCap é super rápido, mas quando há um erro em alguns pacotes, ele falha, enquanto o tshark apenas o informa sobre o erro, mas continua:

tshark: The file "cap.pcap" appears to have been cut short in the middle of a packet.

e finalmente há o PcapSplitter que é super rápido também, mas precisa do driver winpcap, ele não funciona com o driver npcap no Windows.

Mas existe uma solução para o SplitCap: usando o pcapfix, eu posso consertar os pacotes corrompidos e o SplitCap nunca mais falha. e é isso que estou usando agora, porque o tshark é muito lento em dividir.

e uma solução para o PcapSplitter que fiz foi injetar a dll winpcap usando qualquer método, mas enquanto temos o SplitCap, por que fazer isso?

Badr Elmers
fonte