Apakah ada alat baris perintah yang mudah untuk mengendus paket perintah tunggal di linux?


11

Saya akan senang jika ada alat baris perintah tunggal untuk mengendus paket perintah tunggal di Linux. sesuatu seperti sniff dumpfile commandsehingga Anda bisa menjalankan perintah yang Anda inginkan untuk mengendus paket di terminal dan mendapatkan dump paket di tempat lain.

Saya ingin membuang / menyimpan / hanya melihat lalu lintas jaringan dari satu perintah yang saya masukkan, tidak semua lalu lintas TCP pada antarmuka jaringan tunggal saya. Jadi jika saya masuk ke komputer dan menjalankan IRC di latar belakang, dan saya melakukannya sniff somefile wget http://www.google.com, saya ingin melihat semua lalu lintas jaringan yang dilakukan oleh perintah wget untuk mengunduh http://www.google.com . Saya tidak ingin 'somefile' memiliki lalu lintas jaringan IRC membingungkan.

Ada banyak perintah linux / unix yang menerima perintah yang berbeda dan melakukan sesuatu yang berbeda. Dari sudo(jalankan sebagai superuser), niceubah level yang bagus, trickle(batasi bandwidth perintah)


1
Apa sebenarnya yang ingin Anda lakukan? Apakah Anda ingin memeriksa apakah perintah tertentu dijalankan? Apakah Anda ingin mengendus lalu lintas jaringan? Karena menggunakan frase 'mengendus paket perintah' tidak masuk akal bagi saya sama sekali ...
wzzrd

wzzrd, lihat pertanyaan diperluas
Rory

Jawaban:


10

Tidak ada yang saya ketahui, tetapi secara teoritis seharusnya tidak sulit untuk mendapatkan yang serupa. Strace dapat digunakan untuk mencegat syscall jaringan.

# strace -f -e trace=network -s 10000 /usr/bin/command arguments

Ini akan memberi Anda informasi tentang data yang dikirim antara kernel dan proses. Output dari strace tidak persis seperti yang Anda inginkan. Namun, strace menggunakan syscall ptrace untuk mencegat panggilan sistem. Dimungkinkan untuk menulis suatu program untuk menghasilkan data sedikit lebih bermanfaat.

Atau, Anda juga dapat mencegat soket berguna yang bagus, mengikat dan mendengarkan panggilan sys. Dimungkinkan untuk menulis program kecil yang menggunakan ptrace pada panggilan ini dan libpcap untuk secara dinamis mengubah filter tangkap setiap kali soket baru dibuka.


Akan lebih bagus jika menghasilkan sesuatu yang bisa dibaca Wireshark.
Brad Gilbert

Ingatlah bahwa strace yang dijelaskan di atas akurat untuk Solaris (dan mungkin Unites komersial lainnya). Di Linux, strace adalah pelacak panggilan sistem, serupa dalam operasi dan keluaran untuk truss pada Solaris atau tusc pada HP-UX.
James F

1
Saya menggambarkan strace di Linux.
David Pashley

8

Tracedump

Tracedump adalah aplikasi sniffer paket IP tunggal, yang menangkap semua paket TCP dan UDP dari satu proses Linux.

Unduh dan deskripsikan di sini: http://mutrics.iitis.pl/tracedump


1
Ini seharusnya jawaban yang benar sekarang.
h0tw1r3

4

Coba Wireshark - perintahnya adalah tshark

  • tshark memungkinkan Anda memilih filter pada lalu lintas yang diambil dari antarmuka
  • gunakan utilitas lain seperti debian lsof untuk mengidentifikasi jenis komunikasi yang dilakukan oleh aplikasi yang Anda minati.

Atau, Apakah Anda benar-benar hanya ingin LSOF?


Saya tidak berpikir ada alat yang secara dinamis akan terus memfilter untuk semua komunikasi yang terkait dengan suatu proses. Namun, Anda dapat mencoba melacak proses komunikasi dengan alat-alat seperti lsofdan setelah Anda memiliki filter yang baik yang dapat mengisolasi komunikasi dari proses itu dari semua lalu lintas lain yang berjalan di sistem Anda, Anda bisa mendapatkan tangkapan yang benar.

Misalnya, dengan wgetbiasanya alamat IP tujuan berbeda dari lalu lintas terkait proses lainnya. Bahkan jika Anda mengambil sesuatu seperti skypekisaran port tujuan biasanya diperbaiki untuk sebuah instance.


Ini agak seperti prinsip ketidakpastian. Anda biasanya dapat mengetahui apa yang sedang terjadi melalui serangkaian jalur komunikasi (dengan filter sniffer pada kelompok aliran yang diidentifikasi), atau di mana berbagai tautan komunikasi dibuat (dengan lsof).

Saya benar-benar ingin tahu apakah keduanya dapat dilakukan untuk suatu aplikasi. Saya pikir itu harus layak. Tapi, belum melihat alat apa pun melakukannya.


Ini mengagumkan, tapi saya lebih suka melihat apa yang dilakukannya / mengirim / menerima.
Rory

4

Pelajari cara menggunakan ekspresi filter.

Sementara ini tidak akan melakukan hal-hal mewah yang Anda minta.

Ini akan memungkinkan Anda untuk menghapus hampir semua "hal membingungkan seperti IRC" dari tangkapan layar.

