www.smiyasaka.com は、 2022 年 11月から Oracle LInux 8.X にOSを変更しました。

● 自分のグローバルIPアドレスの取得方法の解説 ●

アクセス数 昨日 47 今日 3
  累計 170,345   

ルータのグローバル IP アドレスを取得するプログラムは、Linux のコマンドを使用するため、シェルスクリプトで作っています。

以下が、グロバル IP アドレスを取得し、ホームページに表示する為、先人の知恵等を参考にして作成したプログラムです。

※※ ドメイン( URL )でホームページが公開できる条件 ※※

外部から、
ドメインでアクセスした時に、自分のサーバ機に到達する条件は、ネームサーバー ( DNSとは、Domain Name System ・ ネームサーバーとは、別名 DNS サーバー ) 管理しているグローバル IP アドレスルータの wan 側 の IP アドレス(プロバイダが 割り振った IP アドレス)と一致する必要があります。

一致しない時には、手作業でネームサーバーに登録し直すか、DiCE 等のプログラムを使 用して、自動でネームサーバーに新しいグローバル IP アドレスを登録し直します。

ちなみに、DiCE 等のプログラムの動作は、設定された時間毎(10分毎とか)にアクセス元のグローバル IP アドレスを返してくれるサイトにアクセスし、グローバル IP アドレスの変化を監視し、変化が あった時には、ネームサーバーに新しいグローバル IP アドレスの変更登録を自動でします。

私が使用している VALUE DOMAIN の場合、最大で 20 分位で更新されるみたいです。

実際、私の場合、グローバル IP アドレス更新時間短縮の為、手動でネームサーバの情報を直接書き換えています。
グローバル IP アドレス変化確認は、自前チェックプログラムで 1時間毎にしています。
2020年 10 月からは、毎月 1 日と 15 日に
自前プログラムでネームサーバへのダイナミック DNS 定期更新をしています。

※ 注 意 事 項 ※ を見る[ここをクリック]

目    次
[○○○○]のクリックで、その内容が目次の下に表示、再度クリックで非表示になります。


私のサーバ機では、ダイナミックグローバル IPアドレス つまり、私が契約している プロバイダ [ STNet ピカラ ] が割り付けた IPアドレスをネームサーバ [ 私の場合、VALUE-DOMAIN ] に登録し運用しています。
※※ 注意 ※※
 Oracle Linux 8.X では、dig コマンドが使えないので下記パッケージをインストールして
dig コマンドが使えるようにします。
dnf -y install bind-utils

※※ 下記は、今取得したあなたと私のサーバのグローバル IP アドレスです。 ※※

取得した場所 (コマンド等) グローバル IP アドレス
あなたの IP アドレス
( ホームページのアクセス情報から取得 )
98.84.18.52
ネームサーバ ( VALUE DOMAIN )
( dig コマンドで取得 )
183.176.80.55
モデム ( ルータ )
(プロバイダの STNet が割付)
183.176.80.55

1. ルータが、管理しているグローバルIPアドレスの取得
( NEC Aterm WH822N・Aterm WH832A )

