Bagaimana cara mengembalikan header Http dari tshark?

12

Saya menggunakan tshark untuk mengendus paket saya dan saya hanya peduli dengan header http (lebih baik dalam bentuk yang dikirim, tapi saya akan mengambil apa yang bisa saya dapatkan).

Saya mencoba menggunakan:

tshark tcp port 80 or tcp port 443 -V -R "http"

Yang memberi saya header, tetapi juga konten (yang saya tidak mau karena itu adalah jumlah besar sampah untuk diuraikan). Saya benar-benar hanya peduli dengan header, apakah ada cara mudah untuk mendapatkan hal itu (selain mengurai data sendiri).

Sunting: Saya harus memenuhi syarat Saya juga peduli tentang host / port sehingga saya dapat melacak permintaan di beberapa paket.

tzenes
sumber

Jawaban:

18

Anda dapat menggunakan filter tampilan tajuk HTTP khusus untuk menampilkan hanya header permintaan, hanya header respons, atau keduanya.

Untuk header permintaan saja:

tshark tcp port 80 or tcp port 443 -V -R "http.request"

Untuk tajuk respons saja:

tshark tcp port 80 or tcp port 443 -V -R "http.response"

Dan untuk header permintaan dan respons:

tshark tcp port 80 or tcp port 443 -V -R "http.request || http.response"

Catatan: Ini tidak menyaring hanya header, hanya paket-paket yang berisi header, sehingga Anda kemungkinan masih akan mendapatkan beberapa data, tetapi jumlah data harus lebih kecil dari yang seharusnya.

astaga
sumber
Kami masih berbicara tentang satu ton data seolah-olah saya memiliki permintaan untuk en.wikipedia.org. Saya mendapatkan kembali 750r ketika saya benar-benar hanya ingin header kurang dari 1rb.
tzenes
tshark adalah alat penangkapan paket , Anda mungkin ingin melihat sesuatu seperti Fiddler atau alat analisis khusus HTTP lainnya.
heavyd
Saya tidak terbiasa dengan fiddler tetapi tujuan saya adalah melacak throughput koneksi jadi saya ingin tahu requesttime / firstbyte / lastbyte sambil mempertahankan header HTTP. tshark sudah menyelesaikan sebagian besar masalah saya, saya hanya perlu mendapatkan header.
tzenes
3
Ini menghasilkan "tshark: Filter tangkap tidak valid" (Tshark 2.0.2). Sebagai solusinya, saya telah menggunakan:tshark -V -Y http.request tcp port 80 or tcp port 443
jfs
5

Bahkan kamu bisa! Semua jawaban sebelumnya sangat dekat. Yang Anda butuhkan hanyalah -Oflag yang memfilter semua informasi kecuali HTTP.

tshark -O http -R http.request tcp port 80 or tcp port 443
Denis Bazhenov
sumber
1
Ini jawaban yang benar.
Florin Andrei
3

Saya bisa menggabungkan jawaban dari @heavyd dan menjalankannya melalui filter sed yang saya dapatkan dari artikel SO - (jawaban FJ) untuk memasak bayi ini, yang menyaring hanya header :)

sudo tshark tcp port 80 or tcp port 443 -V -R "http.request || http.response" | sed -rn '/Hypertext Transfer Protocol/{:a;N;/    \\r\\n:?/{/.*/p;d};ba}' >> /tmp/filtered
quickshiftin
sumber
1
mengerikan karena aku tidak bisa membacanya tetapi bekerja seperti pesona.
Setheron
2

Versi filter saya sendiri agar mudah dibaca:

tshark -V -R "tcp.port ==80 && (http.request || http.response)" | awk "/Hypertext Transfer Protocol/,/Frame/ { print };/Transmission Control Protocol/{print};/Internet Protocol/{print}" | grep -v Frame

Dengan cara ini saya hanya melihat informasi IP dan TCP yang relevan, tanpa semua hal level rendah, ditambah info HTTP lengkap.

Miquel Adrover
sumber
sudo tshark -V -s0 port 80 -Y "(http.request || http.response)" | awk "/ Hypertext Transfer Protocol /, / ^ $ /"
Lmwangi