답변:
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는 해당 행 의 5
th 요소 임) 다음 명령으로 전달됩니다.
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-String
netstat
관련 라인 의 긴 출력을 필터링하는 데 사용됩니다 .-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.bat
for /f "tokens=3 delims=LISTENING" %%i in (
'netstat -ano ^| findStr "%1" ^| findStr "["'
) do @tasklist /nh /fi "pid eq %%i"
portKill.bat
for /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 800
PowerShell에서 다음과 같이 나타납니다.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.bat
powershell 터미널에 이름이 지정된 파일 에 넣고 실행했습니다 .\portInfo.bat 8080
. 출력은 배치 파일의 내용 일뿐입니다. 아주 좋은 가능성 나는 뭔가를 간과하고 있습니다. 참고, Windows 10에서 PowerShell 6.2.3을 사용하고 있습니다. 일반 명령 프롬프트에서도 시도했지만 결과는 동일합니다. 스크립트 내용 출력. 이 작업을 수행하는 데 중요한 정보가 누락 된 것 같습니다.
/nh
: @tasklist /nh /fi "pid eq %i"
? 그리고 정확하게 문 :Findstr ":8080"