ルータ( NEC Aterm WH822N )が、管理しているグローバルIPアドレス( wan 側の IP アドレス)は、 ルータに、アクセス(http://192.168.0.1/)して、ID とパスワードを入力し、[ 情報 ]--->[ 現在の状態 ]---> [ 拡張表示 ]で見ることができるので、この情報から、グローバル IP アドレスの部分だけを抽出します。

ルータのグローバル IP アドレスは、プロバイダー(私の場合、STNe t)が割付けたアドレスで、
ルータ の電源の ON/OFF で再割付けされ変更してしまいます
当然ですが、プロバイダーの都合( 機器のメンテナンス等 )で勝手に変更されてしまいます。

● プログラム( シェルスクリプト プログラム名 ipcheck.sh )の作成

プログラム作成上の要は、長い HTML ソースから、いかにして目的とする行を抽出するかです。
NEC の Aterm では、グローバル IP アドレスを表示する行( 下記 )の HTML ソースに半角スペースが、4個入っている事で最小限の行の抽出で済みました。

<td class='small_item_td2' colspan='2'>    133.123.130.65</td>

※参考情報 このプログラムは、シェルスクリプトで作成した方が簡単になるようです。
(○○○は、ID ×××は、パスワードを意味します。)

※1 リスト内のコメントは、グローバル IPアドレスが、
133.123.130.65 の時のものです。
コメントが沢山入っていますが、プログラムがあまりにも簡単なので、処理の流れを忘れないために、入れています。  必要な行は、10 行しかありません。

※2 wgetでダウンロードしたデータは、URLのファイル名でシェルを実行したフォルダに保存されます。
( cron で実行した時は、root・コマンドで実行した時には、プログラムが実行したパス上に保存されます。)

※3 ルータの機種が違う時には、下記のプログラム通りでは、グローバルIPアドレスの取得は、でき ませんのでルータにアクセスして管理画面を表示し、その HTML のソースリストを解析して 探す 文字列・消去する文字列を変更してください。

※4 プログラムは、分かりやすくする為、sed を分割して実行させています。

※5 漢字が含んだ行の抽出の場合には、必要に応じてアプリ nkf 等でコード変換( 内部コードは、UTF8 です。)が必要になります。

確認方法として、Tera Term( ユーザ権限 )から実行した時に上手く行き、cron で実行させた時 に上手く行かない時には、漢字コードの変換が必要です。参考まで。
( 日本語文字コードをインストール後の初期設定で UTF8 ---> eucJP にしている場合は、漢字 コードの変換が必要になると思います。必要に応じて確認をしてください。)

※※ 注意 1 ※※ ( H24.04.27 追記 )

ルータへのアクセスで、必ず一回目の承認が、エラーになるため、ホームページから、下 記プログラム( ipcheck.sh )を実行すると、その都度 apache のエラーログに記録されます。
 そのため、現在は、crontab で、4時間ごとに実行させ、取得データをファイルに記録し、ホームページ側から、ファイルの内容を表示する様に改造しています。
これにより、apache のエラーログの記録が、無くなりました。また、ルータへの負担も軽減されました。
 グローバルIPアドレスは、滅多に変わることがないので、一日に、一回でも良いのですが、特に根拠はありませんが、4時間毎にしています。

※※ 注意 2 ※※ ( H24.07.28 追記 )

wget で 、書込みフォルダの 属性を 666 か、777 することを忘れないようにしてください。
-P オプションを付けると任意のフォルダへの書込みか出来ます。
これを忘れて、HTMLから、wget を実行した後、apache のログファイルを見ると、Cannot write to `書き込み先のフォルダ名・ファイル名` ( Permission denied ).
( このエラーは、書込み権限が無いので、書き込みできませんという意味です。 )となり、書込みが実行されて無いことがわかります。

※※ 参考情報 ※※

 下記のプログラムでいちいちルータのグローバル IP アドレスを取得しなくともアクセス元のグローバル IP アドレスを表示してくれるサイトへの アクセスでも、結果としては、同じグローバル IP アドレスが、取得できます。
例えば、https://dyn.value-domain.com/cgi-bin/dyn.fcg?ip などです。

(グローバル IP アドレスは、133.123.130.65 で説明しています。)

#!/bin/sh
#
# ファイル名 : ipcheck.sh
# 
192.168.0.1/index.cgi/info_main で [ 現在の情報 ] の HTML のソースファイルを取得する。
# 
取得結果は、ファイル名  info_main  で格納される。
#
wget --http-user ○○○ --http-passwd ××× \
http://192.168.0.1/index.cgi/info_main
#
# 
ゲットしたソースリストから、 "<td class='small_item_td2' colspan='2'>    "
# 
に一致する行のみを抽出する。
# 
colspan='2'>[この間 半角スペース 4個が入ります]" info_main このスペースが大事です。
#
IP1=$(grep "<td class='small_item_td2' colspan='2'>    " info_main )
#
#
  上記の実行結果  この2行だけに 半角スペース 4個が入っています
# <td class='small_item_td2' colspan='2'>    192.168.0.1/24</td>
# <td class='small_item_td2' colspan='2'>    
133.123.130.65</td>
#
IP3=$(echo $IP1 | sed -e "s/[']//g")  
<---- 'の削除
#
# 
上記の実行結果
# <td class=small_item_td2 colspan=2>    192.168.0.1/24</td>
# <td class=small_item_td2 colspan=2>    
133.123.130.65</td>
#
IP4=$(echo $IP3 | sed -e 's/td2//g' -e 's/=2//g')  
<---- td2,=2 の削除
#
# 
上記の実行結果
# <td class=small_item_ colspan>    192.168.0.1/24</td>
# <td class=small_item_ colspan>    
133.123.130.65</td>
#
IP4=$(echo $IP4 | sed -e "s/[^0-9\.]//g")  
<---- 数字と "." 以外削除
#
#
上記の実行結果 133.123.130.65 がグローバル IP アドレスです。
# 192.168.0.124
133.123.130.65
# 192.168.0.124 は、192.168.0.1/24 の "/" が無くなって変わった数値列です。
# 不要なので、下記で削除します。その結果、133.123.130.65 だけが残ります。
#
IP=$(echo $IP4 | sed -e "s/192.168.0.124//g") 
<---- 192.168.0.124の配列を削除
echo "$IP" 
<---- ここでグローバルIPアドレスだけが、出力できます。
#
# 
info_mainのデータ、不要なのでファイルを削除する。
# 
これをしないと、info_main のファイルが沢山作られます。
#
rm info_main
#

上記プログラムは、コメントを沢山入れているのでごちゃごちゃしていますが、本文は、下記のように少ししかありません。

#!/usr/bin/sh
#
wget --http-user ○○○ --http-passwd ××× \
http://192.168.0.1/index.cgi/info_main
#
IP1=$(grep "<td class='small_item_td2' colspan='2'>    " info_main )
#
IP3=$(echo $IP1 | sed -e "s/[']//g")
#
IP4=$(echo $IP3 | sed -e 's/td2//g' -e 's/=2//g')
#
IP4=$(echo $IP4 | sed -e "s/[^0-9\.]//g")
#
IP=$(echo $IP4 | sed -e "s/192.168.0.124//g")
echo "$IP"
#
rm info_main

上記プログラムは、ルータ( NEC Aterm WH822N )から取得した管理画面の HTML のソースリストをファイルとして保存し処理していましたが、 HTML のソースリストを変数へ書き込んだ場合は、下記のようになります。
( 変更部分は、
赤字で表示しています。)
   ---- 省略 ----
Get_HTML=$(wget -O - --http-user ○○○ --http-passwd ××× \
'http://192.168.0.1/index.cgi/info_main')
#
   ---- 省略 ----
#
IP1=$(echo ${Get_HTML} | grep "<td class='small_item_td2' colspan='2'>    ")
#
   ---- 省略 ----
rm info_main <---- 削除します

 (※) --http-user ○○○ --http-passwd ××× の○○○・×××は、
 NEC Aterm WH822Nにアクセスするための、ID・パスワードです。
 5GB wifi 対応 NEC Aterm WH832A も同じプログラムで取得できました。
● 以下は、ルータ(NEC Aterm WH822N)から取得した管理画面のHTMLのソースリストです。
(一行が長い部分は、数行にしています。
  このリストの時のグローバルIPアドレスは、
133.123.130.65 です。)

(前 省略)
 <tr class='advView'>
 <td colspan='2'><h2>LAN側状態<input type='image' class='help' alt='help'
  value='ヘルプ' src='/common/help_btn.gif' onclick="HelpShow(event,
  '本商品のLAN側の状態を表示します。');return false;" /></h2></td>
 </tr>
 <tr class='advView'>
 <td class='small_item_td'>IPアドレス/ネットマスク<input type='image' class='help'
  alt='help' value='ヘルプ' src='/common/help_btn.gif' onclick="HelpShow(event,
  '本商品で使用するLAN側のIPアドレス/ネットマスクを表示します。');
