概要

  • jwhois を実行し、ドメイン管理者情報を表示します。
  • spam 送信の元になるため、パスワードを設定するなどして濫用させないようにすること。

ソース

WhoisGW.cgi

#!/usr/bin/perl
# Whois ゲートウェイ
# spam 送信の元になるため、パスワードを設定するなどして濫用させないようにすること。

use strict;
use warnings;
use utf8;
use Encode;
use CGI::Pretty qw( -no_xhtml *table );    # //HTML 4.01 Transitional//EN

my $charsetConsole	= 'UTF-8';
my $charsetFile		= 'UTF-8';

binmode( STDIN,  ":encoding($charsetConsole)" );
binmode( STDOUT, ":encoding($charsetConsole)" );
binmode( STDERR, ":encoding($charsetConsole)" );

my $cgiName = 'WhoisGW';

my $q = new CGI;
$q->charset( $charsetConsole );

my $domain = $q->param( 'domain' ) || '';

print makeHeader();
if ( $domain ){
	if ( $domain =~ /^(\d+\.\d+\.\d+\.\d+|[a-z0-9][\-\.a-z0-9]+[a-z0-9])$/i ){
		print execWhois( $domain );
	} else {
		print makeForm();
		print $q->p('ドメイン名が不正です。');
	}
} else {
	print makeForm();
}
print makeFooter();

exit;

sub makeHeader
{
	my $ret = '';
	$ret .= $q->header();
	$ret .= $q->start_html(
		-title	=> $cgiName,
		-lang	=> 'ja-JP',
		-head	=> [
			$q->meta( { -http_equiv => 'Content-style-type',	-content => 'text/css' } ),
			$q->meta( { -http_equiv => 'Content-script-type',	-content => 'text/javascript' } ),
		],
		-style	=> [ { -src => '/take.css' }, ], 
	);
	$ret .= $q->h1( $q->a( { -href => $q->url }, $cgiName ) );
	return $ret;
}

sub makeFooter
{
	my $ret = '';
	$ret .= $q->end_html . "\n";
	return $ret;
}

sub execWhois
{
	my $domain = shift || '';
	my $ret = $q->pre( join( "", `jwhois -df $domain` ) );
	return $ret;
}

sub makeForm
{
	my $ret = '';
	$ret .= $q->start_form(
		-action		=> $q->url,
		-enctype	=> 'multipart/form-data',
	);
	$ret .= $q->start_table( { -summary => 'Parameters', -border => 1 } );
	$ret .= $q->Tr(
		$q->th( 'Domain' ),
		$q->td( $q->textfield( -name => 'domain', -size => 50 ) ),
	);
	$ret .= $q->Tr( $q->th(
		{ -colspan => 2, -align => 'center' },
		$q->submit( -name => 'action', -value => 'search' ), 
	) );
	$ret .= $q->end_table();
	$ret .= $q->end_form;
	return $ret;
}

# EOF

WhoisGW.conf

<Directory "/var/www/html/WhoisGW">
	AllowOverride AuthConfig
	AuthType Digest
	AuthName "WhoisGW"
	AuthUserFile /var/www/passwd/passwords_digest
	Require user whois
	Options +ExecCGI
	DirectoryIndex index.html index.htm index.cgi
	Order allow,deny
	Allow from all
</Directory>

リンク