alat untuk memisahkan file PCAP dengan koneksi TCP? [Tutup]

16

Apakah ada alat untuk membagi file paket capture (dalam format pcap) menjadi file terpisah untuk setiap koneksi TCP? (selain skrip shell yang ditanam di rumah yang mungkin perlu dijalankan dua kali selama penangkapan ...). Sesuatu seperti wireshark 'follow TCP stream' tetapi untuk baris perintah (saya khawatir wireshark akan menghabiskan banyak memori saat menampilkan tangkapan paket 700 MB)

Saya melihat tcpflow tetapi tampaknya menghasilkan file yang jauh lebih besar daripada file pcap asli dan mereka tampaknya tidak dalam format pcap.

Andre Holzner
sumber
File-file yang dihasilkan dari tcpflow bukan pcaps, mereka adalah muatan tcp aktual dari stream tcp.
chris

Jawaban:

9

Anda juga dapat menggunakan PcapSplitter yang merupakan bagian dari paket PcapPlusPlus . Itu tidak persis apa yang Anda butuhkan (yang membagi file PCAP dengan koneksi TCP atau UDP), ini multi-platform dan tidak memiliki batasan pada jumlah koneksi dalam file asli (sehingga Anda dapat menggunakannya untuk membagi besar file pcap yang mengandung ribuan koneksi atau bahkan lebih). Tautan di atas adalah untuk kode sumber, tetapi jika Anda ingin biner yang dikompilasi - di sini adalah tautan untuk binari yang saya buat untuk beberapa platform

EDIT: rupanya versi baru PcapPlusPlus dirilis dan berisi binari PcapSplitter untuk banyak platform (Windows, Ubuntu 12.04 / 14.04, Mac OSX Mavericks / Yosemite / El Captian). Saya pikir lebih baik menggunakan binari ini daripada tautan yang saya berikan sebelumnya. Anda dapat menemukannya di sini

fx23
sumber
10

Anda dapat menggunakan tcpdumpuntuk mengekstrak bagian-bagian pcap yang Anda inginkan ... misalkan Anda sedang mencari paket dalam koneksi soket antara TCP / 55777 pada satu host dan TCP / 80 pada yang lain. File sumber Anda adalah bigfile.pcap, yang merupakan kumpulan sniffer dari banyak sesi HTTP ke host web yang dimaksud ...

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

Itu akan menarik semua paket ke dan dari TCP / 55777 bigfile.pcapdan menyalinnya session.pcap.

Mike Pennington
sumber
Apakah -s0ada efek ketika digunakan bersama -r?
kasperd
4

Sedikit berlebihan, tetapi menggunakan tshark(dikirimkan bersama wireshark), Anda dapat melakukannya dengan 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

Yang menghasilkan file bernama seperti 1509466312.202450000-10.0.0.1-58892-10.0.0.2-80.pcap(berdasarkan paket pertama yang terlihat untuk setiap koneksi).

sch
sumber
3

tcpflow adalah apa yang Anda inginkan - membagi pcaps menjadi satu file per sesi TCP

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

Sam
sumber
3
seperti yang disebutkan dalam pertanyaan, saya mencobanya dan tidak mengerti mengapa file output yang dihasilkan jauh lebih besar daripada file input (pcap) ...
Andre Holzner
1
juga tcpflow tampaknya tidak dapat menampilkan file pcap.
takumar
2

Tampaknya ada alat ini yang mungkin berfungsi (saya belum menggunakannya secara pribadi)

http://www.netresec.com/?page=SplitCap (berbasis windows)

SplitCap adalah splitter file pcap sumber terbuka gratis (seperti dalam bir). SplitCap membagi satu file pcap besar menjadi beberapa file berdasarkan pada sesi TCP dan UDP, satu file pcap per sesi. SplitCap juga dapat digunakan untuk membagi file pcap menjadi satu file pcap per host-pair bukan sesi.

pemikir bebas
sumber
1

terinspirasi oleh @sch di sini adalah versi 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

nama file akan seperti itu: stream number__time__source IP__port__destination IP__port.pcap

tr -d '\r' adalah untuk pengguna windows, karena tshark di windows menghasilkan CR LF.

Edit :

solusi dengan tshark ini sangat lambat tapi pasti. SplitCap sangat cepat tetapi ketika ada kesalahan dalam beberapa paket itu crash, sementara tshark hanya memberi tahu Anda tentang kesalahan tetapi melanjutkan:

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

dan akhirnya ada PcapSplitter yang super cepat juga tetapi membutuhkan driver winpcap, itu tidak bekerja dengan driver npcap di windows.

Tetapi ada solusi untuk SplitCap: menggunakan pcapfix saya dapat memperbaiki paket yang rusak maka SplitCap tidak pernah crash lagi. dan inilah yang saya gunakan sekarang, karena tshark sangat lambat dalam pemisahan.

dan solusi untuk PcapSplitter yang saya lakukan adalah menyuntikkan dll winpcap menggunakan metode apa pun tetapi sementara kami memiliki SplitCap mengapa melakukannya?

Badr Elmers
sumber