Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 3 của 3
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    Hướng dẫn thao tác với FTP server theo cách thủ công

    1. Dẫn nhập
    Lập trình mạng là một môn học thường thấy trong các trường kĩ thuật. Phần lớn nội dung của môn học là giúp sinh viên có khái niệm về cách viết các chương trình client, server, hiểu và thiết kế các giao thức mạng. Một trong những bài tập cơ bản là viết chương trình FTP client hoặc server

    Xuất phát từ bài viết Simple Ftp Client _ Chương trình quản lý file trên Server FTP, mình sẽ hướng dẫn bạn cách thao tác với một FTP server theo cách thủ công. Mục đích của bài viết này là giúp bạn hiểu giao thức. Sau khi hiểu giao thức một cách đúng đắn, việc xây dựng chương trình sẽ rất dễ dàng.

    Yêu cầu đối với tut này:
    Bạn cần đọc RFC 959 trước để hiểu mình đang thao tác gì. Mình sẽ không giải thích tại sao server lại dùng 2 cổng để giao tiếp với client, những kiến thức cơ bản với lập trình mạng, .....

    Tut này chỉ hướng dẫn bạn thực hành.


    2. Công cụ
    - Để thao tác với server, việc đầu tiên là phải có một client đơn giản.
    Bạn có thể sử dụng phần mềm telnet (Windows) hoặc Netcat(http:/etcat.sourceforge.net/) để gửi và nhận dữ liệu từ server.
    Trong bài viết này, mình sử dụng netcat.

    - Chuẩn bị server: Bạn tự dựng một server FTP cho riêng mình. Có thể sử dụng các giải pháp miễn phí như FileZilla Server, vsftpd, ftpd....
    Trong bài viết này, mình dùng FileZilla Server.

    Trong giao diện cấu hình của FileZilla server,bạn cấu hình server theo ý bản thân, có thể sử dụng cấu hình của mình như trong hình sau:


    Mình cấu hình server của mình có account như sau:
    username: quangnh89
    password: secret
    Server lắng nghe tại cổng 21 (control connection)
    Bạn cần chỉnh timeout của server là 0 để server không ngắt giữa chừng trong lúc thực hành. Tuy nhiên, tùy chọn này không bắt buộc.


    3. Đăng nhập
    Bạn cần đăng nhập vào FTP server bằng dòng lệnh trước khi thao tác với file trên server.
    Thông thường, các server sẽ có thể có một account là anonymous. Account này không cần password để đăng nhập. Một số server yêu cầu password cho anomymous là địa chỉ email của bạn. Tuy nhiên, bạn có thể không theo quy định này, điền gì cũng được.

    Mình đăng nhập tới FTP server bằng account của mình:


    Khi kết nối tới FTP server, nếu kết nối thành công, server sẽ gửi lời chào kèm mã 220. Đây là tùy chọn có thể cấu hình từ phía server.

    Quá trình đăng nhập sẽ diễn ra theo 4 bước:
    Bước 1: Bạn gửi lệnh USER theo cú pháp: USER username
    Trong đó username là tên đăng nhập của bạn.
    Bước 2: Server sẽ phản hồi lại với mã lỗi 331 để bạn nhập password
    Bước 3: nếu Bạn nhập đúng User và password, bạn tới Bước 4. Nếu nhập sai một trong 2 giá trị trên, bạn không thể thao tác với server.
    Bước 4: Bạn có thể thao tác với server, mã lỗi 230


    4. Kiểm tra các lệnh mà server hỗ trợ
    Mã:
    230 Logged on
    HELP
    214-The following commands are recognized:
       USER   PASS   QUIT   CWD    PWD    PORT   PASV   TYPE
       LIST   REST   CDUP   RETR   STOR   SIZE   DELE   RMD
       MKD    RNFR   RNTO   ABOR   SYST   NOOP   APPE   NLST
       MDTM   XPWD   XCUP   XMKD   XRMD   NOP    EPSV   EPRT
       AUTH   ADAT   PBSZ   PROT   FEAT   MODE   OPTS   HELP
       ALLO   MLST   MLSD   SITE   P@SW   STRU   CLNT   MFMT
       HASH
    214 Have a nice day.
    5. Kiểm tra thư mục hiện tại
    Việc kiểm tra thư mục hiện tại sẽ giúp bạn định vị bạn đang ở đâu trong server, và có thể thao tác với thư mục thế nào

    Để biết thư mục hiện tại, bạn dùng lệnh PWD, server sẽ phản hồi lại với mã 257, phần nằm trong dấu "" chính là thư mục hiện tại.
    Mã:
    PWD
    257 "/" is current directory.
    6. Chuyển thư mục
    Để chuyển sang thư mục mới, bạn dùng lệnh CWD và gõ đường dẫn đầy đủ của thư mục

    Mã:
    CWD /data
    250 CWD successful. "/data" is current directory.
    7. Liệt lê danh sách các file trong thư mục hiện tại
    Như bạn đã biết, FTP sử dụng 2 luồng TCP, một luồng để điều khiển (control connection) và một luồng để truyền dữ liệu (Data connection). Để liệt kê các file, cần thực hiện các bước sau:
    Bước 1: Chuyển loại kí tự sẽ xử lý (lệnh TYPE)
    Bước 2: Chọn chế độ truyền cho Data connection là PASSIVE mode hoặc ACTIVE mode. Mình dùng Passive mode.
    Bước 3: Gửi lệnh LIST để lấy danh sách các file
    Bước 4: Nhận danh sách các file trên data connection
    Danh sách nhận được sẽ có dạng như sau:

    Mã:
    permissions[tab]number?[tab]owner[tab]group[tab]filesize[tab]date[tab]filename
    Trong đó:
    permissions: Quyền đối với file. Bạn nào dùng Linux sẽ biết đến giá trị này
    number : Giá trị cho biết số inode của file
    Ower: Tên người sở hữu file
    group: Nhóm sở hữu
    filesize: Kích thước file tính theo byte
    date : thời gian sửa file
    filename: tên file.

    Lưu ý :
    1. 227 Entering Passive Mode (h1,h2,h3,h4,p1,p2).
    port của data connection được tính theo công thức: port = p1 * 256 + p2
    2. Cần dùng đường dẫn đầy đủ với lệnh LIST
    3. Account của bạn cần được cấp quyền LIST thư mục

    Sau đây là hình mô tả quá trình liệt kê file trong thư mục "/"
    Control connection:


    Data connection



    8. Download một file từ server
    Để tải file từ server, bạn làm tương tự như mục 7. Chỉ khác ở bước 1 và bước 3. Nếu bạn tải file binary thì phải thiết lập kiểu dữ liệu là I ở bước 1. Ở bước 3, bạn dùng lệnh RETR theo cú pháp: RETR remote-filename.

    Lưu ý:
    1. Cần dùng đường dẫn đầy đủ cho file
    2. Account của bạn cần được cấp quyền download file


    9. Upload một file lên server
    Tương tự như tải file từ server, bạn thay bước 3 bằng lệnh STOR. Lưu ý rằng account của bạn cần quyền upload.


    Hình bên dưới đây minh họa toàn bộ quá trình mình thực hiện.

    bước 1: LIST danh sách các file hiện có trên server.
    bước 2: RETR file /hello.txt từ server
    bước 3: STOR file /user.txt với nội dung: Hello from quangnh89 !!
    bước 4: LIST danh sách các file trên server để kiểm tra file mới đã có chưa
    bước 5: Tải file mới và check lại nội dung.

    Control connection:


    Data connection:



    10. Kết thúc phiên làm việc
    Để kết thúc, bạn gửi lệnh QUIT tới server


    11. Kết luận
    Qua một vài hướng dẫn đơn giản trên, mình hi vọng bạn sẽ có thể hiểu được phần nào cách thức mà FTP server làm việc. Qua đó, bạn sẽ hiểu rõ hơn giao thức FTP để có thể xây dựng một FTP client cho riêng mình.

    12. Phụ lục
    Bảng tra mã lỗi:
    150 File status okay; about to open data connection.

    200 Command okay.
    214 Help message.
    220 Service ready for new user.
    226 Closing data connection.
    227 Entering Passive Mode (h1,h2,h3,h4,p1,p2).
    230 User logged in, proceed.
    250 Requested file action okay, completed.
    257 "PATHNAME" created.

    331 User name okay, need password.

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    bạn ơi bạn có thể share mình slide hướng dẫn phần này của trường bạn được không tại mình cũng đang có bài tập này mà mấy ngày nữa là phải nộp rồi...!

  3. #3
    cái này mình tự viết chứ không có slide bạn nhé, mình code cả ftp client và server rồi nên cố gắng mô tả lại giao thức cho những bạn mới tiếp cận có thể hình dung dễ dàng hơn

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •