FTP
FTP to protokół przesyłania plików między klientem a serwerem w sieciach opartych na IP. Odzwierciedla to sama nazwa która jest akronimem od angielskiego "File Transfer Protocol". Sam protokół oparty jest o TCP/IP i sam w sobie nie jest szczególnie bezpieczny. Wszystko (m.in. hasła) przesyłane jest w postaci zwykłego tekstu, i dlatego współcześnie korzysta się raczej z FTPS lub SFTP. FTPS szyfruje połączenie przy pomocy protokołu SSL, natomiast SFTP wykorzystuje w tym celu SSH.
FTP posiada bardzo prosty system komunikacji między serwerem a klientem. Przebiega ona przy użyciu 4 bajtowych kodów, które składają się z wielkich liter wziętych ze standardu ASCII. Na przykład aby stworzyć nowy folder na serwerze klient musi jedynie wysłać ciąg znaków MKD a następnie nazwę nowego katalogu z terminującym zerem na końcu. Dzięki temu że wszystkie kody mieszczą się w 4 znakach można je kodować za pomocą jednej liczby 32-bitowej, tak więc np. polecenie RETR, pytające serwer o przesłanie kopii pliku o danej nazwie da się zapisać jako 0x52455452, co znacząco ułatwia implementację zarówno klienta jak i serwera, gdyż porównywanie liczb jest dużo prostsze i bezpieczniejsze niż porównywanie ciągów znaków.
Z FTP można korzystać przy pomocy najróżniejszych klientów.
Najbardziej minimalistyczne opcje jakie udało mi się znaleźć to GNU FTP i LFTP. Z obydwu korzysta się przy pomocy interfesju konsolowego, który pozwala na podstawowe operacje na systemie plików, a w przypadku LFTP również na zarządzenie zakładkami. W podobnej kategorii znajduje się również STFTP, który korzysta z tekstowego GUI opartego na bibliotece ncurses. Wszystkie wymienione powyżej działają przynajmniej na systemach UNIX-owych, ale istnieją również porty na Windowsa.
[mn ~] $ ftp testenergetyk.prv.pl Connected to testenergetyk.prv.pl. 220 PRV ftpd Name (testenergetyk.prv.pl:mn): testenergetyk@prv.pl 331 Password required for testenergetyk@prv.pl Password: 230 User testenergetyk@prv.pl logged in Remote system type is UNIX. Using binary mode to transfer files. ftp> ls 200 PORT command successful 150 Opening ASCII mode data connection for file list drwxr-xr-x 3 1497604 1203977 512 Nov 4 10:52 . drwxr-xr-x 3 1497604 1203977 512 Nov 4 10:52 .. -rw-r--r-- 1 1497604 1203977 51086 Nov 3 17:53 Przechwytywanie.JPG -rw-r--r-- 1 1497604 1203977 12610 Nov 3 17:35 index.34htmln -rw-r--r-- 1 1497604 1203977 959 Nov 4 11:28 index.html -rw-r--r-- 1 1497604 1203977 1535 Nov 3 18:13 index2.html -rw-r--r-- 1 0 1203977 406 Nov 3 17:43 prv_site_config_values.js drwxr-xr-x 2 0 1203977 512 Nov 3 17:35 web 226 Transfer complete ftp>
Bardziej popularnym rozwiązaniem na systemie Microsofu jest natomiast FileZilla. Tak samo jak programy konsolowe jest dystrybuowana na licencji GNU GPL, a dzięki zastosowaniu biblioteki wxWidgets, działa na praktycznie każdym systemie wspierającym aplikacje okienkowe (kosztem strony wizualnej, wxWidgets potrafi wyświetlać tylko generyczne UI). Tak naprawdę nie oferuje ona żadnych ekscytujących możliwości, być może najbardziej egzotyczną z nich jest możliwość importowania i eksportowania ustawień sesji do pliku XML.
Oprócz dedykowanych programów, w obsługę FTP wyposażonych jest wiele manadżerów plików. Np. UNIX-owy Nautilus i Dolphin posiadają taką funkcję "prosto z pudełka". Na Androidzie systuacja ma się podobnie, do tego stopnia że większość popularnych standalone file managerów dostępnych w Google Play integruje klienta FTP przynajmniej w jakimś stopniu.