Filter berdasarkan proses / PID di Wireshark

117

Apakah ada cara untuk memfilter / mengikuti aliran TCP / SSL berdasarkan ID proses tertentu menggunakan Wireshark ?

Ryan Fernandes
sumber
7
Sampai tulisan ini dibuat, Wireshark masih belum mendukung fitur ini; namun, Anda dapat melacak kemajuannya (jika ada) di [bug 1184] [1]. [1]: bugs.wireshark.org/bugzilla/show_bug.cgi?id=1184
Christopher Maynard

Jawaban:

58

Saya tidak mengerti bagaimana caranya. PID tidak berhasil masuk ke kabel (secara umum), ditambah Wireshark memungkinkan Anda untuk melihat apa yang ada di kabel - kemungkinan semua mesin yang berkomunikasi melalui kabel. ID proses tidak unik di berbagai mesin.

Vinay Sajip
sumber
7
poin bagus .. itu juga yang saya pikirkan .. biarkan saya menunggu sehari sebelum menutup ini, seandainya ada ninja wireshark di luar sana yang berhasil melakukan ini ..
Ryan Fernandes
30
Wireshark mengetahui port mana yang digunakan dan OS mengetahui PID dari proses yang menggunakan port tersebut. Dengan perubahan kode, Wireshark dapat memetakan port ke PID. Ada beberapa kasus di mana ini akan gagal seperti ketika OS mengalokasikan kembali port ke aplikasi berbeda tepat sebelum Wireshark menanyakan OS untuk PID untuk port. Jadi ini tidak akan menjadi bukti yang bodoh dan bukti kesalahan tetapi jika pengguna dibuat sadar akan batasan ini, itu masih akan menjadi fitur yang berguna.
Dojo
Saya katakan tambahkan saja modul ke wireshark yang mendengarkan port membuka / menutup dan memetakan PID ke port. Sinkronkan itu dengan proses utama dan Anda mendapatkan pemeta port-to-proses yang sempurna. Namun, membaca bug dari komentar pertanyaan, modul ini tidak mudah dibuat.
Vesper
Saya ingat pertama kali saya mengunduh wireshark, itu menunjukkan pohon proses dan Anda dapat memilih proses untuk dipantau. Entah kapan opsi ini menghilang, tetapi opsi itu ada di sana.
Tomáš Zato - Kembalikan Monica
90

Jika Anda mencari cara alternatif dan lingkungan yang Anda gunakan adalah Windows, Monitor Jaringan 3.3 Microsoft adalah pilihan yang baik. Ini memiliki kolom nama proses. Anda dengan mudah menambahkannya ke filter menggunakan menu konteks dan menerapkan filter .. Seperti biasa GUI-nya sangat intuitif ...

Sreejith Menon
sumber
10
Microsoft Network Monitor 3.4 ada di microsoft.com/en-us/download/details.aspx?id=4865
gt
39
Ada juga Microsoft Message Analyzer yang pada dasarnya adalah versi Microsoft dari Wireshark (dan penerus Network Monitor yang saya mengerti), tetapi sedikit lebih terintegrasi. Di pemilih kolom, di bawah 'Etw' -> 'EtwProviderMsg' ada kolom untuk 'PID'. Ini bekerja dengan baik!
Cameron
3
Jalur yang tepat adalah EtwProviderMsg -> EventRecord -> Header ->
ProcessId
Saya baru saja mencobanya dan Microsoft Message Analyzer adalah perangkat lunak yang membosankan! Hampir membuat sistem saya merangkak. UI yang sangat berlawanan dengan intuisi juga. Apakah ada yang menemukan cara untuk membersihkan daftar dengan data yang dikumpulkan? Saya menyerah dan menghapus sampah itu. (PS. Sayang sekali pengembang Wireshark tidak menambahkan fitur untuk menghubungkan PID / Nama proses ke port di filter. Ini sangat mudah dilakukan. Ini mungkin penting untuk melihat apa yang terjadi dalam proses selama startupnya. Seperti solusi saya bisa mendapatkan ide umum menggunakan ProcMon dari SysInternals.)
c00000fd
1
Saya baru saja menemukan Microsoft Message Analyzer baru-baru ini dan ini adalah alat yang sangat berguna! Bagaimana mungkin saya belum pernah mendengarnya. Sangat diremehkan. Ini memiliki kemampuan penyaringan yang hebat karena integrasi yang jauh lebih baik dengan Windows daripada Wireshark. Saya telah beralih ke itu di semua host perusahaan saya dalam ~ 3 bulan sejak bekerja setiap hari. Penghargaan yang besar kepada @Cameron atas komentarnya di bawah jawaban itu! :-)
Skipper
16

Anda dapat mencocokkan nomor port dari wireshark hingga nomor port dari, katakanlah, netstat yang akan memberi tahu Anda PID dari proses yang mendengarkan pada port tersebut.

tw39124
sumber
12
nah, ini mungkin tidak berhasil .. program membuka dan menutup banyak port lokal dan jarak jauh
Ryan Fernandes
11

Gunakan Microsoft Message Analyzer v1.4

Arahkan ke ProcessId dari pemilih bidang.

Etw
-> EtwProviderMsg
--> EventRecord
---> Header
----> ProcessId

Klik kanan dan Tambahkan sebagai Kolom

Enki
sumber
1
Terima kasih telah mengarahkan saya ke arah ini, itulah yang saya butuhkan. FWIW, grup tingkat atas "ProcMon" tampaknya berisi ProcessId yang sama, serta info lain seperti nama proses, ParentId, dll.
Tobias J
3

Di Windows ada versi eksperimental yang melakukan hal ini, seperti yang dijelaskan di milis, Filter menurut nama proses lokal

