表題の通り。スクリプト内で取得したIPが、PublicIPなのかPrivateIPなのかを判別させたい。人間が目で見れば判別はすぐにできるのだがスクリプト内で判定させるのはどうしたら良いのだろう?と。
■ 環境
- macOS High Sierra
- Amazon Linux
■ ipcalc
先日の`ipcalc`で何かしら取得できないかと思ったのだが、特にこれと言った表記やオプションは無かった。
$ ipcalc -c 192.168.33.10
$
■ dig
逆引きさせて何も返らないんじゃないかと思いやってみた。
$ dig -x 192.168.33.10
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.57.amzn1 <<>> -x 192.168.33.10
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 54828
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0
;; QUESTION SECTION:
;10.33.168.192.in-addr.arpa. IN PTR
;; AUTHORITY SECTION:
168.192.in-addr.arpa. 60 IN SOA localhost. nobody.invalid. 1 3600 1200 604800 10800
;; Query time: 1 msec
;; SERVER: 10.1.0.2#53(10.1.0.2)
;; WHEN: Fri May 18 15:17:09 2018
;; MSG SIZE rcvd: 103
$
“AUTHORITY SECTION“の結果が使えそうである。ここが”localhost.“であるとPrivateIPであるっぽい。表記を少なくして再度試す。
$ dig +noall +authority -x 10.0.1.10
10.in-addr.arpa. 60 IN SOA localhost. nobody.invalid. 1 3600 1200 604800 10800
$
良さげな感じである。
以上。