return false;" /></td>
 
<td class='small_item_td2' colspan='2'>    192.168.0.1/24</td>
 </tr>
 <tr class='advView'>
 <td colspan='2'><h2>接続先1 [接続先1] 状態<input type='image'
class='help' alt='help'
  value='ヘルプ' src='/common/help_btn.gif' onclick="HelpShow(event,
  '本商品の接続先1の状態を表示します。');return false;" /></h2></td>
 </tr>
 <tr class='advView'>
<td class='small_item_td'>WAN側IPアドレス<input type='image' class='help' alt='help'
  value='ヘルプ' src='/common/help_btn.gif' onclick="HelpShow(event, '接続先1
で使用するWAN側のIPアドレスを表示します。');return false;" /></td>
<td class='small_item_td2' colspan='2'>    133.123.130.65 </td>
 </tr>
 <tr class='advView'>
 <td class='small_item_td'>WAN側プライマリDNS<input type='image' class='help'
  alt='help' value='ヘルプ' src='/common/help_btn.gif' onclick="HelpShow(event,
  '接続先1で使用するWAN側のプライマリ(優先)DNSサーバを表示します。')
;return false;" /></td>
 <td class='small_item_td2' colspan='2'>218.231.54.19</td>
 </tr>
 <tr class='advView'>
 <td class='small_item_td'>WAN側セカンダリDNS<input type='image' class='help'
   alt='help' value='ヘルプ' src='/common/help_btn.gif' onclick="HelpShow(event,
   '接続先1で使用するWAN側のセカンダリ(予備)DNSサーバを表示します。')
