#!/usr/local/bin/perl #偽春菜の SSTP 用スクリプト( すごい初期の ) #http://nh.maid.to/ で使用していた物 # # Copyright(c) 1999-20xx Yuumi # http://gochagocha.ribbon.to/ # gochagocha@ribbon.to # # 本プログラムはフリーソフトウェアーです。使用するには以下の使用許諾事項をお守りください # # 使用許諾事項 # 1.商用目的に使用してはいけません # 2.著作権を削除して使用してはいけません # 3.著作権を削除して2次創作物を作成する、又は2次配布を行ってはいけません use Socket; require './jcode.pl'; @action_command = ( 'SEND','EXECUTE','GIVE','COMMUNICATE' ); @action_ver = ( ' SSTP/1.0',' SSTP/1.0',' SSTP/1.1',' SSTP/1.1' ); @action_send = ( 'Script','Command','Document','Sentence' ); my $dummy_image = './nh.gif'; my $script_url = 'http://nh.maid.to/cgi-bin/nh_sender.cgi'; my $userdir = '../../nhdata/'; my $treferer = 'http://nh.maid.to/'; my @hikisu = split(/&/, $ENV{'QUERY_STRING'}); foreach $hiki (@hikisu) { ( $name, $value) = split(/=/, $hiki); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("H2", $1)/eg; &jcode'convert(*value,'sjis'); $FORM{$name} = $value; } if( $ENV{'HTTP_REFERER'} !~ m/$treferer/i ){ #REFERER CHECK $FORM{'HOST'} = ''; }elsif( $` ne '' ){ $FORM{'HOST'} = ''; } ( my $uid = $FORM{'ID'} ) =~ s/[^A-Za-z0-9]//g; ( my $actid = $FORM{'ACTION'} ) =~ s/[^0-9]//g; if( $actid > scalar( @action_command ) ){ $actid = 0; } elsif( $actid == 1 ){ &error('申し訳ございませんがサポートしておりません'); } my $upass; if( $uid ne '' ){ ( $upass = $FORM{'PASS'} ) =~ s/[^A-Za-z0-9]//g; my $ufile = $userdir . $uid . '.nhd'; if( open( FI , $ufile )){ #ユーザファイルが存在する my @ldata = ; my $opass = shift( @ldata ); chomp( $opass ); if( $opass eq $upass ){ #パスが一致 &send_data_chk; push( @newpush , $upass . "\n" ); push( @newpush , $FORM{'SENDER'} . "\n" ); push( @newpush , $FORM{'SCRIPT'} . "\n" ); push( @newpush , $actid . "\n" ); if( open( FI , ">$ufile" )){ print FI @newpush; } &error( '更新出来たよ!' ); }else{ #パスが違う $actid = shift( @ldata ); chomp( $actid ); if( $actid =~ m/[^0-9]/ ){ $FORM{'SENDER'} = $actid; $actid = 0; }else{ $FORM{'SENDER'} = shift( @ldata ); chomp( $FORM{'SENDER'} ); } $FORM{'SCRIPT'} = shift( @ldata ); chomp( $FORM{'SCRIPT'} ); $FORM{'HOST'} = ''; #セキュリティ上ホストは入れられない } }else{ #ユーザが存在しない if( $upass eq '' ){ &error( 'パスがないよぉ' ); } &send_data_chk; push( @newpush , $upass . "\n" ); push( @newpush , $FORM{'SENDER'} . "\n" ); push( @newpush , $FORM{'SCRIPT'} . "\n" ); push( @newpush , $actid . "\n" ); if( open( FI , ">$ufile" )){ print FI @newpush; } $FORM{'VIEW'} = 1; } } &send_data_chk; my $r_host = &getuserhostname( $FORM{'HOST'} ); if( $FORM{'VIEW'} == 1 ){ my $script_data; if( $uid ne '' ){ $script_data = "$script_url?ID=$FORM{'ID'}"; }else{ $FORM{'SENDER'} =~ s/ /%20/g; $FORM{'SCRIPT'} =~ s/ /%20/g; $script_data = "$script_url?ACTION=$actid&SENDER=$FORM{'SENDER'}&SCRIPT=$FORM{'SCRIPT'}"; } print <<"_HTML_"; Content-type: text/html

以下のスクリプトをホームページの html に埋め込んでくれると、私は話せるよ



<a href="http://nh.maid.to/"><img src="$script_data" width="60" height="15" border="0"
></a>
	
_HTML_ }else{ &nh_SEND_SSTP( $r_host , $actid , $FORM{'SENDER'} , $FORM{'SCRIPT'} ); &gif_put; if( $timeout_flag == 1 ){ &error( '多分遅れていないよ…' ) }; } exit; sub error { print "Content-type: text/html\n\n"; print $_[0]; exit; } sub send_data_chk{ if( $FORM{'SCRIPT'} eq '' ){ &error( 'スクリプトがないよぉ' ); }elsif( length( $FORM{'SCRIPT'} ) > 1000 ){ &error( 'スクリプトがちょっと長いね' ); } if( $FORM{'SENDER'} eq '' ){ &error( 'センダーがないよぉ' ); }elsif( length( $FORM{'SENDER'} ) > 1000 ){ &error( 'センダーがちょっと長いね' ); } } sub getuserhostname{ my $rhost = $_[0]; if( $rhost ne '' ){ $rhost = inet_aton( $rhost ); if( rhost =~ m/(localhost|127\.0\.0\.1)/ ){ $rhost = ''; } } if( $rhost eq '' ){ $rhost = $ENV{'HTTP_X_FORWARDED_FOR'}; if ( $rhost eq '' ) { $rhost = $ENV{'REMOTE_ADDR'}; } $rhost = inet_aton( $rhost ); } return $rhost; } sub gif_put{ if( -e $dummy_image ){ my @fsinfo = stat $dummy_image; print "Content-type: image/gif\n"; print "Content-Length: $fsinfo[7]\n\n"; binmode(STDOUT); if( open( FI , $dummy_image ) ){ binmode( FI ); while( ){ print; } close( FI ); } } } # ================= NISEHARUNA ====================== sub nh_SEND_SSTP{ local $SIG{'ALRM'} = sub{ close( SOCKET ); $timeout_flag = 1}; alarm 5; # 5秒でタイムアウト my $nh_addr = $_[0]; my $nh_action = $_[1]; my $nh_send_sender = $_[2]; my $nh_send_script = $_[3]; my $nh_port = 11000; if( $nh_addr ne '' ){ my $nh_proto = getprotobyname('tcp'); socket(SOCKET , PF_INET, SOCK_STREAM, $nh_proto ); my $nh_ent = pack_sockaddr_in( $nh_port , $nh_addr ); if( connect( SOCKET , $nh_ent )){ select( SOCKET ); $| = 1; select( STDOUT ); print SOCKET $action_command[$nh_action] . $action_ver[$nh_action] . "\r\n"; print SOCKET "Sender: $nh_send_sender\r\n"; print SOCKET $action_send[$nh_action] . ": $nh_send_script\\e\r\n"; print SOCKET "\r\n"; my $result = ; while ( ) { ; } close( SOCKET ); return( $result ); } } return; } _END_