Skip to content

Instantly share code, notes, and snippets.

@Lycolia
Created February 21, 2021 23:27
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Lycolia/98b79d12319d952b51166430880e9f61 to your computer and use it in GitHub Desktop.
Save Lycolia/98b79d12319d952b51166430880e9f61 to your computer and use it in GitHub Desktop.
update ip-address for MyDNS.jp by bash
#!/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