Wiresharkのプロセス/ PIDでフィルター


117

Wiresharkを使用して特定のプロセスIDに基づいてTCP / SSLストリームをフィルタリング/追跡する方法はありますか?


7
これを書いている時点では、Wiresharkはまだこの機能をサポートしていません。ただし、[バグ1184] [1]でその進行状況(ある場合)を追跡できます。[1]:bugs.wireshark.org/bugzilla/show_bug.cgi?id
=

回答:


58

方法がわかりません。PIDは(一般的に言えば)回線上に到達しません。さらに、Wiresharkを使用すると、回線上にあるもの、つまり回線上で通信しているすべてのマシンを確認できます。とにかく、プロセスIDは異なるマシン間で一意ではありません。


7
私はちょうど行うには、この..管理してそこにWiresharkの忍者がある包みなさい、私はこれを閉じる前にその日を待ちましょう。..あまりにも思った何が良いpoint..thats
ライアン・フェルナンデス

30
Wiresharkは使用されているポートを認識しており、OSはそのポートを使用しているプロセスのPIDを認識しています。コードを変更すると、WiresharkがポートをPIDにマッピングできるようになります。WiresharkがOSにポートのPIDを問い合わせる直前に、OSがポートを別のアプリに再割り当てする場合など、これが失敗する場合があります。したがって、これはフールプルーフやグリッチプルーフではありませんが、ユーザーがこれらの制限に気付いていれば、それでも有用な機能です。
Dojo

私は、ポートのオープン/クローズをリッスンし、PIDをポートにマップするWiresharkにモジュールを追加するだけです。これをメインプロセスと同期すると、完璧なポートからプロセスへのマッパーが得られます。ただし、質問のコメントからバグを読み取ると、モジュールの作成は簡単ではありません。
Vesper

最初にwiresharkをダウンロードしたときのことを覚えています。プロセスツリーが表示され、監視するプロセスを選択できます。Dunnoはこのオプションがなくなったとき、それはありました。
トマーシュZato -復活モニカ

90

別の方法を探していて、使用する環境がWindowsである場合に備えて、Microsoftのネットワークモニター 3.3をお勧めします。プロセス名の列があります。コンテキストメニューを使用してフィルターに簡単に追加し、フィルターを適用できます。いつものように、GUIは非常に直感的です...


10
Microsoft Network Monitor 3.4はmicrosoft.com/en-us/download/details.aspx?id=4865
gt

39
Microsoft Message Analyzerもあり、これは基本的にMicrosoftのバージョンのWireshark(および私が理解しているようにNetwork Monitorの後継)ですが、少し統合されています。列チューザーの「Etw」->「EtwProviderMsg」の下に「PID」の列があります。うまくいきます!
Cameron

3
正確なパスはEtwProviderMsg-> EventRecord-> Header-> ProcessId
r590

試してみたところ、Microsoft Message Analyzerはとても退屈なソフトウェアです。私のシステムをほとんどクロールさせました。非常に直感的でないUIも。誰かが収集したデータでリストをクリアする方法を見つけましたか?そのゴミをあきらめてアンインストールしました。(PS。Wireshark開発者がPID /プロセス名をフィルターのポートに接続する機能を追加しなかったのは残念です。非常に簡単です。これは、起動時にプロセスで何が起こっているかを確認するために重要です。回避策:SysInternalsのProcMonを使用して一般的なアイデアを得ることができます。)
c00000fd 2017

1
最近Microsoft Message Analyzerを見つけたばかりで、とても便利なツールです。聞いたことがないのはなぜですか。とても過小評価されています。WiresharkよりもWindowsとの統合が優れているため、優れたフィルタリング機能を備えています。私の会社のすべてのホストで、毎日3か月以内に切り替えています。@Cameronのコメントに感謝します。:-)
スキッパー

16

Wiresharkからのポート番号を、たとえばnetstatからのポート番号と一致させると、そのポートでリッスンしているプロセスのPIDがわかります。


12
まあ、これはうまくいかないかもしれません。プログラムは多くのローカルポートとリモートポートを開いたり閉じたりします
Ryan Fernandes

11

Microsoft Message Analyzer v1.4を使用する

フィールドチューザーからProcessIdに移動します。

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

右クリックして列として追加


1
この方向を教えてくれてありがとう、それがまさに私が必要としていたことです。FWIW、「ProcMon」トップレベルグループには、同じProcessIdだけでなく、プロセス名、ParentIdなどの他の情報も含まれているようです
Tobias J

3

