FTP 프로토콜 관련하여 질문드립니다.

webispy의 이미지

안녕하세요. FTP 클라이언트를 만드는 중에 문제점이 있어서 방법을 찾다가 질문 드립니다.

RFC959문서에 보면

         User-PI - Server A                User-PI - Server B
         ------------------                ------------------

         C->A : Connect                    C->B : Connect
         C->A : PASV
         A->C : 227 Entering Passive Mode. A1,A2,A3,A4,a1,a2
                                           C->B : PORT A1,A2,A3,A4,a1,a2
                                           B->C : 200 Okay
         C->A : STOR                       C->B : RETR
                    B->A : Connect to HOST-A, PORT-a

이렇게 FTP서버간 파일전송을 가능하게 하는 방법(?)이 나와있습니다.(클라이언트는 두 서버간 중계역활을 하는 것이지요.)

근데 위 방법처럼 하니까 B->C : 200 Okay가 안되고 500 Illegal PORT command 오류가 발생합니다.

제 생각에 클라이언트가 PORT명령을 보낼때 클라이언트 아이피가 아닌 다른 아이피여서 보안상 거부하는 것이 아닐까 하는데..

명쾌한 답을 얻고 싶습니다.

코퍼스의 이미지

음..쓰신 내용만으로는...

혹, service port 번호를 잘못 쓰신 것 아닙니까?
그리고, ftp는 control 명령을 날리는 포트와 데이터 전송에 사용되는 포트가 틀리니 이 점도 주의해야 합니다.

만일, 서비스 포트 설정에 문제가 없고 만일.. 시험하고 있는 환경이 유닉스/리눅스 서버라면..(요즘은 XP도 까다롭지만)
서버의 보안 설정을.. 점검해보세요..
시험할 때, ethereal이나 tcpdump를 같이 쓰면서 디버깅해도 좋을 것입니다.

A few Good Man

wfellow의 이미지

제가 위의 예제를 제대로 이해한 것이라면(?) 좌측의 A1,A2,A3,A4,a1,a2는 중계서버의 아이피와 포트를 준것으로 보이는데요? 먼저 FTP의 normal mode와 passive mode의 차이를 인지하셔야 할듯 합니다.

normal mode: command-channel ==> C->S
data-channel ==> S->C

passive mode: command-channel ==> C->S
data-channel ==> C->S

^^

-----[꼬릿말 절취선 시작]-----
삽질전에 먼저 구글신께 기도하자.
-----[꼬릿말 절취선 끝]-----