herramienta para dividir archivos pcap por conexión TCP? [cerrado]

16

¿Existe alguna herramienta para dividir un archivo de captura de paquetes (en formato pcap) en archivos separados para cada conexión TCP? (aparte de un script de shell de cosecha propia que probablemente deba ejecutarse dos veces sobre la captura ...). Algo así como 'seguir TCP stream' de wireshark, pero para la línea de comando (me temo que wireshark consumirá una gran cantidad de memoria al mostrar una captura de paquetes de 700 MB)

Miré tcpflow pero parece producir archivos mucho más grandes que los archivos pcap originales y parece que no están en formato pcap.

Andre Holzner
fuente
Los archivos que resultan de tcpflow no son pcaps, son las cargas útiles de tcp reales de las transmisiones de tcp.
Chris

Respuestas:

9

También puede usar PcapSplitter, que es parte del paquete PcapPlusPlus . Hace exactamente lo que necesita (que es dividir archivos pcap por conexión TCP o UDP), es multiplataforma y no tiene un límite en la cantidad de conexiones en el archivo original (por lo que puede usarlo para dividir un archivo grande archivo pcap que contiene miles de conexiones o incluso más). El enlace de arriba es para el código fuente, pero si quieres un binario compilado, aquí hay un enlace para los binarios que hice para varias plataformas.

EDITAR: aparentemente se lanzó una nueva versión de PcapPlusPlus y contiene binarios PcapSplitter para muchas plataformas (Windows, Ubuntu 12.04 / 14.04, Mac OSX Mavericks / Yosemite / El Captian). Creo que es mejor usar estos binarios que el enlace que proporcioné anteriormente. Lo puedes encontrar aqui

fx23
fuente
10

Puede usar tcpdumppara extraer las porciones de pcap que desee ... suponga que está buscando paquetes en una conexión de socket entre TCP / 55777 en un host y TCP / 80 en otro. Su archivo de origen es bigfile.pcap, que es un volcado de sniffer de muchas sesiones HTTP al host web en cuestión ...

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

Eso extraerá todos los paquetes que van hacia y desde TCP / 55777 bigfile.pcapy los copiará session.pcap.

Mike Pennington
fuente
¿ -s0Tiene algún efecto cuando se usa junto con -r?
kasperd
4

Un poco exagerado, pero usando tshark(enviado con wireshark), podría hacer con 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

Que genera archivos con el nombre de 1509466312.202450000-10.0.0.1-58892-10.0.0.2-80.pcap(según el primer paquete visto para cada conexión).

sch
fuente
3

tcpflow es lo que quieres: divide pcaps en un archivo por sesión TCP

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

Sam
fuente
3
Como se menciona en la pregunta, lo intenté y no entendí por qué los archivos de salida resultantes eran mucho más grandes que los archivos de entrada (pcap) ...
Andre Holzner
1
Tampoco parece que tcpflow pueda generar archivos pcap.
takumar
2

Parece que esta herramienta podría funcionar (no la he usado personalmente)

http://www.netresec.com/?page=SplitCap (basado en Windows)

SplitCap es un divisor de archivos pcap de código abierto gratuito (como en cerveza). SplitCap divide un gran archivo pcap en varios archivos basados ​​en sesiones TCP y UDP, un archivo pcap por sesión. SplitCap también se puede usar para dividir un archivo pcap en un archivo pcap por par de hosts en lugar de sesión.

pensador libre
fuente
1

inspirado en @sch aquí hay una versión 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

el nombre del archivo será así: stream number__time__source IP__port__destination IP__port.pcap

tr -d '\r' es para usuarios de Windows, porque tshark en Windows genera CR LF.

Editar :

Esta solución con tshark es muy lenta pero segura. SplitCap es súper rápido, pero cuando hay un error en algún paquete, se bloquea, mientras que tshark solo le informa sobre el error, pero continúa:

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

y finalmente está PcapSplitter, que también es súper rápido, pero necesita el controlador winpcap, no funciona con el controlador npcap en Windows.

Pero hay una solución para SplitCap: usando pcapfix puedo reparar los paquetes corruptos y luego SplitCap nunca se bloquea nuevamente. y esto es lo que estoy usando ahora, porque tshark es muy lento en la división.

y una solución para PcapSplitter que hice fue inyectar el dll winpcap usando cualquier método, pero mientras tenemos SplitCap, ¿por qué hacerlo?

Badr Elmers
fuente