2006年4月26日水曜日

ML用sendmailもどき





  • 読んでわかる人はわかるから説明省略。

  • OCNのsmtpサーバ専用。(まぁ、要はRFC読むのが面倒だった)

  • サニタイズもにゃんもしてないから、これを経由して変なコマンドを中継先に送ることができちゃう。


あとは任せた>いっちー(ぉ



#!/usr/bin/perl
use IO::Socket;

($host,$from,@rcpts)=@ARGV;
$port=25;

$sock = IO::Socket::INET->new(PeerAddr => $host,PeerPort => $port,Proto=> 'tcp',) or die("cannt connect");

select $sock;
$|=1;
select STDOUT;


$_= <$sock> ;/^220 / or abort("I don't know this type server");

print $sock "HELO $host\n";
$_=<$sock>;/^250 / or abort("HELO failed");

print $sock "MAIL FROM: $from\n";
$_=<$sock>;/^250 / or abort("MAIL FROM failed");

foreach $rcpt(@rcpts){
print $sock "RCPT TO: $rcpt\n";
$_=<$sock>;/^250 / or abort("MAIL FROM failed");
}

print $sock "DATA\n";
$_=<$sock>;/^354 / or abort("DATA failed:$_");
while(<STDIN>){
s/^\./../;
print $sock $_;
}
if(!($_ =~ /[\n\r]$/)){
print $sock "\n";
}
print $sock ".\n";
$_=<$sock>;/^250 / or abort("DATA period failed");
print $sock "QUIT\n";
$_=<$sock>;/^221 / or abort("quit failed");

sub abort{
my($reason)=@_;

print $sock "QUIT\n";
$_=<$sock>;/^250 /;
die($reason);
}




0 件のコメント:

コメントを投稿