FTP 클라이언트 프로그래밍 질문요

skylandi의 이미지

프로그램 작성 해서 로그인 까지 햇습니다.

간단한 명령어 pwd,cd,quit 그런 명령어는 잘 먹히는데 메세지 주고 받기[간다]

ls[난이도 빠쎔] 명령어 같은 것은 어떻게 처리 해야 할지 아쉬는 분 좀 가르쳐 주시기 바랍니다.

RFC 한글 문서라도 있으면 좋갓구만...

수고들 하세용 ㅠㅠ

dotri의 이미지

FTP 클라이언트에서 우리가 흔히 쓰는 ls, rm 등의 쉘 명령어는 표준 FTP 명령어가 아닙니다. FTP 클라이언트가 처리해서 그에 해당하는 FTP 명령으로 바꿔주는겁니다. 프로토콜에 대해서는 힘들더라도 RFC 를 보시는것이 가장 좋을텐데요.

etourist의 이미지

안녕하세요.

역시 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]
"꿈이 있는 자는 흔들리지 않는다! "

skylandi의 이미지

도움 주셔서 감사 합니다.
Active Mode 모드에서 궁금한게 잇는데요~
포트를 서버에 넘겨주면은 200 PORT command successful 리풀이 됩니다.
그다음 처리 해야할 방법은 어떤건지 좀 가르쳐 주시면 감사드리겟습니다.
아래 말뜻을 이해가 좀 모자른듯 해서 ㅠㅠ

좋은 하루 되세요

내가 하고자 하는길....

익명 사용자의 이미지

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 명령은 반대로 동작합니다. (클라이언트가 포트를 열고 기다리고 있어야 함)

데이터 모드를 사용하는 명령들은 모두 같은 방법으로 처리할 수 있습니다.

skylandi의 이미지

또 모르는 것 하나를 알게 되서 너무 기쁩니다.
좋은 하루되세요 ^^
이제야 해결이 될듯 후~ 언제 코딩 하나 ㅠㅠ

내가 하고자 하는길....

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.