プロセス名を持つnetstat?


46

を使用してnetstat -a -o -n 、ポートとPIDのリストを取得できます

次に、タスクマネージャに移動してPIDを追加し、誰であるかを確認する必要があります。(かなりイライラする)

ここに画像の説明を入力してください

それをすべて行いCMDコマンドがあれば、私は不思議だった(使用したがfindforpowershell

プロセス名を取得できるように


管理者としてのnetstat -b。たとえば、netstat -abon。そして、exeの名前は以下のとおりです
-barlop

回答:


56

解決

-bパラメーターを使用します。

  -b            Displays the executable involved in creating each connection or
                listening port. In some cases well-known executables host
                multiple independent components, and in these cases the
                sequence of components involved in creating the connection
                or listening port is displayed. In this case the executable
                name is in [] at the bottom, on top is the component it called,
                and so forth until TCP/IP was reached. Note that this option
                can be time-consuming and will fail unless you have sufficient
                permissions.

注:管理者netstat -b特権のコマンドプロンプトから実行しない限り、コマンドは失敗します。

回避策

プロセスリストをフィルタリングし、興味のあるPIDを見つけます。

tasklist | findstr /c:"PID"  


代替ソリューション

Tcpvcon.exe代わりに使用できます。管理者権限は不要です。

Tcpvconの使用法は、組み込みのWindows netstatユーティリティの使用法に似ています。

Usage: tcpvcon [-a] [-c] [-n] [process name or PID]

 -a Show all endpoints (default is to show established TCP connections).
 -c Print output as CSV.
 -n Don't resolve addresses.

1
あなたは男です。
ロイナミール

良い答えは、ちょうど私がそれがどのようにms /?ドキュメントには「このオプションは時間がかかる可能性があります」とさえ書かれています!そして、それは時間のかかる純粋に愚かなウィンドウです。Linuxのnetstatは、実行可能ファイル名を高速に表示します。また、Linuxの実行可能ファイル名はroot / admin特権を必要としません
-barlop

8

SysInternalsのTCPViewを探していると思います。


すべてを行うCMDコマンドがあるかどうか疑問に思った
Royi Namir 14

続ける- TCPViewのコマンドラインコンポーネントがあります...
Leptonator

わかった 多分誰かがforやfindなどを使って既にそれをやったと思った
-Royi Namir 14

難しいことではないはずです。.. robvanderwoude.comには何かがあります。TCPViewページごと-「TCPViewのダウンロードには、同じ機能を持つコマンドラインバージョンであるTcpvconが含まれています。」
レプトネーター14年

非常に優れたツールスイート.. msysとsisがなかった場合は、nixボックスを使用します。:)
エディB

2

次に、出力FORを解析してからpidのフィルターを使用してプロセス名を表示するためのウィンドウの例を示します。 netstatDO tasklist/fi

最後の発見は、tasklistヘッダーを削除することです。

FOR /F "usebackq tokens=5 delims= " %i IN (`netstat -ano ^|find "443"`) DO @tasklist /fi "pid eq %i" | find "%i"

次のようなレコード出力を出力します

tomcat8.exe.x64               4240 Services                   0    931,864 K

netstatトークンを追加することで、追加のフィールドを追加できます。


このソリューションの長所は次のとおりです。1. findポートを除外するために使用(対照的に、netstat -bプロセス名を直接提供できますが、出力を手動で検索するのは苦痛でエラーが発生しやすい)。2. Windowsネイティブコマンドのみを使用します。これは、より柔軟で独立しています。
イングーYOU

1
可能な改善:1. より良い検索のために正規表現を利用する代わりにfindstr/Rオプションで使用するfind。2. ローカルポートのみ:443 *[[0-9]"を除外するパターンとして使用します。コマンド全体は次のようになりますFOR /F "usebackq tokens=5 delims= " %i IN (`netstat -ano ^|findstr /R /C:":443 *[[0-9]"`) DO @tasklist /fi "pid eq %i" | findstr "%i"
Yingyu YOU

@DavidPostillまたは@mark「netstatトークンを追加することで追加フィールドを追加できます」を明確にできますか?
イヴシェルプ

2

PSを使用するのが好きな場合は、このコードをフォークできます(注:超基本的です)

$nets = netstat -ano | select-string LISTENING
foreach($n in $nets){
    # make split easier PLUS make it a string instead of a match object:
    $p = $n -replace ' +',' '
    # make it an array:
    $nar = $p.Split(' ')
    # pick last item:
    $pname = $(Get-Process -id $nar[-1]).ProcessName
    $ppath = $(Get-Process -id $nar[-1]).Path
    # print the modified line with processname instead of PID:
    $n -replace "$($nar[-1])","$($ppath) $($pname)"
}

完全な実行可能パスを取得するPath代わりに試すことができることに注意してくださいProcessName-システムサービスでは動作しません。また、ProcessNamePID値を置き換えるのではなく、行の末尾に追加することもできます。

楽しめ ;)


1

これを使用してみてください...

タイムライン付きのプロセス名:) onelinerで...スクリプトをすばやく簡単に作成する必要はありません...

ESTABLISHEDまたはLISTENINGによってパラメーターSYN_SENTを変更できます

filter timestamp {"$(Get-Date -Format G): $_"};netstat -abno 1 | Select-String -Context 0,1 -Pattern LISTENING|timestamp

filter timestamp {"$(Get-Date -Format G): $_"};netstat -abno 1 | Select-String -Context 0,1 -Pattern SYN_SENT|timestamp

観察したいip:portのパターンでこれを使用しました。素晴らしいスニペット!
アレックス

0

とてもいいエリック・ビテモ!パスに変数を追加することを考えていたのですが、定義されていませんが、あなたはすでにそれを持っていることに気付きました。したがって、再利用したコードは次のとおりです。

$nets = netstat -ano |select-string LISTENING;
foreach ($n in $nets)
    {
# make split easier PLUS make it a string instead of a match object
    $p = $n -replace ' +',' ';
# make it an array
    $nar = $p.Split(' ')
# pick last item...
    $pname = $(Get-Process -id $nar[-1]).ProcessName
    $ppath = $(Get-Process -id $nar[-1]).Path;
# print the modified line with processname instead of PID
    $n -replace "$($nar[-1])","$($ppath) $($pname)" | where {$pname -like "*GMSVP*"}
     }

多少異なる2ライナーを使用したアプリケーションのプロセスとサービスを見つけようとしていました。

Get-Service | select status,name,displayname,servicename | where {($_.DisplayName -like "myserv*") -or ($_.servicename -like "post*")} | ft -auto

Get-Process | select id, processname,cpu,path,description | where {$_.path -like "*myserv*"} | ft -auto

私は、あなたが望むなら、あなたはあなたとのアプローチにあなたの答えや濃縮物からそれを削除することができ、あなたの修正を含むようにエリックの質問を編集したGetServiceGet-Process
flolilo
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.