다른 표준 명령어에는 LIST, PORT, RETR, STOR 등이 있겠군요.
LIST 같은 명령어는 클라이언트의 요청을 서버가 Data connection을 통하여 전달해주는 방식입니다.
이 경우는 2가지로 나뉩니다.
Active Mode
Data connection을 서버가 Active하게 클라이언트에게 접속하여 여는 방식입니다. 이 때는 클라이언트가 PORT 명령어를 이용하여 지정한 주소로 접속하거나, 기본 주소(22번 포트, 접속 클라이언트의 IP address)로 접속을 시도하겠죠. 따라서 클라이언트는 해당 주소에 대한 소켓을 열고 기다리면 됩니다.
Passive Mode
이 경우에는 PASV 요청을 서버로 보내어, 서버가 보내준 접속 정보(포트와 IP Address, etc)를 이용하여 클라이언트가 접속을 시도합니다. (내부 네트웍으로 NAT 뒤에 있는 클라이언트는 이런 방식을 사용해야하죠.)
따라서 이 경우에는 control connection을 이용하여 PASV 요청을 서버로 전송하시고, reply를 분석하여 거기로 접속을 하시면 되겠습니다.
정확하게 LIST 요청을 보낼때 어떤 패킷을 오고 가는지는 역시 tcpdump, ethereal같은 툴로 지켜보는게 확실하겠죠.
도움 주셔서 감사 합니다.
Active Mode 모드에서 궁금한게 잇는데요~
포트를 서버에 넘겨주면은 200 PORT command successful 리풀이 됩니다.
그다음 처리 해야할 방법은 어떤건지 좀 가르쳐 주시면 감사드리겟습니다.
아래 말뜻을 이해가 좀 모자른듯 해서 ㅠㅠ
ls(dir) 쉽게 테스트하는 방법으로는,
텔넷으로 21번 포트에 접속해서 로그인하고
PASV 를 보냅니다.
서버측에서 응답이 올겁니다.
> 227 Entering Passive Mode (123,456,789,123,8,12).
TELNET 창을 하나 더 띄워서 123.456.789.123:2060 으로 접속합니다.
(8*256+12=2060)
그리고 FTP 명령창으로 돌아가서 LIST를 보냅니다.
다른 텔넷 창으로 데이터가 내려오면 성공.
PORT 명령은 반대로 동작합니다. (클라이언트가 포트를 열고 기다리고 있어야 함)
FTP 클라이언트..
FTP 클라이언트에서 우리가 흔히 쓰는 ls, rm 등의 쉘 명령어는 표준 FTP 명령어가 아닙니다. FTP 클라이언트가 처리해서 그에 해당하는 FTP 명령으로 바꿔주는겁니다. 프로토콜에 대해서는 힘들더라도 RFC 를 보시는것이 가장 좋을텐데요.
FTP 클라이언트 구현
안녕하세요.
역시 RFC 문서를 보시는게 가장 확실합니다.
다른 표준 명령어에는 LIST, PORT, RETR, STOR 등이 있겠군요.
LIST 같은 명령어는 클라이언트의 요청을 서버가 Data connection을 통하여 전달해주는 방식입니다.
이 경우는 2가지로 나뉩니다.
Active Mode
Data connection을 서버가 Active하게 클라이언트에게 접속하여 여는 방식입니다. 이 때는 클라이언트가 PORT 명령어를 이용하여 지정한 주소로 접속하거나, 기본 주소(22번 포트, 접속 클라이언트의 IP address)로 접속을 시도하겠죠. 따라서 클라이언트는 해당 주소에 대한 소켓을 열고 기다리면 됩니다.
Passive Mode
이 경우에는 PASV 요청을 서버로 보내어, 서버가 보내준 접속 정보(포트와 IP Address, etc)를 이용하여 클라이언트가 접속을 시도합니다. (내부 네트웍으로 NAT 뒤에 있는 클라이언트는 이런 방식을 사용해야하죠.)
따라서 이 경우에는 control connection을 이용하여 PASV 요청을 서버로 전송하시고, reply를 분석하여 거기로 접속을 하시면 되겠습니다.
정확하게 LIST 요청을 보낼때 어떤 패킷을 오고 가는지는 역시 tcpdump, ethereal같은 툴로 지켜보는게 확실하겠죠.
더 좋은 방법은 역시 RFC 문서를 읽어보시는 것입니다. 8)
[url]http://ldk.sarang.net [/url]
"꿈이 있는 자는 흔들리지 않는다! "
도움을 주셔서 감사드립니다.
도움 주셔서 감사 합니다.
Active Mode 모드에서 궁금한게 잇는데요~
포트를 서버에 넘겨주면은 200 PORT command successful 리풀이 됩니다.
그다음 처리 해야할 방법은 어떤건지 좀 가르쳐 주시면 감사드리겟습니다.
아래 말뜻을 이해가 좀 모자른듯 해서 ㅠㅠ
좋은 하루 되세요
내가 하고자 하는길....
RFC 959 입니다.ls(dir) 쉽게 테스트하는 방법으로는,
RFC 959 입니다.
ls(dir) 쉽게 테스트하는 방법으로는,
텔넷으로 21번 포트에 접속해서 로그인하고
PASV 를 보냅니다.
서버측에서 응답이 올겁니다.
> 227 Entering Passive Mode (123,456,789,123,8,12).
TELNET 창을 하나 더 띄워서 123.456.789.123:2060 으로 접속합니다.
(8*256+12=2060)
그리고 FTP 명령창으로 돌아가서 LIST를 보냅니다.
다른 텔넷 창으로 데이터가 내려오면 성공.
PORT 명령은 반대로 동작합니다. (클라이언트가 포트를 열고 기다리고 있어야 함)
데이터 모드를 사용하는 명령들은 모두 같은 방법으로 처리할 수 있습니다.
위에분 정말 감사 드립니다.
또 모르는 것 하나를 알게 되서 너무 기쁩니다.
좋은 하루되세요 ^^
이제야 해결이 될듯 후~ 언제 코딩 하나 ㅠㅠ
내가 하고자 하는길....
댓글 달기