#! /usr/local/bin/perl # 各ファイルを作成するディレクトリ # 指定しない場合、スクリプトと同じディレクトリに作成される #$DATADIR = "/usr/local/www/data/"; # 登録を許可するアドレスのリスト # 指定した場合、リストに含まれないアドレスからの登録は拒否される #@approval = ("133.44.18.","133.44."); # 作成するブロードキャスト設定ファイル $Win32 = "on"; # Win32bit版用 $Win16 = "on"; # Win16bit版用 $Mac = "on"; # Mac版用 $Etc = "on"; # Java版、X版用 $Win32old= "on"; # Win32bit Ver1.33以前用 # 戻り先と戻りメッセージ # そのままHTMLとして表示される $retmessage = <<"MESSAGE_END"."\n";
登録フォームのページへ戻る MESSAGE_END # 著作権表示 この部分改変禁止 $copyright = <<"MESSAGE_END"."\n";
IBCM-CGI Ver0.67 1998/11/24
Ipmsg BroadCast setup files Maker CGI edition.
Copyright (C); 1998 RONA shun-shin / Kanou Toshinobu, ALL RIGHT RESERVED.
rona.kanou\@nifty.ne.jp
MESSAGE_END # 著作権表示 ここまで # メッセージ出力準備 print "Content-type: text/html\n\n"; print "\n\n"; print "IP Messenger BroadCast Form\n"; print "

IBCM-CGI 実行結果

