=encoding euc-jp =head1 名前 libnetFAQ - libnetでよく聞かれる質問(Frequently Asked Questions) =head1 説明 =head2 このドキュメントはどこで手に入りますか このドキュメントはlibnetディストリビューションと一緒に配布されます。 また下記のlibnet Webページからも取得することが出来ます http://www.pobox.com/~gbarr/libnet/ =head2 このドキュメントに貢献する方法は 修正、追加そして提案を私にメールすることができます gbarr@pobox.com. =head1 作者および著作権情報(=Author and Copyright Information) Copyright (c) 1997-1998 Graham Barr. All rights reserved. This document is free; you can redistribute it and/or modify it under the terms of the Artistic License. =head2 放棄声明(Disclaimer) この情報は正しいという信念のもとに、そしてこれが便利であるようにという 希望をもって提供されています。しかし正しく、最新で、どのような特定の目的に 対しても適切であるということは保障されません。作者はこの情報あるいは利用に ついて何の責任も負いません。 =head1 libnetの取得とインストール =head2 libnetって何? libnetperl5モジュールの集合体で、それらは全てネットワークプログラムに 関連します。利用できるモジュールの多くはインターネット・コミュニティで 使われる、ポピュラーなサーバー-クライアントプロトコルでのクライアント側を 提供します。 =head2 どのバージョンのperlが必要ですか? libnetはperlのバージョン5.002以降で動くことがわかっています。しかし あなたのperlのバージョンがperl5.004より前であれば、CPANからIO ディストリビューションを取得し、インストールする必要があります。 もしperl5.004やそれ以降をもっていればIOモジュール群は既にインストール されています。しかしCPANには更新されているものがあるかもしれません。 =head2 他に必要なモジュールは何ですか? あなたがインストールする必要があるモジュールはIOディストリビューションの モジュールだけです。perl5.004以降を持っているのであれば、それらのモジュールは 既に持っていることになります。 =head2 どのマシンがlibnetをサポートしていますか? libnetそれ自身は完全にperlで書かれた(perl-code)ディストリビューションです。 そのためperlが実行できる全てのマシンで動くでしょう。しかしIOはいくつかの マシンそしてperlの前のバージョンでは動かないかもしれません。しかし perlバージョン5.004以降では、そのようなことはないでしょう。 =head2 最新のlibnetリリースはどこで手に入りますか? 最新のlibnetリリースは常にCPANにあります。それは以下のところで 見つかるでしょう http://www.cpan.org/modules/by-module/Net/ 最新のリリースと情報は常にlibnet webページにもあります http://www.pobox.com/~gbarr/libnet/ =head1 Net::FTPの使い方 =head2 FTPサーバからファイルをダウンロードする方法は? comp.lang.perl.miscにポストされた記事からの例 #!/your/path/to/perl # 人生を楽にしてくれるモジュール use Net::FTP; # デバッグ用: $ftp = Net::FTP->new('site','Debug',10); # 接続をオープンし、ログイン! $ftp = Net::FTP->new('target_site.somewhere.xxx'); $ftp->login('username','password'); # 転送モードをバイナリに設定 $ftp->binary(); # ftp側のディレクトリを変更 $ftp->cwd('/some/path/to/somewhere/'); foreach $name ('file1', 'file2', 'file3') { # getの引数は以下の順番: # ftpサーバーのファイル名 # 転送によりローカルマシン上に保存されるファイル名 # 同じ名前にしたければ、単純にget($name)とすることもできます $ftp->get($name,$name); } # ftp 終了! $ftp->quit; =head2 バイナリ・モードでファイルを転送する方法は? の変換なしに転送するため、Net::FTPはCメソッドを 提供しています。 $ftp->binary; =head2 リモートのFTPサーバ上にあるファイルの大きさを取得する方法は? =head2 リモートのFTPサーバ上にあるファイルの更新日時を取得する方法は? =head2 リモートのFTPサーバ上にあるファイルのパーミッションを取得する方法は? FTPプロトコルはリモート・サーバ上のファイルのパーミッションを変更するための コマンドを持っていません。しかしいくつかのftpサーバーはSITEコマンドを 通してchmodコマンドを発行することを許すかもしれません。例えば $ftp->quot('site chmod 0777',$filename); しかしこれは動くことが保障されません。 =head2 ftpコマンドのような再取得(reget)操作はできますか? =head2 FTPサーバーからディレクトリのリストを取得する方法は? =head2 ""にディレクトリを変更することは失敗しませんか? ->cwd()に""という引数を渡すことは、引数なしで->cwd()を呼び出すのと同じ効果を 持ちます。Debug(I<下記参照>)を有効にすれば、何が起きるかがわかるでしょう $ftp = Net::FTP->new($host, Debug => 1); $ftp->login; $ftp->cwd(""); 以下のようになります Net::FTP=GLOB(0x82196d8)>>> CWD / Net::FTP=GLOB(0x82196d8)<<< 250 CWD command successful. =head2 SOCKSファイアウォールの内側にいます。しかしFirewallオプションが機能しません? Firewallオプションは1種類のファイアウォールをサポートしています。その サポートされている種類はftp proxyです。 Net::FTPやlibnetディストリビューションに入っているその他のモジュールを SOCKSファイアウォールを通して利用するためには、 socksライブラリと一緒にperlをコンパイルすることにより socks対応された(socks-ified) perl 実行形式を作成しなければなりません。 =head2 FTPプロキシー・ファイアウォールの内側にいますが、外側のマシンにアクセスできません Net::FTPはほとんどのポピュラーなftpプロキシー・ファイアウォール・アプローチを 実装してます。実装されている概要は、あなたがファイアウォールにCで ログインすることです。 あるアカウントでファイアウォールにログインし、次にCでログインする ことを要求する他の種類のファイアウォールがあることを聞いたことがあります。 それでもNet::FTPを使って、これらのファイアウォールを通ることが出来ます。 しかしより手作業のアプローチを取らなければなりません。eg $ftp = Net::FTP->new($firewall) or die $@; $ftp->login($firewall_user, $firewall_passwd) or die $ftp->message; $ftp->login($ext_user . '@' . $ext_host, $ext_passwd) or die $ftp->message. =head2 私のファイアウォールはポート21をリスンしません 他のどのFTPサーバーと同じようにFTPサーバーは通常、同じポート番号、 ポート21をリスンします。しかしそうしなければいけない理由はありません。 Net::FTPにポート番号を渡すと、それが最終的な出力先のポート番号だと 想定します。デフォルトではNet::FTPは常にポート21でファイアウォールに 接続しようとします。 Net::FTPは接続をオープンするためにIO::Socketを利用します。そしてIO::Socketは ポート番号をホスト名の一部として指定されることを許しています。このための この問題はC<"hostname:1234">のようにFirewallオプションを渡すか、 同じ形式でNet::ConfigでのCを設定するかのどちらかによって解決する ことができます。 =head2 FTPサーバー上のファイルのパーミッションを変更することはできますか? この答えは"多分"です。FTPプロトコルはリモートホスト上のファイル・パーミッションを 変更するためのコマンドを指定していません。しかし多くのサーバーはCコマンドを 通してchmodコマンドを実行することを許しています。これは以下のようになります $ftp->site('chmod','0775',$file); =head2 メソッドmessageを呼んでいるスクリプトを見たことがありますが、ドキュメントに見当たりません? libnetに入っているほかのパッケージと同じようにNet::FTPはNet::Cmdを継承しています。 そのためNet::Cmdで記述されている全てのメソッドもNet::FTPオブジェクトで利用する ことができます。 =head2 なぜNet::FTPはmputとmgetメソッドを実装していないのですか? 簡単な答えは、あなた自身で実装するのが簡単だからです。長い答えは これらを複数のプラットホームが正しくサポートされるように書くことは あまりにも多くのコードが必要となるからです。いかにあなた自身が それらをどのように実装できるかの例をいくつか示します。 sub mput { my($ftp,$pattern) = @_; foreach my $file (glob($pattern)) { $ftp->put($file) or warn $ftp->message; } } sub mget { my($ftp,$pattern) = @_; foreach my $file ($ftp->ls($pattern)) { $ftp->get($file) or warn $ftp->message; } } =head1 Net::SMTPの使い方 =head2 @から後ろのEmailアドレスの部分をホスト名として使えないのはなぜですか? Emailアドレスでの@からの後ろ部分は必ずしもホスト名ではありません。 それはメールドメインです。メールドメインに接続するためのホストの名前を 見つけるためは、DNS MX lookupをする必要があります。 =head2 Net::SMTPがDNS MX lookupをしないのはなぜですか? Net::SMTPはSMTPプロトコルを実装します。DNS MX lookupはその プロトコルの一部ではありません。 =head2 verifyが常にtrueを返すのはなぜですか? それはそんな風に見えてしまうかもしれませんが、そうではありません。 そのコマンドが成功すると、verifyメソッドはtrueを返します。 サーバーが通常、他のマシンに転送しなければならないアドレスをverifyに 渡すと、コマンドは以下のように成功します 252 Couldn't verify but will attempt delivery anyway (を確認することはできませんが、いずれにせよ配送しようとします) このコマンドは、そのサーバーが直接配送するドメインにあるアドレスを渡し、 それが存在しない場合にのみ失敗します。 =head1 スクリプトのデバッグ方法 =head2 Net::*モジュールを使うスクリプトをデバッグするにはどうすればいいですか? libnetクライアントクラスのほとんどは、コンストラクタにオプションを渡すことが できます。ほとんどの場合、あるオプションはCと呼ばれます。 このオプションを0以外の値を渡すと、プロトコルのトレースを有効とし、 それらはSTDERRに送られます。このトレースはリモート・サーバーに送られる コマンド、返され受け取られる応答が何かを見るのに便利です。 #!/your/path/to/perl use Net::FTP; my $ftp = new Net::FTP($host, Debug => 1); $ftp->login('gbarr','password'); $ftp->quit; このスクリプトは以下のように出力するでしょう Net::FTP: Net::FTP(2.22) Net::FTP: Exporter Net::FTP: Net::Cmd(2.0801) Net::FTP: IO::Socket::INET Net::FTP: IO::Socket(1.1603) Net::FTP: IO::Handle(1.1504) Net::FTP=GLOB(0x8152974)<<< 220 imagine FTP server (Version wu-2.4(5) Tue Jul 29 11:17:18 CDT 1997) ready. Net::FTP=GLOB(0x8152974)>>> user gbarr Net::FTP=GLOB(0x8152974)<<< 331 Password required for gbarr. Net::FTP=GLOB(0x8152974)>>> PASS .... Net::FTP=GLOB(0x8152974)<<< 230 User gbarr logged in. Access restrictions apply. Net::FTP=GLOB(0x8152974)>>> QUIT Net::FTP=GLOB(0x8152974)<<< 221 Goodbye. 最初の数行はNet::FTPが利用するモジュールとそのバージョンを伝えます。 これはユーザーがバグを報告するとき、私にとって有効なデータです。最後の7行は サーバとの通信を表しています。各行には3つの部分があります。最初の部分は オブジェクトそのものです。これはもし複数のオブジェクトを使っているならば、 出力を切り分けるために有効です。2番目の部分はサーバからのデータを示すC<<<<<> あるいはサーバーにいくデータを示すC<>>>>>のどちらかになります。 行の残りは送信されるコマンドもしくは受け取られた応答になります。 =head1 作者と著作権(AUTHOR AND COPYRIGHT) Copyright (c) 1997 Graham Barr. All rights reserved. =for html
I<$Id: libnetFAQ.pod,v 1.2 2011/01/27 13:15:11 iwai Exp $>