これを行うアプリケーション(procexplorerなど)がたくさんあることは知っていますが、アプリケーションまたはプロセスごとにネットワークトラフィック(TCP、UDPなど)を取得するためにwinapi(使用されるメソッド/参照)にアクセスする方法はありますか?
あなたのコメントから、あなたが開発しているアプリケーションによって生成されたネットワークトラフィックをアプリケーション自体の中からキャプチャしようとしていることがわかります。もしそうなら、それは開発者コミュニティなので、これはStackOverflowに適した質問かもしれないと思います。このようなイントロスペクションでは、おそらくETW(Event Tracing for Windows)を使用する必要がありますが、やはり確信が持てません。 S.O。に関するこの質問 役立つかもしれません。
それを少し脇に置いて、管理者側(ここで質問すると得られる傾向がある)に焦点を当てて、netsh trace
コマンドと Microsoftネットワークモニター(Netmon) 。必要なときにNetMonから直接キャプチャすることも、netshtraceコマンドを自動的にトリガーして柔軟性を高めることもできます。
これに関心がある場合は、次のことができます。
netsh trace start capture=yes traceFile=c:\tracefolder\tracename.etl
キャプチャを開始してから:
netsh trace stop
あなたの準備ができたら。他にもオプションがあるので、netsh trace /?
を使ってマニュアルを見ることができます
何らかの方法でキャプチャを取得したら、NetMonを使用してアプリケーションの実行可能ファイルをフィルタリングし、監視期間中にアプリケーションによって生成されたネットワークトラフィックを調べることができます。
Winapiについてはよくわかりませんが、「 Wireshark は、世界で最も優れたネットワークプロトコルアナライザです。ネットワークで何が起こっているかを微視的なレベルで確認できます。これは、多くの場合、事実上の(そして多くの場合デジュリ)標準です。産業と教育機関。」
libpcap
を使用できます。 Libpcapは、ネットワークパケットキャプチャシステムへの高レベルのインターフェイスを提供するオープンソースライブラリです。
Libpcap APIは、C
およびC++
から使用するように設計されていますが、Perl
、Python
、Java
、C#
、Ruby
などの言語から使用できるラッパーは多数あります。
LibpcapはほとんどのUnixライクなオペレーティングシステムで実行され、Winpcap(Win
dows P
acket Cap
ture)という名前のWindowsバージョンもあります。
Winpcapのドキュメント を参照してください。
更新
悲しいことに、ネットワークスニッフィングツールはネットスタックの最下位レベルで動作し、すべてをキャッチしようとします。OSで実行されているプロセスを完全に認識していません。特定の呼び出しの発信元を見つけるのは非常に困難です。パケットスニファは、最終的に(ポート番号を介して)プロセスIDを把握する可能性があります。
これらの状況では、pcapを使用して何ができるでしょうか?
特定のトラフィックのみをスニッフィングする場合(例:TCP/IP
パケットのみ、ポート23
に送信されるパケットのみ)、ルールセットcompile
を作成し、適用する必要があります。これは3段階のプロセスであり、すべてが密接に関連しています。ルールセットは文字列に保持され、pcapが読み取れる形式に変換されます(したがって、コンパイルされます)。
コンパイルは、実際にはプログラム内の関数を呼び出すことによって実行されます。外部アプリケーションの使用は含まれません。次に、pcapに、フィルタリングするセッションに適用するように指示します。
アップデート2
最初に理解することは、pcapスニファの一般的なレイアウトです。コードの流れは次のとおりです。
まず、どのインターフェイスをスニッフィングするかを決定します。 Linuxではこれはeth0
のようなもので、BSDではxl1
などです。このデバイスを文字列で定義するか、 pcapでインターフェイスの名前 それは仕事をします。
Pcapを初期化します。これは、実際にスニッフィングしているデバイスをpcapに通知する場所です。必要に応じて、複数のデバイスをスニッフィングできます。それらをどのように区別しますか?ファイルハンドルの使用。読み取りまたは書き込み用にファイルを開くのと同じように、スニッフィングにsession
という名前を付けて、他のそのようなセッションと区別できるようにする必要があります。
特定のトラフィックのみをスニッフィングする場合(たとえば、TCP/IPパケットのみ、ポート23に送信されるパケットのみなど)、ルールセットを作成し、「コンパイル」して適用する必要があります。これは3段階のプロセスであり、すべてが密接に関連しています。ルールセットは文字列に保持され、pcapが読み取れる形式に変換されます(したがって、コンパイルされます)。
コンパイルは、実際にはプログラム内の関数を呼び出すことによって実行されます。外部アプリケーションの使用は含まれません。次に、pcapに、フィルタリングするセッションに適用するように指示します。
最後に、pcapにプライマリ実行ループに入るように指示します。この状態では、pcapは、必要な数のパケットを受信するまで待機します。新しいパケットを受け取るたびに、すでに定義した別の関数を呼び出します。
それが呼び出す関数は、私たちが望むことを何でもすることができます。パケットを分析してユーザーに印刷したり、ファイルに保存したり、何もしなかったりする可能性があります。
スニッフィングのニーズが満たされた後、セッションを閉じて完了します。