프로세스 이름을 가진 netstat?


46

사용하면 netstat -a -o -n 포트 및 PID 목록을 얻을 수 있습니다

그런 다음 작업 관리자로 이동하여 PID를 추가하고 누구인지 확인해야합니다. (꽤 실망스러운)

여기에 이미지 설명을 입력하십시오

이 모든 것을 수행하는 CMD 명령이 궁금했다 (사용은 find, for, powershell)

프로세스 이름을 얻을 수 있도록


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
당신은 남자입니다.
Royi Namir

좋은 대답은 단지 ms /? 문서에 "이 옵션은 시간이 오래 걸릴 수 있습니다"라고 표시되어 있습니다! 그리고 그것은 시간이 많이 걸리는 순전히 창 어리 석음입니다. Linux의 netstat는 실행 파일 이름을 빠르게 표시합니다. 또한 리눅스의 실행 파일 이름은 루트 / 관리자 권한을 요구하지 않습니다
barlop

8

SysInternals에서 TCPView 를 찾고 있다고 생각합니다 .


모든 것을 수행 하는 CMD 명령 이 있는지 궁금 했습니다.
Royi Namir

계속 진행
-TCPView

오 그래. 누군가가 이미 찾기, 찾기 등을 사용하여 그것을 수행했다고 생각
Royi Namir

너무 힘들어서는 안됩니다 .. robvanderwoude.com 에 무언가가 있다고 확신 합니다. TCPView 페이지에 따라- "TCPView 다운로드에는 동일한 기능을 가진 명령 줄 버전 인 Tcpvcon이 포함되어 있습니다."
Leptonator 2016 년

아주 좋은 툴 스위트 .. 만약 그것이 msys와 sis가 아니었다면 나는 nix 박스를 사용할 것입니다. :)
Eddie B

2

여기서 사용하는 윈도우의 예이다 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토큰을 추가하여 추가 필드를 추가 할 수 있습니다.


이 솔루션의 장점은 다음과 같습니다. 1. find포트를 필터링하는 데 사용 ( netstat -b프로세스 이름을 직접 제공 할 수 있지만 출력을 통해 수동으로 검색하는 것은 고통스럽고 오류가 발생하기 쉽습니다). 2.보다 유연하고 독립적 인 Windows 기본 명령 만 사용합니다.
Yingyu YOU

1
가능한 개선 : 1. 더 나은 검색을 위해 정규 표현식을 사용하는 대신 옵션 findstr과 함께 사용 ; 2. 로컬 포트만 필터링하는 패턴 으로 사용 합니다. 전체 명령은 다음과 같습니다/Rfind: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토큰을 추가하여 추가 필드를 추가 할 수 있습니다." 를 설명 할 수 있습니까?
Yves Schelpe

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의 패턴과 함께 사용했다. 좋은 발췌 문장!
Alex

0

아주 좋은 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

나는 당신의 수정을 포함하는 에릭의 질문을 편집, 그래서 당신이 원한다면, 당신은 당신의 대답에서 삭제하고와 접근 방식에 집중할 수 GetServiceGet-Process.
flolilo
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.