« 今週の残念な質問術 | ホーム | OmniFocusがよくわかりませんよ »
2008年2月 4日
今週のもっと自動化しよう
最近tinydnsでのDNS管理のが多いんだけど一方でBINDも使ってたりするので、両者の間で移管作業とかなるとちょっとくらくらする。しかも趣味でなく業務だったりすると一個でもRR抜けたりすると下手すりゃ血を見るのでまあがくぶるなわけで。
#!/usr/bin/perl
use DNS::ZoneParse;
use strict;
use warnings;
my $fname = $ARGV[0];
my $origin = $ARGV[1];
my $p = new DNS::ZoneParse($fname, $origin);
print "Z" . $p->origin . ":" . $p->soa->{primary} . ":" . $p->soa->{email} . "\n";
# NS RR
foreach (@{$p->ns()}) {
my $ttl = ($_->{ttl} ? $_->{ttl} : $p->soa->{ttl});
print "&" . $p->origin . ":" . $_->{host} . ":" . $p->soa->{ttl} . "\n";
}
# MX RR
foreach (@{$p->mx()}) {
my $ttl = ($_->{ttl} ? $_->{ttl} : $p->soa->{ttl});
if ($_->{name} eq "@") {
print "@" . $p->origin . "::" . $_->{host} . "." . $p->origin . ":" . $p->soa->{ttl} . "\n";
} else {
print "@" . $_->{name} . "." . $p->origin . "::" . $_->{host} . "." . $p->origin . ":" . $p->soa->{ttl} . "\n";
}
}
# TXT RR
foreach (@{$p->txt()}) {
my $ttl = ($_->{ttl} ? $_->{ttl} : $p->soa->{ttl});
my $txt = $_->{text};
$txt =~ s/:/\\072/g;
if ($_->{name} eq "@") {
print "'" . $p->origin . ":" . $txt . ":" . $p->soa->{ttl} . "\n";
} else {
print "'" . $_->{name} . "." . $p->origin . ":" . $txt . ":" . $p->soa->{ttl} . "\n";
}
}
# A RR
foreach (@{$p->a()}) {
my $ttl = ($_->{ttl} ? $_->{ttl} : $p->soa->{ttl});
if ($_->{name} eq "@") {
print "+" . $p->origin . ":" . $_->{host} . ":" . $p->soa->{ttl} . "\n";
} else {
print "+" . $_->{name} . "." . $p->origin . ":" . $_->{host} . ":" . $p->soa->{ttl} . "\n";
}
}
トラックバック(0)
トラックバックURL: http://foursics.jp/cgi-bin/mt/mt-tb.cgi/162
コメントする