IPアドレス管理をブラウザベースでしてくれる何気に便利なオープンソース『phpIPAM』でAPIを利用する際のメモです。例えばAPIを利用して特定のサブネットのIP一覧をJSON形式などで取得できたりします。
APIの有効化
まずは「phpIPAM settings」からAPIを有効化するので phpIPAM settings の画面を表示させます。
項目「Feature settings」内の「API」を ON に切り替えて最下部の「save」から保存します。
続いてAPIにアプリケーションを登録するので、「API」をクリック。
「Create API key」をクリック。
「App id」に任意のアプリケーション名を。例えば「hogeapi」など。その他の項目も入力し「Add」から追加します。下図は今回試しに設定した項目。とりあえずIP情報の追加や更新はするつもりがなく参照のみなので権限(App permissions)は「Read」としています。あと内部からの接続なのでセキュリティ(App security)も「none」に。
APIの使い方
以上で前準備は完了なので、後はGETなりでAPIからデータを取得するだけです。今回はサクッと試したいのでサーバの cURL コマンドでデータを取得してみています。cURL便利かよ。
まずはログインIDとパスワードを利用してトークンを取得しなければなりません。トークンの有効期限は6時間とのこと。これ面倒くさくない?
$ curl -X POST --user testuser:testpassword http://10.0.0.1/phpipam/api/hogeapi/user/ -i HTTP/1.1 200 OK Date: Tue, 30 Oct 2018 05:30:55 GMT Server: Apache/2.4.6 (CentOS) Set-Cookie: PHPSESSID=9rc5g7f49c9g1hqqa4lf6m3sh3; expires=Wed, 31-Oct-2018 05:30:55 GMT; path=/; HttpOnly Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: no-cache Pragma: no-cache Content-Length: 116 Content-Type: application/json; charset=utf-8 {"code":200,"success":true,"data":{"token":"=Nf4DA1SsRIA9+H.$S%cAp9m","expires":"2018-10-30 20:30:55"},"time":0.008}
今回取得できたトークンは「=Nf4DA1SsRIA9+H.$S%cAp9m」だそうです。
あとはこれを利用してAPI取得するだけ。
例えば今回はサブネットid「75」に存在するIP一覧を取得してみます。サブネットidはURLからも判別可能です。
http://10.0.0.1/phpipam/index.php?page=subnets§ion=11&subnetId=75
サブネット配下の一覧を取得するアドレスは【/api/アプリケーション名/subnets/サブネットID/addresses/】にて取得可能ですので、実際のcURLコマンドは下記のようになります。
$ curl -X GET -H 'token: =Nf4DA1SsRIA9+H.$S%cAp9m' http://10.0.0.1/phpipam/api/hogeapi/subnets/75/addresses/ -i
正常にリクエストが成功すれば結果がズラズラズラっと表示されるはずです。