"; $requestType = $ENV{"REQUEST_METHOD"}; unless($requestType eq "POST"){ # このスクリプトは POST で動作する # POST でデータが送られていない場合 print "FORM METHOD が POST ではありません。設定を確認して下さい。\n"; print $retmessage . $copyright; die("REQUEST_METHOD is not POST.\n"); } $contentLength = $ENV{"CONTENT_LENGTH"}; # データがあるか調べる unless($contentLength){ #データがない場合 print "データがありません。設定を確認して下さい。\n"; print $retmessage . $copyright; die("CONTENT_LENGTH is NO Value.\n"); } # データがある場合 read(STDIN,$queryString,$contentLength); # データを読み込む @tmpArray = split(/&/,$queryString); # データを仕分けする foreach $curString (@tmpArray){ # キー/値のペアがなくなるまでループする ($key,$value) = split(/=/,$curString); # キーと値に分割 $formData{$key} = $value; # 連想配列として保存 } if($formData{"other"} eq "on"){ # ブラウズしている端末以外を登録する場合 ($formData{"ipa"} < 256) && ($ipa = (0 + $formData{"ipa"})); ($formData{"ipb"} < 256) && ($ipb = (0 + $formData{"ipb"})); ($formData{"ipc"} < 256) && ($ipc = (0 + $formData{"ipc"})); ($formData{"ipd"} < 256) && ($ipd = (0 + $formData{"ipd"})); # IPアドレスを数値に変換 unless(0 < $ipa && 0 < $ipb && 0 < $ipc && 0 < $ipd){ # IPアドレスが正規の数値に収まっていない場合 print "IPアドレスの指定が不正です。"; print "正しい数値を指定して下さい。\n"; print $retmessage . $copyright; die("IP address error.\n"); } $IPaddress = "$ipa.$ipb.$ipc.$ipd"; # IPアドレスをひとまとまりにする } else { # ブラウズしている端末を登録する場合 $IPaddress = $ENV{"REMOTE_ADDR"}; # ブラウズしているIPアドレスを代入 } if(@approval){ # 登録アドレスが限定されている場合 $approval = "false"; # 許可アドレス判定用 foreach $i (@approval){ # 許可アドレスかどうか確認する if(index($IPaddress,$i) == 0){ # 許可アドレスだった場合 $approval = "true"; # 許可アドレスだ! last; # ループを抜ける } } unless($approval eq "true"){ # IPアドレスが許可アドレスでなかった場合 print "このIPアドレス「$IPaddress」は登録を"; print "許可されていません。運営者にご相談下さい。\n"; print $retmessage . $copyright; die("IP address is not approval.\n"); } } open(IPLIST,"<$DATADIR"."iplist.txt"); # iplist.txt を読み込み用としてオープン while(){ chop; # 改行をカット push(@iplist,$_); # @iplist にリストを読み込む } close(IPLIST); # iplist.txt をいったん閉じる push(@iplist, $IPaddress); # @iplist にIPアドレスを追加 @iplist = sort grep((! $Seen{$_}++),@iplist); # アドレスの重複を解消しソートする open(IPLIST,">$DATADIR"."iplist.txt"); # iplist.txt を書き込み用としてオープン foreach $i (@iplist){ print IPLIST "$i\n"; # リスト書き出し } close(IPLIST); # iplist.txt を閉じる # 各設定用ファイルの作成 if($Win32 eq "on"){ # Win32bit用ファイル open(OUTW32,">$DATADIR"."ipmsg32.reg"); print OUTW32 "REGEDIT4\r\n[HKEY_CURRENT_USER\\Software\\"; print OUTW32 "HSTools\\IPMsg\\BroadCast]\r\n"; # Win32bit用レジストリエディタの呪文 $count = 0; # カウントのクリア foreach $i (@iplist){ # IPアドレスの数だけ繰り返す print OUTW32 "\"$count\"=\"$i\"\r\n"; # Win32bit用のレジストリ登録文字列出力 $count++; # カウンタ増加 } close(OUTW32); # Win32bit用ファイルクローズ } if($Win16 eq "on"){ # Win16bit用ファイル open(OUTW16,">$DATADIR"."ipmsg16.reg"); print OUTW16 "REGEDIT\r\n"; # Win16bit用レジストリエディタの呪文 $count = 0; # カウントのクリア foreach $i (@iplist){ # IPアドレスの数だけ繰り返す print OUTW16 "HKEY_CLASSES_ROOT\\HSTools\\"; print OUTW16 "IPMsg\\BroadCast\\$count = $i\r\n"; # Win16bit用のレジストリ登録文字列出力 $count++; # カウンタ増加 } close(OUTW16); # Win16bit用ファイルクローズ } if($Win32old eq "on"){ # Win32bitVer1.33以前用ファイル open(OUT133,">$DATADIR"."ipmsg133.reg"); print OUT133 "REGEDIT4\r\n"; # Ver1.33以前用レジストリエディタの呪文 $count = 0; # カウントのクリア foreach $i (@iplist){ # IPアドレスの数だけ繰り返す print OUT133 "[HKEY_CURRENT_USER\\Software\\HSTools\\"; print OUT133 "IPMsg\\BroadCast\\$count]\r\n\"\"=\"$i\"\r\n"; # Win32bitVer.1.33以前用のレジストリ登録文字列出力 $count++; # カウンタ増加 } close(OUT133); # Win32bitVer1.33以前用ファイルクローズ } if($Mac eq "on"){ # Mac用ファイル open(OUTMAC,">$DATADIR"."ip.bcast"); print OUTMAC pack("C6",(@iplist+1)/256,(@iplist+1)%256,255,255,255,255); # Mac用の呪文 foreach $i (@iplist){ # IPアドレスの数だけ繰り返す ($ipa,$ipb,$ipc,$ipd) = split(/\./,$i); # IPアドレス文字列から各要素を抽出 print OUTMAC pack("C4",$ipa,$ipb,$ipc,$ipd); # Mac用の文字列出力 } close(OUTMAC); # Mac用ファイルクローズ } if($Etc eq "on"){ # Java,X用ファイル open(OUTETC,">$DATADIR"."ip.lst"); print OUTETC "255.255.255.255"; # Java,X用の呪文 foreach $i (@iplist){ # IPアドレスの数だけ繰り返す print OUTETC ",$i"; # Java,X用の文字列出力 } print OUTETC "\n"; # Java,X用の終端に改行を追加 close(OUTETC); # Java,X用ファイルクローズ } print "「$IPaddress」は正常に登録されました。
\n"; print "ブロードキャスト設定ファイルをダウンロードして下さい。\n"; print $retmessage . $copyright;