nmapでサーバーの生存確認をする

自分の家のサーバー構成は前回話した感じになっている
(DNSを切り替えることでつながる先をスイッチしている)
自宅のサーバーが落ちるときにDynDNSを更新してレンタルサーバーに向くようにしているけど、これが結構失敗したりするので、レンタルサーバー側でも定期的に監視するようにした。
監視は以下の手順で行う

1.まずDNSで名前を引いて自分(レンタルサーバー側)に向いているか自宅に向いているか調べる
→自分に向いていたら問題ないので処理終了
→自宅に向いていたら2へ

2.自宅のサーバーのメールポートにコネクションが張れるか確認
→張れたら問題なく稼動しているので処理終了
→駄目なら自宅鯖が落ちてると判断しDynDNSを更新してDNSを自分に向かせる

以上の処理をcronに登録して1時間置きにやってみる
nmapでスキャンするときには-PNと-sTをつけるのがポイント
-PN → 自宅のルーターはpingに反応しないのでホストの生存確認は不要
-sT → ルーターからNAPT環境だとステルススキャン(-sS)はうまくいかなかった
nmap hogehoge.net -p 25 -v -PN -sT

あとは適当にスクリプトを組む
#!/usr/bin/perl
use strict;
use warnings;

#################################
# LOG
my $LOG="/var/log/hogelog";
#################################


my @result = `nmap hogehoge.net -p 25 -PN -sT`;

if ( join("",@result) =~/25\/tcp\s+open\s+smtp/ ){
system "logger 'JITAKU MAIL IS LIVE!!'" and die $!;
logadd (@result);
}
else {
system "logger 'JITAKU MAIL IS DEAD!!'" and die $!;
my @ddc=`ddclient -verbose -ip 123.123.123.123`;
logadd (@ddc);
}


sub logadd {
my @data=@_;
open (WR,">>$LOG") or die $!;
print WR @data;
close WR;
}

参考リンク
nmap日本語man