#はじめに/結論
趣味でFortiGateのREST APIのお勉強しています。
今回はFortiGateのREST APIにてDHCP関連の以下の情報をPHPで取得する方法について紹介します。
※この記事はPHPについて書いていますが、
REST APIのURLはどの言語でも変わりませんので、最初に結論のURLも書いておきます。
(1) FortiGateからDHCPで払い出しているIPアドレスのリストを取得
https://"FortiGateのIPアドレス"/api/v2/monitor/system/dhcp
(2) FortiGateのDHCPコンフィグ情報を取得 >https://"FortiGateのIPアドレス"/api/v2/cmdb/system.dhcp/server
#環境
- FortiGate: FG-60D, ファームウェア:v6.0.10
- PHP:PHP 8.0.3 (cli)
#コード
<?php
$fghost = "ip address";
$fglogin = "login id";
$fgpass = "login password";
$url = 'https://'.$fghost.'/logincheck';
$data = array('username'=>$fglogin,'secretkey'=>$fgpass);
$post_data = http_build_query($data);
$curl_connection = curl_init($url);
curl_setopt($curl_connection, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl_connection, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($curl_connection, CURLOPT_POST, TRUE);
curl_setopt($curl_connection, CURLOPT_POSTFIELDS, $post_data);
curl_setopt($curl_connection, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($curl_connection, CURLOPT_HEADER, TRUE);
$response = curl_exec($curl_connection);
preg_match_all('/^Set-Cookie:\s*([^;]*)/mi', $response, $matches);
// (1) DHCPで払い出しているIPアドレスのリストを取得
$curl_connection = curl_init('https://'.$fghost.'/api/v2/monitor/system/dhcp/');
curl_setopt($curl_connection, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl_connection, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($curl_connection, CURLOPT_COOKIE, $matches[1][0]);
$response = curl_exec($curl_connection);
echo ($response);
// (2) DHCPに関するコンフィグ情報を取得
$curl_connection = curl_init('https://'.$fghost.'/api/v2/cmdb/system.dhcp/server');
curl_setopt($curl_connection, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl_connection, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($curl_connection, CURLOPT_COOKIE, $matches[1][0]);
$response = curl_exec($curl_connection);
echo ($response);
curl_close($curl_connection);
#まとめ
(1)DHCPで払い出しているIPアドレスのリストを取得
- CUIの「execute dhcp lease-list」のような結果を取得可能
$curl_connection = curl_init('https://'.$fghost.'/api/v2/monitor/system/dhcp/');
(2) DHCPに関するコンフィグ情報を取得 - CUIの「show system dhcp serve」のような結果を取得可能
$curl_connection = curl_init('https://'.$fghost.'/api/v2/cmdb/system.dhcp/server');
#所感
FortiGateのREST APIの情報はインターネット上で公開されている情報が少なく、
情報を集めるのに苦労しました
「(1)DHCPで払い出しているIPアドレスのリストを取得」は色々と試しているうちに発見できましたが、
「(2) DHCPに関するコンフィグ情報を取得」の "system.dhcp" という書き方は思いつくことができず、
インターネットを2時間程度彷徨い、参考サイト[2]のスウェーデンのサイトで
情報を発見することがでました。 インターネットは偉大
FortiGate REST APIの詳しい情報は
「Fortinet Developer Network(FNDN)開発者コミュニティ」で提供されているようですが、
このサイトに登録するためにはFortinetの従業員2名以上にスポンサーになってもらう必要があるようで、
趣味でFortiGate REST APIをお勉強している者にとってはハードルが高すぎです。。。
#参考サイト
[1] PHPからFortinet REST APIの利用方法
Rest api usage | Fortinet Technical Discussion Forums, 2021/4/12アクセス
[2] Fortinet REST APIでDHCPに関するコンフィグ情報の取得方法
Fortigate API – FortiOS 6.2 – Balanced, 2021/4/11アクセス
[3]FNDNサイト
Fortinet Developer Network(FNDN)開発者コミュニティ - フォーティネット, 2021/4/11アクセス