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.
View more random threads:
Rocket 1h là thực phẩm chức năng giúp tăng cường sinh lý nam có nguồn gốc hoàn toàn từ dược liệu tự nhiên. Rất nhiều nam giới đã tuyển lựa Rocket 1h như một phương thuốc hữu hiệu để cải thiện tình...
Nguyên nhân của cặp đôi nam nữ mua...