본문 바로가기

개발&컴퓨터/OS

[윈도우] 사용중인 특정 포트 및 프로그램 확인하기 (netstat, tasklist)

반응형

이번 포스팅에서는 윈도우에서 현재 실행중인 프로그램들의 사용 포트 그리고 특정 포트는 어느 프로그램이 사용하고 있는지 확인하는 명령어에 대해 알아보는 시간을 갖도록 하겠습니다. (갑자기 무슨 강의 같은 말투를!!! ㅎㅎㅎ)

 

 

본 게시물을 작성하게 된 이유는

전에 피들러(Fiddler) 포트 충돌 문제 해결에 대한 포스팅(https://ooz.co.kr/143) 을 작성하였었는데,

 

해당 포스팅을 참조해 보시면 피들러 프로그램을 실행시켰는데, Unable to bind to port [8888]. ErrorCode: 10013 에러가 뜨면서 다른 프로그램이 이미 해당 포트를 점유하고 있다고 하면서 프로그램이 실행되지 않았습니다.

 

당시에는 피들러 프로그램의 포트를 다른 포트를 사용하도록 변경하여 문제를 해결하기는 하였는데, 도대체 어떤 프로그램이 8888포트를 사용하는 것일까 궁금해질 수도 있습니다.

 

그럼 윈도우에서 현재 사용되고 있는 포트를 확인해보는 방법에 대해 알아 보겠습니다.

 

Windows 7 OS 환경을 기반으로 작성하였습니다.

 

1) [시작-실행]에서 cmd.exe 를 실행시켜 명령프롬프트 창을 띄웁니다.

 

2) 명령어 netstat 을 입력한 후, 엔터키를 누릅니다.

 

 

활성연결 이란 제목과 프로토콜, 로컬 주소, 외부주소, 상태 등등에 대해 여러 정보가 표시됩니다.

일단 무슨 내용인지는 차 후, 알아보기로 하고, 다시

 

3) 명령어 netstat help 를 입력한 후, 엔터키를 누릅니다. (netstat /? 로 입력해도 동일합니다.)

 

 netstat 을 사용하기 위한 다양한 옵션에 대한 정보가 나옵니다.

 

 

이제 여러 옵션을 조합하여 우리가 원하는 정보를 찾아보겠습니다.

 

3) 옵션 중에 다음 옵션을 주어 실행합니다.

 * C:\> netstat -an | findstr 8888

 

 -a : 모든 연겨로가 수신 대기 포트를 표시합니다.

 -n : 주소와 포트 번호를 숫자 형식으로 표시합니다.

 | findstr 8888 : 결과값에 8888 텍스트를 포함한 결과만 출력합니다.

 

 

검색을 해도 결과가 없는 것을 보니, 현재 8888 포트를 사용하고 있는 프로그램이 없는 것으로 보입니다.

 

4) 그럼 이제 8888 포트를 사용하는 피들러를 실행시키고, 피들러로 패킷 캡쳐를 몇번 해본 후, 동일한 명령어를 다시 실행시켜 봅니다. 

(피들러 프로그램은 netstat의 예를 들기 위해 사용한 것이며, 다른 포트를 사용하는 다른 프로그램으로 해보셔도 무방합니다.)

 

 

실제 해당 포트를 통해서 무언가 데이터 통신이 있었음을 확인할 수 있습니다.

(피들러는 8888포트를 사용하는게 맞습니다. 맞나요? 우리는 8888포트를 통해서 통신이 있었음을 확인했지만, 실제 피들러 프로그램을 통해서 통신이 된것인지 확인하지 못하였습니다. 추측만 했을 뿐입니다.)

 

5) netstat 검색 옵션에 -o를 추가 다시 실행합니다.

 -o : 각 연결의 소유자 프로세스 ID를 표시합니다. (프로세스 ID를 알게 되면 프로그램(서비스)도 알 수 있습니다.)

 

 

이제 가장 오른쪽에 8888포트를 통해 통신한 프로그램의 프로세스ID를 확인할 수 있습니다.

 

6) 그럼 마지막으로 프로세스ID를 통해 해당 포트에 연결된 프로그램이 무엇인지 확인하여 보겠습니다.

 

 다음 명령어를 입력합니다. 아래 맨 뒤의 숫자는 5)단계에서 찾은 프로세스ID 입니다. 

 

tasklist /FI "PID eq 17088"

 

 tasklist 의 옵션을 더 자세하게 보기 원한다면

 

C:\> tasklist /?

 

를 입력하면됩니다.

 

 /FI 옵션은 필터 기능으로 뒤의 연이어 오는 필터에서 지정한 조건과 일치하는 작업 집합을 표시하도록 하는 옵션입니다.

"PID eq 17088"은 프로세스ID가  17088과 같은 프로그램(작업, task)를 의미합니다.

즉 위의 명령어는 '프로세스ID가 17088인 프로그램(작업)의 목록을 출력하라' 보시면 되겠습니다.

 

 

 

 

검색 결과가 나왔습니다. 프로세스ID가 17088인 프로그램(작업)은 Fiddler.exe (피들러) 였습니다.!!!

 

윈도우에서 사용중인 특정 포트와 프로그램을 확인하기 위해 netstat 과 tasklist 명령어를 사용하였습니다.

간단히 포트 및 프로그램 확인을 위한 것이라 해당 명령어들에 대해 자세하게 작성한 포스팅은 아니므로, 직접 /? 명령어를 사용하여 사용법에 대해 확인하시거나 그 외에 궁금한 사항이 있으시면 댓글로 질문 주시면 성실히 답변드리겠습니다.^^

 

반응형