;return false;" /></td>
 <td class='small_item_td2' colspan='2'>218.231.54.3</td>
 </tr>
    (後 省略)


○ perlのプログラム上で ipcheck.sh を実行させる方法です。

以下が、perlで、作成したプログラムです。


#
# Aterm WH822Nが持っているグローバルIPアドレスを
# シェルスクリプト(ipcheck.sh)を実行して取得する。
# パスの設定は、フルパスで。
#
$atermip = `/var/www/html/○○○○/ipcheck.sh`;
#


2. digコマンドでネームサーバから、グローバルIPアドレスを取得

2020.10.17 プログラムを簡素化してみました。
nslookup www.smiyasaka.com でも、自分のグローバルIPアドレスを取得できますが、digコマンドの 情報量が多いので、こちらで実現してみました。

以下が、シェルスクリプトで、作成したプログラム(ipnamesrv.sh)です。
※ リスト内のコメントは、グローバルIPアドレスが、
119.150.8.211 の時のものです。
ドメインを換えるだけで、他のドメインからのグローバルIPアドレスの取得ができます。
( www.smiyasaka.com は、私のドメインですので使用時には、変更して使用ください。 )

#!/bin/sh
# ファイル名 : ipnamesrv.sh
# H23.12.06 作成 by S.Miyasaka
# 2020.10.17 変更 プログラムを簡素化しました。
# ネームサーバーからグルパルIPアドレスを取得する。
# 取得結果は、ファイル get_data に格納される。
#
get_data=$(dig www.smiyasaka.com | grep -A 1 ";; ANSWER SECTION:" | grep www.smiyasaka.com)
#
#
;; ANSWER SECTION: このメッセージの次の行がグローバルIPアドレス
#
www.smiyasaka.com.  103  IN  A  119.150.8.211 の行だけ取得
#
配列変数へは、スペースで分割され代入される
#
配列の5番目が、グローバルIPアドレス
#
IP1=(`echo ${get_data}`)  
<---- 配列として代入
#
#echo "IP1 ${IP1[4]}"      
<---- チェック用
#
IP2=$(echo -ne ${IP1[4]})  
<---- 改行削除
#
#echo "IP2 ${IP2}改行削除"    
<---- チェック用
#
#   
IPアドレスの出力
#
echo "$IP2"
#

