WINDOWS
2020.10.03 / 01:35

윈도우에서 사용중인 포트 확인하고 실행중지하기

추석돌이
추천 수 4

사용중인 포트 확인하고 중지하는 두가지 방법



윈도우로 서버 구축하는 내용에 대해서 적다보니 항상 많이 질문하는 내용중에 하나가 80포트를 사용할 수 없다. 또는 21포트가 안된다 등등의 질문을 많이 받았습니다. 이런 부류의 질문은 처음 윈도우를 클린 설치하고 바로 웹서버로 세팅하는 경우에는 대부분 문제가 없지만, 기존에 쓰던 컴퓨터에서 웹서버인 IIS 기능을 활성화 하면서 일부 문제가 되는 경우입니다.


몇가지 이유가 있지만, ISP(인터넷 제공업체)에서 해당 포트를 막는 경우에는 서버 설정에서 나타나지 않습니다. 예를 들어, 인터넷 업체에서 80포트를 막아버렸다고 하면, 윈도우 서버(리눅스도 마찬가지)에서 80포트를 웹서버로 잡아도 서버에서는 아무런 에러가 보이지 않기 때문에 쉽게 확인할 수 없습니다. 만약, 서버내에서 설정했는 때는 별달리 에러가 없었는데, 실제로 외부에서 접속하는 경우 접속할 수 없다면, 포트 개방을 확인하여야 합니다.


외부에서 포트가 개방되었는지 확인하는 사이트에서 포트가 개방되었는지 닫혀있는지 확인해보시면 됩니다.

참고로, ISP에서 열어놓았어도, OS자체에서 방화벽 설정에 해당 포트를 오픈하지 않으면 그 포트를 사용할 수 없습니다. 뭐, 물론 일반적으로 웹서버를 설치하거나 특정 포트를 사용하는 프로그램을 설치하는 경우 거의 자동으로 방화벽을 개방하니 문제될 부분은 없지만요.


아래의 글을 참고하면, 외부에서 해당 포트가 개방이 되었는지 확인할 수 있습니다.



근데 이번글에서 다루고자 하는 경우는 IIS를 이용해서 새로운 웹 사이트와 FTP 사이트 등을 구축했을 때, 같은 포트를 사용하는 프로그램이나 어떤 원인으로 포트를 사용할 수 없는 경우에 쓰면 좋은 방법입니다.




가령 예를 들면 위에 상황처럼 한 서버 내에서 같은 포트를 여러 프로그램에서 사용해야 할 때 해당되는 상황입니다. (엄밀히 이야기 하지면, 위의 경우와는 무관합니다.)


이번 글은 두가지 방법으로 다룰 예정입니다.

먼저, 명령프롬프트에서 CUI 방식으로 netstat 명령어를 이용합니다.

두번째는 리소스 모니터를 통해서 GUI 방식으로 확인합니다.


읽어보시고 둘 중에 더 편한 방법을 선택하면 되겠습니다.




Netstat 명령어 이용하기


명령 프롬프트에서 netstat이라는 명령어를 이용해서 개방중인 포트 또는 사용중인 포트를 확인할 수 있습니다. 한마디로 CUI 방식으로 터미널에서 포트를 확인할 수 있는데, 만약 해당 프로세스의 작동 중지를 하려면 추가적인 과정이 필요 합니다. 명령 프롬프트 상태에서 쉽게 프로세스를 제거하기는 힘들기 때문에 약간 다른 과정을 거쳐야 합니다.

즉, 포트 확인 따로 프로세스 중이 따로 해야 합니다.


사용중인 포트를 확인하는데 사용할 명령어는 netstat이라는 명령어입니다. netstat /?을 입력하면 자세한 명령어 사용법이 나옵니다.




명령어에 대한 인수들이 있지만, 현재 사용할 명령어는 -a, -n, -o 입니다.


그래서 다음과 같이 입력하면 됩니다.

netstat -ano

-a : 모든 포트를 표시해줍니다.

-n : IP주소:포트 형태로 보여줍니다. (예 - 192.168.0.22:1234)

-o : PID (프로세스 ID)를 표시해줍니다. (해당 프로그램 중지시에 사용)



아래 처럼 그냥 입력하면 됩니다.





그러면 등록되어 있는 포트에 대하여 모든 포트와 PID 가 나옵니다. 여기서는 예로 80포트 사용중인 프로그램을 확인해보도록 하겠습니다. 아래의 화면과 같이 0.0.0.0:80 (= localhost:80)을 사용중인 PID는 4 입니다.

