Created
February 21, 2021 23:27
-
-
Save Lycolia/98b79d12319d952b51166430880e9f61 to your computer and use it in GitHub Desktop.
update ip-address for MyDNS.jp by bash
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# 関数定義 | |
## ログ出力して終了 | |
put_exit_log() { | |
# ログ文字列生成 | |
log_mes="DATE:${exec_date}" | |
log_mes="${log_mes}\tIP_GET_STATE:${ip_rescd}" | |
log_mes="${log_mes}\tGET_v4IP:${ipv4_addr}" | |
log_mes="${log_mes}\tMyDNS_UPDATE_STATE:${ddns_rescd}" | |
log_mes="${log_mes}\tMyDNS_LOGIN_CODE:${ddns_login_cd}" | |
log_mes="${log_mes}\tMyDNS_ERR_MES:${ddns_err_mes}" | |
log_mes="${log_mes}\tNOTE:${result_note}" | |
# ログ出力 | |
echo -e $log_mes | |
exit 0 | |
} | |
# 設定値 | |
mydns_id="" | |
mydns_pw="" | |
# 初期化 | |
## 実行日時 | |
exec_date=`date "+%Y/%m/%d %H:%M:%S"` | |
## IP取得レスポンスコード | |
ip_rescd="<NULL>" | |
## IPv4 | |
ipv4_addr="<NULL>" | |
## DDNS更新レスポンスコード | |
ddns_rescd="<NULL>" | |
## DDNSログインステータスコード | |
ddns_login_cd="<NULL>" | |
## DDNSエラーメッセージ | |
ddns_err_mes="<NULL>" | |
## 実行結果のメモ | |
result_note="<NULL>" | |
# IPv4取得 | |
ip_res=`echo "\""$(curl inet-ip.info/ip -s -m 10 -w ' %{http_code}')"\""` | |
if [ ${#ip_res} -gt 19 ]; then | |
# 取得データの桁数 > IP最大桁 + space + HTTPステータス桁 | |
## HTMLが入っているとログが壊れるのでログに入れない | |
result_note="DDNS更新失敗:IPv4アドレス取得リクエストでの取得データが不正" | |
ipv4_addr="<NULL>" | |
# 終了 | |
put_exit_log | |
fi | |
## レスポンスコードの分離 | |
ip_rescd=`echo $ip_res | sed -r "s/\".*(.{3})\"$/\1/"` | |
# DDNS更新 | |
if [ ${ip_rescd} = "200" ]; then | |
# IPv4取得成功 | |
## IPv4の分離 | |
ipv4_addr=`echo $ip_res | sed -r "s/\"([^\"]+?) [^\"]{3}\"/\1/"` | |
## DDNS更新リクエスト | |
ddns_res=`echo "\""$(curl -s -m 10 -w ' %{http_code}' "https://www.mydns.jp/directip.html?MID=${mydns_id}&PWD=${mydns_pw}&IPV4ADDR=${ipv4_addr}")"\""` | |
### レスポンスコードの分離 | |
ddns_rescd=`echo $ddns_res | sed -r "s/\".+(.{3})\"$/\1/"` | |
if [ ${ddns_rescd} = "200" ]; then | |
# DDNS更新リクエストOK | |
## ログインコードの取得 | |
ddns_login_cd=`echo $ddns_res | sed -r "s/.+login_status = (.*?)\.<BR>.+/\1/"` | |
if [ ${ddns_login_cd} = "1" ]; then | |
# ログイン成功 | |
result_note="DDNS更新成功" | |
else | |
# ログインでコケたらエラーメッセージを取る | |
ddns_err_mes=`echo $ddns_res | sed -r "s/.+<BR> <BR> (.+?) <BR> <DT>.+/\1/"` | |
result_note="DDNS更新失敗:MyDNSログイン失敗:MyDNS_LOGIN_CODE参照" | |
fi | |
else | |
# DDNS更新リクエストNG | |
if [ ${ddns_rescd} = "000" ]; then | |
# タイムアウト | |
result_note="DDNS更新失敗:DDNS更新リクエスト失敗:HTTPタイムアウト" | |
ipv4_addr="<NULL>" | |
else | |
# それ以外 | |
result_note="DDNS更新失敗:DDNS更新リクエスト失敗:HTTPエラー:MyDNS_UPDATE_STATE参照" | |
ipv4_addr="<NULL>" | |
fi | |
fi | |
else | |
# IPv4取得失敗 | |
if [ ${ip_rescd} = "000" ]; then | |
# タイムアウト | |
result_note="DDNS更新失敗:IPv4取得失敗:HTTPタイムアウト" | |
ipv4_addr="<NULL>" | |
else | |
# それ以外 | |
result_note="DDNS更新失敗:IPv4取得失敗:HTTPエラー:IP_GET_STATE参照" | |
ipv4_addr="<NULL>" | |
fi | |
fi | |
# 終了 | |
put_exit_log |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment