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

通常は取得するケースは無いと思いますが、気になったので調べてみました。
うちは外向けサーバのドメイン名をno-ip.comを使用してます。IPアドレスの更新がないとサイトへの通知も行われず。そしてある程度更新が無いと消すかもよ?ってメールが届くわけです。Activateを毎回やってもいいのですが、認証やら面倒なので可能なら定期的にIPアドレスを更新したい訳です。

アップデータプログラムはno-ip.comで公開されてるnoip_updaterというプログラムで、Windows用やらLinux用やら用意されてます。Gentooの場合はPortageが用意されてるので、emergeでパッケージ追加が可能です。今回はこのプログラムを調べることでIPアドレスの扱いを調べてみようかと。

○自分のIPアドレス
これはソケットを作り、ioctlで取得することが出来る。ソケットはSOCK_STREAMでもSOCK_DGRAMでもどちらでもOK。そしてioctl(SIOCGIFADDR)でIPアドレスの取得が出来ます。
これは利用するポイントが不明ですがおまけで。

○グローバルIPアドレス
APIで何とかなるのか?と思ったら結局無理だった。つか、大抵のケースはルータマシンならまだしも、ルータ配下にサーバを置くわけで、人様が持つ情報をどうやって取るんだ?ってのが結論でした。
SNMP辺りから攻めてもいいのですが、no-ip.com提供のプログラムは次のように行っていた。

仕組みは、no-ip.comのサーバ(dynupdate.no-ip.com)のポート8245へSTREAMソケットで接続し、HTTPプロトコルのGETメソッドを送ることで、そのリプライにIPアドレスが戻される仕組みだった。
結局他のddns提供されてるのと同じで、サーバへ接続してIPアドレスを調べるしか手がないということです。