|
http://www.hackerschool.org/HS_Boards/zboard.php?id=Free_Board&no=36539 [복사]
webhacking.kr 31번 문제 관련해서 궁금했던 점입니다.
해당 문제에서는
10000~10100번 사이의 랜덤한 포트로 사용자에게 데이터 전송을 시도합니다.
서버 입장에서 몇 번 포트로 통신할지는 저 범위안에서 랜덤인 것입니다.
그러나 사용자의 10000-10100번대 포트는 개방되어있지 않기 때문에 열어주어야 합니다.
저 같은 경우는 공유기를 사용하기 때문에 포트포워딩 or DMZ 기능을 사용해서 개방할 포트를 설정해 준 후 nc(넷캣)을 사용하여 개방된 포트로 데이터를 받을 수 있었습니다.
이중에 제가 공부하면서 헷갈렸던 내용을 질문드립니다.
1. 포트설정
포트포워딩은 일부 포트만, DMZ는 모든 포트를 열고 데이터를 받는 설정으로 알고 있습니다.
그런데 넷캣을 사용해서 포트를 또 열어야 하는 이유는 무엇인가요?
사실 넷캣의 역할을 정확히 이해하지 못한 것 같습니다.
구글링해서 이 문제의 여러 풀이법을 찾아보면 대부분이 '넷캣으로 포트를 연다'라고 표현하고 있습니다.
공유기 설정 페이지에서 이미 한 번, 넷캣에서 한 번, 총 두번 포트를 열겠다는 표현은 좀 이상하네요.
저는 넷캣이 <TCP 통신에서 데이터를 주고받는 역할> 이라고만 생각하고 있습니다.
공유기에서 포트를 개방하고, 개방된 포트로 들어오는 데이터를 넷캣으로 받는 것이지요.
제 이해가 부족한 탓인 것 같은데, 명확한 이해를 도와주실분이 계신다면 댓글 부탁드립니다.
2. DMZ
DMZ는 모든 포트를 열어두는 설정으로 알고 있습니다.
DMZ 설정해둔 상태에서 넷캣으로 nc -l -p 10000-10100 명령어를 입력하고(10000-10100번 포트를 listen 상태로 한다는 명령어로 알고있습니다)
해당 사이트를 새로고침 여러번 해도 쉽게 데이터가 받아지지 않습니다.
10000-10100번대 포트가 모두 listen 상태이기 때문에 이 중에 어떤 랜덤한 포트로 들어오던 한 번에 통신이 이루어져야 할 것 같은데
새로고침을 적게는 몇번, 많게는 수십번을 해야 통신이 됩니다.(랜덤한 숫자 부여 때문이라고 생각하는데, 모든 포트를 열어두었으니 랜덤값이 뭐든 관계가 없어야 하는 것 아닐까요)
구글에서 나오는 풀이법들을 보면 물론 스스로 클리어하고 다양한 방법으로 풀이를 시도하신 성실한 분들도 있었지만
대부분은 하나같이 서로 배낀 것인지 풀이도 똑같고, 아무 의문도 없이 자연스럽게 명령어를 가져다 치는 등 궁금해하는 사람이 없어 해쿨 고수분들께 질문드립니다. |
Hit : 11059 Date : 2018/09/28 12:59
|