페이지에 접속하니 간단한 php 코드와 경고 문구가 있다.
코드를 분석하고 요약해봤다.
1. server 파라미터의 값으로 전송된 ip주소의 소켓을 연다.
2. 이때, 포트는 10000 ~ 10100중 랜덤이다.
3. 연결에 실패할 경우 에러창을 띄운다.
이어서 경고문을 보면 [PC ip]:10067 포트가 연결이 되지 않아서 경고가 발생한 것을 알 수 있다.
기본적으로 10000번대 포트의 경우 막혀있을 것이고 따라서 연결이 되지 않아 경고가 발생한 것 같다. 접속 포트를 개방해줘야 할 것 같은데 문제는 포트값이 10000 ~ 10100번중 랜덤이라는 것이다.
어떻게 해야 정상적으로 연결을 할 수 있을까???
포트포워딩을 하면 문제가 해결될 것 같다.
포트포워딩이 무엇인지 알기 위해서는 공유기에 대한 간단한 개념이 필요하다.
공유기에는 공인 ip 와 사설 ip 두 가지가 할당된다.
공인 IP의 경우 외부 네트워크와 연결할때 사용하는 IP주소이며 사설IP의 경우 내부 네트워크 단에서 공유기를 공유하는 장치들을 구분하기 위해 사용하는 IP주소라고 이해하면 편할 것이다.
만약 외부 네트워크에서 10000번 포트로 요청이 온다고 하자.
(위 예시대로라면 12.11.32.165:10000으로 요청이 온 것이다.)
근데 12.11.32.165는 공유기의 공인 IP기 때문에 실제로 내부 네트워크에 있는 PC중 어떤 PC로 온 요청인지 알 수 없다.
그것을 구분하기 위해서는 포트포워딩을 해야한다.
즉, 간단하게 설명하면 포트포워딩을 통해 10000번 포트의 요청이 PC 1로 가게 설정을 하면
10000번 포트로 요청이 왔을때 에러가 발생하지 않고 PC 1로 정상적으로 전송이 될 것이다.
위 설명을 이해한 독자들은 이제 뭘해야 할지 감이 올 것이다.
문제에서 포트가 10000 ~ 10100번 포트 중 랜덤이기 때문에
10000 ~ 10100으로 오는 모든 요청을 내 PC로 전송하게끔 포트포워딩 하면 문제가 해결될 것이다!
이제 직접 포트포워딩을 해보도록 하자.
먼저 cmd(명령프로포트)창을 이용해서 ipconfig 명령을 쳐서 ip 주소를 확인한다.
확인하면 위와 같이 뜨는데 이때 게이트웨이 주소가 본인이 사용하는 공유기의 사설 ip 주소이다.
(보통 공유기 사설 ip주소의 끝자리는 1이다.)
알아낸 공유기 사설 ip주소로 웹브라우저(익스플로어, 크롬)을 이용해서 접속하면 위와 같은 화면이 뜬다.
관리도구로 접속하자.
로그인을 하고 접속하면 설정창이 뜨는데 좌측의 NAT/라우터 관리에서 포트포워드 설정으로 들어가면 포트포워드 설정을 할 수 있다.
규칙이름은 아무거나
내부주소는 현재 접속된 IP주소 사용
외부 포트는 문제에서 10000~10100으로 접속을 시도하기 때문에 10000~10100잡고
내부 포트는 아무값이나 맞춰준다. (단, 사용포트가 겹치면 안되기 때문에 하이포트로 잡는게 좋다.)
외부포트와 내부포트의 차이를 간단하게 예제로 설명하면 다음과 같다. (위쪽 예시사진 기준)
ex) 12.11.32.165:10000 ~ 10100 → 외부포트
192.168.11.10:10000 → 내부포트
외부포트는 공인 IP , 내부포트는 사설IP 포트 라고 생각하면 될 것 같다.
적용을 누르면 위와 같이 포트포워드 규칙이 생성된다.
이제 포트포워딩을 끝냈으니 문제 페이지를 새로고침 해보자.
새로고침을 하면 에러는 사라졌지만 문제가 해결되지는 않는다.
아마도 패킷 내용을 직접 확인해야 하는 것 같다.
netcat이나 vnc 서버등을 이용해 패킷의 내용을 확인해보면 flag값이 있는 것을 확인할 수 있다!