システムの監視などで、WEBサービスの死活監視(外形監視)の際にSSL証明書なども一緒に監視する事はあるのだけど、ついででドメインの更新期日なども一緒に確認したいことがある。 だが、ドメイン情報を取得する際に使用するwhoisはドメインの種類によってフォーマットが全く違う(項目名すら違う)ため、汎用的に情報を取得することができない。 ドメイン期限とか、.jpだと項目すら無い。 whoisの次世代プロトコル「RDAP」というものも出てきてるようだけど、2017年11月時点ではまだ実用フェーズまではきてないようなので、この時点では利用できない。
で、なんかいい方法ないかなーと調べてみたところ、pywhoisというライブラリを見かけたので試してみることにする。 以下のようにpipでインストールができる。
pip install python-whois
インストール後は、以下のように記述することでwhoisの情報を取得できる。
import whois
print whois.whois('ドメイン名')
[root@BS-PUB-CENT7-02 ~]# python
Python 2.7.5 (default, Nov 6 2016, 00:28:07)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-11)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import whois
>>> print whois.whois('orebibou.com')
{
"updated_date": [
"2016-04-29 02:04:19",
"2016-04-29 02:04:20"
],
"status": [
"clientTransferProhibited https://icann.org/epp#clientTransferProhibited",
"clientTransferProhibited - https://www.icann.org/epp#clientTransferProhibited"
],
"name": "Xserver XSERVER Inc.",
"dnssec": [
"unsigned",
"Unsigned"
],
"city": "Osaka",
"expiration_date": "2019-04-27 07:05:10",
"zipcode": "5300011",
"domain_name": [
"OREBIBOU.COM",
"orebibou.com"
],
"country": "JP",
"whois_server": "whois.star-domain.jp",
"state": "Osaka",
"registrar": "Netowl, Inc.",
"referral_url": null,
"address": [
"GRAND FRONT OSAKA TOWER A 13F",
"4-20 Ofukacho, Kita-ku"
],
"name_servers": [
"NS1.XSERVER.JP",
"NS2.XSERVER.JP",
"NS3.XSERVER.JP",
"NS4.XSERVER.JP",
"NS5.XSERVER.JP",
"ns1.xserver.jp",
"ns2.xserver.jp",
"ns3.xserver.jp",
"ns4.xserver.jp",
"ns5.xserver.jp"
],
"org": "XSERVER Inc.",
"creation_date": "2014-04-27 07:05:10",
"emails": [
"registrar-abuse@netowl.jp",
"info@xserver.co.jp"
]
}
ロケールの問題からか、日本語の設定だと.jpドメインのwhoisは取得できないようだ。 「expiration_date」で期限切れの日も確認できるので、なんとか監視できるかもしれない。 ソースを見てどうやってパースしているのか見てみると、かなり苦労したのが見受けられる(´・ω・`)。
早いところRDAPが実用化されればこの苦労もなくなるのだろうけど、もうちょっと先なのかな。