Фільтр за процесом / PID у Wireshark


117

Чи є спосіб фільтрувати / слідкувати за потоком TCP / SSL на основі конкретного ідентифікатора процесу за допомогою Wireshark ?


7
Станом на це написання, Wireshark досі не підтримує цю функцію; однак, ви можете відстежувати його прогрес (якщо такий є) у [помилка 1184] [1]. [1]: bugs.wireshark.org/bugzilla/show_bug.cgi?id=1184
Крістофер Мейнард

Відповіді:


58

Я не бачу як. PID не робить його на дроті (загалом кажучи), плюс Wireshark дозволяє подивитися, що на дроті - можливо, всі машини, які спілкуються по дроту. Ідентифікатори процесів так чи інакше не відрізняються на різних машинах.


7
хороший пункт. Це те, що я теж думав. Дозвольте зачекати день перед тим, як закрити це, просто на випадок, там є ніндзя проводів, який вдається це зробити ..
Райан Фернандес,

30
Wireshark знає, який порт використовується, а ОС знає PID процесу, який використовує порт. Зі змінами коду Wireshark повинен мати можливість зіставити порт на PID. Є деякі випадки, коли це не вдасться, як, коли ОС перерозподіляє порт до іншого додатку безпосередньо перед тим, як Wireshark запитує ОС для PID для порту. Тож це не буде дурнем і недоліком, але якщо користувач ознайомлений з цими обмеженнями, це все-таки буде корисною функцією.
Доджо

Я кажу, просто додайте модуль до проводів, який слухає, як порт відкривається / закривається і відображає PID на порт. Синхронізуйте це з основним процесом, і у вас є ідеальний картограф-порт для обробки. Однак, читаючи помилку з коментаря до запитання, модуль створити не так просто.
Веспер

Я пам’ятаю, коли я завантажив провідну книжку, в ній було показано дерево процесу, і ви можете вибрати процес для моніторингу. Данно, коли цей варіант зник, але він був там.
Томаш Зато - Відновіть Моніку

90

На всякий випадок, якщо ви шукаєте альтернативний спосіб і середовище, яке ви використовуєте, це Windows, Network Monitor 3.3 - це хороший вибір. У ньому стовпчик імені процесу. Ви можете легко додати його до фільтра за допомогою контекстного меню та застосувати фільтр. Як звичайно, графічний інтерфейс дуже інтуїтивно зрозумілий ...


10
Microsoft Network Monitor 3.4 знаходиться за адресою microsoft.com/en-us/download/details.aspx?id=4865
gt

39
Також є аналізатор повідомлень Microsoft, який в основному є версією Microsoft Wireshark (і, як я розумію, правонаступником Network Monitor), але трохи краще інтегрований. У виборі стовпців під 'Etw' -> 'EtwProviderMsg' є стовпець для 'PID'. Це добре працює!
Камерон

3
Точний шлях EtwProviderMsg -> EventRecord -> Header -> ProcessId
r590

Я щойно спробував це, і що Microsoft Message Analyzer - це така нудна частина програмного забезпечення! Майже привів мою систему до сканування. Дуже контрінтуїтивний інтерфейс теж. Хтось знайшов спосіб очистити список зібраними даними? Я здав і видалив цей шматок сміття. (PS. Шкода, що розробники Wireshark не додали функцію підключення імені PID / Process до порту у фільтрі. Це зробити дуже просто. Це може бути критично важливим, щоб побачити, що відбувається в процесі під час його запуску. обхідний шлях я міг отримати загальне уявлення за допомогою ProcMon від SysInternals.)
c00000fd

1
Нещодавно я відкрив аналізатор повідомлень Microsoft, і це такий корисний інструмент! Як можливо, я ніколи про це не чув. Так занижено. Він має чудові можливості фільтрації завдяки набагато кращій інтеграції з Windows, ніж Wireshark. Я перейшов на нього на всіх хостів моєї компанії протягом ~ 3 місяців щоденної роботи. Величезна вдячність @Cameron за його коментар під цю відповідь! :-)
Шкіпер

16

Ви можете зіставити номери портів від провідного каналу до номерів портів, скажімо, netstat, який повідомить вам PID процесу прослуховування на цьому порту.


12
ну, це може не спрацювати. Програма відкриває і закриває багато локальних і віддалених портів
Райан Фернандес,

11

Використовуйте Microsoft Message Analyzer v1.4

Перейдіть до ProcessId з вибору поля.

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

Клацніть правою кнопкою миші та Додати як стовпець


1
Дякую, що вказали мені на напрямок цього, це саме те, що мені потрібно. FWIW, схоже, що група верхнього рівня "ProcMon" містить той самий ProcessId, як і інша інформація, така як назва процесу, ParentId тощо.
Tobias J

3