PID는 프로세스 ID로 현재 구동중인 프로세스의 번호입니다. 물론 할당되어 있는 모든 포트를 표시해 달라고 했기 때문에 지금은 실행중이지 않은 포트도 여기에 나타납니다.



근데 문제는 PID로만 표시가 되어있고, 실제로는 어떤 프로그램들이 사용하고 있는지 확인을 할 수 없습니다. 이제 해당하는 포트에 어떤 프로그램이 할당되어 있나 확인해보도록 하겠습니다. 확인뿐만 아니라, 원하지 않는 프로그램이 포트에 할당되어 있다면 그 프로세스를 끝내기도하고, 영구적으로 할당하지 않으려면 프로그램 삭제를 통해서 해당 포트 확보가 가능합니다.




프로세스 끝내기


PID를 확인하거나, 그에 대한 프로세스를 끝내려면 작업관리자를 통해 관리가 가능합니다. 하단에 작업표시줄 (시작메뉴가 있는 상태표시줄) 에서 오른쪽 버튼을 눌러 작업 관리자를 실행시킵니다.





그럼 아래 화면 같이 작업 관리자 화면이 나오게 되는데 그 중에서 세부정보 탭으로 이동합니다.






그리고 나열되는 목록들을 PID 순으로 정리를 하기 위새서면 다음과 같은 화면이 나옵니다.





애초부터 찾고자 했던 PID 4는 System에서 사용 중이었습니다. IIS의 경우에는 이렇게 System으로 표시 되더군요. IIS에서 할당중이라는 것을 확인 할 수 있었습니다.



만약, 해당 프로세스를 종료하고 싶다면 작업끝내기 버튼을 통해서 프로세스를 종료할 수 있습니다.




근데, 이 방법은 조금 번거롭긴 하지요. 왜냐하면 명령프롬프트를 통해 먼저 사용중인 포트를 확인해야 하고 또 작업관리자를 열어서 프로세스를 종료해야 하니깐요.

한마디로 확인따로 관리따로의 비효율적인 일을 하고 있습니다. 하지만, 한번에 이 두가지 과정을 모두 처리할 수 있는 방법이 있어서 소개하고자 합니다. 게다가 GUI 방식으로요.





리소스 모니터 이용하기


리소스 모니터를 이용하면 더욱더 간편하게 관리를 할 수 있습니다. 포트를 확인하고 프로세스를 종료하는 과정을 무려 GUI방식으로 관리를 할 수 있습니다.

시작 > 제어판 > 시스템 및 보안 항목으로 이동합니다. 그리고 관리도구 메뉴를 선택합니다.






관리메뉴 도구 중에서 리소스 모니터를 선택합니다. 

이렇게 일일이 찾기 귀찮은 분들은 실행(윈도우키 + R) 에서 resmon 을 입력해도 됩니다.



이 리소스 모니터를 실행하는 방법은 이 방법외에도 작업관리자에서 성능탭으로 이동하여 리소스모니터 열기를 클릭해도 됩니다.



이제 이 리소스 모니터에서 네트워크 탭으로 이동합니다. 그러면 네트워크 활동이 있는 프로세스를 표시하고 있습니다. 아래의 경우에는 PID 4번 IIS(System)에서 사용하고 있는 것을 확인할 수 있습니다. 근데 이것만으로는 할당된 포트를 바로 확인할 수 없습니다. 때문에 가장 아래 항목인 수신 대기 포트 항목을 펼쳐줍니다.





수신대기포트 항목을 펼치면 사용중인 포트와 함께 할당된 IP주소 그리고, PID가 모두 나오게 됩니다. 이 방법을 통해서면 netstat과 같은 명령어를 숙지하지 않아도 충분히 찾을 수 있다고 생각됩니다.



이 수신 대기 포트에서 사용중인 포트를 사용가능하고, 혹시나 현재 사용중인데 이 프로세스를 중지하고 싶으면 네트워크 활동이 있는 프로세스 항목으로 이동해서 마우스 오른쪽 버튼을 눌러 프로세스 끝내기를 하면 됩니다.





이 글을 쓰게 된 계기가 자주 포트가 겹치거나 해서 IIS를 제대로 실행할 수 없거나, FTP 접속시에 에러가 발생하는 경우가 생길 수 있는데, 사용중인 포트를 확인하여 미연에 방지할 수 있습니다. 서버와 관련하여 무언가 에러가 났을 때, 클린 설치후 서버를 구축한게 아니라면 반드시 사용중인 포트를 한번 확인해 보시기 바랍니다.








출처: https://studyforus.tistory.com/244 [Study For Us]