Computer >> 컴퓨터 >  >> 소프트웨어 >> 소프트웨어

Windows에서 Netstat 명령어로 수신 포트와 PID 확인하는 방법

이전 글에서 컴퓨터 포트가 무엇이고 어떤 용도로 사용되는지 살펴봤습니다. 그렇다면 포트 정보를 활용해 무엇을 할 수 있을까요? 컴퓨터에 들어오고 나가는 모든 트래픽은 포트를 통해 오가기 때문에, 포트 상태를 점검하면 시스템에서 무슨 일이 일어나고 있는지 파악할 수 있습니다. 특정 포트가 트래픽을 수신하지 않고 있는 건 아닌지, 혹은 있어서는 안 될 프로그램이 포트를 점유하고 있는 건 아닌지 확인할 수 있죠.

이번 글에서는 Windows의 netstat 명령어를 사용해 수신 대기 중인 포트와 PID(프로세스 ID)를 확인하는 방법을 알아보고, 이 정보를 실제로 어떻게 활용할 수 있는지도 함께 살펴보겠습니다.

Netstat란 무엇인가?

netstat는 'network(네트워크)'와 'statistics(통계)'의 합성어입니다. 이 명령어는 Windows XP부터 Windows 10, 그리고 Windows 11까지 모든 버전에서 사용할 수 있으며, Unix나 Linux 같은 다른 운영체제에서도 활용됩니다. 다만 이 글에서는 Windows 기준으로 설명하겠습니다.

Netstat를 통해 확인할 수 있는 정보는 다음과 같습니다.

  • 포트가 사용하는 프로토콜 이름(TCP 또는 UDP)
  • 로컬 IP 주소, 컴퓨터 이름, 사용 중인 포트 번호
  • 연결하려는 상대방의 IP 주소와 포트 번호
  • TCP 연결의 상태. 각 상태에 대한 자세한 내용은 RFC 793 문서의 Event Processing 섹션을 참고하세요.

Netstat로 수신 포트와 PID 확인하기

  • Win 키 + X 조합키를 누른 뒤, 열리는 메뉴에서 명령 프롬프트(Command Prompt)를 선택합니다.
  • 다음 명령어를 입력합니다: netstat -a -n -o. netstat의 매개변수는 다른 많은 명령어와 달리 슬래시(/)가 아닌 하이픈(-)으로 시작합니다.

    -a 옵션은 모든 활성 연결과 컴퓨터가 수신 대기 중인 포트를 보여줍니다. -n 옵션은 IP 주소와 포트를 숫자 형태로만 표시하도록 지정합니다. 이름 확인(resolution) 과정을 생략하기 때문에 화면 출력이 더 빠르고 깔끔해집니다. -o 옵션은 PID를 함께 표시해 줍니다. 이 PID는 나중에 특정 포트를 사용하는 프로세스가 무엇인지 찾아낼 때 유용하게 쓰입니다.
  • 결과를 확인하고 주소, 포트 번호, 상태, PID를 메모해 둡니다. 예를 들어 포트 63240을 사용하는 것이 무엇인지 알고 싶다면, 해당 항목의 PID가 8552이고 IP 주소 172.217.12.138의 443 포트에 연결되어 있다는 점에 주목합니다.

해당 포트를 사용하는 프로세스 찾기

  • 작업 관리자(Task Manager)를 엽니다. Ctrl + Shift + Esc 조합키를 누르면 가장 빠르게 실행할 수 있습니다.
  • 세부 정보(Details) 탭을 클릭합니다. 찾기 쉽도록 PID 열 제목을 클릭해 PID 순서대로 정렬해 보세요.
  • PID 8552를 찾아 어떤 프로세스인지 확인합니다. 이 예제에서는 googledrivesync.exe로 나타납니다. 하지만 정말 그럴까요? 때로는 바이러스가 정상적인 프로세스처럼 위장하는 경우도 있습니다.
  • 웹 브라우저에서 ipinfo.io 사이트에 접속한 뒤, IP 주소 172.217.12.138을 조회해 봅니다. 결과를 보면 해당 IP 주소는 Google에 등록된 것으로 확인됩니다. 따라서 이 googledrivesync.exe는 정상적인 프로세스임을 알 수 있습니다.

PowerShell에서 포트, PID, 프로세스 이름 한 번에 확인하기

PowerShell은 Microsoft가 Windows용으로 새롭게 선보인 명령줄 인터페이스입니다. '새롭다'고 했지만 이미 여러 버전에 걸쳐 제공되고 있습니다. 일반 가정용 사용자라 해도 PowerShell을 익혀두면 큰 도움이 됩니다.

대부분의 Windows 명령어는 PowerShell에서도 동작하며, 여기에 PowerShell의 cmdlet(커맨드렛)을 조합해 활용할 수도 있습니다. Winteltools.com의 Joe가 제공한 스크립트를 소개합니다.

  • 메모장을 열고 다음 코드를 입력합니다:
$netstat = netstat -aon | Select-String -pattern "(TCP|UDP)"
$processList = Get-Process

foreach ($result in $netstat) {
   $splitArray = $result -split " "
   $procID = $splitArray[$splitArray.length – 1]
   $processName = $processList | Where-Object {$_.id -eq $procID} | select processname
   $splitArray[$splitArray.length – 1] = $procID + " " + $processName.processname
   $splitArray -join " "
}
  • 파일을 get-NetstatProcessName.ps1이라는 이름으로 저장합니다. 저장 위치를 반드시 기억해 두세요. 저장 시 파일 형식(Save as type)모든 파일(*.*)로 변경하는 것이 중요합니다. 그렇지 않으면 get-NetstatProcessName.ps1.txt로 저장되어 스크립트가 정상적으로 작동하지 않습니다.
  • PowerShell을 열고 스크립트가 저장된 위치로 이동합니다. 이 예제에서는 cd C:\Scripts를 입력하고 Enter 키를 누릅니다.
  • dot-sourcing 방식으로 스크립트를 실행합니다. 즉, 파일 이름 앞에 ./를 붙여야 합니다. 명령어는 ./get-NetstatProcessName.ps1입니다.
  • 이제 기존 netstat 정보에 더해 프로세스 이름까지 한눈에 확인할 수 있습니다. 더 이상 작업 관리자를 열 필요가 없습니다.

직접 확인해 보세요

지금까지 netstat 명령어를 활용해 수신 대기 중인 포트를 확인하는 두 가지 방법을 살펴봤습니다. 기존의 명령 프롬프트에서 사용할 수도 있고, PowerShell 스크립트로 자동화할 수도 있습니다. 이 명령어가 제공하는 정보를 통해 컴퓨터에서 어떤 일이 벌어지고 있는지 파악하는 방법도 알아봤습니다.

netstat가 유용한 도구라고 생각되신다면, tracert, ipconfig, nslookup 같은 다른 Windows TCP/IP 유틸리티도 함께 살펴보세요. 또한 리소스 모니터(Resource Monitor)를 활용하면 숨겨진 웹사이트 및 인터넷 연결까지 더 자세히 들여다볼 수 있습니다. 컴퓨터의 동작 상태를 정확히 파악할 수 있는 방법은 생각보다 많습니다.

netstat를 활용해 문제를 해결해 본 경험이 있으신가요? 어떻게 활용하셨는지 댓글로 알려주세요. netstat 사용법에 대해 궁금한 점이 있다면 언제든 질문해 주세요.