家の Global IP を固定するほどでもないけど、外出先でも知れたらいいなぁと思って、LINE に通知してみることにしました。
家に常設している Raspberry Pi で家の Global IP を取得して、LINE Notify
を使って LINE に通知を流すと言う感じです。
実装のイメージはこんな感じです↓
1. Global IP を取得する
Global IP を取得するためには curl
で inet-ip.info
にアクセスするだけです。s
オプションは余計な出力をしないためにつけています。curl
のその他のオプションは以下の記事などを参考にしてみてください。
$ curl -s inet-ip.info
123.45.67.89 # コマンドを実行したデバイスの Global IP アドレス
2. LINE Notify を使う
2.1. LINE Notify のトークンを発行する
LINE Notify
は GitHub や IFTTT などと連携して、LINE のチャットルームにメッセージを送ることができる API です。LINE Notify
を使うためには、まずトークンを発行しないといけないので、トークンを発行していきます。
以下の LINE Notify
のページにアクセスして、右上の ログイン
から普段使っている LINE アカウントでログインしてください。
ログインができたら マイページ
に移動して、一番下にある アクセストークンの発行(開発者向け)
のところで トークンを発行する
を押してください。
トークンを発行する画面が出てきたらトークン名と通知を送信するトークルームを選択してください。
トークン名について分かりにくければ、次の 2.2 章に出てくるメッセージの画像を参考にしてみてください。
右下の画像にも書かれていますが、発行したトークンは一度閉じると二度と開けなくなるので、しっかり保存しておいてください。
これで、無事 LINE Notify
のトークンを取得できました。
次はこのトークンを使ってメッセージを送っていきましょう。
トークン発行については以下の記事も参考にしてみてください。
2.2. LINE に通知を送信してみる
通知の送信はコマンド一つでできるので楽ちんです。Authorization: Bearer 9F…
の 9F...
の部分には先ほど取得したトークンを入れてください。{"status":200,"message":"ok"}
が返ってくれば OK です!
$ curl -s -X POST -H 'Authorization: Bearer 9F...' -F 'message=123.45.67.89' https://notify-api.line.me/api/notify
{"status":200,"message":"ok"}
詳しい意味としては、「https://notify-api.line.me/api/notify
に対して、ヘッダが Authorization: Bearer 9F…
(-H
)、内容が message=123.45.67.89
(-F
) の POST
メソッド (-X
) を実行してください。」という感じになります。
このコマンドの打ち方は以下の記事を参考にしました。
実際に届いたメッセージは以下のようになりました。[aaa]
の部分が先ほど設定したトークン名になります。
3. ラズパイで 30 分おきに自動で実行されるようにする
ここまでで、Global IP を取得して、それを LINE Notify
を使って LINE に通知ができるようになりました。
せっかくなので、これを自動化して、常時チェックしてくれるようにしましょう。
一回前に Global IP を調べた時から変化している時だけ通知するようにしています。
初めにコードを公開して、少しずつ解説していきたいと思います。
#!/bin/bash
newip=`curl -s inet-ip.info`
for i in `seq 5`
do
if [ "$newip" = '' ]; then
newip=`curl -s inet-ip.info`
fi
done
if [ "$newip" = '' ]; then
exit 1
fi
oldip=`cat /path/to/current_ip`
if [ $oldip != $newip ]; then
echo "$newip" > /path/to/current_ip
curl -s -X POST -H 'Authorization: Bearer 9F...' -F 'message='"$newip"'' https://notify-api.line.me/api/notify
fi
echo $newip
まず、各自で変更しないといけないのは、色をつけた 12, 14, 15 行目です。
12 行目では一回前に調べた時の Global IP を取得しているので、その IP を保存するためのファイルを (空でいいので) 作って、そのパスを /path/to/current_ip
と置き換えてください。
14 行目は新しい Global IP をファイルに書き込む部分なので、先ほどと同じようにパスを変更しておいてください。
15 行目の 9F...
の部分は先ほど取得した各自のトークンを入れておいてください。
11 行目までの前半部分は inet-ip.info
を使って Global IP を取得する部分ですが、失敗した場合のために何度か試して、それでもうまくいかない場合は途中でプログラムを終了しています。
これで、Global IP を取得して、LINE に通知するスクリプトが書けました
最後に 30 分おきにこのスクリプトが実行されるように設定していきます。
まずはこのスクリプトに実行権限を与えておきましょう。
$ chmod +x ipcheck
次に cron
に登録しておきます。
$ crontab -e
# 以下の行をどこかに追記
*/30 * * * * /path/to/ipcheck 1>/dev/null
これで、毎時 30 分にこのスクリプトが実行されるようになりました。
うまくいっていない場合は ipcheck
の実行権限を疑ってみましょう。
4. まとめ
今回は Raspberry Pi を使って Global IP を LINE に通知する方法について解説しました。
外出先でも家の Global IP が知れるのであれば、わざわざ IP を固定する必要もなくて楽ですね〜