답변:
Get-Process -Id (Get-NetTCPConnection -LocalPort portNumber).OwningProcess
C:\> netstat -a -b
호스트 이름 확인을 중지하려면 -n 을 추가 하면 훨씬 빠릅니다.
참고 TCPView에 대한 Dane의 권장 사항 . 매우 유용합니다!
-a 모든 연결 및 청취 포트를 표시합니다.
-b 각 연결 또는 청취 포트 작성과 관련된 실행 파일을 표시합니다. 경우에 따라 잘 알려진 실행 파일은 여러 개의 독립적 인 구성 요소를 호스팅하며 이러한 경우 연결 또는 수신 포트를 만드는 데 관련된 구성 요소의 순서가 표시됩니다. 이 경우 실행 파일 이름은 맨 아래의 []에 있고 맨 위에는 TCP / IP에 도달 할 때까지 호출 한 구성 요소가 있습니다. 이 옵션은 시간이 오래 걸리며 충분한 권한이 없으면 실패합니다.
-n 주소와 포트 번호를 숫자 형식으로 표시합니다.
-o 각 연결과 관련된 소유 프로세스 ID를 표시합니다.
1234사용할 수 있습니다 tasklist /fi "pid eq 1234".
Windows 용 기본 GUI가 있습니다.
또는 실행 resmon.exe 또는 작업 관리자의 성능 탭 에서 실행하십시오.

