web-dev-qa-db-ja.com

(svchost.exe内の)どのサービスが発信接続を行うかを決定する方法はありますか?

より制限の厳しいポリシーを使用してファイアウォール構成をやり直しており、一部の送信接続の出所(および/または宛先)を特定したいと思います。

Svchost.exeからのものであり、Webコンテンツ/アプリケーション配信プロバイダーにアクセスするため、問題が発生します。

5 IP in range: 82.96.58.0 - 82.96.58.255      --> Akamai Technologies         akamaitechnologies.com
3 IP in range: 93.150.110.0 - 93.158.111.255  --> Akamai Technologies         akamaitechnologies.com
2 IP in range: 87.248.194.0 - 87.248.223.255  --> LLNW Europe 2               llnw.net
205.234.175.175                               --> CacheNetworks, Inc.         cachefly.net
188.121.36.239                                --> Go Daddy Netherlands B.V.   secureserver.net

それで、特定の接続をしているサービスを知ることは可能ですか?または、これらに適用されるルールについてのあなたの推奨は何ですか?

(Comodo Firewall&Windows 7)

更新:

netstat -anotasklist /svc少し助けてください。しかし、1つのsvchost.exeに含まれる多くのサービスであるため、まだ問題です。さらに、「tasklist/svc」によって返されるサービス名は簡単に読み取ることができません。

(すべての接続はHTTP(ポート80)ですが、関連性はないと思います)

13
fluxtendu

私はこれで サーバー障害の回答 (サービスとメモリ使用量について)サービスのネットワーク使用量を個別に分析するために使用できる方法を見つけました(任意のネットワークツールを使用)

各サービスを分割して独自のSVCHOST.EXEプロセスで実行すると、CPUサイクルを消費するサービスがタスクマネージャーまたはProcess Explorerに簡単に表示されます(「=」の後のスペースが必要です)。

SC Config Servicename Type= own

これはコマンドラインウィンドウで行うか、BATスクリプトに入れます。管理者権限が必要であり、有効にする前にコンピュータを再起動する必要があります。

元の状態は、次の方法で復元できます。

SC Config Servicename Type= share
9
fluxtendu

SysInternals Process Explorer がこれを実行できます。

分析しようとしているsvchost.exeインスタンスのプロセスプロパティを開きます。 TCP/IPタブをクリックします。検出する接続をダブルクリックして、接続のスタックトレースを表示します。スタックを追跡して、サービスを実装するDLLに戻ることができるはずです。これは、ヘルプファイルからのProcess Properitesのトピックからの抜粋です。

TCP/IP:

このページには、プロセスが所有するアクティブなTCPおよびUDPエンドポイント)が表示されます。

Windows XP SP2以降の場合、このページには、開いたときに選択したエンドポイントを開いたスレッドのスタックを表示するダイアログを開く[スタック]ボタンが含まれています。これは、スタックにはエンドポイントを担当するドライバーまたはサービスの名前が含まれるため、システムプロセスとSvchostプロセスのエンドポイントの目的

シンボルの構成にもあります

シンボルの構成:Windows NT以降で、Process Explorerでプロセスプロパティダイアログの[スレッド]タブとスレッドスタックウィンドウでスレッド開始アドレスのアドレスを解決する場合は、最初にMicrosoftのWebからWindows用のDebuggingToolsパッケージをダウンロードしてシンボルを構成します。サイトを作成し、デフォルトのディレクトリにインストールします。 [シンボルの構成]ダイアログを開き、デバッグツールディレクトリにあるdbghelp.dllへのパスを指定し、シンボルパスのシンボルサーバー文字列を入力して、シンボルエンジンがオンデマンドでMicrosoftからディスク上のディレクトリにシンボルをダウンロードするようにします。たとえば、シンボルをc:\ symbolsディレクトリにダウンロードするには、次の文字列を入力します。

srv c:\ symbolhttp://msdl.Microsoft.com/download/symbols

注:スレッドのスタックを表示するには、管理者としてProcess Explorerを実行する必要がある場合があります。

7
heavyd

私はこれが古くなっていることを知っていますが、それでもこのページは「svchost接続」の検索で上位にランクされているので、ここに私の入力を投げます。 Svchost Process Analyzerと呼ばれるツールがあり、それが役立つ場合があります: https://www.neuber.com/free/svchost-analyzer/index.html

3
AKsik

コマンドラインからtasklist /svcnetstatまたはnetstat -anを使用してみてください。

これにより、svchost.exeを使用しているプログラムと使用されているポートが表示されます。ポート番号を使用すると、その番号を一般的に使用するプロトコルを検索できる場合があります。 TCPおよびUDPポート番号のリスト)を参照してください。

2
bugtussle

TCPView は、サービス、PID、およびTCP接続(ローカルとリモートの両方))を表示するグラフィックツールです。

Screenshot of TCPView

2
harrymc

前述のように、特定のsvchostプロセスのsvchost PIDを見つけるか、次のようなサードパーティのアプリを使用します。CurrportsProcessExplorerは、特定のプロセス(svchost.exeまたはその他)の下でサービスを識別するのに役立ちます。また、 Svchost Viewer または Svchost Analyzer は、svchost情報も厳密に表示します。

私も追加したいと思います:組み込みのWindowsタスクマネージャーの新しいバージョンでは、少なくともsvchostで実行されているサービスに関するいくつかの限られた情報が表示されます(何もインストールする必要はありません)。

まず、[プロセス]でsvchostプロセスを選択します。
指定されたsvchostプロセスを右クリックし、[サービスに移動]を選択します
[サービス]タブに直接移動し、そのsvchostプロセスで実行されている特定のサービスを強調表示します。

別の方法:
管理者CMDプロンプトを使用:
tasklist /svc /fi "IMAGENAME eq svchost.exe" > svchost_services.txt
notepad svchost_services.txt
これは、問題の特定のsvchost/serviceのPIDを取得する簡単な方法でもあります。

1
bshea

タスクマネージャを使用して、プロセスリスト内の各プロセスのPID列を表示します。次に、netstat -anoを実行して、アクティブな接続と関連するPID(=プロセスID)を表示します。

1
hurikhan77

NirSoftユーティリティ CurrPorts は、プロセスのサービスのリストのフィルタリングや提供を含め、必要なすべてを実行します。

実際、それに関する唯一の問題は、潜在的に表示できる膨大な数の情報列からどのように選択するかです。

Screenshot of CurrPorts utility

1
harrymc