it-swarm-id.com

Apa cara termudah untuk mengendus TCP data lalu lintas di Linux?

Saya ingin cara sederhana untuk menunjukkan semua data TCP (bukan header TCP atau yang lainnya) 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
  • mengendus semua lalu lintas jaringan (apakah itu aktif 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.

77
Dustin Boswell

Pembaruan:

Seperti yang ditunjukkan oleh Michal dalam komentar: From 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:

tcpflow -i any -C -e port 1234  # as root, or with Sudo

Ini melakukan semua yang saya inginkan

  • menampilkan data byte-for-byte saat masuk
  • tidak menampilkan metadata lainnya
  • mendengarkan semua antarmuka (sehingga menangkap data yang berasal dari dalam mesin dan dari luar)

"-C" memberitahukannya untuk membuang ke konsol alih-alih file. "-e" memungkinkan warna sehingga client-> server dan server-> client berbeda secara visual.

Saya menginstal tcpflow hanya dengan melakukan

Sudo apt-get install tcpflow
104
Dustin Boswell

socat adalah alat yang Anda minta. Itu dapat bertindak sebagai proxy:

$socat -v TCP-LISTEN:4444 TCP:localhost:1234
hello

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:

$netcat -l -p 4444 | tee output_file | netcat localhost 1234

peringatan: opsi ini searah. contoh netcat kedua akan mencetak respons dari server Anda ke output standar. Anda masih dapat melakukannya:

$mkfifo my_fifo
$netcat -l -p 4444 < my_fifo | tee output_file | netcat localhost 1234 > my_fifo
29
yves Baumes

Coba Wireshark . Ini adalah penganalisa protokol yang sangat baik yang ditargetkan untuk Linux dan Windows.

20
Kevin Boyd

tcpflow adalah apa yang Anda inginkan. Ekstrak dari halaman manual:

DESKRIPSI
tcpflow adalah program yang menangkap data yang ditransmisikan sebagai bagian dari koneksi TCP (mengalir), dan menyimpan data dengan cara yang nyaman untuk analisis protokol atau debugging. Program seperti tcpdump (4) menunjukkan ringkasan paket yang terlihat pada kabel, tetapi biasanya tidak menyimpan data yang sebenarnya sedang dikirim. Sebaliknya, tcpflow merekonstruksi aliran data aktual dan menyimpan setiap aliran dalam file terpisah untuk analisis nanti. tcpflow memahami TCP nomor urut dan akan merekonstruksi aliran data dengan benar terlepas dari pengiriman ulang atau pengiriman yang tidak sesuai pesanan.

tcpflow menyimpan semua data yang diambil dalam file yang memiliki nama formulir

192.168.101.102.02345-010.011.012.013.45103

di mana isi dari file di atas adalah data yang dikirimkan dari Host 192.168.101.102 port 2345, ke Host 10.11.12.13 port 45103.

Siapkan koneksi dari aplikasi aplikasi Anda ke server Anda. Saat koneksi aktif dan berjalan, tcpflow masih dapat mengambil data darinya Sebagai contoh:

$ Sudo tcpflow -i lo port 5555
tcpflow[3006]: listening on lo

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.

13
yves Baumes

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.

2
hobbs

Lihatlah Chaosreader . Meskipun sedikit lebih banyak dari yang Anda minta dan sedikit berbeda, mungkin Anda bisa memodifikasi kode untuk melakukan apa yang Anda inginkan.

0
Andrew Y