GUI를 원하면 TCPView를 사용하십시오 . Microsoft가 구입 한 오래된 Sysinternals 응용 프로그램입니다.
Windows의 경우 :
netstat -aon | find /i "listening"
netstat -aon | find /i "abhören"를 들어 독일어.
FIND: Parameter format not correct
다음 명령을 실행하면 자세한 정보를 얻을 수 있습니다.
netstat -aon | find /i "listening" |find "port"
'찾기'명령을 사용하면 결과를 필터링 할 수 있습니다. find /i "listening"'듣기'중인 포트만 표시합니다. /i대소 문자를 무시 해야합니다 . 그렇지 않으면 "LISTENING"을 입력하십시오. | find "port"특정 포트 번호가 포함 된 결과로만 결과가 제한됩니다. 여기에 응답 문자열의 포트 번호가있는 결과도 필터링됩니다.
FIND: Parameter format not correct합니다. 찾기 기준 뒤에 공백을 추가해야합니다. 이것으로 당신을 떠날 것입니다 netstat -aon | find /i "listening" | find "1234 ".
{back tick}" listlist {back tick}""| find " {back tick}"port {back tick}" "(<-이스케이프 된 따옴표를 참고하십시오- back tick실제 문자를 스니핑한다고 생각할 때 단어 를 추가 할 수 없으므로 용어 를 변명하십시오 )
"관리자 권한으로"명령 프롬프트 창을 엽니 다. "시작 \ 검색 상자"에서 "cmd"를 입력 한 다음 "cmd.exe"를 마우스 오른쪽 단추로 클릭하고 "관리자 권한으로 실행"을 선택하십시오.
다음 텍스트를 입력하고 Enter를 누르십시오.
netstat -abno-ㅏ 모든 연결 및 청취 포트를 표시합니다.
-비 각 연결 또는 청취 포트 작성과 관련된 실행 파일을 표시합니다. 경우에 따라 잘 알려진 실행 파일은 여러 개의 독립적 인 구성 요소를 호스팅하며 이러한 경우 연결 또는 수신 포트를 만드는 데 관련된 구성 요소 시퀀스가 표시됩니다. 이 경우 실행 파일 이름은 맨 아래의 []에 있고 맨 위에는 TCP / IP에 도달 할 때까지 호출 한 구성 요소가 있습니다. 이 옵션은 시간이 오래 걸리며 충분한 권한이 없으면 실패합니다.
-n 주소와 포트 번호를 숫자 형식으로 표시합니다.
-o 각 연결과 관련된 소유 프로세스 ID를 표시합니다.
"로컬 주소"에서 듣고있는 포트를 찾으십시오.
바로 아래에서 프로세스 이름을보십시오.
참고 : 작업 관리자에서 프로세스를 찾으려면
보고있는 포트 옆에 PID (프로세스 식별자)가 있습니다.
Windows 작업 관리자를 엽니 다.
프로세스 탭을 선택하십시오.
1 단계에서 netstat를 수행 할 때 기록한 PID를 찾으십시오.
PID 열이 보이지 않으면 열보기 / 선택을 클릭하십시오. PID를 선택하십시오.
“모든 사용자의 프로세스 표시”가 선택되어 있는지 확인하십시오.
하나의 명령 만 사용하십시오.
for /f "tokens=5" %a in ('netstat -aon ^| findstr 9000') do tasklist /FI "PID eq %a"
여기서 9000당신의 포트 번호로 교체해야합니다.
출력은 같은 것을 포함합니다 :
Image Name PID Session Name Session# Mem Usage
========================= ======== ================ =========== ============
java.exe 5312 Services 0 130,768 K
설명:
다음 명령의 출력에서 모든 줄을 반복합니다.
netstat -aon | findstr 9000
모든 행에서 PID ( %a-여기서 이름은 중요하지 않음)가 추출되고 (PID는 해당 행 의 5th 요소 임) 다음 명령으로 전달됩니다.
tasklist /FI "PID eq 5312"
당신이 할 경우 건너 헤더 와의 반환 명령 프롬프트를 , 당신은 사용할 수 있습니다 :
echo off & (for /f "tokens=5" %a in ('netstat -aon ^| findstr 9000') do tasklist /NH /FI "PID eq %a") & echo on
산출:
java.exe 5312 Services 0 130,768 K
findstr :9000그렇지 않은 경우 숫자를 포함하는 앱을 찾을 수도 있습니다 (예 : "80"을 검색하면 포트 80, 800, 8000에서도 앱을 찾을 수 있음).
먼저 포트를 확보하기 위해 제거해야하는 특정 작업의 프로세스 ID를 찾습니다.
유형
netstat -n -a -o
Windows 명령 행 프롬프트 (cmd)에서이 명령을 실행 한 후 마지막 열에있는 pid를 선택하십시오. 이것이 3312라고 가정하십시오.
이제 입력
taskkill /F /PID 3312
이제 netstat명령 을 입력하여 교차 점검 할 수 있습니다 .
참고 : 때때로 Windows에서는 CMD에서이 명령을 직접 실행할 수 없으므로 먼저 다음 단계를 수행해야합니다.
시작 메뉴-> 명령 프롬프트에서 (명령 프롬프트를 마우스 오른쪽 단추로 클릭하고 관리자 권한으로 실행)
명령 쉘을 열고 다음과 같이 입력하십시오 (포트는 123456입니다).
netstat -a -n -o | find "123456"
필요한 모든 것을 볼 수 있습니다.
헤더는 다음과 같습니다.
Proto Local Address Foreign Address State PID
TCP 0.0.0.0:37 0.0.0.0:0 LISTENING 1111
이것은 여기에 언급 된대로 입니다.
findstr 123456따옴표없이 또는 find "123456"따옴표로 묶습니다. (@Josh)
어떤 특정 프로세스 (PID)가 어떤 포트를 사용하고 있는지 확인하려면 :
netstat -anon | findstr 1234
여기서 1234는 프로세스의 PID입니다. [작업 관리자 → 서비스 / 프로세스 탭으로 이동하여 응용 프로그램의 PID를 찾으십시오.]
-n플래그를 두 번 설정 하지 않아도 됩니다. -ano충분하다.
Windows 10 또는 Windows Server 2016의 PowerShell 5를 사용하여 Get-NetTCPConnection cmdlet을 합니다. 이전 Windows 버전에서도 작동해야한다고 생각합니다.
의 기본 출력 Get-NetTCPConnection에는 어떤 이유로 프로세스 ID가 포함되어 있지 않으며 약간 혼란 스럽습니다. 그러나 항상 출력 형식을 지정하여 얻을 수 있습니다. 찾고있는 부동산은 OwningProcess입니다.
포트 443에서 수신 대기중인 프로세스의 ID를 찾으려면 다음 명령을 실행하십시오.
PS C:\> Get-NetTCPConnection -LocalPort 443 | Format-List
LocalAddress : ::
LocalPort : 443
RemoteAddress : ::
RemotePort : 0
State : Listen
AppliedSetting :
OwningProcess : 4572
CreationTime : 02.11.2016 21:55:43
OffloadState : InHost
찾고자하는 특성을 사용하여 출력을 테이블로 형식화하십시오.
PS C:\> Get-NetTCPConnection -LocalPort 443 | Format-Table -Property LocalAddress, LocalPort, State, OwningProcess
LocalAddress LocalPort State OwningProcess
------------ --------- ----- -------------
:: 443 Listen 4572
0.0.0.0 443 Listen 4572
프로세스 이름을 찾으려면 다음 명령을 실행하십시오.
PS C:\> Get-Process -Id (Get-NetTCPConnection -LocalPort 443).OwningProcess
Handles NPM(K) PM(K) WS(K) CPU(s) Id SI ProcessName
------- ------ ----- ----- ------ -- -- -----------
143 15 3448 11024 4572 0 VisualSVNServer
이를 위해 GUI 도구를 사용하려면 Sysinternals의 TCPView가 있습니다.
명령 프롬프트-시작 → 실행 → cmd또는 시작 메뉴 → 모든 프로그램 → 보조 프로그램 → 명령 프롬프트를여십시오 .
유형
netstat -aon | findstr '[port_number]'
를 교체 [port_number]당신이 확인하고 히트 할 것인지 실제 포트 번호 Enter.
유형
tasklist | findstr '[PID]'
를 교체 [PID]위의 단계와 히트의 번호 Enter.
netstat -ao 과 netstat -ab 당신에게 응용 프로그램을 이야기하지만, 시스템 관리자하지 않으면 당신은 "요청한 작업 상승 필요"얻을 것이다.
이상적이지는 않지만 Sysinternals의 Process Explorer 를 사용하는 경우 특정 프로세스의 속성으로 이동하여 TCP 탭에서 원하는 포트를 사용하고 있는지 확인할 수 있습니다. 이는 바늘과 건초 더미입니다. 하지만 어쩌면 누군가를 도울 것입니다 ...
나를 도와주는 한 줄 솔루션이 이것입니다. 포트를 3000으로 대체하십시오.
$P = Get-Process -Id (Get-NetTCPConnection -LocalPort 3000).OwningProcess; Stop-Process $P.Id
편집 : 더 많은 PowerShell과 같은 언어로 변경 kill되었습니다 .Stop-Process
Get-Process -Id (Get-NetTCPConnection -LocalPort 3000).OwningProcess | Stop-Process
이러한 도구를 따르에서 cmd를 : C:\> netstat -anob로 관리자 권한.
sysinternals.com의 모든 것.
각 프로세스에서 프로세스 실행 및 스레드를 알고 싶다면에 대해 배우는 것이 좋습니다 wmic. 훌륭한 명령 줄 도구로, 여러분이 아는 것보다 훨씬 많은 것을 제공합니다.
예:
c:\> wmic process list brief /every:5
위의 명령은 5 초마다 모든 프로세스 목록을 간략하게 보여줍니다. 자세한 내용을 보려면 /?windows 명령을 사용하면됩니다.
c:\> wmic /?
c:\> wmic process /?
c:\> wmic prcess list /?
그리고 등등. :)
PowerShell을 사용하는 경우 다음을 시도하십시오 Get-NetworkStatistics.
> Get-NetworkStatistics | where Localport -eq 8000
ComputerName : DESKTOP-JL59SC6
Protocol : TCP
LocalAddress : 0.0.0.0
LocalPort : 8000
RemoteAddress : 0.0.0.0
RemotePort : 0
State : LISTENING
ProcessName : node
PID : 11552
프로그래밍 방식으로 iphlpapi.h의 항목 이 필요합니다 ( 예 : GetTcpTable2 ()). MIB_TCP6ROW2 와 같은 구조 에는 소유자 PID가 포함됩니다.
PowerShell을 사용하여 ... ... 이것은 친구입니다 (8080을 포트 번호로 대체하십시오).
netstat -abno | Select-String -Context 0,1 -Pattern 8080
샘플 출력
> TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 2920
[tnslsnr.exe]
> TCP [::]:8080 [::]:0 LISTENING 2920
[tnslsnr.exe]
따라서이 예에서 tnslsnr.exe (OracleXE 데이터베이스)는 포트 8080에서 수신 대기합니다.
빠른 설명
Select-Stringnetstat관련 라인 의 긴 출력을 필터링하는 데 사용됩니다 .-Pattern 정규식에 대해 각 줄을 테스트합니다.-Context 0,1 각 패턴 일치에 대해 0 개의 선행 라인과 1 개의 후행 라인을 출력합니다.프로세스 이름을 인수로 사용 netstat하고 프로세스의 출력을 제공하는 아래 배치 스크립트를 사용하십시오 .
@echo off
set procName=%1
for /f "tokens=2 delims=," %%F in ('tasklist /nh /fi "imagename eq %1" /fo csv') do call :Foo %%~F
goto End
:Foo
set z=%1
echo netstat for : "%procName%" which had pid "%1"
echo ----------------------------------------------------------------------
netstat -ano |findstr %z%
goto :eof
:End
info 와 kill의 대답을 바탕으로 한 명령으로 이들을 결합하는 것이 유용합니다 . 그리고 주어진 포트에서 수신 대기하는 프로세스에 대한 정보를 얻기 위해 cmd에서 이것을 실행할 수 있습니다 (예 : 8080).
for /f "tokens=3 delims=LISTENING" %i in ('netstat -ano ^| findStr "8080" ^| findStr "["') do @tasklist /nh /fi "pid eq %i"
또는 당신이 그것을 죽이고 싶다면 :
for /f "tokens=3 delims=LISTENING" %i in ('netstat -ano ^| findStr "8080" ^| findStr "["') do @Taskkill /F /IM %i
당신은 또한 (그들은 약간 다를 수 있습니다 - 대체 박쥐 파일에 그 명령을 넣을 수 있습니다 %i에 대한 %%i) :
portInfo.batfor /f "tokens=3 delims=LISTENING" %%i in (
'netstat -ano ^| findStr "%1" ^| findStr "["'
) do @tasklist /nh /fi "pid eq %%i"
portKill.batfor /f "tokens=3 delims=LISTENING" %%i in (
'netstat -ano ^| findStr "%1" ^| findStr "["'
) do @Taskkill /F /IM %%i
그런 다음 cmd에서 다음을 수행 할 수 있습니다.
portInfo.bat 8080
또는
portKill.bat 8080
.\portInfo.bat 800PowerShell에서 다음과 같이 나타납니다.C:\work>for /F "tokens=3 delims=LISTENING" %i in ('netstat -ano | findStr "800" | findStr "["') do (tasklist /fi "pid eq %i" ) C:\work>(tasklist /fi "pid eq 4" ) Image Name PID Session Name Session# Mem Usage ========================= ======== ================ =========== ============ System 4 Services 0 1,820 K
portInfo.batpowershell 터미널에 이름이 지정된 파일 에 넣고 실행했습니다 .\portInfo.bat 8080. 출력은 배치 파일의 내용 일뿐입니다. 아주 좋은 가능성 나는 뭔가를 간과하고 있습니다. 참고, Windows 10에서 PowerShell 6.2.3을 사용하고 있습니다. 일반 명령 프롬프트에서도 시도했지만 결과는 동일합니다. 스크립트 내용 출력. 이 작업을 수행하는 데 중요한 정보가 누락 된 것 같습니다.
/nh: @tasklist /nh /fi "pid eq %i"? 그리고 정확하게 문 :Findstr ":8080"