8000포트가 이미 사용중인 에러

HS L·2023년 5월 31일
1

내일배움캠프

목록 보기
60/73

문제

그동안 로컬 서버 실행시 나를 괴롭혔던 에러..

Error: You don't have permission to access that port.

프로젝트 진행 중 포트 8000사용 불가로 홀로 포트를 변경해가면서 번거로운 작업을 진행했다.

처음 이 에러를 만났을때 단순히 포트번호 변경으로 해결을 했었다.

ex) django
python manage.py runserver <포트번호>

이때는 개발 관련 이해도와 지식이 바닥을 뚫고 지하로 갔었던 시절이라 당장의 문제를 해결하는데 만족했었다.

약간의 여유? 가 생긴 김에 뿌리를 뽑아보자는 생각으로 의욕이 불타올라버렸다..

에러코드를 살펴보니 포트 8000에 대해 권한이 없다는 에러... 이를 해결하기 위해 구글링과 튜터님의 도움을 받아 해결하기로 마음먹었다.


시도

초반 구글링 결과 단순하게 포트변경해서 사용하라는 답변이 많았다..

에러코드에 관해 검색을 해보니 이미 포트가 사용중이거나 열려있지 않은 포트일 수 있다, 방화벽 문제일 경우도 있다라고 하니 관련해서 참 많은 시도들을 했었다..

1. 포트변경

당장 해결은 되지만 8000포트 선점 이슈를 해결하지 못함

ex) django
python manage.py runserver <포트번호>

2. 방화벽 문제

구글링을 해보면 많은 글들이 나오지만 보안문제와 현재 상황을 특정하지 못한상태로 설정을 건드리면 문제가 생길 것 같아 이 방법은 최후로 미뤘다.

++ 혹시나 하는 마음에 방화벽기능 자체를 중단하고 시도해봤지만 해결되지 않음. 방화벽 문제는 아닌걸로 판단하고 넘어갔다.

3. 포트가 열려있지 않을 수 있다

구글링 진행 후 적용해봤지만 역시나 안됨
참고링크

4. 포트가 이미 사용중일 수 있다

4-1. 사용중인 포트 조회

cmd에서 이미 사용중인 포트를 조회해봤다.
cmd창에서 다음 명령어 입력

netstat -ano


위와 같이 활성중인 8000포트를 찾았다..! 제일 오른쪽의 '4'는 PID값으로 이 포트를 사용하고 있는 프로세스의 아이디값이다.

이제 이 포트를 어떤놈이 쓰고 있는지 찾으러 가보자

포트 번호로 바로 찾는법

netstat -ano | findstr <포트번호>

4-2. 찾은 PID값을 가진 프로세스 확인하기

PID는 프로세스 ID로 이 PID를 가진 놈이 누구인지 보는방법도 여러가지가 있다

cmd로 확인하는법

tasklist /FI "PID eq <PID값>"

작업관리자에서 확인하는법

어떤놈인가 했더니 System..
여기까지 확인했을때 그냥 작업할때마다 포트변경하는 노가다를 할까 했지만.. 다른 프로그램사용시에도 이 에러를 다시 만날 수 있다는 것을 확인하고 이어나갔다..

작업관리자에서 System우클릭 후 속성을 눌러보니 ntoskrnl.exe가 포트를 사용중이었다.

바로 구글링... 뭔소린지 모르겠다.. 일단 어떤놈인지 확인은 했으니 잠시 넣어두고 추가 구글링 시도..

++ 구글링 후 시도해본 것들 정리

+1. 사용중인 PID를 죽인다

System에서 사용중이기 때문에 보류
참고링크

+2. world wide web publishing service 중단

이걸 중단하면 해결된다는 글도 많이 봤다. 근데 난 심지어 이것도 없단다..

참고링크

+3. NET stop HTTP 명령어 입력

근본적인 해결이 아니라 관련 서비스를 중단시키는 것 같아 보인다.
다시 실행이 되거나 하면 다시 에러를 만날 것 같다. 그리고 나는 이대로 실행했을때 해결도 안됐다.
참고링크

+4. HTTP.sys관련 구글링, 레지스트리 값 변경

시스템상의 레지스트리를 변경하는 방법이다 보니 찝찝함은 남아있다..
이 방법으로 해결은 됐지만 아래 "참고링크-값변경하는법" 링크에서 작성해주셨듯이 사이드이슈 발생이 동반될 수 있다.

레지스트리의 값을 변경하다보니 변경한 '4'의 정확한 의미에 대해 검색해봤더니 우선순위가 아니라 사용하지 않음..이라고 한다.
참고링크-값변경하는법
값의 의미

위 과정 외에도 여러가지 시도들을 엄청 해봤는데 막상 정리하려니 기억도 안나고.. 비슷했던 것 같아 기억에 남는 것들을 정리해봤다.

튜터님의 도움을 받아서 오랜 시간동안 여러가지 시도를 해봤는데 너무 시간을 잡아먹어서 잠정적인 결론을 내렸다.

+5. 상태 파악

현재 내 PC상에서 8000포트를 사용중인 상태이고, 그 포트를 사용하는건 System이다.

실제로 System에서 시스템적인 부분을 사용하고 있을 수 있고, 과거의 내가 언제 무슨 프로그램을 깔거나 포트를 연결해뒀던 상황일 수 있다고 하셨다.