Selain itu, sangat berguna untuk mengetahui sintaks filter untuk referensi cepat di masa mendatang.


2

Khusus untuk browser web / halaman web seperti plug-in Firebug untuk Firefox dapat memberi Anda beberapa informasi yang Anda cari: http://getfirebug.com/net.html

Untuk aplikasi yang lebih umum, Anda mungkin perlu menggunakan netstat untuk mengidentifikasi port (s) yang digunakan oleh aplikasi dan kemudian Wireshark / tshark / dtrace dengan filter untuk menangkap hanya lalu lintas itu. Bukan jawaban satu baris yang Anda cari ...


1

Satu ide, coba VMWare

-mengatur vm -mengonfigurasi
vm untuk menggunakan antarmuka tertentu
-mengakui antarmuka dari tuan rumah (seperti seorang pria dalam serangan tengah)

Jika Anda mengisolasi aplikasi jaringan apa yang berjalan pada vm itu, Anda mungkin memiliki jawaban

Solusi yang lebih ideal, saya kira, adalah melakukan apa yang VMWare lakukan dalam hal bagaimana ia menentukan bagaimana ia memilih antarmuka untuk dibicarakan. Saya pikir keajaibannya berasal dari modul kernel yang digunakannya, dalam hal ini, mungkin modul kernel vmnet.

Sepengetahuan saya aplikasi tidak mengetahui untuk apa mereka berbicara dan saya percaya ini adalah desain; mereka tidak perlu khawatir tentang hal-hal seperti itu.

Lebih jauh,
Mungkin sebuah program sudah ada, saya tidak tahu. Tetapi jika ada yang ditulis Anda bisa menyebutnya nettrace (misalnya) dan Penggunaan bisa seperti

antarmuka program nettrace

kemudian mengendus antarmuka yang digunakannya dan menambahkan rute (mungkin itu melakukan secara otomatis) ke antarmuka Anda yang sebenarnya


ya itu mungkin. Namun akan lebih bagus jika ada alat yang sederhana dan cepat untuk melakukannya.
Rory

Mungkin sudah waktunya untuk alat sederhana ini? Saya bertanya-tanya apakah itu akan sesulit itu, mungkin vmnet mod bisa menjadi titik awal yang baik (meskipun saya tidak tahu apakah akan ada masalah lisensi). Mungkin (hack) cukup gunakan vmnet mod. Saya tahu saya sering tertarik dengan pertanyaan seperti ini.
rev

1

Dengan asumsi bahwa Anda adalah satu-satunya orang di kotak yang mencoba terhubung ke google pada saat itu, saya pikir sesuatu seperti ini harus melakukan trik:

tcpdump -w <outfile> -i <interface> tcp dst host www.google.com and dst port 80

Jika Anda bukan satu-satunya koneksi yang mencoba terhubung ke google pada kotak, maka jika Anda dapat mengidentifikasi IP / port yang Anda hubungkan, Anda juga dapat menentukan port src / src ip.

Mengidentifikasi port src mungkin menjadi masalah kecuali Anda dapat menentukannya pada klien apa pun yang Anda gunakan. Saya tidak yakin apakah Anda bisa dengan wget.

Saya sangat curiga bahwa Anda dapat menentukan port src dan dst dengan netcatjadi jika itu benar-benar google yang Anda minati, Anda dapat melakukan GET (secara manual) melalui netcat.

Tentu saja halaman manual akan memberikan Anda spesifik


1

Halaman manual tcpdump dan banyak situs web memberikan contoh filter yang mendalam, dan bahkan ada beberapa repositori online ekspresi filter tcpdump. Seharusnya bisa melakukan hampir semua yang Anda impikan, dengan asumsi Anda tahu sesuatu tentang lalu lintas jaringan (sumber, tujuan, port, protokol, dll.) Di luar apa yang dihasilkan oleh program itu.

Jika Anda bekerja pada server atau kotak tanpa kepala, Anda selalu dapat meminta tcpdump menulis file dump dan kemudian membukanya di Wireshark di workstation Anda dan mendapatkan pemfilteran lanjutan dan antarmuka grafis.


Eh, yang beralih ke perintah tcpdump akan membatasi itu untuk satu aplikasi yang menghasilkan lalu lintas?
Milan Babuškov

1

Mungkin skrip ini akan melakukan apa yang Anda inginkan dengan modifikasi yang sesuai dengan perintah tshark:

#!/bin/bash

# Start tshark in the background before we run the commsnd to be sniffed.
# Add more options to tshark, as appropriate to your command....
setsid tshark  -w dump -i eth0 tcp port 8080 >/dev/null 2>&1  &

sleep 2

wget www.google.com

# tshark keeps running if you don't kill it. 
# This kills all other tsharks that may be running.
pkill -9 tshark

Baca file dump nanti:

tshark -r dump

Anda menangkap port 8080 tetapi menghasilkan lalu lintas di port 80; ini tidak akan melakukan apa yang Anda inginkan.
James F

James: Proksi saya terhubung ke 8080, itulah cara saya menjalankan skrip. Saya seharusnya mengubahnya 80 untuk tujuan posting ini.
Not Now

0

Dtrace harus mengizinkan ini, walaupun saya belum tahu apakah itu cukup berhasil masuk ke Linux.

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.