Saya ingin cara sederhana untuk menunjukkan semua data TCP (bukan header TCP atau apa pun) melalui antarmuka apa pun di kotak Linux saya.
Sebagai contoh, saya ingin perintah ajaib yang jika saya lakukan:
magic_commmand_I_want port=1234
maka jika ada server mendengarkan pada port 1234 di komputer saya, dan seseorang melakukannya:
echo hello | nc localhost 1234
# Note: "nc" (aka "netcat") is a simple tool that sends data to a host/port
Maka perintah magis hanya akan mencetak:
hello
Saya sudah mencoba "tcpdump", "ethereal", "tethereal", "tshark", dan lainnya, tetapi tidak jelas bagaimana Anda membuatnya:
- tidak menunjukkan alamat IP atau metadata lainnya
- hanya menunjukkan "data" yang dikirim, bukan paket individual dan headernya
- cetak data apa adanya, bukan dalam hex, dan tidak dengan marker packet-offset
- hirup semua lalu lintas jaringan (apakah itu pada eth0 atau eth1 atau lo , dll ...)
Ya, Anda mungkin bisa merangkai satu set perintah unix untuk melakukan ini, tapi itu tidak mudah diingat untuk waktu berikutnya :)
Jika Anda memiliki contoh sederhana dari baris perintah persis yang melakukan ini, itulah yang saya inginkan.
linux
networking
Dustin Boswell
sumber
sumber
Jawaban:
Memperbarui:
Seperti yang ditunjukkan oleh Michal dalam komentar: Dari tcpflow versi 1.3 opsi -e digunakan untuk menentukan nama pemindai. Jadi kesalahan "Nama pemindai tidak sah '8983'" dicetak. Perintah yang benar adalah
sudo tcpflow -i any -C -J port 1234
(juga
-J
telah diubah menjadi-g
dalam rilis terbaru)Terima kasih kepada Yves karena mengarahkan saya ke " tcpflow ". Inilah baris perintah:
Ini melakukan semua yang saya inginkan
"
-C
" Memberitahukannya untuk melakukan dump ke konsol alih-alih file. "-e
" Memungkinkan warna sehingga klien -> server dan server -> klien secara visual berbeda.Saya menginstal tcpflow hanya dengan melakukan
sumber
-e
opsi digunakan untuk menentukan nama pemindai. Jadi kesalahan "Nama pemindai tidak sah '8983'" dicetak. Perintah yang benar adalahsudo tcpflow -i any -C -J port 1234
-J
telah diubah menjadi-g
dalam rilis terbaru.socat adalah alat yang Anda minta. Itu dapat bertindak sebagai proxy:
maka aplikasi Anda harus menghubungkan port 4444 bukannya langsung terhubung ke 1234
Opsi -v adalah untuk socat untuk mencetak semua yang diterimanya pada kesalahan standar (stderr).
Memperbarui:
Jika socat tidak tersedia di mesin Anda, Anda mungkin masih meniru seperti itu dengan netcat:
peringatan: opsi ini searah. contoh netcat kedua akan mencetak respons dari server Anda ke output standar. Anda masih dapat melakukannya:
sumber
Coba Wireshark . Ini adalah penganalisa protokol yang sangat baik yang ditargetkan untuk Linux dan Windows.
sumber
tcpflow adalah apa yang Anda inginkan. Ekstrak dari halaman manual:
Siapkan koneksi dari aplikasi aplikasi Anda ke server Anda. Saat koneksi aktif dan berjalan, tcpflow masih dapat mengambil data darinya Sebagai contoh:
Setiap data akan disimpan dalam file bernama 127.000.000.001.48842-127.000.000.001.05555.
Anda masih dapat mengarahkan ini pada output standar dengan opsi -Cs. Baca halaman manual untuk bermain dengan ekspresi untuk menyetel paquets yang Anda ingin tcpflow tangkap.
sumber
ngrep
sangat bagus untuk ini. Dibutuhkan string BPF dan string opsional untuk mencari di dalam paket, dan kemudian membuang konten paket ke layar dalam format yang sangat berguna. Opsinya juga membuang ke file pcap_dump yang dapat Anda periksa lebih dekat di Wireshark nanti.sumber
Lihatlah Chaosreader . Meskipun sedikit lebih banyak dari yang Anda minta dan sedikit berbeda, mungkin Anda bisa memodifikasi kode untuk melakukan apa yang Anda inginkan.
sumber
Mungkin Anda dapat menulis pembungkus untuk tcpdump, misalnya, yang akan menghapus semua informasi yang berlebihan
sumber