Windowsでは、これを行う実験的なビルドがあります。これは、メーリングリストの「ローカルプロセス名フィルターする」で説明されています。


それは、Wireshark内で、「wiresharkからのポート番号を、たとえば、そのポートでリッスンしているプロセスのPIDを通知するnetstatからのポート番号と一致させることができます。」Tom Woolfreyのコメントからのものなので、それは(メッセージノートとして)そのメカニズムの制限の影響を受けます。

3

これは、特定のプロセスが接続しようとする場所を監視するために実行できる重要なことであり、Linuxでこれを行う便利な方法はないようです。ただし、いくつかの回避策が考えられるため、言及する価値があると思います。

nonetと呼ばれるプログラムがあり、インターネットにアクセスせずにプログラムを実行できます(私のシステムにはほとんどのプログラムランチャーが設定されています)。setguidを使用してグループnonetでプロセスを実行し、このグループからのすべての接続を拒否するようにiptablesルールを設定します。

更新:今ではさらにシンプルなシステムを使用しています。fermで読み取り可能なiptables構成を簡単に設定でき、プログラムsgを使用して特定のグループでプログラムを実行するだけです。Iptablesはまた、トラフィックを別のインターフェースまたはポートのローカルプロキシにルーティングできるようにトラフィックを再ルーティングするのを遅くしますトラフィックをチェックしています。

グループ内のプログラムを実行するように適応させ、実行中のすべてのトラフィックをiptablesでカットすることはそれほど複雑ではなく、このプロセスからのみトラフィックをキャプチャできます。

もし私がそれを書いているとしたら、ここにリンクを投稿します。

別のメモでは、仮想マシンでプロセスを常に実行し、適切なインターフェイスをスニッフィングして、接続を分離することができますが、それはかなり劣った解決策です...


3

まだ起動する必要があるアプリケーションを追跡したい場合は、確かに可能です。

  1. dockerをインストールします(https://docs.docker.com/engine/installation/linux/docker-ce/ubuntu/を参照)
  2. ターミナルを開いて小さなコンテナーを実行docker run -t -i ubuntu /bin/bashします(「ubuntu」をお気に入りのディストリビューションに変更します。これは実際のシステムと同じである必要はありません)。
  3. 実際のシステムにインストールするのと同じ方法で、アプリケーションをコンテナーにインストールします。
  4. 実際のシステムでWiresharkを起動し、[キャプチャ]> [オプション]に移動します。表示されるウィンドウに、すべてのインターフェースが表示されます。代わりに選択するのでanywlan0eth0、...新しい仮想インタフェースを選択してくださいdocker0代わりに。
  5. キャプチャを開始
  6. コンテナでアプリケーションを起動します

コンテナでソフトウェアを実行することに疑問があるかもしれませんので、ここであなたがおそらく聞きたい質問への回答を示します。

  • アプリケーションはコンテナ内で動作しますか?ほぼ間違いなくそうですが、Dockerを動作させるには少し学ぶ必要があるかもしれません
  • アプリケーションの動作が遅くなることはありませんか?無視できる。プログラムが1週間重い計算を実行するものである場合、1週間と3秒かかる場合があります
  • 私のソフトウェアまたは何か他のものがコンテナで壊れたらどうなりますか?それがコンテナのいいところです。内部で実行されているものはすべて、現在のコンテナーを壊すだけで、システムの残りの部分に害を与えることはありません。

0

プロセスIDでフィルタリングできない場合があります。たとえば、私の場合、1つのプロセスからのトラフィックをスニッフィングする必要がありました。しかし、私はその構成ターゲットマシンのIPアドレスで見つけ、フィルターip.dst==someipと出来上がりを追加しました。いずれの場合も機能しませんが、便利な場合もあります。


0

次を使用してポート番号を取得しますnetstat

netstat -b

次に、Wiresharkフィルターを使用します。

tcp.port == portnumber

これが絶対に簡単な方法かどうかはわかりません。TCPサーバーがポートで待機しているが、カーネルのTCP処理をブロックしていない場合、カーネルまたはアプリケーションのいずれかまたは両方がポートで応答する可能性があります。
aeb0 2017年

0

straceこの状況には、使用がより適しています。

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

-fすべてのフォークされたプロセスをトレースするオプション、-e trace=netwrokネットワークシステムコールのみをフィルタリングするオプション、-s最大10000文字の文字列長を表示するオプション。

send、recv、readオペレーションなどの特定の呼び出しのみをトレースすることもできます。

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

-16

次のコマンド例を使用して、wiresharkでポート番号を確認できます。

tcp.port == 80

tcp.port == 14220

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.