web-dev-qa-db-ja.com

プロセス名とnetstat?

netstat -a -o -nを使ってポートとPIDのリストを取得することができます

それから私はタスクマネージャに行き、PIDを追加してそれがだれであるか見る必要があります。 (かなりイライラする)

enter image description here

それをすべて行うCMDコマンドがあるかどうか(findforpowershellを使用)

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

44
Royi Namir

溶液

-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コマンドは、昇格したコマンドプロンプトから実行しないと失敗します。

Workaround

プロセスリストをフィルタリングして、興味のある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.
53
and31415

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

8
Leptonator

あなたが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を試すことができます。ただし、システムサービスでは機能しません。また、PID値を置き換える代わりに、行の終わりにProcessNameを追加することもできます。

楽しめ ;)

2
Erik Bitemo

これは、FORを使用してnetstat出力を解析し、次にpidに/fiフィルターを付けてDOtasklistを使用してプロセス名を表示する例です。

最後の検索は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からの追加フィールドを追加できます。

2
mark

とても素敵なErik Bitemo!私はパスに変数を追加することを考えていました、それから私はあなたがすでにそれが定義されていないけれどもそれを持っていることに気づきました。だから私が再利用したコードは次のとおりです。

$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
0
Ratan Mohapatra

これを使ってみてください...

Onelinerのタイムスタンプ付きプロセス名:) ...スクリプトを作成する必要はありません。

パラメータSYN_SENTはESTABLISHEDまたはLISTENINGで変更できます。

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
0
Jhon Willmaure