« NOD32 Antivirus 3.0のメールフィルタリングのメールヘッダ処理 | メイン | 風邪で耳まで痛いっす »
2008年7月16日
Proftpdで存在しないディレクトリへのLIST 処理 >>FTPd
訳あって、Proftpdで存在しないディレクトリへのLIST 処理について調べてました。
ホゲ実装のFTPクライアントがあったもんだから。
ExtendedLogを取って、FTPのログを取ってみていたのですが、1.3.1において存在しないディレクトリをLISTした後にも、ログにはステータスコード226が記載されている。
IP... UNKNOWN user [15/Jul/2008:xx:xx:xx +0900]
"LIST /cgi-bin/noexists" 226 0
ユーザにはエラーコード450を返しているのに、ログでは226。
うーん、なんか怪しいということでいくつか遡って調べてみた。
Proftpd 1.2.10
Net::FTP>>> Net::FTP(2.75)
Net::FTP>>> Exporter(5.58)
Net::FTP>>> Net::Cmd(2.26)
Net::FTP>>> IO::Socket::INET(1.28)
Net::FTP>>> IO::Socket(1.28)
Net::FTP>>> IO::Handle(1.24)
Net::FTP=GLOB(0x1bad1ac)<<< 220 ProFTPD 1.2.10 Server
Net::FTP=GLOB(0x1bad1ac)>>> user hoge
Net::FTP=GLOB(0x1bad1ac)<<< 331 Password required for hoge.
Net::FTP=GLOB(0x1bad1ac)>>> PASS ....
Net::FTP=GLOB(0x1bad1ac)<<< 230 User hoge logged in.
Net::FTP=GLOB(0x1bad1ac)>>> PORT 192,168,220,2,141,253
Net::FTP=GLOB(0x1bad1ac)<<< 200 PORT command successful
Net::FTP=GLOB(0x1bad1ac)>>> LIST /cgi-bin/nodir
Net::FTP=GLOB(0x1bad1ac)<<< 150 Opening ASCII mode data connection for file list
Net::FTP=GLOB(0x1bad1ac)<<< 226 Transfer complete.
Net::FTP=GLOB(0x1bad1ac)>>> QUIT
Net::FTP=GLOB(0x1bad1ac)<<< 221 Goodbye.
ステータスコードはエラーを返さない(!)
Proftpd 1.3.1
Net::FTP>>> Net::FTP(2.75)
Net::FTP>>> Exporter(5.58)
Net::FTP>>> Net::Cmd(2.26)
Net::FTP>>> IO::Socket::INET(1.28)
Net::FTP>>> IO::Socket(1.28)
Net::FTP>>> IO::Handle(1.24)
Net::FTP=GLOB(0x1bad1ac)<<< 220 ProFTPD 1.3.1 Server
Net::FTP=GLOB(0x1bad1ac)>>> user hoge
Net::FTP=GLOB(0x1bad1ac)<<< 331 Password required for hoge
Net::FTP=GLOB(0x1bad1ac)>>> PASS ....
Net::FTP=GLOB(0x1bad1ac)<<< 230 User hoge logged in
Net::FTP=GLOB(0x1bad1ac)>>> PORT 192,168,220,2,141,255
Net::FTP=GLOB(0x1bad1ac)<<< 200 PORT command successful
Net::FTP=GLOB(0x1bad1ac)>>> LIST /cgi-bin/nodir
Net::FTP=GLOB(0x1bad1ac)<<< 150 Opening ASCII mode data connection for file list
Net::FTP=GLOB(0x1bad1ac)<<< 450 /cgi-bin/nodir: No such file or directory
Net::FTP=GLOB(0x1bad1ac)>>> QUIT
Net::FTP=GLOB(0x1bad1ac)<<< 221 Goodbye.
ステータスコードはエラーを返す。但し、Proftpdのログには226 0 と記載される。
Proftpd 1.3.0
Net::FTP>>> Net::FTP(2.75)
Net::FTP>>> Exporter(5.58)
Net::FTP>>> Net::Cmd(2.26)
Net::FTP>>> IO::Socket::INET(1.28)
Net::FTP>>> IO::Socket(1.28)
Net::FTP>>> IO::Handle(1.24)
Net::FTP=GLOB(0x1baa530)<<< 220 ProFTPD 1.3.0 Server ready.
Net::FTP=GLOB(0x1baa530)>>> user hoge
Net::FTP=GLOB(0x1baa530)<<< 331 Password required for webmaster.
Net::FTP=GLOB(0x1baa530)>>> PASS ....
Net::FTP=GLOB(0x1baa530)<<< 230 User hoge logged in.
Net::FTP=GLOB(0x1baa530)>>> PORT 192,168,220,2,142,73
Net::FTP=GLOB(0x1baa530)<<< 200 PORT command successful
Net::FTP=GLOB(0x1baa530)>>> LIST /cgi-bin/nodir
Net::FTP=GLOB(0x1baa530)<<< 450 /cgi-bin/nodir: No such file or directory
ステータスコードはエラーを返す。但し、Proftpdのログには226 0 と記載される。
データコネクションの処理としては226かもしれないけど、Userには450Errorを返してるわけだし
んー、ちょっとmod_ls の処理に問題あるんじゃないの。
1.2.10の処理は更によくないけどさ。
Net::FTP使って、ちょっとテストするためのPerlScript
use Net::FTP;
$host = "dokoka";
$user ="user";
$pass ='passwd';
$ftp = Net::FTP->new($host, Debug => 1);
$ftp->login($user,$pass);
$dataconn = $ftp->list("/cgi-bin/nodir");
while( $dataconn->read( $buf , 1024)){
print $buf;
}
$dataconn->close();
$ftp->quit;
print "done\n";
トラックバック
現在、この記事はトラックバックを受け付けておりません。
コメント
現在、この記事はコメントを受け付けておりません。