narzędzie do dzielenia plików pcap według połączenia TCP? [Zamknięte]

16

Czy istnieje narzędzie do dzielenia pliku przechwytywania pakietów (w formacie pcap) na osobne pliki dla każdego połączenia TCP? (inne niż domowy skrypt powłoki, który prawdopodobnie musi zostać uruchomiony dwukrotnie podczas przechwytywania ...). Coś w stylu „podążania za strumieniem TCP” wiresharka, ale dla wiersza poleceń (obawiam się, że wireshark zużyje dużą ilość pamięci podczas wyświetlania przechwytywania pakietów 700 MB)

Patrzyłem na tcpflow, ale wydaje się, że produkuje on pliki znacznie większe niż oryginalne pliki pcap i wydaje się, że nie są w formacie pcap.

Andre Holzner
źródło
Pliki, które wynikają z tcpflow nie są pcaps, są to rzeczywiste ładunki tcp strumieni tcp.
Chris

Odpowiedzi:

9

Możesz także użyć PcapSplitter, który jest częścią pakietu PcapPlusPlus . Robi dokładnie to, czego potrzebujesz (czyli dzielenie plików pcap przez połączenie TCP lub UDP), jest wieloplatformowy i nie ma ograniczenia liczby połączeń w oryginalnym pliku (więc możesz go użyć do podzielenia dużego plik pcap zawierający tysiące połączeń lub nawet więcej). Powyższy link dotyczy kodu źródłowego, ale jeśli chcesz skompilowanego pliku binarnego - oto link do plików binarnych, które utworzyłem dla kilku platform

EDYCJA: podobno została wydana nowa wersja PcapPlusPlus i zawiera pliki binarne PcapSplitter dla całkiem wielu platform (Windows, Ubuntu 12.04 / 14.04, Mac OSX Mavericks / Yosemite / El Captian). Myślę, że lepiej jest używać tych plików binarnych niż łącze, które wcześniej podałem. Możesz go znaleźć tutaj

fx23
źródło
10

Możesz użyć tcpdumpdo wyodrębnienia części pcap, którą chcesz ... załóżmy, że szukasz pakietów w połączeniu gniazdowym między TCP / 55777 na jednym hoście a TCP / 80 na innym. Twój plik źródłowy to bigfile.pcapzrzut sniffera wielu sesji HTTP do danego hosta internetowego ...

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

Spowoduje to pobranie wszystkich pakietów idących do iz TCP / 55777 bigfile.pcapi skopiowanie ich do session.pcap.

Mike Pennington
źródło
Czy -s0ma jakiś wpływ, gdy jest stosowany razem z -r?
kasperd
4

Trochę przesada, ale używając tshark(w zestawie wireshark) możesz zrobić z 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

Który generuje pliki o nazwie jak 1509466312.202450000-10.0.0.1-58892-10.0.0.2-80.pcap(na podstawie pierwszego pakietu widzianego dla każdego połączenia).

sch
źródło
3

tcpflow jest tym, czego chcesz - dzieli pcaps na jeden plik na sesję TCP

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

Sam
źródło
3
jak wspomniano w pytaniu, próbowałem i nie rozumiałem, dlaczego wynikowe pliki wyjściowe były znacznie większe niż pliki wejściowe (pcap) ...
Andre Holzner
1
również tcpflow nie wydaje się być w stanie wyprowadzać plików pcap.
takumar
2

Wydaje się, że jest to narzędzie, które może działać (nie korzystałem z niego osobiście)

http://www.netresec.com/?page=SplitCap (oparty na systemie Windows)

SplitCap to darmowy (jak w piwie) rozdzielacz plików pcap typu open source. SplitCap dzieli jeden duży plik pcap na wiele plików na podstawie sesji TCP i UDP, po jednym pliku pcap na sesję. SplitCap może również służyć do dzielenia pliku pcap na jeden plik pcap na parę hostów zamiast sesji.

wolno-myśliciel
źródło
1

zainspirowany @sch tutaj jest wersja 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

nazwa pliku będzie taka: stream number__time__source IP__port__destination IP__port.pcap

tr -d '\r' jest dla użytkowników systemu Windows, ponieważ tshark w systemie Windows wyprowadza CR LF.

Edytuj :

to rozwiązanie z tshark jest takie wolne, ale pewne. SplitCap jest super szybki, ale gdy pojawia się błąd w pewnym pakiecie, ulega awarii, podczas gdy tshark informuje cię tylko o błędzie, ale kontynuuje:

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

i wreszcie jest PcapSplitter, który jest także super szybki, ale potrzebuje sterownika winpcap, nie działa ze sterownikiem npcap w systemie Windows.

Ale istnieje rozwiązanie SplitCap: za pomocą pcapfix mogę naprawić uszkodzone pakiety, wtedy SplitCap nigdy się nie zawiesza. i tego właśnie używam teraz, ponieważ tshark tak wolno dzieli.

a rozwiązaniem PcapSplitter, które zrobiłem, było wstrzykiwanie biblioteki dll winpcap za pomocą dowolnej metody, ale skoro mamy SplitCap, dlaczego to robisz?

Badr Elmers
źródło