파워쉘(Powershell)을 이용한 포트 정보 조회
파워쉘을 이용하면 네트워크 연결 상태에 보다 효율적인 접근을 할 수 있습니다.
이전 명령 프롬프트(cmd)를 이용하면 아래와 같이 할 수 있습니다.
> netstat -anp tcp | findstr 8080
위의 정보는 TCP
연결중 8080
이 포함된 문자열을 검색하라는 뜻입니다.
TCP 연결 상태 조회
Get-NETTcpConnection
cmdlet 을 이용하면 현재 운영체제에서 TCP로 연결된 목록을 출력할 수 있습니다.
PS> Get-NetTCPConnection | Select-Object -First 10 LocalAddress LocalPort RemoteAddress RemotePort State AppliedSetting OwningProcess ------------ --------- ------------- ---------- ----- -------------- ------------- :: 60625 :: 0 Bound 15984 :: 60357 :: 0 Bound 21468 ::1 60625 ::1 3306 Established Internet 15984 :: 49672 :: 0 Listen 708 :: 49668 :: 0 Listen 700 :: 49667 :: 0 Listen 2384 :: 49666 :: 0 Listen 1388 :: 49665 :: 0 Listen 1192 :: 49664 :: 0 Listen 600 :: 17500 :: 0 Listen 18324
위의 명령은 TCP
연결중에서 10개의 데이터만 출력하라는 뜻입니다.
특정 포트 정보 조회
그렇다면 TCP
연결중에 원하는 포트만 찾고 싶은 경우에는 다음과 같이 할 수 있습니다.
PS> Get-NetTCPConnection | Where-Object {$_.LocalPort -eq 3306 -and $_.State -eq 'Listen'} LocalAddress LocalPort RemoteAddress RemotePort State AppliedSetting OwningProcess ------------ --------- ------------- ---------- ----- -------------- ------------- :: 3306 :: 0 Listen 8248
포트 정보를 이용해서 프로세스 정보 조회하기
가끔 서버를 설정하다보면 포트 충돌이 발생하는 경우를 확인할 수 있습니다. 그럴 경우 이전에 해당 포트를 사용하는 프로세스를 검색하고 검색된 프로세스를 죽이는 방식으로 처리를 하곤 합니다.
아래의 명령을 통하면 해당 포트를 사용중인 프로세스가 어떤 프로세스인지 확인할 수 있습니다.
PS> $pid3306 = Get-NetTCPConnection | Where-Object {$_.LocalPort -eq 3306 -and $_.State -eq 'Listen'} | select-object -ExpandProperty owningprocess PS> Get-Process | Where-Object {$_.ID -eq $pid3306} Handles NPM(K) PM(K) WS(K) CPU(s) Id SI ProcessName ------- ------ ----- ----- ------ -- -- ----------- 230 22 445112 79396 0.20 8248 5 mysqld
결과는 3306 포트를 사용중인 프로세스는 mysqld
라는 프로세스입니다.
아직 파워쉘(Powershell)을 사용한지 오래되지 않았지만 확실하게 느낄 수 있는 것은 Batch
프로그램 보다는 효율적인것 같습니다.