어떤 프로세스가 사용중인지 특정이되지 않는 상황이라 함부로 중지시키기에는 리스크가 동반될 수 있다.

시도했던 과정 중에서 레지스트리 값 변경 후 사이드이슈 발생을 지속적으로 모니터링 해보자는 결론을 내렸다.

걱정했었던 실무에서 8000포트 사용 불가가 문제가 되는지에 대한 궁금증도 보안상 알려진 포트가 아닌 다른 임의의 포트를 사용한다는 답변을 받아 다행이지만 근본적으로 해결이 안됐다는점에 한편으로 찝찝함이 남았다.


+++ 처음으로 다시 돌아가 되짚어 봤다.

  1. 포트가 이미 System에서 사용중이다. 세션 이름은 Services
  2. 그 포트를 사용하는것은 ntoskrnl.exe이다.
  3. ntoskrnl.exe와 관련해서 연관 구글링 결과 HTTP.sys쪽이 연관돼있는 것으로 보인다.
  4. HTTP.sys관련해 추가적인 구글링 진행
    • 현재 상태를 분석하고 근본적인 해결을 위해 튜터님께서 말씀해주신 직접적으로 8000포트를 사용하는 놈이 있겠다 싶어 찾아 제거해보자라는 생각으로 진행했다.
      현재 깔려있는 앱중에서 의심되는 놈들도 다 지워버리고.. 여러가지 시도 했지만 그대로..
      현재 어떤놈이 어떤 포트를 사용중인지 확인할 방법이 분명 있을 것 같은데..

+++ 지금껏 검색했던것을 토대로 HTTP에서 사용중인 포트를 확인할 명령어를 찾았다!! 튜터님께서 말씀해주셨던 원인중 직접적으로 8000포트를 사용하는 놈을 찾았다.. 이를 통해 해결과정은 아래에서 적겠다


해결

참고링크를 확인해보면 현재 사용중인 포트를 확인하는 명령어를 알 수 있다.

1. 사용중인 HTTP URL 확인하기

netsh http show servicestate

참고링크에서 확인한 위 명령어를 입력하게 되면 예시와 비슷한 리스트가 쭈~욱 나열된다.

여기서 가장 먼저 확인했던 부분은 URL부분을 쭉 둘러본 결과 그토록.... 찾고 찾았던..... 8000포트가......

"등록된 URL:
HTTP://+:8000/..."

형태로 들어가 있는 놈을 찾았다 ...

당장에 해당 프로그램을 흔적도없이 지워버리고 싶었지만 혹~시나 뭔가 남아서 포트만 점령하는 유령이 되지 않을까 하는 마음에 연결된 포트먼저 끊어야겠다는 생각이 들었다.

내 경우 HTTP://+:8000/3SHAPEWIRELESSSERVICE/SERVICE/ 였으며 3SHAPEWIRELESSSERVICE는 사용하고있는 프로그램명에서 온 것으로 보였다.

이름을 보자마자 과거의 나를 찾아가 한바탕 하고싶어지는 순간이었다..

2. 서비스 관리에서 포트사용 중단시키기

2-1. 해당 서비스를 중지시키기 위해서 내PC 우클릭 -> 관리로 들어가준다

2-2. 컴퓨터 관리창이 뜨면 아래 이미지를 참고해서 해당 순서를 따라준다.

  1. 좌측 서비스탭으로 들어간다.
  2. 해당 서비스를 찾아 우클릭 후 속성으로 들어간다

해당 속성에서 서비스상태를 중지해준 뒤 사용할 일이 없으면 시작유형에서 사용안함 -> 적용 후 확인을 해준다.

cmd창에서 8000포트 상태를 확인한다.

netstat -ano | findstr 8000

사용했을때 조회되는 포트가 없는것을 확인할 수 있다.

netstat -ano

사용중인 포트에 8000이 사라진것을 확인할 수 있다.

그리고 실행하고자 했던 프로그램 포트를 8000으로 실행하면 정상적으로 잘 실행이 되는것을 확인할 수 있다.


고찰

나의 경우 django runserver실행시 Error를 만났지만 다른 프로그램에서도 포트 번호 충돌이 나는 경우 문제해결방법중 하나가 될 수 있을것이다.

조금이나마 알려진 관련이슈로도 해결이 되지 않는다면 나처럼 특정 프로그램이 계속 선점하고 있는 경우일 것이라 생각한다.

여러가지 글을 보고 시도를 해본 결과 System에서 포트 선점이 이루어지고 있는 상황인 경우 시스템적인 리스크가 동반될 수 있는 위의 시도 이전에 어떤 프로그램이 선점하고 있는지를 먼저 특정해보는 것이 더 안전하고 효율적일 수 있다고 생각한다.

근본적인 포트 사용 프로그램을 특정하고 해결을 하고자하는 분들에게 도움이 됐으면 한다.

profile
식이

1개의 댓글

comment-user-thumbnail
2024년 2월 1일

글 잘 읽었습니다!
저도 방금 같은 문제를 겪었는데, 저 같은 경우에는 8000번 포트를 사용하는 서비스가 없었고 다시 찾아보니, 관리자 권한으로 명령프롬프트를 연 후 아래 명령어로 해결되었습니다!

net stop winnat
net start winnat

참고 stackoverflow : https://stackoverflow.com/questions/74011515/windows-django-error-you-dont-have-permission-to-access-that-port

감사합니다!! :)

답글 달기