投稿日:2003年11月28日 作成鷹の巣

No.13688 シェルのFTPコマンドで、FTP接続確立を知る方法は?



シェルのFTPコマンドで、FTP接続確立を知る方法は?

No.13688 投稿時間:2003年11月28日(Fri) 11:13 投稿者名:FTP素人 URL:

はじめまして。
シェルからFTPのコマンドを使いまして、
サーバ~クライアント間のバックアップを行なおうと思いますが
FTPコマンドでセッション確立した後、本当に確立されているかどうか知るにはどうしたらいいのか
また
クライアント側からサーバへファイルを"put"した際、クライアント側ではリターン値で分かりますが
サーバ側から本当に送られているか確認する手段はありますか?
纏めるとftpでファイルを送る前の確認処理、ファイル送った後で確認処理みたいなものがあれば御教授願います。


転送後にファイルサイズを見たほうが良いと思う

No.13691 投稿時間:2003年11月28日(Fri) 14:33 投稿者名:通行人 URL:

> シェルからFTPのコマンドを使いまして、
> サーバ~クライアント間のバックアップを行なおうと思いますが
> FTPコマンドでセッション確立した後、本当に確立されているかどうか知るにはどうしたらいいのか
> また
> クライアント側からサーバへファイルを"put"した際、クライアント側ではリターン値で分かりますが
> サーバ側から本当に送られているか確認する手段はありますか?

単にデータセッションが確立 (し、ファイル送受を開始) すれば良いだけなのか、ファイルが最後まできちんと送られたことを確認したいのか、それとも何かの確認をサーバ側で行いたいのか、意味を掴みかねます。

FTP でセッションの確立だけ見ていても、無意味なことが多いです。
FTP はファイル送受時にサイズに関する情報を一切交換しませんから、転送が途中で切れたりしても気付かないことがあります。

転送後のサーバ側ファイルサイズを確認したければ、「SIZE」という FTP コマンド (≠ FTP クライアントコマンド) が利用できます。
例:
| ftp> binary ← バイナリモード (※)。
| 200 Type okay.
| ftp> quote SIZE hoge.dat ← 「hoge.dat」のファイルサイズを得たい。
| 213 12345678
「213」の後ろの数字が、バイト単位のファイルサイズです。
ここで得た値を、ローカルのファイルサイズと比較すれば良いでしょう。

※ アスキーモードでのファイルサイズは取得できないことが多く、また得られた値の扱いにも注意を要します。


セッションが確立したことを確認する手法を知りたい。

No.13717 投稿時間:2003年12月01日(Mon) 09:26 投稿者名:FTP素人 URL:

通行人様
ご返答ありがとうございます。
> 単にデータセッションが確立 (し、ファイル送受を開始) すれば良いだけなのか、ファイルが最後まできちんと送られたことを確認したいのか、それとも何かの確認をサーバ側で行いたいのか、意味を掴みかねます。
↑の件ですが、
(1)セッションが確立したことを確認する手法(ファイル転送前処理)・・・クライアント側でputする際です。
(2)ファイルが最後まできちんと送られたことを確認(ファイル転送後処理)・・・こちらはご教授いただいた「quote SIZE」で対応できそうです。


> > シェルからFTPのコマンドを使いまして、
> > サーバ~クライアント間のバックアップを行なおうと思いますが
> > FTPコマンドでセッション確立した後、本当に確立されているかどうか知るにはどうしたらいいのか
> > また
> > クライアント側からサーバへファイルを"put"した際、クライアント側ではリターン値で分かりますが
> > サーバ側から本当に送られているか確認する手段はありますか?
>
> 単にデータセッションが確立 (し、ファイル送受を開始) すれば良いだけなのか、ファイルが最後まできちんと送られたことを確認したいのか、それとも何かの確認をサーバ側で行いたいのか、意味を掴みかねます。
>
> FTP でセッションの確立だけ見ていても、無意味なことが多いです。
> FTP はファイル送受時にサイズに関する情報を一切交換しませんから、転送が途中で切れたりしても気付かないことがあります。
>
> 転送後のサーバ側ファイルサイズを確認したければ、「SIZE」という FTP コマンド (≠ FTP クライアントコマンド) が利用できます。
> 例:
> | ftp> binary ← バイナリモード (※)。
> | 200 Type okay.
> | ftp> quote SIZE hoge.dat ← 「hoge.dat」のファイルサイズを得たい。
> | 213 12345678
> 「213」の後ろの数字が、バイト単位のファイルサイズです。
> ここで得た値を、ローカルのファイルサイズと比較すれば良いでしょう。
>
> ※ アスキーモードでのファイルサイズは取得できないことが多く、また得られた値の扱いにも注意を要します。


パスワード送信後の応答を見ます。

No.13733 投稿時間:2003年12月02日(Tue) 21:34 投稿者名:通行人 URL:

FTP で扱う「セッション」には、次の 2 つが存在します。

◎コマンドセッション
ログイン作業からファイル操作・ログアウトまで、一連のコマンドとその応答文がやり取りされる接続。ファイルの実データは一切流れません。
◎データセッション
ファイルリストやファイル本体のみが流れる接続。コマンドセッションでの指示に従い、ファイル毎に確立されては切断される。
FTP クライアントでは put や get コマンド中に自動的に「接続~切断」されるので、意識することはありません。

---

FTP サーバの応答文は、必ず先頭に 3 桁の数字が入ります。
肯定的応答なら 200 番台、エラーの場合は 400/500 番台です。
(100/300 番台は、FTP クライアント上での判断に使用することは無いでしょう)
これを見ておくと、ある程度の状況判断が可能になります。

> (1)セッションが確立したことを確認する手法(ファイル転送前処理)・・・クライアント側でputする際です。

サーバへ接続 (= コマンドセッション確立) 後、ユーザ名・パスワードが受理 (= ログイン完了) されれば、ファイルの送受信操作は可能な状態になります。
「無事ログインできたかどうか」を知りたい場合は、パスワード送信後の応答を見ます。

| ftp> open ftp.example.com
| Connected to ftp.example.com.
| 220 ftp.example.com ready.
| User (ftp.example.com:(none)) : aaa
| 331 Password required for aaa
| Password:
| 230 User aaa logged in ← 200 番台ならパスワード OK、ログイン完了。
| ftp>

一度ログインすると、その接続が切断されるまでログアウト状態になることはありません (通常の操作では)。
サーバ側の判断でログアウトさせる場合も、「エラー応答→コマンドセッション切断」という手順をとります。タイムアウト等で、応答できない場合もコマンドセッションは切断されます。
従って、put/get/pwd/cd/ls 等の操作を行い、それが無事完了し 200 番台の応答が返った直後であれば、引き続きファイル送受操作は可能な状態と考えられます。


|目次|掲示板|過去ログ目次|▲頁先頭|