답변:
-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.
SysInternals에서 TCPView 를 찾고 있다고 생각합니다 .
여기서 사용하는 윈도우의 예이다 FOR
파싱 netstat
후 출력 DO
tasklist
으로 /fi
프로세스 명을 표시에 PID 필터.
마지막 발견은 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
토큰을 추가하여 추가 필드를 추가 할 수 있습니다.
find
포트를 필터링하는 데 사용 ( netstat -b
프로세스 이름을 직접 제공 할 수 있지만 출력을 통해 수동으로 검색하는 것은 고통스럽고 오류가 발생하기 쉽습니다). 2.보다 유연하고 독립적 인 Windows 기본 명령 만 사용합니다.
findstr
과 함께 사용 ; 2. 로컬 포트만 필터링하는 패턴 으로 사용 합니다. 전체 명령은 다음과 같습니다/R
find
: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"
netstat
토큰을 추가하여 추가 필드를 추가 할 수 있습니다." 를 설명 할 수 있습니까?
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
있지만 시스템 서비스에서는 작동하지 않습니다. 또한 ProcessName
PID 값을 바꾸는 대신 줄 끝에 줄 을 추가 할 수도 있습니다 .
즐기세요;)
이것을 사용해보십시오 ...
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
아주 좋은 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
GetService
와 Get-Process
.