#!/usr/local/bin/perl use Jcode; use Convert::RACE 'to_race'; use Socket; open(LOG, ">>/tmp/dnsserver.log"); select(LOG); $| = 1; select(STDOUT); $| = 1; sub log { my $mes = shift; flock(LOG, 2); seek(LOG, 0, 2); print LOG $mes; flock(LOG, 8); } while() { chomp; tr/\r//d; &log("<< $_\n"); if(m/^\$hello/) { print '$alive' . "\n"; next; } if(m/^\$shutdown/) { exit(0); } if(m/^(\d+)\.(\d+)\.(\d+)\.(\d+)$/) { my $name = gethostbyaddr(pack('CCCC', $1, $2, $3, $4), AF_INET); if(defined($name)) { print '$addr 0 ' . $name . "\n"; &log("resolv: $name\n"); } else { print '$fail DNS Domain PTR ' . "'$_' is invalid\n"; } next; } my $name; my $race; foreach $n (split(/\./, $_)) { eval { $race .= to_race(Jcode->new($n, 'sjis')->ucs2) . '.'; }; if ($@) { $race .= $n . '.'; } } chop $race; # $race = uc($race); &log("race: $race\n"); $name = join('.', unpack('CCCC', gethostbyname($race))); # chop $race; if(defined($name) and $name ne '') { print '$addr 0 ' . $name . "\n"; &log("resolv: $name\n"); } else { print '$fail DNS Domain ' . "'$race' is invalid\n"; &log("unresolv: $race\n"); } }