У Windows існує експериментальна збірка, яка робить це, як описано у списку розсилки, Фільтр за місцевим іменем процесу


Це означає, що в Wireshark "ви можете співставити номери портів від wireshark до номерів портів, скажімо, netstat, який повідомить вам PID процесу прослуховування на цьому порту". матеріал з коментаря Тома Вулфрі, тому він (як зазначається у повідомленні) обмежується цим механізмом.

3

Це важлива річ, яку можна зробити для моніторингу, де певні процеси намагаються підключитися, і, здається, немає зручного способу зробити це в Linux. Однак можливі кілька обхідних шляхів, і тому я вважаю, що варто згадати їх.

Існує програма під назвою nonet, яка дозволяє запускати програму без доступу до Інтернету (у мене в більшості моїх програм запуску програм). Він використовує setguid для запуску процесу в груповому нонеті і встановлює правило iptables для відмови від усіх з'єднань з цієї групи.

Оновлення: на даний момент я використовую ще простішу систему, ви можете легко встановити читабельну конфігурацію iptables з ferm і просто використовувати програму sgдля запуску програми з певною групою. Iptables також дозволяє вам перенаправляти трафік, так що ви навіть можете перенаправити його на окремий інтерфейс або локальний проксі на порт, що дозволяє вам фільтрувати в провідній книзі або LOG пакети безпосередньо з iptables, якщо ви не хочете вимкнути весь Інтернет, поки ви перевіряють трафік.

Не дуже складно адаптувати її для запуску програми в групі та скоротити весь інший трафік за допомогою iptables протягом усього періоду виконання, і тоді ви могли захопити трафік лише з цього процесу.

Якщо я коли-небудь підійду до його написання, опублікую посилання тут.

З іншого боку, ви завжди можете запустити процес у віртуальній машині та обнюхати правильний інтерфейс, щоб ізолювати з'єднання, які він робить, але це було б зовсім неповноцінним рішенням ...


3

Якщо ви хочете перейти на додаток, який ще потрібно запустити, це, безумовно, можливо:

  1. Встановіть докер (див. Https://docs.docker.com/engine/installation/linux/docker-ce/ubuntu/ )
  2. Відкрийте термінал і запустіть крихітний контейнер: docker run -t -i ubuntu /bin/bash (змініть "ubuntu" на улюблений дистрибутив, це не повинно бути таким, як у вашій реальній системі)
  3. Встановіть свою програму в контейнер, використовуючи той самий спосіб, який ви встановите в реальній системі.
  4. Запустіть проводку у вашій реальній системі, перейдіть до захоплення> параметри. У вікні, яке відкриється, ви побачите всі свої інтерфейси. Замість того щоб вибрати any, wlan0, eth0, ... вибрати новий віртуальний інтерфейс docker0замість.
  5. Почніть захоплювати
  6. Запустіть свою заявку в контейнері

У вас можуть виникнути сумніви щодо запуску програмного забезпечення в контейнері, тому ось відповіді на питання, які ви, ймовірно, хочете задати:

  • Чи працюватиме моя програма всередині контейнера? Майже напевно, так, але вам може знадобитися трохи дізнатися про докер, щоб він працював
  • Не буде повільно працювати моя програма? Незначний. Якщо у вашій програмі є тиждень, який веде важкі розрахунки, то це може зайняти тиждень і 3 секунди
  • Що робити, якщо моє програмне забезпечення або щось інше зламається в контейнері? Це приємна річ щодо контейнерів. Те, що працює всередині, може лише зламати поточний контейнер і не зашкодити іншій системі.

0

У деяких випадках ви не можете фільтрувати за ідентифікатором процесу. Наприклад, у моєму випадку мені потрібно було нюхати трафік з одного процесу. Але я знайшов в його конфігураційній цільовій машині IP-адресу, додав фільтр ip.dst==someipі вуалу. У будь-якому випадку це не буде працювати, але для деяких це корисно.


0

Отримайте номер порту за допомогою netstat:

netstat -b

А потім скористайтеся фільтром Wireshark:

tcp.port == portnumber

Я не впевнений, що це нерозумний спосіб. Якщо у вас порт прослуховує TCP на порту, але ви не заблокували обробку TCP ядра, то або порт, або обидва ядра або ваша програма могли відповісти на порт.
aeb0

0

Використання straceбільше підходить для даної ситуації.

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

варіанти -fтакож відстежувати всі розщеплені процеси, -e trace=netwrokфільтрувати лише мережевий системний виклик та -sвідображати довжину рядка до 10000 знаків.

Ви також можете відстежувати лише певні дзвінки, такі як операції надсилання, повторної читання, читання.

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

-16

Ви можете перевірити номери портів за допомогою цих прикладів команд на wireshark: -

tcp.port == 80

tcp.port == 14220

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.