Saya ingin memeriksa lalu lintas jaringan yang ditangani oleh satu proses, tetapi tangkapan jaringan sederhana tidak akan berfungsi karena saya berurusan dengan sistem yang sibuk (banyak lalu lintas lainnya terjadi pada saat yang sama). Apakah ada cara untuk mengisolasi tcpdump
atau wireshark
menangkap lalu lintas jaringan dari satu proses spesifik? (Menggunakan netstat
tidak cukup.)
sumber
netstat
dan menangkap filter jaringan sederhana pada mesin yang sibuk.netstat
; Saya hanya bisa menangkap koneksi berumur panjang. :(Untuk memulai dan memantau proses baru:
Untuk memantau proses yang ada dengan PID yang dikenal:
-f
adalah untuk "ikuti proses baru"-e
mendefinisikan filter-s
menetapkan batas string lebih dari 32-p
membutuhkan id proses untuk dilampirkansumber
Saya tahu utas ini agak lama tetapi saya pikir ini mungkin membantu sebagian dari Anda:
Jika kernel Anda membolehkannya, menangkap lalu lintas jaringan dari satu proses sangat mudah dilakukan dengan menjalankan proses tersebut di ruang nama jaringan yang terisolasi dan menggunakan wireshark (atau alat jaringan standar lainnya) di ruang nama tersebut juga.
Penyiapannya mungkin terlihat sedikit rumit, tetapi begitu Anda memahaminya dan menjadi terbiasa dengannya, itu akan sangat memudahkan pekerjaan Anda.
Untuk melakukannya:
buat namespace jaringan uji:
buat sepasang antarmuka jaringan virtual (veth-a dan veth-b):
ubah namespace aktif dari antarmuka veth-a:
konfigurasikan alamat IP dari antarmuka virtual:
konfigurasikan perutean dalam namespace tes:
aktifkan ip_forward dan buat aturan NAT untuk meneruskan lalu lintas yang datang dari namespace yang Anda buat (Anda harus menyesuaikan antarmuka jaringan dan alamat ip SNAT):
(Anda juga dapat menggunakan aturan MASQUERADE jika Anda mau)
akhirnya, Anda bisa menjalankan proses yang ingin Anda analisis di namespace baru, dan wireshark juga:
Anda harus memantau antarmuka veth-a.
sumber
socat
.--to-source
argumeniptables
? Apakah ini alamat IP dari antarmuka yang Anda berikan ke-o
opsi, alamat IP yang Anda buat, atau ??? Saya mencoba versi topeng yang tidak perlu--to-source
, seperti yang dijelaskan di sini , dan itu berhasil!Itu akan menunjukkan koneksi yang sedang dibuat aplikasi termasuk port yang sedang digunakan.
sumber
Hanya sebuah gagasan: Apakah mungkin untuk mengikat aplikasi Anda ke alamat IP yang berbeda? Jika demikian, Anda dapat menggunakan tersangka biasa ( tcpdump , dll.)
Alat untuk aplikasi yang tidak mampu mengikat ke alamat IP lain:
http://freshmeat.net/projects/fixsrcip
http://freshmeat.net/projects/force_bind
sumber
Saya telah datang ke masalah yang sama dan saya bisa mengatasinya berdasarkan jawaban ini dengan ioerror , menggunakan NFLOG seperti yang dijelaskan di sini :
Kemudian Anda dapat membuat menjalankan proses yang dimaksud dari akun pengguna yang tidak melakukan hal lain - dan voila, Anda baru saja mengisolasi dan menangkap lalu lintas dari satu proses tunggal.
Hanya ingin memposting kembali jika itu membantu siapa pun.
sumber
Saya menulis aplikasi C yang melakukan apa yang dijelaskan dalam jawaban di atas oleh felahdab!
Lihat di sini: nsntrace github repo
sumber
Ini adalah hack kotor tapi saya sarankan pengalihan atau target log dengan iptables untuk UID yang diberikan. misalnya:
Mungkin juga layak untuk melihat sesuatu seperti '--log-tcp-sequence', '--log-tcp-options', '--log-ip-options', '--log-uid' untuk target log tersebut . Meskipun saya menduga itu hanya akan membantu Anda memposting proses pcap yang mencakup banyak data lainnya.
Target NFLOG mungkin berguna jika Anda ingin menandai paket dan kemudian paket yang ditandai akan dikirim melalui soket netlink ke proses yang Anda pilih. Saya ingin tahu apakah itu akan berguna untuk meretas sesuatu dengan wireshark dan aplikasi spesifik Anda berjalan sebagai pengguna tertentu?
sumber
Anda dapat mencoba tracedump - http://mutrics.iitis.pl/tracedump
Itu tidak persis apa yang Anda inginkan, Anda bisa memberikannya ID proses atau program untuk dijalankan.
sumber
Coba jalankan proses yang Anda minati di bawah strace :
Ini akan memberi Anda beberapa informasi yang sangat terperinci tentang apa yang dilakukan proses Anda. Karena suatu proses dapat membuka port apa saja yang diinginkan ke mana saja, menggunakan filter yang telah ditentukan sebelumnya Anda mungkin kehilangan sesuatu.
Pendekatan lain adalah dengan menggunakan mesin virtual stripped-down atau mesin uji di jaringan Anda, dan menempatkan proses Anda di atasnya dalam isolasi ini. Kemudian Anda bisa menggunakan Wireshark untuk menangkap semua dari mesin itu. Anda akan cukup yakin bahwa lalu lintas yang Anda tangkap akan relevan.
sumber
Membangun jawaban dengan ioerror Saya kira Anda dapat menggunakan
iptables --uid-owner
untuk menetapkan penanda pada lalu lintas, dan kemudian Anda dapat meminta wireshark untuk menangkap hanya lalu lintas dengan penanda itu. Anda mungkin dapat menggunakan DSCP (penanda layanan diferensial), id aliran atau penanda qos.Atau memang Anda bisa menggunakan ini untuk mengirim paket-paket itu keluar antarmuka yang berbeda, dan kemudian menangkap hanya pada antarmuka itu.
sumber
wireshark bug # 1184 adalah fitur ini. Itu belum diimplementasikan.
Disalin dari pengguna cmanynard di ask.wireshark.org
sumber
mungkin iptables dan ulog dapat bekerja? Bukannya saya punya resep yang tepat, tapi saya pikir iptables bisa cocok dengan proses, sekali cocok Anda bisa menggunakan ulog.
sumber
iptables -m owner --pid-owner $PID
telah dihapus di Linux 2.6.14: ftp.kernel.org/pub/linux/kernel/v2.6/ChangeLog-2.6.14Saya pikir Anda dapat membuat skrip shell untuk mengulang melalui menjalankan netstat dan masuk ke file teks. Sesuatu seperti (langkah yang sangat kasar):
Saya bukan seorang programmer, jadi saya tidak bisa memperbaiki ini. Tetapi seseorang di sini dapat mulai dari tempat saya tinggalkan dan membuat skrip yang berfungsi untuk Anda.
sumber