Netstat으로 사용 중인 포트 확인하기

Netstat으로 사용 중인 포트 확인하기입니다. netstat -ano, findstr, tasklist, Get-NetTCPConnection, 포트 충돌 처리와 원격 확인을 정리했습니다.

Netstat으로 사용 중인 포트 확인하기

Windows에서 특정 포트를 어떤 프로세스가 사용 중인지 확인할 때 netstat -ano를 많이 쓴다. 포트 충돌, 웹 서버 실행 실패, DB 접속 문제를 볼 때 가장 먼저 확인하는 기본 명령이다.

기본 옵션

-a  모든 연결과 수신 대기 포트를 표시
-n  주소와 포트를 숫자로 표시
-o  연결을 소유한 프로세스 ID(PID)를 표시
-b  실행 파일 이름 표시, 관리자 권한 필요

전체 포트 확인

netstat -ano

출력에서 LISTENING은 해당 포트에서 연결을 기다리는 프로세스가 있다는 뜻이다. ESTABLISHED는 이미 연결된 세션이다.

Proto  Local Address          Foreign Address        State       PID
TCP    0.0.0.0:80             0.0.0.0:0              LISTENING   1234
TCP    127.0.0.1:5000         0.0.0.0:0              LISTENING   5678

특정 포트만 찾기

netstat -ano | findstr ":80"
netstat -ano | findstr ":443"
netstat -ano | findstr ":5000"

PID를 찾은 뒤 어떤 프로세스인지 확인한다.

tasklist /fi "PID eq 1234"
Get-Process -Id 1234

PowerShell 대체 명령

최근 Windows에서는 Get-NetTCPConnection을 쓰면 객체 형태로 필터링하기 쉽다.

Get-NetTCPConnection -State Listen |
  Sort-Object LocalPort |
  Select-Object LocalAddress, LocalPort, OwningProcess
$port = 5000
$conn = Get-NetTCPConnection -LocalPort $port -State Listen
Get-Process -Id $conn.OwningProcess

포트 충돌 처리 순서

  1. netstat -ano로 포트를 쓰는 PID를 찾는다.
  2. tasklist 또는 Get-Process로 프로세스 이름을 확인한다.
  3. 정상 서비스면 애플리케이션 포트를 바꾼다.
  4. 불필요한 프로세스면 서비스 관리 도구에서 중지한다.
  5. 원인을 모르는 프로세스는 종료 전에 경로와 서명을 확인한다.

원격 접속 가능 여부 확인

서버에서 포트가 떠 있어도 방화벽이나 라우팅 때문에 다른 PC에서 접속이 안 될 수 있다. 원격 PC에서는 Test-NetConnection으로 TCP 연결을 확인한다.

Test-NetConnection 192.168.10.20 -Port 80
Test-NetConnection devmes.com -Port 443

netstat은 오래된 명령이지만 여전히 빠르게 확인하기 좋다. 자동화나 필터링이 필요하면 PowerShell의 네트워크 cmdlet을 함께 사용하면 된다.

BGM EVER