上記プログラムのチェック用有効にした時の出力結果です。

IP1 119.150.8.211
IP2 119.150.8.211改行削除
119.150.8.211


○ perlのプログラム上で ipnamesrv.sh を実行させる方法。

以下が、perlで、作成したプログラムです。

# dig smiyasaka.com コマンドをシェルスクリプト

#(ipnamesrv.sh)を実行して取得する。
#   パスの設定は、フルパスで。
#
$myip = `/var/www/html/○○○○/ipnamesrv.sh`;
#

● 以下は、dig www.smiyasaka.comコマンド直接実行した時のリスト。

  ※ 私のドメインの次の数字は、コマンドを実行するごとに変わります。


; <<>> DiG 9.11.13-RedHat-9.11.13-6.el8_2.1 <<>> www.smiyasaka.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 23112
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;www.smiyasaka.com.       IN A

;; ANSWER SECTION:
www.smiyasaka.com..  103  IN A 119.150.8.211

;; Query time: 7 msec
;; SERVER: 192.168.0.1#53(192.168.0.1)
;; WHEN: 土 10月 17 06:30:18 JST 2020
;; MSG SIZE rcvd: 62

上記の処理を perl で作成してみました。

参考にしてください。

#!/usr/bin/perl
#----------------------------------------------------
# ネームサーバーからグルバルIPアドレスを取得する。
#----------------------------------------------------
#
ドメインで dig コマンドを実行し、パイプで
#
結果を get_data に格納する
#
ANSWER SECTION の次の行にグルバルIPアドレスがあるのでその部分だけ grep で取得する
#
grep -A 1 は、一致した行の次の行も取得する
$get_data = `dig www.smiyasaka.com | grep -A 1 ANSWER | grep www.smiyasaka.com`;
#
改行コードを削除
chomp($get_data);
#
スペースで分割して配列変数に代入
@Data = split(" ", $_ );
# 
グルバルIPアドレスは、$Data[4] に代入される
# www.smiyasaka.com.. 103 IN A 119.150.8.211
#
   print $Data[4];
#


3. perlの関数 inet_aton を使用して、グローバルIPアドレスを取得する方法

 以下が、perlで、作成したプログラムです。
ホスト名に、自分のドメイン名を設定すれば、ネームサーバが管理している、自分のグローバル IP アドレスを取得できます。

$host = 'www.smiyasaka.com';    <---- ホスト名
#
use Socket;
#
$myip = inet_ntoa(inet_aton($host));
<---- DNS サーバから、グローバル IP アドレスを取得
#
print $myip;



解 説
use Socket; ……… ネットワークプログラムで使用するperlの関数を使用する宣言をする。
inet_aton($host) ……… OS が $host に設定されているホスト名を DNS サーバに問い合わせて IP アドレスに変換する。
inet_ntoa(○○○) ……… IPアドレスを表示可能な型式に変換する。


4. perlの環境変数を使用して、アクセスしてきた閲覧者(アクセス元)の
グローバルIPアドレスを取得する方法。

アクセス元のグローバルIPアドレスとホスト名が、取得できます。
以下が、perlで、作成したプログラムです。

#
#
アクセス元のIPアドレスを取得
#
$ipaddr = $ENV{'REMOTE_ADDR'};
<---- アクセス元のグローバルIPアドレス取得
#
#
IPアドレスからホスト名を取得
#
$hostname = gethostbyaddr(pack("C4",split(/\./,$ipaddr)),2);
#
ホスト名を取得出来ない時には、「不明」にする。
if(!$hostname) {
  $hostname = "不明";
}

