Memantau permintaan HTTP sambil jalan pada antarmuka jaringan?


79

Untuk keperluan debugging, saya ingin memonitor permintaan http pada antarmuka jaringan.

Menggunakan tcpdumpbaris perintah naif saya mendapatkan terlalu banyak informasi tingkat rendah dan informasi yang saya butuhkan tidak terwakili dengan jelas.

Membuang lalu lintas melalui tcpdumpke file dan kemudian menggunakan wiresharkmemiliki kelemahan bahwa itu tidak on-the-fly.

Saya membayangkan penggunaan alat seperti ini:

$ monitorhttp -ieth0 --only-get --just-urls
2011-01-23 20:00:01 GET http://foo.example.org/blah.js
2011-01-23 20:03:01 GET http://foo.example.org/bar.html
...

Saya menggunakan Linux.


Jawaban:


100

Coba tcpflow:

tcpflow -p -c -i eth0 port 80 | grep -oE '(GET|POST|HEAD) .* HTTP/1.[01]|Host: .*'

Outputnya seperti ini:

GET /search?q=stack+exchange&btnI=I%27m+Feeling+Lucky HTTP/1.1
Host: www.google.com

Anda jelas dapat menambahkan metode HTTP tambahan ke pernyataan grep, dan gunakan seduntuk menggabungkan dua baris menjadi URL lengkap.


Keuntungannya tcpflowadalah sudah tersedia di repositori default di Ubuntu 10.04 (justsniffer, httpry tidak). Info paket menyatakan bahwa fragmen IP tidak direkam dengan benar - tidak tahu, jika ini penting untuk kasus penggunaan ini - mungkin justsniffer dapat menanganinya dengan lebih baik.
maxschlepzig

Karena Anda hanya mengambil URL, sepertinya tidak masalah. Tcpflow akan menampilkan paket sesuai urutan yang diterima pada antarmuka. Jadi, jika Anda mencoba untuk menangkap konten file, Anda bisa mendapatkan paket yang rusak dan akan menghasilkan file yang rusak. Tetapi use case Anda tercantum dalam pertanyaan saya pikir ini akan bekerja untuk Anda. Anda juga dapat memperluas grep Anda (atau menghapus -o) untuk melihat lebih banyak data paket untuk disortir atau yang lainnya nanti.
bahamat

@bahamat Bisakah "tcpflow" bekerja dengan https URL?
Maulik patel

Semakin, jawabannya adalah tidak. Di masa lalu SSL cukup lemah sehingga jika Anda memiliki akses ke kunci yang digunakan untuk aliran Anda bisa mendekripsi lalu lintas yang digunakan dengan kunci itu. Saat ini, sebagian besar situs akan menggunakan kerahasiaan maju-maju dan menegosiasikan kunci sementara. Pilihan terbaik hari ini adalah apa yang disebut proxy transparan "bump in the wire".
bahamat

1
tidak dapat apa-apa dengan, saat browsing, menggunakan wifi: sudo tcpflow -p -c -i wlo2 port 80 | grep -oE '(DAPATKAN | POST | KEPALA). * HTTP / 1. [Host]:. *'
ses

23

Anda dapat menggunakan httpry atau Justniffer untuk melakukannya.

httpry tersedia misalnya melalui repositori paket Fedora.

Contoh panggilan:

# httpry -i em1

(di mana em1menunjukkan nama antarmuka jaringan)

Contoh output:

2013-09-30 21:35:20    192.168.0.1     198.252.206.16    >    POST    unix.stackexchange.com    /posts/6281/editor-heartbeat/edit    HTTP/1.1
2013-09-30 21:35:20    198.252.206.16  192.168.0.1       < HTTP/1.1   200    OK
2013-09-30 21:35:49    192.168.0.1     198.252.206.16    >    POST    unix.stackexchange.com    /posts/validate-body                 HTTP/1.1
2013-09-30 21:35:49    198.252.206.16  192.168.0.1       < HTTP/1.1   200    OK
2013-09-30 21:33:33    192.168.0.1      92.197.129.26    >    GET     cdn4.spiegel.de    /images/image-551203-breitwandaufmacher-fgoe.jpg    HTTP/1.1

(output sedikit disingkat)


Bagaimana saya bisa memperlihatkan tajuk atau isi permintaan atau tanggapan?
Mohammed Noureldin

punya apa-apa sudo httpry -i wlo2 (di mana wlo2 adalah dengan nama perangkat wifi)
ses

7

Saya sedang mencari sesuatu yang serupa, dengan persyaratan tambahan yang harusnya berfungsi untuk https juga.

Alat berbasis pcap seperti tcpflow httpry urlsnarfdan kung fu tcpdump lainnya berfungsi dengan baik untuk http, tetapi untuk permintaan aman Anda kurang beruntung.