patraulea.dll
sumber
Artinya, dalam Wireshark, "Anda dapat mencocokkan nomor port dari wireshark hingga nomor port dari, katakanlah, netstat yang akan memberi tahu Anda PID dari proses yang mendengarkan pada port itu." hal-hal dari komentar Tom Woolfrey, jadi (seperti yang dicatat dalam pesan) tunduk pada batasan mekanisme itu.
3

Ini adalah hal penting yang dapat dilakukan untuk memantau di mana proses tertentu mencoba untuk terhubung, dan tampaknya tidak ada cara yang nyaman untuk melakukan ini di Linux. Namun, beberapa solusi mungkin dilakukan, jadi saya merasa perlu untuk menyebutkannya.

Ada sebuah program bernama nonet yang memungkinkan menjalankan program tanpa akses Internet (Saya memiliki sebagian besar peluncur program di sistem saya yang disiapkan dengannya). Menggunakan setguid untuk menjalankan proses di Nonet kelompok dan set sebuah iptables aturan untuk menolak semua koneksi dari grup ini.

Pembaruan: sekarang saya menggunakan sistem yang lebih sederhana, Anda dapat dengan mudah memiliki konfigurasi iptables yang dapat dibaca dengan ferm, dan cukup gunakan program sguntuk menjalankan program dengan grup tertentu. Iptables juga memungkinkan Anda untuk mengubah rute lalu lintas sehingga Anda bahkan dapat merutekannya ke antarmuka terpisah atau proxy lokal pada port yang memungkinkan Anda untuk memfilter di wireshark atau LOG ​​paket langsung dari iptables jika Anda tidak ingin menonaktifkan semua internet saat Anda sedang memeriksa lalu lintas.

Tidak terlalu rumit untuk mengadaptasinya untuk menjalankan program dalam grup dan memotong semua lalu lintas lainnya dengan iptables untuk masa eksekusi dan kemudian Anda dapat menangkap lalu lintas hanya dari proses ini.

Jika saya pernah datang untuk menulisnya, saya akan memposting tautan di sini.

Pada catatan lain, Anda selalu dapat menjalankan proses di mesin virtual dan mengendus antarmuka yang benar untuk mengisolasi koneksi yang dibuatnya, tetapi itu akan menjadi solusi yang lebih rendah ...


sumber
3

Jika Anda ingin mengikuti aplikasi yang masih harus dijalankan, maka kemungkinan besar:

  1. Instal buruh pelabuhan (lihat https://docs.docker.com/engine/installation/linux/docker-ce/ubuntu/ )
  2. Buka terminal dan jalankan wadah kecil: docker run -t -i ubuntu /bin/bash(ubah "ubuntu" ke distro favorit Anda, ini tidak harus sama dengan di sistem Anda yang sebenarnya)
  3. Instal aplikasi Anda di container menggunakan cara yang sama seperti Anda menginstalnya di sistem nyata.
  4. Mulai wireshark di sistem nyata Anda, buka capture> options. Di jendela yang terbuka, Anda akan melihat semua antarmuka Anda. Alih-alih memilih any, wlan0, eth0, ... memilih antarmuka virtual baru docker0sebagai gantinya.
  5. Mulailah menangkap
  6. Mulai aplikasi Anda di dalam wadah

Anda mungkin memiliki keraguan tentang menjalankan perangkat lunak Anda dalam sebuah wadah, jadi berikut adalah jawaban atas pertanyaan yang mungkin ingin Anda tanyakan:

  • Akankah aplikasi saya berfungsi di dalam wadah? Hampir pasti ya, tapi Anda mungkin perlu belajar sedikit tentang buruh pelabuhan untuk membuatnya bekerja
  • Tidakkah aplikasi saya akan berjalan lambat? Dapat diabaikan. Jika program Anda adalah sesuatu yang menjalankan kalkulasi berat selama seminggu maka sekarang mungkin perlu waktu seminggu dan 3 detik
  • Bagaimana jika perangkat lunak saya atau sesuatu yang lain rusak di wadah? Itu hal yang bagus tentang kontainer. Apa pun yang berjalan di dalam hanya dapat merusak penampung saat ini dan tidak dapat merusak sistem lainnya.
Garo
sumber
0

Dalam beberapa kasus, Anda tidak dapat memfilter berdasarkan id proses. Misalnya, dalam kasus saya, saya perlu mengendus lalu lintas dari satu proses. Tetapi saya menemukan dalam alamat IP mesin target config, menambahkan filter ip.dst==someipdan voila. Ini tidak akan berfungsi dalam hal apa pun, tetapi untuk beberapa hal ini berguna.

Alex Zhukovskiy
sumber
0

Dapatkan nomor port menggunakan netstat:

netstat -b

Dan kemudian gunakan filter Wireshark:

tcp.port == portnumber
Sahil Lakhwani
sumber
Saya tidak yakin ini adalah cara yang sangat mudah. Jika Anda memiliki server TCP yang mendengarkan di port tetapi belum memblokir penanganan TCP kernel, salah satu atau kedua kernel atau aplikasi Anda dapat merespons di port.
aeb0
0

Penggunaan stracelebih cocok untuk situasi ini.

strace -f -e trace=network -s 10000 -p <PID>;

opsi -funtuk juga melacak semua proses bercabang, -e trace=netwrokuntuk hanya memfilter panggilan sistem jaringan dan -suntuk menampilkan panjang string hingga 10.000 karakter.

Anda juga hanya dapat melacak panggilan tertentu seperti operasi kirim, terima, baca.

strace -f -e trace=send,recv,read -s 10000 -p <PID>;
Shaboti
sumber
-16

Anda dapat memeriksa nomor port dengan contoh perintah berikut di wireshark: -

tcp.port == 80

tcp.port == 14220

Rajeev Das
sumber