作成日:2002年01月04日、更新日:2002年10月12日 作成:鷹の巣

FTPクライアント機から、コマンド操作で匿名FTPサーバーよりファイルをダウンロードする方法を示します。


匿名FTPサーバー動作の確認(コマンド操作編)

この資料は、匿名FTPサーバーの動作をより深く理解して頂く為に作成致しました。 又、FTPクライアント側にルータが存在する場合、コマンド操作により、ルータを越えてFTPサーバーの検証を実施出来ます。

「鷹の巣」のFTPサーバー(Tiny FTP Daemon/95)は、 anonymous(匿名) FTPサーバーで、メールアドレスを要求する設定にしております。 この頁は、anonymous(匿名) FTPサーバーにWindows 2000のコマンドプロンプト画面(DOS窓の様な画面)より、コマンド入力を行って、 ファイルをダウンロードする方法を示します。 実施前に是非、過去からの贈り物「FTP~前編」過去からの贈り物「FTP~後編」をご参照願います。 注)
  1. この操作は、Windows 2000/XPとFreeBSD4.4 ReleaseのLinu互換モードにて、確認しております。
  2. テストファイル2と3(test2.bmp と test3.bmp)は、配布が禁止されていますので、動作試験終了後、必ず削除して下さい。
  1. anonymous(匿名)FTPサーバーにコマンド入力を行って、ファイルをダウンロードする方法を下図に示します。 Windows 2000のコマンドプロンプト画面(DOS窓の様な画面)より、コマンド操作したものです。 (「鷹の巣」のFTPサーバーは、 anonymous(匿名) FTPサーバーで、メールアドレスを要求する設定にしております。) 画面では、水色がコマンド入力、緑色が得られた結果の注目すべき表示、赤色が注目すべき説明としております。

    「鷹の巣」のFTPサーバー(匿名FTPサーバー)から、ファイルをダウンロードする例。

    Microsoft Windows 2000 [Version 5.00.2195]
    (C) Copyright 1985-2000 Microsoft Corp.
    
    C:\>ftp sakaguch.com<-----------------------------------ftp コマンドを使用して、sakaguch.com へサービスポート21番より接続。
                                                            「-a」オプションは、使用しない。ftp.sakaguch.comでも可。
    Connected to sakaguch.com.
    220-************************************************
    220- Welcome to Tiny FTP Daemon /95
    220- Version 0.5
    220 ************************************************
    User (sakaguch.com:(none)):anonymous<-------------------anonymous(匿名)FTPサーバーである為、「anonymous」と入力。
    331 Give me your mail address as Password
    Password:user@example.com<------------------------------「guest」又は、メールアドレスを入力。入力した内容は表示されません。
    230--------------------------------------------------------------
    230- Welcome!
    230--------------------------------------------------------------
    230 Logged in.
    ftp>? <------------------------------------------------使用出来るコマンドを取得。
    Commands may be abbreviated. Commands are:
    !        delete      literal    prompt      send
    ?        debug       ls         put         status
    append   dir         mdelete    pwd         trace
    ascii    disconnect  mdir       quit        type
    bell     get         mget       quote       user
    binary   glob        mkdir      recv        verbose
    bye      hash        mls        remotehelp
    cd       help        mput       rename
    close    lcd         open       rmdir
    
    ftp>remotehelp<----------------------------------------FTPサーバーから、使用出来るコマンドを取得。。
    						Windowsユーザーのみ使用可。「*」印は使用出来ない。
    214-**** TinyFTPDaemon/95 Version 0.52d command lists ****
    * marked commands are not implimented.
    USER   PORT   STOR    MSAM*  RNTO  NLST  MKD   CDU
    PASS   PASV   APPE    MRSQ*  ABOR  SITE  XMKD  XCUP
    ACCT*  TYPE   MLFL*   MRCP*  DELE  SYST  RMD   STOU*
    SMNT*  STRU*  MAIL*   ALLO*  CWD   STAT  XRMD  SIZE
    REIN   MODE   MSND*   REST   XCWD  HELP  PWD   MDTM*
    QUIT   RETR   MSOM*   RNFR   LIST  NOOP  XPWD
    
    No SITE Command allowed.
    214 Help.
    ftp>pasv<----------------------------------------------pasvコマンドを直接入力してみる。注)3
    Invalid command.<--------------------------------------無効のコマンドとされPASVモードに切り替わらない。
    ftp>quote pasv<----------------------------------------quote コマンドを使用して、quote pasvと入力。注)4
    227 Entering passive mode (vvv,xxx,yyy,zzz,12,103)<----PASVモードになると、サーバー機のIPアドレス(vvv.xxx.yyy.zzz)と
    						サーバー側接続元ポート番号3175(=12×256+103)が表示される。
    ftp>port vvv,xxx,yyy,zzz,156,65<-----------------------portコマンドを直接入力してみる。注)3
    Invalid command.<--------------------------------------無効のコマンドとされPORTモードに切り替わらない。
    ftp>quote port vvv,xxx,yyy,zzz,156,65<-----------------quote コマンドを使用して、quote port vvv,xxx,yyy,zzz,156,65と入力。注)4
                                                    ここに vvv,xxx,yyy,zzzは、クライアント機のIPアドレスであり、156,65は、
                                                    クライアント側接続先ポート番号40001(=156×256+65)を指定している200 Data port connected.<------------------------------PORTモードになると、FTPデータポートの接続が成立する。
    ftp>ls -al<-------------------------------------------「ls -al」と入力して、ファイル一覧を取得。「dir」でも可。注)5
    200 Data port connected.
    150 Sending file list.
    d--------- 1 noone nogroup 0 Feb 10 12:39 .
    d--------- 1 noone nogroup 0 Feb 10 12:39 ..
    -r-xr-xr-x 1 noone nogroup 899 Feb 10 17:38 test1.txt
    -r-xr-xr-x 1 noone nogroup 1272 Feb 10 17:38 test2.bmp
    -r-xr-xr-x 1 noone nogroup 9522 Feb 10 17:38 test3.bmp
    226 Transfer finished successfully.
    ftp: 290 bytes received in 0.02Seconds 14.50Kbytes/sec.
    ftp>ascii<---------------------------------------------テキストファイルをダウンロードする為、asciiモードにする。
    200 Ascii mode ready
    ftp>get test1.txt<-------------------------------------テキストファイル名「test1.txt」を1個ダウンロードする。
    200 Ascii mode ready
    mget test1.txt?y<--------------------------------------確認入力に「y」と入力する。
    200 Data port connected.
    150 ASCII file D:/test1.txt ready to send
    226 Transfer finished successfully.
    ftp: 899 bytes received in 0.08Seconds 11.24Kbytes/sec.
    ftp>binary<--------------------------------------------バイナリファイルをダウンロードする為、binaryモードにする。
    200 Binary mode ready
    ftp>mget *.bmp<----------------------------------------複数のバイナリファイル名「*.bmp」をダウンロードする。
    200 Binary mode ready
    mget test2.bmp?y<--------------------------------------確認入力に「y」と入力する。
    200 Data port connected.
    150 BINARY file D:/test2.bmp ready to send (1272bytes)
    226 Transfer finished successfully.
    ftp: 1272 bytes received in 0.11Seconds 11.56Kbytes/sec.
    mget test3.bmp?y<--------------------------------------確認入力に「y」と入力する。
    200 Data port connected.
    150 BINARY file D:/test3.bmp ready to send (9522bytes)
    226 Transfer finished successfully.
    ftp: 9522 bytes received in 0.19Seconds 50.12Kbytes/sec.
    ftp>quit<----------------------------------------------ftp コマンドを終了し、FTP接続を切断する。
    221 ************* Thank you! ******************
    
    C:\>exit<----------------------------------------------Windows 2000のコマンドプロンプト画面(DOS窓の様な画面)を終了する。
    注)
    1. Windowsユーザーの「ファイル一覧の取得コマンド」は、必ず「-al」オプションをつけて下さい。
    2. ダウンロードしたファイルを生成しますので、必ず、ファイルが作成出来る権限を持ったユーザーで操作して下さい。
    3. PASVやPORTは、FTPプロトコル(通信手順)レベルのコマンドであり、FTPクライアント端末でのコマンドではありません。FTPクライアント端末のコマンド(dirlsputget等)は、これらのFTPプロトコルレベルのコマンドを組み合わせて実現しており、FTPクライアント端末から、これらのコマンドを入力する際に自動的に発行され、単独では使用できません。
    4. 無理にPASVやPORTコマンドを送りたい場合、このコマンドの前にquoteコマンドをつけると、「裸の」コマンドを投げることはできますが、どのような応答になるかは、わかりません。
    5. Windows 2000のコマンド画面でのlsコマンドは、quote pasvコマンドで、PASVモードにしていても強制的にPORTモードになります。PC-UNIXでは、passiveコマンドがあり、トグルスイッチの様になっていて、実行する度にPORTモードとPASVモードに切り替えることが出来ます。
    6. コマンド入力画面内の vvv.xxx.yyy.zzz と vvv,xxx,yyy,zzz で示している箇所は、IPアドレスです。LAN内で試験を行う場合は、プライベートアドレスであり、インターネットを介して試験を行う場合は、グローバルアドレスとなります。
    7. FTPクライアント側にルータがある場合は、ルータのWAN側のグローバルアドレスとポート番号を指定すると、ルータを越えてFTP操作が可能になりますが、プライベートアドレスを指定するとルータの機種により、FTP操作が出来ない場合があります。

    注3~4は、Tiny FTP Daemon/95の掲示板で、2002年 4月25日20時55分に開発者であるBUBUさんから、教えて頂きました。 そのお陰で、このWebページを公開することが、できました。BUBUさんに深く感謝致します。ありがとうございました。

  2. Vector(http://www.vector.co.jp/)さんのFTPサーバーにコマンド入力を行って、ファイルをダウンロードする例を下図に示します。 URLがhttp://www.vector.co.jp/ である場合、FTPサーバーは、一般に ftp.vector.co.jp の様なフルドメイン表記のホスト名になっています。

    Vectorさん(匿名FTPサーバー)から、ファイルをダウンロードする例。

    C:\>ftp ftp.vector.co.jp
    Connected to ftp.vector.co.jp.
    220 ftp.vector.co.jp NcFTPd Server (licensed copy) ready.
    User (ftp.vector.co.jp:(none)):anonymous
    331 Guest login ok, send your complete e-mail address as password.
    Password:user@example.com
    230-You are user #351 of 2048 simultaneous users allowed.
    230-
    230 Logged in anonymously.
    ftp>pasv
    Invalid command.
    ftp>quote pasv
    227 Entering Passive Mode (210,155,146,28,239,11)
    ftp>port
    Invalid command.
    ftp>quote port 218,45,169,116,4,25
    200 PORT command successful.
    ftp>ls -al
    200 PORT command successful.
    150 Opening ASCII mode data connection for /bin/ls.
    drwxr-xr-x 2 ftpuser ftpusers 512 Jun 12 1996bin
    drwxr-xr-x 2 ftpuser ftpusers 512 Jan 28 1997 dev
    drwxr-xr-x 2 ftpuser ftpusers 512 Apr 8 1998 etc
    drwxr-xr-x 4 ftpuser ftpusers 512 Jan 27 1997 mirror
    drwxrwxr-x 17 ftpuser ftpusers 1024 Apr 25 04:04 pack
    drwxr-xr-x 3 ftpuser ftpusers 512 Jun 12 1996 usr
    226 Listing completed.
    ftp: 370 bytes received in 0.02Seconds 18.50Kbytes/sec.
    ftp>cd bin
    250 "/bin" is new cwd.
    ftp>ls -al
    200 PORT command successful.
    150 Opening ASCII mode data connection for /bin/ls.
    ---x--x--x 1 ftpuser ftpusers 15148 Jun 12 1996 compress
    ---x--x--x 1 ftpuser ftpusers 60620 Jun 12 1996 gzip
    ---x--x--x 1 ftpuser ftpusers 17500 Jun 12 1996 ls
    ---x--x--x 1 ftpuser ftpusers 141772 Jun 12 1996 tar
    226 Listing completed.
    ftp: 249 bytes received in 0.02Seconds 12.45Kbytes/sec.
    ftp>quit
    221 Goodbye.
    
    C:\>
  3. FTPサーバーのコマンド操作(一般) Tiny FTP DaemonのHELPファイルより、コマンド操作に関する部分を抜粋しました。下図をご覧願います。 (Tiny FTP Daemon/95の掲示板で、2002年 4月25日開発者であるBUBUさん転載許可を頂きました。ありがとうございました。) 画面では、水色がコマンド入力、緑色が得られた結果の注目すべき表示、赤色が注目すべき説明としております。

    Tiny FTP DaemonのHELPファイルより抜粋

    1) クライアントの起動とログイン
    
    MS-DOSプロンプトを起動します。そこで、以下のように入力します。
    
    
    C:>FTP
    FTP>open 127.0.0.1
    Connected to 127.0.0.1.
    220-********************************************
    220- This is Tiny FTP Daemon/95
    220-
    220- user anonymous for ready for guest login.
    220-
    220 ********************************************
    User (127.0.0.1:(none)):登録したユーザー名
    331 Give me your Password
    Password:登録したパスワード
    230---------------------------------
    230- Welcome to Tiny FTP Daemon
    230---------------------------------
    230 Logged in.
    FTP>
    
    
    2)ファイル一覧の取得
    ftp>dir
    200 Data port connected.
    150 Sending file list.
    -rwxrwxrwx 1 anonymous sysgrp 66 May 21 15:23 system.ftp
    -rwxr-xr-x 1 system sysgrp 4527824 May 23 14:36 123456789.dat
    drwxr-xr-x 1 system sysgrp 0 May 28 21:34 pub
    drwxr-xr-x 1 system sysgrp 0 May 28 21:36 work
    
    226 Transfer finished successfully.
    5856 bytes received in 6.98 seconds (0.84 Kbytes/sec)
    ftp>
  4. Tiny FTP Daemonの「実装しているFTPコマンド」

    Tiny FTP DaemonのHELPファイルより、「機能リファレンス」の「基本機能」の「実装しているFTPコマンド」を下表に抜粋しました。 (Tiny FTP Daemon/95の掲示板で、2002年 4月25日開発者であるBUBUさん転載許可を頂きました。ありがとうございました。)

    「このプログラムでは、RFC959に定義される機能のうち、現在でも比較的よく使われている機能だけを抜粋して実装してあります。」 とのことです。

    下記の実装しているコマンドの使用方法は、過去からの贈り物「FTP~前編」過去からの贈り物「FTP~後編」をご参照願います。

    1. 実装しているFTPコマンド
    FTPコマンド 解説
    NOOP なにもしない -
    USER ユーザー名の入力および変更 -
    PASS パスワードの入力 -
    CWD カレントディレクトリの変更 -
    XPWD/PWD カレントディレクトリの表示 -
    CDUP ひとつ上のディレクトリへ移動 -
    LIST 自由な形式でのファイル一覧 -
    NLST コンピュータ処理可能な形式でのファイル一覧 -
    RETR ファイルのget(ダウンロード) -
    STOR ファイルのput(アップロード) -
    STOU ユニークな名前でファイルをput(アップロード) -
    APPE ファイルへのデータ追加 -
    DELE ファイルの削除 -
    XMKD/MKD ディレクトリの作成 -
    XRMD/RMD ディレクトリの消去 -
    TYPE 送信モードの変更 (*1)
    STRU データ構造の変更 (*2)
    RNFR/RNTO ファイル名の変更 -
    QUIT ログアウト -
    SYST システム名の送信 -
    HELP FTPdのヘルプを送信 -
    PASV パッシブモードへ変更 -
    PORT データポート通知 -
    ABOR ファイル送信の中止 -
    SITE 拡張コマンド -
    REST ファイル受信の再開(レジューム) (*3)
    SIZE ファイルサイズを送信 (*4)
    (*1)
    使用できる送信モードは、バイナリ形式とASCII形式に限られます。使用できる引数は、I/A/L8のいずれかであり、L8が指定された場合はバイナリ形式と同じ扱いとなります。
    (*2)
    使用できる構造は、ファイル構造のみに限られます。許される引数はFです。それ以外の値が与えられた場合、エラーコード500のエラーとなります。
    (*3)
    RFC959で定義される仕様と異なります。ブロックモードでのリスタートマーカー設定ではなく、ファイルモードにおいてファイルポインタを一定数進めるのみの動作となります。
    (*4)
    RFC959では定義されていません。WS_FTPDでの実装に準拠した形で実装しています。

    2. 拡張コマンドの管理者コマンドは、省略。

    3. 拡張コマンドのユーザーコマンドは、省略。


同じ様に実施して上記と異なった結果が出た場合は、実施結果を掲示板にご投稿をお願いします。

参考文献:
Tiny FTP Daemon のメインページより[RFC959(BUBUさん訳)RFC1123(BUBUさん訳)RFC1635(BUBUさん訳)]及びTiny FTP Daemonのヘルプファイル(項3と4は、転載)FTPコマンドを使用したファイル操作方法

目次▲頁先頭