この結果は、以下の様な情報が取得できます。
REMOTE_ADDR = 133.123.130.65
ホスト名が、取得できないときには、"不明" の文字になります。
HOST_NAME = opt-133.123.130.65.client.pikara.ne.jp


5. windowsでグローバルIPアドレスを取得する方法

ドメインからグローバルIPアドレス・グローバルIPアドレスからホスト名の取得は、windowsのコマ ンドプロンプトとから、 nslookupコマンドで行います。
※ 参考情報 ※ windowsのコマンドプロンプトが見つからない時には、「 プログラムとファイル の検索 」から、cmd.exe と入力検索をして、プログラム(1)の下に表示した cmd.exe をクリック してください。
nslookup www.smiyasaka.com
この結果は、以下の様にグローバルIPアドレスが取得できます。


C:\Users\miyasaka>nslookup www.smiyasaka.com
サーバー: web.setup
Address:   192.168.0.1

権限のない回答:
名前: www.smiyasaka.com
Address: 133.123.130.65
-------------------------------------------------------------------------
nslookup 115.30.180.233
この結果、以下の様にホスト名が取得できます。
-------------------------------------------------------------------------
C:\Users\miyasaka>nslookup 133.123.130.65
サーバー: web.setup
Address: 192.168.0.1

名前: opt-133.123.130.65.client.pikara.ne.jp
Address: 133.123.130.65


6. 自前プログラムでダイナミック DNS を更新する。

1. 自前プログラム( VALUE_DOMAIN_DNS_set.sh )でダイナミック DNS を定期更新する。

私のドメインのネームサーバーは、VALUE DOMAIN を使用しています。
VALUE DOMAIN のネームサーバーの更新は、下記の様なコマンドを送信することで出来ます。

https://dyn.value-domain.com/cgi-bin/dyn.fcg?d=[ドメイン]&p=[パスワード]&h=[ホスト名]&i=[IP アドレス]

なお、&i=[IP アドレス] を諸略した時には、アクセス時のグローバル IP アドレスが割り振られます。
このコマンドでは、a レコード( ホストのIPアドレス )のみの書き換えになります。

crontab で定期更新 1日と15日 の 23 時に実行させるには、
* 23 1,15 * * /root/VALUE_DOMAIN_DNS_set.sh > /dev/null 2>&1
と設定しています。

  プログラムの説明

アクセス用のコマンドは、sh からは、wget を使用して行います。
実行結果は、DiCE のログと同じファイルに追加書き込みしています。
今まで、DiCE のログをチェックしてきたので、同じファイルにすることにより、DiCE のログとしてチェックできるようにする為です。

vi VALUE_DOMAIN_DNS_set.sh


----------------------------------------------------------------------
#!/bin/sh
#
#  
date コマンド %-d : 先頭の 0 カット
#  
%_H : 先頭の 0 をスペースにする H : 24時間表示
#  
mm/dd hh:mm 形式 日付データ作成
#
echo -ne "$(date +"%_m")/$(date +"%-d") $(date +"%_H"):$(date +"%M")\n" >> /usr/local/DiCE/log/events.log
#
#  
VALUE DOMAIN ネームサーバー登録IPアドレス更新
#
wget -O - 'https://dyn.value-domain.com/cgi-bin/dyn.fcg?d=XXXXXX.XXX&p=○○○○&h=*' >> /usr/local/DiCE/log/events.log
#
----------------------------------------------------------------------


※ wget -O - (大文字オー)で実行結果を書き出す。(引数に「-」を指定すると標準出力)
※ >> /usr/local/DiCE/log/events.log で出力結果を events.log へ追加する。
※ XXXXXX.XXXは、www 無しのドメイン名です。
※ 〇〇〇〇は、VALUE DOMAIN ログイン用のパスワードです。
※ echo -n -e は、改行(\n)を echo コマンドで有効にさせるためのオプションです。
※ 他社のネームサーバーを利用したいときには、最終行の https:// の設定以下をそのネームサーバーの仕様に合わせて使用ください。


