outil pour diviser des fichiers pcap par connexion TCP? [fermé]

16

Existe-t-il un outil pour diviser un fichier de capture de paquets (au format pcap) en fichiers distincts pour chaque connexion TCP? (autre qu'un script shell maison qui a probablement besoin de s'exécuter deux fois sur la capture ...). Quelque chose comme `` suivre le flux TCP '' de Wireshark mais pour la ligne de commande (je crains que Wireshark consomme une grande quantité de mémoire lors de l'affichage d'une capture de paquets de 700 Mo)

J'ai regardé tcpflow mais il semble produire des fichiers beaucoup plus gros que les fichiers pcap d'origine et ils ne semblent pas être au format pcap.

Andre Holzner
la source
Les fichiers qui résultent de tcpflow ne sont pas des pcaps, ce sont les charges utiles tcp réelles des flux tcp.
chris

Réponses:

9

Vous pouvez également utiliser PcapSplitter qui fait partie du package PcapPlusPlus . Il fait exactement ce dont vous avez besoin (qui divise les fichiers pcap par connexion TCP ou UDP), il est multi-plateforme et il n'a pas de limite sur le nombre de connexions dans le fichier d'origine (vous pouvez donc l'utiliser pour diviser une grande fichier pcap contenant des milliers de connexions ou même plus). Le lien ci-dessus est pour le code source, mais si vous voulez un binaire compilé - voici un lien pour les binaires que j'ai fait pour plusieurs plateformes

EDIT: apparemment, une nouvelle version de PcapPlusPlus est sortie et contient des binaires PcapSplitter pour un grand nombre de plates-formes (Windows, Ubuntu 12.04 / 14.04, Mac OSX Mavericks / Yosemite / El Captian). Je pense qu'il vaut mieux utiliser ces binaires que le lien que j'ai fourni précédemment. Vous pouvez le trouver ici

fx23
la source
10

Vous pouvez utiliser tcpdumppour extraire les parties du pcap que vous voulez ... supposons que vous recherchez des paquets dans une connexion socket entre TCP / 55777 sur un hôte et TCP / 80 sur un autre. Votre fichier source est bigfile.pcap, qui est un vidage de nombreuses sessions HTTP vers l'hébergeur en question ...

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

Cela va tirer tous les paquets vers et depuis TCP / 55777 bigfile.pcapet les copier session.pcap.

Mike Pennington
la source
A-t -s0-il un effet lorsqu'il est utilisé avec -r?
kasperd
4

Un peu exagéré, mais en utilisant tshark(livré avec wireshark), vous pourriez faire avec 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

Qui génère des fichiers nommés comme 1509466312.202450000-10.0.0.1-58892-10.0.0.2-80.pcap(basé sur le premier paquet vu pour chaque connexion).

sch
la source
3

tcpflow est ce que vous voulez - divise les pcaps en un fichier par session TCP

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

Sam
la source
3
comme mentionné dans la question, je l'ai essayé et je n'ai pas compris pourquoi les fichiers de sortie résultants étaient beaucoup plus gros que les fichiers d'entrée (pcap) ...
Andre Holzner
1
tcpflow ne semble pas non plus être capable de produire des fichiers pcap.
takumar
2

Il semble y avoir cet outil qui pourrait fonctionner (je ne l'ai pas utilisé personnellement)

http://www.netresec.com/?page=SplitCap (basé sur Windows)

SplitCap est un séparateur de fichiers pcap open source gratuit (comme dans la bière). SplitCap divise un gros fichier pcap en plusieurs fichiers en fonction des sessions TCP et UDP, un fichier pcap par session. SplitCap peut également être utilisé pour diviser un fichier pcap en un fichier pcap par paire d'hôtes au lieu d'une session.

libre penseur
la source
1

inspiré par @sch voici une version 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

le nom du fichier sera comme ça: stream number__time__source IP__port__destination IP__port.pcap

tr -d '\r' est destiné aux utilisateurs de Windows, car tshark dans Windows affiche CR LF.

Modifier :

cette solution avec tshark est si lente mais sûre. SplitCap est super rapide mais quand il y a une erreur dans un paquet, il se bloque, tandis que tshark ne vous informe que de l'erreur mais continue:

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

et enfin il y a PcapSplitter qui est super rapide aussi mais il a besoin du pilote winpcap, il ne fonctionne pas avec le pilote npcap dans windows.

Mais il existe une solution à SplitCap: en utilisant pcapfix, je peux réparer les paquets corrompus, puis SplitCap ne se bloque plus. et c'est ce que j'utilise maintenant, parce que tshark est si lent à se séparer.

et une solution à PcapSplitter que j'ai faite était d'injecter la DLL winpcap en utilisant n'importe quelle méthode mais alors que nous avons SplitCap pourquoi le faire?

Badr Elmers
la source