Saya datang dengan urldump , yang merupakan pembungkus kecil di sekitar mitmproxy .
iptablesdigunakan untuk mengarahkan lalu lintas ke proxy, sehingga berfungsi secara transparan.

$ sudo urldump   
http://docs.mitmproxy.org/en/stable/certinstall.html
http://docs.mitmproxy.org/en/stable/_static/js/modernizr.min.js
https://media.readthedocs.org/css/sphinx_rtd_theme.css
https://media.readthedocs.org/css/readthedocs-doc-embed.css
https://media.readthedocs.org/javascript/readthedocs-doc-embed.js
...

Lihat README untuk info lebih lanjut.


1

Saya pikir Wireshark mampu melakukan apa yang Anda inginkan

Di sisi positifnya, ini sangat kuat, Anda dapat menginstalnya melalui apt-get, dan dilengkapi dengan GUI.

Namun, sistem filternya rumit - tetapi ada tutorial yang bagus di dalamnya, dan itu akan memberi Anda gambaran langsung atau mulai / berhenti lalu lintas.

Mengetikkan kata 'http' ke dalam filter mungkin akan memberi Anda apa yang Anda cari (yaitu lalu lintas utama yang dihasilkan oleh pengguna).


Ingin tahu mengapa ini diturunkan. Wireshark dapat membaca antarmuka dengan cepat dan memfilter hanya untuk lalu lintas http.
Kevin M

@Kevin M, Ya, saya tidak mengecilkan jawaban Anda. Tetapi untuk bersikap jujur ​​jawaban Anda agak tidak lengkap dan di luar topik. 1) Ini melewatkan detail tentang bagaimana tepatnya wireshark harus digunakan, yaitu bahwa filter harus digunakan, ekspresi filter yang tepat, dll. 2) itu tidak memungkinkan untuk penggunaan baris perintah seperti digambarkan dalam pertanyaan - bahkan jika saya baik-baik saja dengan pendekatan GUI, tampilan default menampilkan permintaan GET, di mana nama domain tidak ditampilkan berdampingan - dengan tidak nyaman untuk kasus penggunaan sketsa.
maxschlepzig

Maksud saya: s / jawaban Anda / jawaban Phobia /
maxschlepzig

1

Pilihan lain yang bagus adalah nethogs

Pada fedora tersedia di antara paket inti, dan pada centos Anda bisa mendapatkannya melalui repo epel.


1

Ada juga program command line urlsnarfyang merupakan bagian dari paket dsniff (yang juga dikemas dengan misalnya Fedora 19).

Contoh:

# urlsnarf -i em1
urlsnarf: listening on em1 [tcp port 80 or port 8080 or port 3128]
jhost - - [29/May/2014:10:25:09 +0200] "GET http://unix.stackexchange.com/questions HTTP/1.1" - - "-" "Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0"
jhost - - [29/May/2014:10:25:36 +0200] "GET http://www.spiegel.de/ HTTP/1.1" - - "-" "Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0"
jhost - - [29/May/2014:10:25:36 +0200] "GET http://www.spiegel.de/layout/css/style-V5-2-2.css HTTP/1.1" - - "-" "Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0"
jhost - - [29/May/2014:10:25:36 +0200] "GET http://www.spiegel.de/layout/jscfg/http/global-V5-2-2.js HTTP/1.1" - - "-" "Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0"
jhost - - [29/May/2014:10:25:36 +0200] "GET http://www.spiegel.de/layout/js/http/javascript-V5-2-2.js HTTP/1.1" - - "-" "Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0"
jhost - - [29/May/2014:10:25:36 +0200] "GET http://www.spiegel.de/layout/js/http/interface-V5-2-2.js HTTP/1.1" - - "-" "Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0"
jhost - - [29/May/2014:10:25:36 +0200] "GET http://www.spiegel.de/layout/js/http/netmind-V5-2-2.js HTTP/1.1" - - "-" "Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0"
jhost - - [29/May/2014:10:25:36 +0200] "GET http://www.spiegel.de/favicon.ico HTTP/1.1" - - "-" "Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0"
jhost - - [29/May/2014:10:25:36 +0200] "POST http://ocsp.thawte.com/ HTTP/1.1" - - "-" "Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0"
jhost - - [29/May/2014:10:25:36 +0200] "POST http://ocsp.thawte.com/ HTTP/1.1" - - "-" "Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
[..]

(saat browsing pertama ke SE dan kemudian ke spiegel.de)

Keterbatasan: dsnarf tidak mendukung IPv6 . Saya dapat mereproduksi laporan bug ini dengan 0,17 pada Fedora 19. Tampaknya juga rusak di bawah atm terpercaya Ubuntu (berfungsi dengan baik di bawah jelas).

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.