#!/usr/bin/perl -w # XR-xxx シリーズのリブート( Code EUC ) # Copyright(C) 2004 Yuumi # http://gochagocha.org/ # http://gochagocha.ribbon.to/ # # 本プログラムはフリーソフトウェアーです。使用するには以下の使用許諾事項をお守りください # # 使用許諾事項 # 1.商用目的に使用してはいけません # 2.著作権を削除して使用してはいけません # 3.著作権を削除して2次創作物を作成する、又は2次配布を行ってはいけません # # # 設置方法 # 1.サーバ内に設置し、cron などを併用して使用する。 # use strict; use CGI; use MIME::Base64; use Net::HTTP; use vars qw( $XR_IPADDRESS $XR_PORT $XR_USERID $XR_PASSWORD $XR_REBOOT_CGI $XR_HOST $XR_REBOOT_REFERER ); #各種設定 #XR の IP アドレス $XR_IPADDRESS = '192.168.1.1'; #管理画面の接続ポート $XR_PORT = '880'; #接続用ユーザ名 $XR_USERID = 'admin'; #接続用パスワード $XR_PASSWORD = 'passwd'; $XR_REBOOT_CGI = '/cgi-bin/reboot.cgi'; $XR_REBOOT_REFERER = 'http://%HOST%:%PORT%/cgi-bin/reboot.cgi'; use lib qw(./lib); use vars qw($cgi); $cgi = CGI->new(); &main(); sub main { my $basic_xr_credential; my $xr_credential = '%USER%:%PASS%'; my $xr_referer = $XR_REBOOT_REFERER; $xr_credential =~ s|%USER%|$XR_USERID|; $xr_credential =~ s|%PASS%|$XR_PASSWORD|; $xr_referer =~ s|%HOST%|$XR_IPADDRESS|; $xr_referer =~ s|%PORT%|$XR_PORT|; $basic_xr_credential = 'Basic ' . MIME::Base64::encode($xr_credential); chomp $basic_xr_credential; print &PostHtmlPage( $XR_IPADDRESS , $XR_REBOOT_CGI , $XR_PORT , $xr_referer , $basic_xr_credential , 'reboot_no' , '1192abc' ); } sub PostHtmlPage{ my $GUrl = shift; #POST URL HOST my $GUrlPage = shift; my $GPort = shift; my $GReferer = shift; my $GABasic = shift; my @dataChunk = @_; my $getResponce; $getResponce = ''; my $UAgent = 'Mozilla/4.8 [en] (Win98\; U)'; my $WriteChunk; my $i = 0; for( 0 .. (( scalar( @dataChunk ) * 0.5 ) - 1 ) ){ if( $_ > 0 ){ $WriteChunk .= '&'; } $WriteChunk .= $dataChunk[ $i ] . '=' . $dataChunk[ $i + 1 ]; $i += 2; } my $cNT = Net::HTTP->new( Host => $GUrl , PeerPort => $GPort ); $cNT->write_request( POST => $GUrlPage, 'User-Agent' => $UAgent, 'Referer' => $GReferer, 'Authorization' => $GABasic , $WriteChunk ); my($code, $mess, %h) = $cNT->read_response_headers; # while( $code == 200 ){ my $rbuf; my $rn = $cNT->read_entity_body($rbuf, 1024); last unless $rn; $getResponce .= $rbuf; # } # if( $code != 200 ){ return $code; } return $getResponce; }