home       basis       routing       switching       advanced       security       overig       testen      

FTP anonymous

  • servers
     
    Vraag aan de docent het ip-adres van een anonymous FTP server, of gberuik EEn van de onderstaande machines:
    ftp.heanet.ie // ftp.vub.ac.be // ftp5.gwdg.de // ftp.fau.de // ftp.sunet.se // ftp.funet.fi // ftp.belnet.be // ftp.astro.ulg.ac.be (2018)
    -- spreek met mekaar af wie welke server gebruikt. De meeste servers hebben een limiet van 2 users per public ip-connection.
     
    Gebruik de UBU16-NET-xyz om FTP op te testen. Deze machine heeft zowel anonymous login als user login (zie verder 'FTP met login').

Gebruik de linux CLI (in een virtuele machine) om deze en volgende oefening tot een goede einde te brengen ... ftp clients werken niet goed vanuit de windows CLI ....
  

  • inleiding 
     
    FTP is een protocol: File Transfer Protocol. Het bestaat al sedert 1971 (RFC114) en in zijn huidige vorm sedert 1985 (RFC959). File transfert is één van de belangrijkste activiteiten op netwerken. De basisnoodzaak is in de voorbije halve eeuw nooit veranderd: "We willen file A op computer 1 ook op computer 2, en kan dat asjeblief via het netwerk"
     
    Er bestaan heel veel grafische ftp clients. Firefox, Konqueror, FileZilla, gFTP, WS-ftp, ... om er maar een paar te noemen. In het verleden werd FTP al vervangen door HTTP voor eenvoudige downloads. En hoewel FTP langzaam vervangen wordt door SFTP voor uploads, is het nog steeds een belangrijk protocol in de wereld van de web-developpers en systeembeheerders.
     
    Er bestaan eveneens ftp clients voor de shell: Midnight Commander, TNftp, lftp en wget om er een paar te noemen. Hier focussen we echter op de standaard ftp client zoals die in 4.2BSD unix zijn intrede deed. Deze ftp client komt standaard voor bij alle linux, bsd en unix versies, Mac en Windows.
     
    We gebruiken ftp versie 0.17-19build1 in onze voorbeelden
     
    Meer weten: en.wikipedia.org/wiki/Ftp
     
  • anonymous FTP
     
    Veruit het meeste ftp verkeer om bestanden te downloaden van een publieke server gebeurt als anonymous user. Een dergelijke publieke server is ftp.belnet.be. Je kan hem bereiken via http, rsync en ftp. Op ftp.belnet.be kan je echter maar met 2 of 3 tegelijk; in klas-verband werk je beter met de ftp-server van de leraar: lap2012
     
  • ftp starten en inloggen
     
    Vervang in de volgende voorbeelden ftp.belnet.be door een bereikbare machine, spreek met mekaar af ... https://ftpclientserversites.com/anonymous-ftp-sites-in-domain-be/
     
    Tik hetvolgende in:
     
    $ ftp ftp.belnet.be
    Connected to hydra.belnet.be.
    220-Welcome to the BELNET public FTP cluster server ftp.belnet.be
      
    This archive is provided through a cluster of 12 double dual cores Intel Xeon 3 GHz processors machines, each having 4 GB of RAM. The 16 TB FTP archives is taken from an iSCSI SATA SAN.
    This cluster is located in Brussels, Belgium and operated by BELNET, the belgian Education and Research Network. If you have any problem, question or mirror request, please send them to ftpmaint@belnet.be
    This archive is also available through the following means:
    RSYNC rsync.belnet.be (IPv4)
    HTTP http://ftp.belnet.be (IPv4 + IPv6)
    FTP ftp://ftp.belnet.be (IPv4 + IPv6)
    Note: opening too many parallel connections to this host is considered an abuse.
    Currently used storage capacity : 15T
     
    220 ProFTPD 1.3.2 Server (BELNET FTPD Server) [193.190.67.15]
     
    Name (ftp.belnet.be):    anonymous
     
    331 Anonymous login ok, send your complete email address as your password
     
    Password:    whateveryouwant
     
    230 Anonymous access granted, restrictions apply
    Remote system type is UNIX.
    Using binary mode to transfer files.
     
    ftp>    quit
     
    221 Goodbye.

    De server wacht nu op een reactie van ons met de ftp> prompt.
     
    We tikken geen url in zoals bij firefox of bij wget maar gewoon het commando ftp gevolgd door de hostname of zijn ip-adres.
     
    Bij inloggen geeft de server een heleboel informatie over zichzelf, en over wat er mag gebeuren door wie.
     
    Daarna vraagt hij om een usernaam. In ons geval loggen we in als anonymous.
    Welk paswoord dat we daarna intikken heeft bij ftp.belnet.be geen enkel belang. Bij sommige ftp-servers wordt een email-adres gevraagd als paswoord, maar om spam te vermijden tik je dan beter iets onbestaands in als napoleon@france.fr
     
    Om ftp te verlaten tikken we quit.
     
    Een ftp server is altijd beleefd en geeft een leesbaar antwoordt na elke <ENTER> van jouw kant. Het protocol geeft ook nog een drie cijferige code mee: de completion reply. Jouw client stuurt primtives naar de server.
     
    Meer over deze replies vind je hier: en.wikipedia.org/wiki/List_of_FTP_server_return_codes
    Meer over de primitives hier: nsftools.com/tips/RawFTP.htm
     
    Je kan nu even kijken met wireshark hoe FTP in mekaar zit ...
     

  • tikfouten
     
    Soms gebeurt het dat we een tikfout maken bij de servernaam. Bekijk even het volgende voorbeeld:
    $ ftp ftp.belnet.be
     
    ftp: ft.belnet.be: Unknown host
    ftp> open ftp.belnet.be
    Connected to hydra.belnet.be.
    220-Welcome to the BELNET public FTP cluster server ftp.belnet.be !
    ...
    ftp> close
     
    221 Goodbye.
    ftp> 

    Na de melding unknown host, blijft de ftp prompt wachten op je commando's. In plaats van quit in te tikken en van vooraf aan te herbeginnen kunnen we de verbinding openen met het open commando. Indien we een sessie afsluiten met close, blijft de ftp prompt staan.
     

  • .. nog meer
     
    Welke commando's je in ftp allemaal ter beschikking hebt zie je als je het vraagteken "?" intikt aan de ftp prompt:
    ftp> ?
     
    Commands may be abbreviated.  Commands are:
     
    !           dir         mdelete     qc          site
    $           disconnect  mdir        sendport    size
    account     exit        mget        put         status
    append      form        mkdir       pwd         struct
    ascii       get         mls         quit        system
    bell        glob        mode        quote       sunique
    binary      hash        modtime     recv        tenex
    bye         help        mput        reget       tick
    case        idle        newer       rstatus     trace
    cd          image       nmap        rhelp       type
    cdup        ipany       nlist       rename      user
    chmod       ipv4        ntrans      reset       umask
    close       ipv6        open        restart     verbose
    cr          lcd         prompt      rmdir       ?
    delete      ls          passive     runique
    debug       macdef      proxy       send

     
    Indien je meer informatie wenst over één specifiek ftp-commando, kun je hulp opvragen als volgt:

    ftp> ? close
    close         terminate ftp session
     
    ftp> ? quit
    quit          terminate ftp session and exit
     
    ftp> ? exit
    exit          terminate ftp session and exit
     
    ftp> ? bye
    bye           terminate ftp session and exit

     
    In de man pagina's staat er nog wat meer uitleg:

    $ man ftp
     
    FTP(1)                             BSD General Commands Manual                             FTP(1)
    NAME
     ftp — Internet file transfer program
    SYNOPSIS
     ftp [-pinegvd] [host [port]]
     pftp [-inegvd] [host [port]]
    DESCRIPTION
    Ftp is the user interface to the Internet standard File Transfer Protocol. The program allows a user to transfer files to and from a remote network site.
     
    Options may be specified at the command line, or to the command interpreter.
     
    ...
    close    Terminate the FTP session with the remote server, and return
         to the command interpreter.  Any defined macros are erased.
     
    bye      Terminate the FTP session with the remote server and exit
         ftp.  An end of file will also terminate the session and exit.

     

  • ls / dir / cd
     
    Het leren werken met de ftp prompt is niet moeilijk. De commando's zijn gemaakt voor unix in de jaren zeventig. De root directory is gewoon / en de directories zijn van mekaar gescheiden door diezelfde forward slash /
     
    Eén van de eerste dingen die we willen doen op een onbekende server, is rondkijken wat er allemaal op zo'n server staat. Dat doen we met het commando ls. Naar een andere directory hoppen doen we met cd. Het commando dir doet hetzelfde als ls. Met pwd brengen we de huidige server-directory op scherm.
    ftp> open ftp.belnet.be
     
    Connected to hydra.belnet.be.
    220-Welcome to the BELNET public FTP cluster server ftp.belnet.be !
    220 ProFTPD 1.3.2 Server (BELNET FTPD Server) [193.190.67.15]
    Name (ftp.belnet.be:jan): anonymous
    331 Anonymous login ok, send your complete email address as your password
    Password: x-x-x-x-x
    230 Anonymous access granted, restrictions apply
    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
    lrw-r--r--   1 ftp      ftp            28 Jun 17  2009 debian -> mirror/ftp.debian.org/debian
    -rw-r--r--   1 ftp      ftp             0 Mar  4  2010 keepalive.txt
    drwxr-xr-x  96 ftp      ftp          4096 May 21 18:30 mirror
    lrw-r--r--   1 ftp      ftp             6 Jun 17  2009 mirrors -> mirror
    drwxr-xr-x   2 ftp      ftp          4096 May 10 08:35 packages
    lrw-r--r--   1 ftp      ftp             1 Jun 17  2009 pub -> .
    226 Transfer complete
    ftp> dir
     
    200 PORT command successful
    150 Opening ASCII mode data connection for file list
    lrw-r--r--   1 ftp      ftp            28 Jun 17  2009 debian -> mirror/ftp.debian.org/debian
    -rw-r--r--   1 ftp      ftp             0 Mar  4  2010 keepalive.txt
    drwxr-xr-x  96 ftp      ftp          4096 May 21 18:30 mirror
    lrw-r--r--   1 ftp      ftp             6 Jun 17  2009 mirrors -> mirror
    drwxr-xr-x   2 ftp      ftp          4096 May 10 08:35 packages
    lrw-r--r--   1 ftp      ftp             1 Jun 17  2009 pub -> .
    226 Transfer complete
    ftp> cd mirror
     
    250 CWD command successful
    ftp> ls
     
    200 PORT command successful
    150 Opening ASCII mode data connection for file list
    drwxr-xr-x   2 ftp      ftp          4096 Jun 17  2009 BELNET-honeypot
    drwxr-xr-x   8 ftp      ftp          4096 Sep 15 10:00 FOSDEM
    -rw-r--r--   1 ftp      ftp           853 Sep 15 20:00 HEADER.html
    drwxr-xr-x   2 ftp      ftp          4096 Jun 17  2009 Mandrakelinux
    drwxr-xr-x   5 ftp      ftp          4096 Sep 15 01:00 PortablePython
    drwxr-xr-x   5 ftp      ftp          4096 May 16  2006 apt.bxlug.be
    drwxr-xr-x  11 ftp      ftp        507904 Apr  4 13:27 archlinux.org
    drwxr-xr-x   8 ftp      ftp          4096 May  1 13:43 backports.org
    drwxr-xr-x   2 ftp      ftp          4096 Mar  4  2010 backtrack
    drwxr-xr-x   4 ftp      ftp          4096 May  8 06:07 baron.haiku-os.org
    drwxr-xr-x   3 ftp      ftp          4096 Jun 17  2009 blastwave.org
    drwxr-xr-x   3 ftp      ftp          4096 Jun 17  2009 cdimage.ubuntu.com
    ...
    drwxr-xr-x  23 ftp      ftp          4096 Sep 14 04:05 www.tldp.org
    drwxr-xr-x   4 ftp      ftp          4096 Jun 23  2009 xorp.org
    drwxr-xr-x   4 ftp      ftp          4096 Apr  7 14:33 yoper.com
    226 Transfer complete
    ftp> cd ..
     
    250 CWD command successful
    ftp> pwd
     
    257 "/" is the current directory
    ftp> quit
     
    221 Goodbye

     

  • passive or not passive
     
    Soms lukt de verbinding met een ftp-server wel, maar zodra we het commando ls intikken gaat er wat fout. De machine van waarop we de volgende ftp sessie draaien staat achter NAT of achter een firewall.

    jan@gogo1:~$ ftp ftp.belnet.be
     
    Connected to hydra.belnet.be.
    220-Welcome to the BELNET public FTP cluster server ftp.belnet.be !
    220 ProFTPD 1.3.2 Server (BELNET FTPD Server) [193.190.67.15]
    Name (ftp.belnet.be:jan): anonymous
    331 Anonymous login ok, send your complete email address as your password
    Password: <ENTER>
    230 Anonymous access granted, restrictions apply
    Remote system type is UNIX.
    Using binary mode to transfer files.
    ftp> ls
    200 PORT command successful

    ... en daarna niets meer. We wachten ongeveer een minuut en drukken dan ongeduldig <CTRL><C>.
    ^C
    421 Service not available, remote server has closed connection
    receive aborted
    waiting for remote to finish abort
     

    Het ftp protocol ligt zelf aan de basis van dit probleem: bij het downloaden (en ls downloadt de inhoud van een directory) neemt de server het initiatief om een sessie open te zetten naar de client, en NAT-routers vinden geen reverse port en houden deze pakketten standaard tegen.
     
    Met het commando passive, draaien we de synchronisatie om: de server biedt een socket aan om op te verbinden, en de client initialiseert de verbinding:

    ftp> open ftp.belnet.be
    Connected to hydra.belnet.be.
    220-Welcome to the BELNET public FTP cluster server ftp.belnet.be !
    220 ProFTPD 1.3.2 Server (BELNET FTPD Server) [193.190.67.15]
    Name (ftp.belnet.be:jan): anonymous
    331 Anonymous login ok, send your complete email address as your password
    Password: <enter>
    230 Anonymous access granted, restrictions apply
    Remote system type is UNIX.
    Using binary mode to transfer files.
     
    ftp> passive
    Passive mode on.
     
    ftp> ls
    227 Entering Passive Mode (193,190,67,15,201,218).
    150 Opening ASCII mode data connection for file list
    lrw-r--r--   1 ftp      ftp            28 Jun 17  2009 debian -> mirror/ftp.debian.org/debian
    -rw-r--r--   1 ftp      ftp             0 Mar  4  2010 keepalive.txt
    drwxr-xr-x  96 ftp      ftp          4096 May 21 18:30 mirror
    lrw-r--r--   1 ftp      ftp             6 Jun 17  2009 mirrors -> mirror
    drwxr-xr-x   2 ftp      ftp          4096 May 10 08:35 packages
    lrw-r--r--   1 ftp      ftp             1 Jun 17  2009 pub -> .
    226 Transfer complete
    ftp> 

     

  • downloaden met get en mget 
     
    anonymous ftp gebruiken we om iets te downloaden. Dat doen we met het commando get
    ftp> pwd
     
    257 "/mirror/ftp.debian.org/debian/pool/contrib/g/googleearth-package" is the current directory
     
    ftp> ls
     
    200 PORT command successful
    150 Opening ASCII mode data connection for file list
    -rw-r--r--   1 ftp      ftp           835 Apr 18  2008 googleearth-package_0.5.4.dsc
    -rw-r--r--   1 ftp      ftp         19720 Apr 18  2008 googleearth-package_0.5.4.tar.gz
    -rw-r--r--   1 ftp      ftp          9428 Apr 18  2008 googleearth-package_0.5.4_all.deb
    -rw-r--r--   1 ftp      ftp           943 Dec  8  2009 googleearth-package_0.5.7.dsc
    -rw-r--r--   1 ftp      ftp         21418 Dec  8  2009 googleearth-package_0.5.7.tar.gz
    -rw-r--r--   1 ftp      ftp         10696 Dec  8  2009 googleearth-package_0.5.7_all.deb
    226 Transfer complete
     
    ftp> get googleearth-package_0.5.7_all.deb
     
    local: googleearth-package_0.5.7_all.deb remote: googleearth-package_0.5.7_all.deb
    200 PORT command successful
    150 Opening BINARY mode data connection for googleearth-package_0.5.7_all.deb (10696 bytes)
    226 Transfer complete
    10696 bytes received in 0.24 secs (43.5 kB/s)

    Dat werkt goed, maar get houdt niet van wildcards. Indien we meerdere files willen downloaden met gebruik van wildcards, gebruiken we mget.

    ftp> get *
     
    local: 01_123.jpg remote: *
    200 PORT command successful
    550 *: No such file or directory
     
    ftp> mget *
     
    mget googleearth-package_0.5.4.dsc? y
    200 PORT command successful
    150 Opening BINARY mode data connection for googleearth-package_0.5.4.dsc (835 bytes)
    226 Transfer complete
    835 bytes received in 0.02 secs (36.3 kB/s)
    mget googleearth-package_0.5.4.tar.gz? y
    200 PORT command successful
    150 Opening BINARY mode data connection for googleearth-package_0.5.4.tar.gz (19720 bytes)
    226 Transfer complete
    19720 bytes received in 0.38 secs (50.6 kB/s)
    ...

    Het vervelende van mget is dat het telkens om bevestiging vraagt. Na het commando prompt off vraagt mget niets meer:

    ftp> prompt off
     
    Interactive mode off.
    ftp> mget *
     
    local: googleearth-package_0.5.4.dsc remote: googleearth-package_0.5.4.dsc
    200 PORT command successful
    150 Opening BINARY mode data connection for googleearth-package_0.5.4.dsc (835 bytes)
    226 Transfer complete
    835 bytes received in 0.01 secs (116.7 kB/s)
    local: googleearth-package_0.5.4.tar.gz remote: googleearth-package_0.5.4.tar.gz
    200 PORT command successful
    150 Opening BINARY mode data connection for googleearth-package_0.5.4.tar.gz (19720 bytes)
    226 Transfer complete
    19720 bytes received in 0.10 secs (185.4 kB/s)
    ...
    ftp> 

     

  • ascii en binary
     
    Als we wat downloaden met get of mget gaat ftp er meestal van uit dat het om binary files gaat. Indien we echter tekstfiles willen downloaden, komt het EOF karakter in binary mode niet altijd goed mee. Om hieraan te verhelpen kunnen we de download mode switchen tussen binary en ascii. Met het commando type brengen we de download mode op scherm.
     
    Kijk even naar het volgende voorbeeld:
    ...
    230 Anonymous access granted, restrictions apply
    Remote system type is UNIX.
    Using binary mode to transfer files.
     
    ftp> ascii
    200 Type set to A
     
    ftp> type
    Using ascii mode to transfer files.
     
    ftp> binary
    200 Type set to I
     
    ftp> type
    Using binary mode to transfer files.
     
    ftp> 

     

  • wget als alternatief
     
    Met de utility wget lukt een ftp download dikwijls beter dan met ftp zelf. Bij een onverwacht verbreken van de verbinding, herstelt wget deze eigenhandig, en downloadt hij verder vanaf het punt waar hij reeds gekomen was. wget is een één-regel-commando dat zich via echo makkelijk laat 'pipen' naar at. Op die manier kunnen we een download schedulen.
     
    $ wget ftp://ftp.debian.org/debian/pool/contrib/g/googleearth-package/*
     
    --2010-09-16 00:13:06--  ftp://ftp.debian.org/debian/pool/contrib/g/googleearth-package/* => `.listing'
    Resolving ftp.debian.org... 130.89.149.226, 2001:610:1908:a000::149:226
    Connecting to ftp.debian.org|130.89.149.226|:21... connected.
    Logging in as anonymous ... Logged in!
    ==> SYST ... done.    ==> PWD ... done.
    ==> TYPE I ... done.  ==> CWD (1) /debian/pool/contrib/g/googleearth-package ... done.
    ==> PASV ... done.    ==> LIST ... done.
    [ <=>                                                       ] 655         --.-K/s   in 0s      
    2010-09-16 00:13:06 (90.7 MB/s) - `.listing' saved [655]
    Removed `.listing'.
    --2010-09-16 00:13:06--  ftp://ftp.debian.org/debian/pool/contrib/g/googleearth-package/googleearth-package_0.5.4.dsc
           => `googleearth-package_0.5.4.dsc'
    ==> CWD not required.
    ==> PASV ... done.    ==> RETR googleearth-package_0.5.4.dsc ... done.
    Length: 835
    100%[==========================================================>] 835         --.-K/s   in 0.008s  
    ...
    $ echo "wget ftp://ftp.belnet.be/mirror/linuxmint/linuxmint-debian-201009-gnome-dvd-i386.iso" | at now +100 minutes
     
    warning: commands will be executed using /bin/sh
    job 4 at Thu Sep 16 01:57:00 2010