Západočeská univerzita v Plzni Fakulta aplikovaných věd Katedra informatiky a výpočetní techniky
UPS
FTP Klient
Plzeň, 2007
František Bořánek A05463
[email protected]
Obsah 1 Úvod........................................................................................................................................................... ...2 2 Zadaní................................................................................................................................................. ..........2 2.1 Standardní zadání.............................................................................................................. ...................2 2.2 Součásti programu....................................................................................................... .........................2 2.3 Co musí obsahovat dokumentace....................................................................................................... ...2 3 Kontext a architektura systému................................................................................................................. .....2 3.1 Kontext...................................................................................................................................... ............2 3.1.1 FTP příkazy..................................................................................................................... ....................3 3.1.2 Odpovědi............................................................................................................................ .................3 3.1.3 Navázání chráněné relace............................................................................................. .....................4 3.1.4 Použití pasivního módu............................................................................................................ ...........4 3.2 Architektura systému....................................................................................................... ......................5 3.3 Datový typ FTPReplay.................................................................................................................... .......6 3.4 Zvolená technologie, programovací jazyk............................................................................ ..................6 4 Použité zkratky............................................................................................................................... ...............6 5 Uživatelská dokumentace.................................................................................................................... ..........6 5.1 Spuštění................................................................................................................................... .............6 5.2 Ovládání........................................................................................................................................ ........6 5.3 Logování...................................................................................................................... .........................7 5.4 Přeložení a sestavení........................................................................................................... .................7 6 Použité zdroje ............................................................................................................................................ ...7 6.1 RFC dokumenty..................................................................................................................................... 7 6.2 Ostatní................................................................................................................................................... 7
1
1
Úvod FTP Klient je vytvořen v rámci semestrální práce pro předmět Úvod do počítačových sítí. Podporuje jen minimální množinu příkazů. Je napsán v jazyce Java v prostředí Netbeans.
2
Zadaní 2.1
Standardní zadání 2. FTP klient Prostudujte odpovídající RFC dokumenty a navrhněte minimální množinu podporovaných operací protokolu FTP. Realizujte funkce klienta. Součástí práce bude i otestování funkčnosti programu s existujícím serverem. Soustřeďte se na problematiku bezpečného připojení.
2.2
Součásti programu Součástí programu bude trasování komunikace, dovolující zachytit proces komunikace na úrovni aplikačního protokolu a zápis trasování do souboru. Každý program bude doplněn o zpracování statistických údajů (přenesený počet bytů, přenesený počet zpráv, počet navázaných spojení, počet přenosů zrušených pro chybu, doba běhu apod.). Zdrojové kódy organizujte tak, aby od sebe byly odděleny části volání komunikačních funkcí, které jste vytvořili na základě zadání, od částí určených k demonstraci funkčnosti vašeho řešení (grafické rozhraní).
2.3
Co musí obsahovat dokumentace Úvodní stránku se jménem zadání, Vaším příjmením a jménem, univerzitním číslem a emailovou adresou. Text zadání spolu s číslem zadání. Programátorskou dokumentaci - popis řešení, použitých datových struktur, formáty vyměňovaných zpráv, programů použitých při vývoji a programů potřebných k provozu aplikace. V případě realizace rozšířených zadání také odkazy na použité RFC dokumenty Uživatelskou dokumentaci - postup přeložení a sestavení, spuštění, parametry programu, ovládání. Odkazy na použité zdroje.
3
Kontext a architektura systému 3.1
Kontext FTP (File Transfer Protocol) je protokol aplikační vrstvy sloužící pro přenos souborů. Je definován v RFC959. Ftp používá dvě spojení, kontrolní a datové. Kontrolní je navázáno po celou dobu relace. Datové se navazuje pouze pro přenos dat (souborů a výpisu adresáře). Ftp používá Telnet protokol pro kontrolní spojení. Jsou dvě možnosti realizace. Použít existujícího Telnet klienta nebo implementovat vlastního klienta do FTP. Použil jsem druhou možnost a program si obhospodařuje kontrolní spojení sám. Datové spojení se inicializuje příkazy PORT nebo PASV. Aktivní spojení se realizuje odesláním příkazu PORT h3, h2, h1, h0, p1, p0, kde h je IP adresa klienta a p je port na kterém bude naslouchat. Server pak naváže datovou relaci a odešle data na IP adresu a port. 2
Pasivní spojení se realizuje odesláním příkazu PASV a server vrátí odpověď se zamítnutím pasivního přenosu nebo se specifikací IP adresy a portu. Klient sám pak naváže spojení. Tento klient podporuje pouze pasivní režim. Další příkazy: MODE, který nastavuje mód přenosu (přednastavený je stream ) TYPE, který nastavuje typ přenosu- (přednastavený je ASCII Non-print) STRU, (přednastavený je File) Tyto přednastavený hodnoty musí host akceptovat. Proto nebylo nutné všechny příkazy implementovat. Problémem je, že komunikace probíhá nešifrovaně a ověřování uživatele lze odposlechnout. V dnešní době je dostupný tzv. FTPS, který je zpětně kompatibilní s běžným FTP, ale v zasadě existují tři způsoby jak tento problém řešit.
3.1.1
●
Secure FTP - FTP přes SSH označuje tunelování FTP skrz spojení navázaného pomocí SSH protokolu. Protože protokol FTP používá dvě spojení, je velmi těžké zajistit, aby bylo tunelováno nejen řídící, ale i datové spojení.
●
SFTP - SSH File Transfer Protocol umožňuje přenos souborů mezi dvěma počítači a manipulaci s nimi. Pro vlastní přenos dat obvykle využívá protokol SSH-2, který zajišťuje zabezpečený přenos dat, avšak je navržen tak, aby ho bylo možné používat i nad jiným protokolem.
●
FTPS nebo také FTP SSL/TLS rozšíření stávajícího FTP definované v RFC 2228 a je v několika variantach: ○
Implicitní FTPS - starší, avšak stále hojně používaná metoda, kdy se klient připojuje na jiný port (typicky 990) a aktivace SSL je provedena před zasláním jakéhokoliv příkazu (tj. podobně jako u HTTPS)
○
Explicitní FTPS - preferovaný způsob, který dle RFC 4217 definuje příkaz, který určuje, že bude použito TLS zabezpečení přenosu. Klient se připojuje na port 21, zahajuje nešifrovanou komunikaci a žádá o aktivaci TLS před tím, než budou posílána citlivá data. Tento způsob je implementovaný v tomto FTP Klientovi.
FTP příkazy Píší se znaky ASCII a server není „case sensitive“. Důležité je zachovat syntaxi. Následují implementované FTP příkazy: USER <SP> <username>
PASS <SP> <password> CWD <SP> <pathname> CDUP QUIT PASV TYPE <SP> RETR <SP> <pathname> STOR <SP> <pathname> DELE <SP> <pathname> RMD <SP> <pathname> MKD <SP> <pathname> PWD LIST [<SP> <pathname>]
3.1.2
Odpovědi Odpovědi jsou strukturované do tvaru tří-místného kódu, mezery a zprávy. Pokud odpověď má více řádků, místo mezery se použije mínus a poslední řádek začíná opět stejným kódem následuje mezera a text. CODE <SP> Message 3
Př: 123-First line Second line 234 A line beginning with numbers 123 The last line
3.1.3
Navázání chráněné relace Client Server control data data control ===========================================================
socket() connect()
socket() bind() ------------------------------------> accept() <------------------------------------ 220
AUTH TLS
------------------------------------> <------------------------------------ 234
TLSneg()
<------------------------------------> TLSneg()
PBSZ 0
------------------------------------> <------------------------------------ 200
PROT P
------------------------------------> <------------------------------------ 200
USER fred
------------------------------------> <------------------------------------ 232
CCC
------------------------------------> <------------------------------------ 200
TLSshutdown()
3.1.4
<---------------------------> TLSshutdown()
Použití pasivního módu Client Server control data data control =========================================================== PASV
--------------> <-------------- 227 Entering Passive Mode (A1,A2,A3,A4,p1,p2)
LIST
--------------> <-------------- 150 Opening ASCII mode data connection for file list
<-------přenos přes datový slocket-------> <--------------
226 Transfer complete
4
3.2
Architektura systému Hlavní přehled balíčků:
Balíčky ftp a ftps:
Detailnější popis tříd je v JavaDoc, který je přiložený ke zdrojovým kódům.
5
3.3
Datový typ FTPReplay Z potřeby rozkládat návratovou zprávu na kód a text, popřípadě více řádkovou zprávu ještě na data, vznikla třída FTPRepley. Třída slouží jako kontejner pro tyto data a obsahuje metody pro rozklad surové zprávy a validování zpráv.
3.4
Zvolená technologie, programovací jazyk Pro snadnější přenositelnost mezi operačními systémy je celá aplikace napsaná v jazyce Java. Pro systém Linux je k aplikaci přiložený spouštěcí skript.
4
Použité zkratky <SP>
5
konec řádku (End-Of-Line (Carriage Return, Line Feed)) mezera (Space) návrat vozíku (Carriage Return) posun o řádku (Line Feed) nový řádek (New Line)
Uživatelská dokumentace 5.1
Spuštění UNIX: ./ftp [ [ <passwd>]] Windows: java -jar "SimpleFTPClient.jar" [ [ <passwd>]]
5.2
Ovládání Po spuštění aplikace se vypíše aktuální pracovní adresář, do kterého se budou ukládat vzdálené soubory. Seznam všech podporovaných příkazů se vypíše příkazem „help“. Příkazy: ●
help – vypíše seznam všech podporovaných příkazů
●
open - naváže spojení k , pokud už jste přihlášeni, odhlásí vás z aktuální relace a založí novou
●
user - přihlášení jako uživatel
●
pwd – vypíše pracovní adresář
●
dir [] - vypíše seznam souborů v adresáři, parametr není povinný, potom vypíše aktuální pracovní adresář
●
cd - změna pracovního adresáře
●
cdup – změna pracovního adresáře o úroveň níž
●
rmdir - smaže neprázdný adresář
●
mkdir - vytvoří adresář
●
get - stažení souboru z ftp serveru
●
send - ulození souboru na ftp server
●
delete - smazání souboru na ftp serveru
●
quit – odhlášení z relace a ukončení programu
●
report – vypíše statistiku spojení 6
5.3
Logování Do adresáře, ze kterého je volán program, se vytvoří soubor s názvem log.txt. Do souboru se ukládají odeslané a přijaté zprávy, chyby, zahození správ a pod. S novým spuštěním programu se soubor smaže a zapisuje se od začátku.
5.4
Přeložení a sestavení V adresáři java_src je celý Netbeans projekt. Překlad zdrojových souborů můžete realizovat tímto vývojovým IDE nebo použít ANT a buildfile „build.xml“.
6
Použité zdroje 6.1
RFC dokumenty RFC959 FTP (File Transfer Protocol) RFC 2228 FTP Security Extensions RFC 4217 Securing FTP with TLS
6.2
Ostatní http://cs.wikipedia.org/wiki/FTPS http://www.java2s.com/Code/Java/NetworkProtocol/ImplementsaJavaFTPclientfromsocketandRFC.htm http://java.sun.com/javase/6/docs/api/index.html Package javax.net.ssl
7