Ngô Chí Trung
Giới thiệu về FTP
Lời nói đầu
- FTP: File Transfer Protocol là giao thức chuẩn dùng để truyền file
- Các software FTP client hiện tại bạn đang dùng để truyền file nói chuyện được với máy chủ được là nhờ một bộ lệnh chuẩn (FTP commands)
- Để biết được tất cả các lệnh của FTP thì cách nhanh nhất (không dễ nhất) là đánh HELP + [lệnh mà bạn muốn biết
- Ngoài ra các bạn có thể dùng FTP Voygater rồi sử dụn bình thường. Cuộc nói chuyện của FTP Voyagter và server sẽ được hiện lên cho bạn xem toàn bộ. (cách tốt nhất)
- Để lập trình tạo các FTP client thì bạn có thể tạo một socket với server rồi dùng những command này để nói chuyện.
- Nếu chỉ đơn thuần chỉ để truyền file thì các bạn có thể dùng một số hàm thiết kế sẵn của Microsoft Win32 Internet API (vào msdn.mirosoft.com mà tìm)
Đối với các bạn muốn thực tập FTP command mà không biết telnet:
- Bạn trước tiên đi đăng ký free account nào đó có support FTP
- Tìm vào phần FAQ hoặc cái gì đó để biết được địa chỉ FTP của mình
- Đi kiếm một chương trình FTP client như FTP Voygater(chương trình FTP mình thích nhất)
- Tìm cách connect vào server trước (bằng FTP Voyagter-khỏi telnet)
- Rồi nhập command trực tiếp bằng cách nhấn Ctrl+E
Một vài lời trước khi bắt đầu
- Mình chưa chỉ là programmer. Mình không có cái telnet client nào ở đây hết nên chưa thử với telnet được. Nếu có gì khác khi dùng telnet, xin bạn post lên đây cho mọi người biết với nhé.
- Khi dùng FTP software để thử , thì sẽ có một số lệnh không làm việc được (ví dụ LIST) vì cần phải có software để thiết lập data connection để nhận dữ liệu. Bạn có thể dùng chức năng LIST của FTP application bằng cách click vào directory tương ứng trên màn hình. Application sẽ tự động thiết lập data connection (PORT command), LIST, rồi nhận danh sách files+dirs được trả về từ lện list.
- Để biết chi tiết tường tận về FTP protocol : Xem ftp reference
- Xin các bạn có câu hỏi gì thì cứ post lên diễn đàn tin học. Xin đừng email hỏi trực tiếp. Mình thực sự vẫn còn kém lắm (với lại thi cử liên tục) nên không dám trả lời qua email đâu. Post lên diễn đàn tin học sẽ có nhiều cao thủ giúp nữa.
Sau đây là phiên nói chuyện với một FTP Server của mình
I. Quá trình đăng nhập (login)
USER kèm định danh user của bạn và chờ trả lời
Ví dụ: USER trungngo
Sau khi nhận trả lời, gửi lệnh PASS + mật khẩu
Ví dụ: PASS khongbiet
II. Quá trình xem danh sách thư mục
Sau khi được chấp nhận, gửi lện PWD để lấy thư mục hiện tại. Để xác định mode truyền là ASCII
TYPE A
Dùng lệnh CWD để vào thư mục gốc (giống CD) (/ có nghĩa là thư mục gốc (root)
CWD /
Giả sử như bạn có thư mục /myphotos. Bạn muốn vào thư mục này thì type
CWD myphotos
Về lại thư mục gốc (root)
CDUP
khi lập trình : thiết lập data connection }
Dùng lệnh LIST để liệt kê thư mục từ Server (giống DIR của DOS)
III. Quá trình tạo, xoá thư mục
Tạo thư mục myphotos trong thư mục hiện tại
Ví dụ: MKD myphotos
Để xoá:
RMD myphotos
IV. Quá trình thoát ra (logout)
QUIT
Bảng liệt kê danh sách các lệnh FTP
Chú ý:
<SP> : space: tức là một ký tự trắng
<CRLF>: carriage return: một phím enter
- USER <SP> <username> <CRLF>
Gửi Username và chờ xác nhận
- PASS <SP> <password> <CRLF>
Gửi password và chờ xác nhận
- ACCT <SP> <account-information> <CRLF>
- CWD <SP> <pathname> <CRLF>
Nhảy vào một thư mục: giống CD của DOS
- CDUP <CRLF>
Nhảy về thư mục gốc: giống CD\
- SMNT <SP> <pathname> <CRLF>
- QUIT <CRLF>
Thoát (logout)
- REIN <CRLF>
Khởi động lại: chấm phiên làm việc của user hiện tại, flushing các cổng I/O,.... tất cả các tham số được thiết lập theo giá trị mặ định. Trừ các transfer chưa hoàn thành
May wá.
- PORT <SP> <host-port> <CRLF>
Xác định ip+port dể truyền dữ liệu(xem giải thích về <host-port> ở bên dưới
- PASV <CRLF>
Chuyển server sang chế dộ bị động (passive mode). Phần trả về sẽ có dang <h1,h2,h3,h4, p1,p2>
- TYPE <SP> <type-code> <CRLF>
Xác định mode truyền nhận là ASCII hay Binary.
- STRU <SP> <structure-code> <CRLF>
- MODE <SP> <mode-code> <CRLF>
Chuyển đổi cách thúc truyền: stream/ block/ compressed
- RETR <SP> <pathname> <CRLF>
Nhận một file từ server
- STOR <SP> <pathname> <CRLF>
Ghi một file lên server
- STOU <CRLF>
- APPE <SP> <pathname> <CRLF>
- ALLO <SP> <decimal-integer>
- [<SP> R <SP> <decimal-integer>] <CRLF>
- REST <SP> <marker> <CRLF>
- RNFR <SP> <pathname> <CRLF>
- RNTO <SP> <pathname> <CRLF>
- ABOR <CRLF>
Abort: loại bỏ các thao tác trước đó và tất cả các data transfer chưa xong
- DELE <SP> <pathname> <CRLF>
Xóa một file
- RMD <SP> <pathname> <CRLF>
Xoá một thư mục
- MKD <SP> <pathname> <CRLF>
Tạo một thư mục
- PWD <CRLF>
Lấy thư mục hiện hành
- LIST [<SP> <pathname>] <CRLF>
Lấy danh sach các files + directories trong thư mục hiện hành.
- NLST [<SP> <pathname>] <CRLF>
- SITE <SP> <string> <CRLF>
- SYST <CRLF>
Xem kiểu hệ điều hành của server (UNIX, WINNT,...)
- STAT [<SP> <pathname>] <CRLF>
- HELP [<SP> <string>] <CRLF>
Giúp đỡ
- NOOP <CRLF>
Giải nghĩa các tham số của FTP command
- <username> ::= <string>
- <password> ::= <string>
- <account-information> ::= <string>
- <string> ::= <char> | <char><string>
- <char> ::= any of the 128 ASCII characters except <CR> and
- <LF>
- <marker> ::= <pr-string>
- <pr-string> ::= <pr-char> | <pr-char><pr-string>
- <pr-char> ::= printable characters, any ASCII code 33 through 126
- <byte-size> ::= <number>
- <host-port> ::= <host-number>,<port-number>
- <host-number> ::= <number>,<number>,<number>,<number>
là địa chỉ IP : ví dụ 127.0.0.0
- <port-number> ::= <number>,<number>
là 16 bit địa chỉ cổng (port)
- <number> ::= any decimal integer 1 through 255
- <form-code> ::= N | T | C
- <type-code> ::= A [<sp> <form-code>]
| E [<sp> <form-code>]
| I
| L <sp> <byte-size>
- <structure-code> ::= F | R | P
- <mode-code> ::= S | B | C
Chế độ truyền S:Stream/ B: Block/ C: Compressed
- <pathname> ::= <string>
- <decimal-integer> ::= any decimal integer
Kết luận
FTP là 1 trong những giao thức nói chuyện làm việc cơ bản nhất của internet. Mặc dù có thể nó quá lỗi thời để các bạn quan tâm chi tiết, hiểu được nó có thể giúp các bạn hiểu được cơ chế làm việc HTTP (Hypertext Transfer Protocol) được dễ hơn. Điều này có thể giúp ích các bạn rất nhiều trong việc lập trình CGI như là Perl, ASP...
Mình cũng muốn tiếp tục viết một bài nữa về HTTP protocol như không biết có kham nổi không. Thi cử liên miên.
PS: Xin các bậc đàn anh, các cao thủ, thấy có gì sai xin cứ chỉ giáo. Cám ơn các bạn đã đọc bài viết này.