下記は、上記のプログラムを実行した時の出力結果です。

10/9 23:00
status=0
OK

参考にしたサイト 「 www.value-domain.com ダイナミックDNSの設定方法と注意事項 」( URL : https://www.value-domain.com/ddns.php?action=howto )

2. グローバルIPアドレスが、変化した時のダイナミック DNS の更新

下記の様な、グローバル IP アドレス 変化チェックのプログラム( IP_Check.sh )を作ってみました。

私の場合、ネームサーバー側( value-domain )の反映時間がかなり早くなったので、1時間毎にグローバル IP アドレスの変化をチェックしています。
私が使用している光回線は、時折メンテナンスがあり、その都度、IP アドレスが変更されていますが下記プログラムの定時実行で正しくアドレスの変更がされています。

vi IP_Check.sh

#!/usr/bin/sh

#----------------------------------------------------------------
# ルーターのグローバルIPアドレス(value-domain.comから、取得する)と
# ネームサーバーのグローバルIPアドレスを比較し、
# 違いがある時に VALUE DOMAIN に対してグローバルIPアドレスの
# 更新のコマンドを実行する。
#---------------------------------------------------------------
#

Atermip=$(wget -O - 'http://dyn.value-domain.com/cgi-bin/dyn.fcg?ip' );
#

#Atermip="000.000.000.000";
# Test 用 IPアドレス
echo "wget Global IP : $Atermip";

#
#------------------------------------------------
# ドメインで dig コマンドを実行し、パイプで
# 結果を get_data に格納する
#

get_data=$(dig www.XXXXXX.XXX | grep www.XXXXXX.XXX);
IP_file=(`echo ${get_data}`);
# 配列へ代入
#
# 配列の13番目がグローバルIPアドレス

echo "dig Global IP : ${IP_file[13]}";
#

myip=$(echo -n ${IP_file[13]});
# グローバルIPアドレスデータの改行削除
#---------------------------------------------------------
#
グローバルIPアドレス 変化を判定 変化有の時 更新処理をさせる。
#

if [ ${Atermip} != ${myip} ]; then

#
#
グローバルIPアドレスが変化した時の処理
#
# VALUE DOMAIN DNS 更新処理 IPアドレスは、省略
# 省略時は、アクセス時の IPアドレスがセットされる。
#
# date コマンド %-d : 先頭の 0 カット
# %_H : 先頭の 0 をスペースにする H : 24時間表示
#
# 更新時刻の記録

echo -ne "$(date +"%_m")/$(date +"%-d") $(date +"%_H"):$(date +"%M")\n" >> /usr/local/DiCE/log/events.log

# グローバルIPアドレスの記録

echo "変更あり [Aterm G.IP $Atermip]" >> /usr/local/DiCE/log/events.log

# グローバルIPアドレス再取得

wget -O - 'http://dyn.value-domain.com/cgi-bin/dyn.fcg?ip' >> /usr/local/DiCE/log/events.log

# 改行 追加

echo -n -e "\n" >> /usr/local/DiCE/log/events.log

# 連続アクセスさせない為に 2 秒待つ

sleep 2s;
#
#  
VALUE DOMAIN ネームサーバー登録IPアドレス更新
#
wget -O - 'https://dyn.value-domain.com/cgi-bin/dyn.fcg?d=XXXXXX.XXX&p=○○○○&h=*' >> /usr/local/DiCE/log/events.log
#

#---------------------------------------------------------

else

#---------------------------------------------------------

echo "変化無し";

#---------------------------------------------------------

fi #
終了
#---------------------------------------------------------

下記は、上記のプログラムを実行した時の出力結果です。

変化がなかった時は、何もしません。

変化があった時のログの表示

6/6 1: 5
変更あり [Aterm G.IP 133.123.132.103]
133.123.132.103
status=0 OK


戻る