Bagaimana cara memeriksa permintaan HTTP keluar dari satu aplikasi?

70

Aplikasi saya mengirim permintaan HTTP ke beberapa server dan saya ingin melihat data aktual yang dikirimkannya. Beberapa hal spesifik yang ingin saya lihat:

  • Metode permintaan (GET / POST / PUT, dll.)
  • Jenis konten
  • Tubuh

Apa cara terbaik dan sederhana untuk mencapai ini?

megas
sumber
"metode permintaan, tipe konten, isi, dll." Apakah Anda berbicara tentang inspeksi khusus HTTP? Apakah ini HTTPS (diamankan) secara kebetulan?
gertvdijk
Ya, Anda benar tetapi tidak mengirim melalui browser
megas
Maaf, ini hanya permintaan HTTP
megas
3
Oke, tidak apa-apa kalau begitu. Apakah hanya satu atau sekumpulan kecil server yang diajaknya bicara? Dan tidak ada aplikasi lain yang berbicara dengan server-server itu? Jika keduanya ya, maka jawaban tentang Wireshark adalah apa yang akan saya cari. Pelajari cara kerjanya. Tidak sesulit itu.
gertvdijk

Jawaban:

71

Nah, untuk semua penggemar tcpdump =)

JALANKAN SEMUA PERINTAH INI SEBAGAI ROOT !!!

Dapatkan root di terminal dengan

sudo -i

Untuk mengambil paket RAW ...

sudo tcpdump -i any -w /tmp/http.log &

Ini akan menangkap semua paket mentah, pada semua port, pada semua antarmuka dan menulisnya ke file /tmp/http.log,.

Jalankan aplikasi Anda. Ini jelas membantu jika Anda tidak menjalankan aplikasi lain yang menggunakan HTTP (browser web).

Membunuh tcpdump

killall tcpdump

Untuk membaca log, gunakan -Aflag dan pipa output ke less:

tcpdump -A -r /tmp/http.log | less

The -Abendera print "muatan" atau teks ASCII dalam paket. Ini akan mengirim output ke less, Anda dapat naik dan turun halaman. Untuk keluar less, ketik Q.

Ketika saya pergi ke Google, saya melihat (dalam paket mentah):

20:42:38.179759 IP ufbt.local.56852 > sea09s02-in-f3.1e100.net.www: Flags [P.], seq 1:587, ack 1, win 913, options [nop,nop,TS val 25523484 ecr 492333202], length 586
E..~.v@[email protected]......!#...P.(.gS.c..............u..Xh.GET /generate_204 HTTP/1.1
Host: clients1.google.com
Connection: keep-alive
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/534.34 (KHTML, like Gecko) rekonq Safari/534.34
Referer: http://www.google.com/
Accept: */*
Accept-Encoding: gzip, deflate, x-gzip, x-deflate
Accept-Charset: utf-8,*;q=0.5
Accept-Language: en-US, en-US; q=0.8, en; q=0.6
Cookie: PREF=ID=dd958d4544461998:FF=0:TM=1323842648:LM=1360205486:S=Fg_QCDsLMr4ZepIo; NID=67=OQJWjIDHG-B8r4EuM19F3g-nkaMcbvYwoY_CsOjzvYTOAxwqAos5kfzsk6Q14E70gIfJjHat8d8PuQIloB12BE-JuSHgsKHR2QSpgN12qSWoxeqhdcSQgzw5CHKtbR_a

tcpdumpmemiliki serangkaian opsi untuk memperbaiki pengumpulan data dari menentukan antarmuka jaringan ke port ke alamat IP sumber dan tujuan. TIDAK BISA mendekripsi (sehingga tidak akan bekerja dengan HTTPS).

Setelah Anda tahu apa yang Anda minati, Anda dapat menggunakan sejumlah opsi dengan tcpdumphanya mencatat data yang menarik. Strategi umum adalah pertama-tama merekam semua paket, meninjau data mentah, dan kemudian hanya menangkap paket yang menarik.

Beberapa tanda (opsi) yang bermanfaat:

-i Specify an interface
-i eth0

tcp port xx
tcp port 80

dst 1.2.3.4
specify a destination ip address

Ada kurva belajar, baik untuk menggunakan tcpdumpmaupun belajar bagaimana menganalisis data yang Anda kumpulkan. Untuk bacaan lebih lanjut, saya sangat menyarankan Primer dengan Contoh Daniel Miesslertcpdump .

Harimau kumbang
sumber
1
ini tidak menangkap apa pun di Ubuntu 14.04 saya. Laptop saya terhubung ke internet melalui router wifi. Apakah itu akan membuat perbedaan untuk penggunaan tcpdump? Ketika saya membunuhnya, itu hanya mengatakan 0 packets captured 0 packets received by filter 0 packets dropped by kernel Tapi saya memang membuka banyak situs di browser Chrome ketika tcpdump sedang memantau.
faizal
1
ahh artikel yang ditautkan membantu. tcpdump -i any -w /tmp/http.log &bekerja.
faizal
22

Instal pertama tcpflowdari repositori resmi Ubuntu:

sudo apt-get install tcpflow

Kemudian jalankan perintah ini untuk memeriksa semua permintaan HTTP pada port standar:

sudo tcpflow -p -c port 80
Vanni Totaro
sumber
1
dan di mana melihat hasilnya? Terima kasih!
Gediminas
2
@ Gediminas Anda dapat melihat output di terminal. Harap perhatikan bahwa lalu lintas HTTPS tidak ditampilkan. Cobalah mengunjungi HTTP yang seperti httpvshttps.com
Vanni Totaro
1
Jauh lebih nyaman daripada tcpdump jika Anda hanya tertarik melihat permintaan dan tidak harus berurusan dengan semua detail TCP (syn, ack ...)
herm
13

Saya sarankan Anda mencoba WiresharkInstal Wireshark

Harap dicatat bahwa Wireshark cukup canggih, dan mungkin perlu sedikit membiasakan diri. Saya belum menggunakannya selama beberapa tahun, tetapi masih harus sempurna untuk apa yang Anda cari - jika tidak terlalu penuh fitur.

Informasi tentang Wireshark dan cara menggunakannya dapat ditemukan di beranda Wireshark .

CruzBishop
sumber
1
Ini tidak berfungsi untuk satu proses. Anda akan mendapatkan semua lalu lintas di antarmuka dan Anda harus memfilternya dengan IP / protokol, dll. Wireshark - filter by process / pid
gertvdijk
ya, tapi itu mudah dilakukan dengan antarmuka wireshark.
Panther
2
Saya sudah mencoba wireshark sebelumnya dan itu terlalu canggih untuk saya, saya sedang mencari opsi lain
megas
4
Opsi lainnya adalah tcpdump. tcpdump adalah alat baris perintah, akan dengan mudah melakukan pekerjaan, tetapi memiliki kurva belajar yang lebih curam. danielmiessler.com/study/tcpdump
Panther
1
@gertvdijk - seperti yang Anda inginkan;) Jangan ragu untuk menambahkan ke dasar-dasar
Panther
5

Juga memungkinkan dengan perintah, yang memberikan hasil yang rapi, bahkan untuk SSL:

sudo tcpdump dst port 80
Gediminas
sumber