自分の場合、月イチくらいでNVR500のSyslogを見て、かかってきた電話番号を迷惑電話チェックサイトを使って調べ、着信拒否するという作業をしているんですが、最近は特にフリーダイアルである0120からの電話が多く、チェックするだけでも面倒になってきたので、電話着信の都度メールさせることでチェック漏れを減らし、変な時間帯にかけてくる業者をあぶり出そうかなということで、そういうスクリプトを設定してみました。
といっても、YAMAHA様のサイトに掲載されているサンプルスクリプト にちょっと手を入れただけなので、たいした事はやってませんが……。
本当は、NVR500の着信拒否リストと比較して0120からはじまる番号は自動で拒否リストに追加、という感じのことをやりたかったものの、ゼロからそういうコード書くのは時間かかりそうだったので、サンプル流用でお茶を濁しました。(一番は analog arrive restrict で 0120* みたいなワイルドカード使った一括拒否ができれば最高なんですが……)
ということで、同じようなことをしたい方の参考になれば幸いです。
スポンサードリンク
自分のテストした環境としては、ナンバーディスプレイ契約をしていて、電話回線はNVR500にひかり電話を直収していない(ホームゲートウェイからLINE経由で接続) 環境となります。
メール送信元はYahoo! JAPANのメールアドレスとし、SMTP-AUTH で認証しています。GMailだとSMTP-AUTHにSSL接続が必須のようで、SMTP-AUTHのSSL接続に対応していない(らしい) NVR500ではうまくメール送信できませんでした。
--[[
●SYSLOG 監視スクリプト
SYSLOG を監視し、特定の文字列が含まれたログを検出したら、指定した show コ
マンドおよび show log コマンドの出力結果を管理者にメールで送信するスクリプ
トです。
<説明>
・このファイルを RTFS か外部メモリに保存してください。
・本項目の config の設定では schedule at コマンドでルーター起動時に Lua スク
リプトが実行されるように設定しています。
・スクリプトを停止するときは terminate lua コマンドを実行してください。
・再度、Lua スクリプトを実行する場合は lua コマンドで実行してください。
・★マークの付いた設定値は変更が可能です。
<ノート>
・メールの送信失敗時に出力する SYSLOG レベルを指定可能です。
SYSLOG のレベルを指定するには、log_level を設定してください。
debug レベル、notice レベルの SYSLOG を出力するためには、それぞれ以下の設定
が必要です。
debug レベル ・・・ syslog debug on
notice レベル・・・ syslog notice on
・本スクリプトファイルを編集する場合、文字コードは必ず Shift-JIS を使用してく
ださい。
]]
--------------------------## 設定値 ##--------------------------------
-- 検出したい SYSLOG の文字列パターン
ptn = "InComing Call from" -- ★
-- ptn の文字列パターンを検出した時に結果を通知する show コマンドをカンマで区切って列挙する
-- 例えばルーターの設定を通知する場合には、"show config" を、
-- ログを通知したい場合には "show log" を記述する
cmd_tbl = { -- ★
"show history | grep TEL | grep 通信中"
}
-- メールの設定
mail_tbl = { -- ★
smtp_address = "smtp.mail.yahoo.co.jp",
smtp_port = "587",
smtp_auth_protocol = "plain",
smtp_auth_name = "USER-ID",
smtp_auth_password = "PASSWORD",
from = "USER-ID@yahoo.co.jp",
to = "mail-address@example.com"
}
-- メールの送信に失敗した時に出力する SYSLOG のレベル (info, debug, notice)
log_level = "debug" -- ★
----------------------## 設定値ここまで ##----------------------------
------------------------------------------------------------
-- コマンドを実行結果を出力する関数 --
------------------------------------------------------------
function exec_command(cmd)
local rtn, str
rtn, str = rt.command(cmd)
if (not rtn) or (not str) then
str = "実行失敗\r\n"
end
return rtn, string.format("# %s\r\n%s\r\n", cmd, str)
end
------------------------------------------------------------
-- 現在の日時を取得する関数 --
------------------------------------------------------------
function time_stamp()
local t
t = os.date("*t")
return string.format("%d/%02d/%02d %02d:%02d:%02d",
t.year, t.month, t.day, t.hour, t.min, t.sec)
end
------------------------------------------------------------
-- メインルーチン --
------------------------------------------------------------
local rtn, str
while (true) do
rtn, str = rt.syslogwatch(ptn)
if (rtn) and (str) then
mail_tbl.text = string.format("ログに検索文字列が検出されました。\r\n検索文字列: \"%s\"\r\n\r\n", ptn)
for i, cmd in ipairs(cmd_tbl) do
rtn, str = exec_command(cmd)
mail_tbl.text = mail_tbl.text .. str
end
mail_tbl.subject = string.format("電話の着信を検知しました (%s)", time_stamp())
rtn = rt.mail(mail_tbl)
if (not rtn) then
rt.syslog(log_level, "failed to send mail. sd1:/local/call.lua")
end
end
end
過去の着信電話番号もメールで送られることがあったため(同一電話番号で複数回コールテストを行った場合には発生しなかったのですが)、現在着信中の電話番号のみ通知するよう、「show history | grep TEL」コマンドを「show history | grep TEL | grep 通信中」に修正しました。
まず、mail_tbl の内容を使用する環境にあわせて設定します。Yahoo! JAPANのメールアドレスを使用するなら、smtp_auth_name(メールアドレスの@以前を指定)、smtp_auth_password(メールアドレスのパスワード)、from、to を設定するだけでOKです。他のメールサービスを利用する場合は、追加で smtp_address(SMTPサーバー名)、smtp_port(SMTPポート番号)、smtp_auth_protocol(SMTP-AUTHの認証プロトコル) についても、各サービスにあわせて設定します。
また、このスクリプトでは設置位置を rt.syslog(log_level, “failed to send mail. sd1:/local/call.lua”) と指定しています。これは、MicroSDの local ディレクトリ(ファイル共有機能でアクセス可能なディレクトリ)に、call.lua というファイル名で保存することを想定していますので、別の場所・ファイル名で使用する場合は、適宜変更してください。(エラー発生時にSyslog出力する際、スクリプトの場所を出力しているだけの部分なので、特に変更しなくても実害はないと思いますが)
スクリプト内容の修正が終わったら、起動時に自動実行されるように、以下のようなコマンドをコンソールまたはWebのコマンド実行画面から入力します。
schedule at スケジュール番号 startup * lua スクリプト名
今回の例では、以下のようにしました。スケジュール番号は、重複しなければ適当な数字を入れればOKです。また、 save コマンドを入力して、再起動しても設定が消去されないようにしておきます。
schedule at 99 startup * lua sd1:/local/call.lua save
ここまで設定できたら restart コマンドを入力して再起動し、電話をかけてみましょう。以下のようなメールが届けば正常に動作しています。(電話番号などは例です)
Subject : 電話の着信を検知しました (2015/04/15 14:00:00) Model: NVR500 Revision: Rev.11.00.25 Time: 2015/04/15 14:00:02 ログに検索文字列が検出されました。 検索文字列: "InComing Call from" # show history | grep TEL | grep 通信中 2015/04/15 14:00:00 TEL* [着信] 00:00:00 通信中 0120123456789
これでセールスの電話がかかってきても即チェックできるなーと思いつつ、設定してから数日、そういう時に限って電話はかかってこないという、マーフィーの法則を地で行っている今日この頃ですが、目先の話はさておいても、月イチのSyslogチェックの手間は多少なりとも軽減されるかなーということで。
YAMAHA様のサイトには、他にも スクリプト例 が掲載されているので、いろいろ試してみるのも面白いかと思います。
……さて、そろそろNVR500だけでなく、購入してから4ヶ月くらい開封してないRTX1210の導入および、家庭内ネットワーク環境の変更にも手を付けないと……。
スポンサードリンク
当サイトのコメント欄は承認制となっております。また、日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)
2 Responses to NVR500のLUAスクリプトを使って電話着信をメール通知するようにしてみた