Fortigate REST APIでDHCPコンフィグ情報を取得する

#はじめに/結論
趣味で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 

<br>
(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:fgApiTest.php
<?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/'); 

<br>
(2) DHCPに関するコンフィグ情報を取得
- CUIの「show system dhcp serve」のような結果を取得可能

>\$curl_connection = curl_init('https://'.$fghost.'/api/v2/cmdb/system.dhcp/server'); 


#所感
FortiGateのREST APIの情報はインターネット上で公開されている情報が少なく、
情報を集めるのに苦労しました:sweat:

「(1)DHCPで払い出しているIPアドレスのリストを取得」は色々と試しているうちに発見できましたが、
「(2) DHCPに関するコンフィグ情報を取得」の "system.dhcp" という書き方は思いつくことができず、
インターネットを2時間程度彷徨い、参考サイト[2]のスウェーデンのサイトで
情報を発見することがでました。　インターネットは偉大:relaxed:


FortiGate REST APIの詳しい情報は
「Fortinet Developer Network（FNDN）開発者コミュニティ」で提供されているようですが、
このサイトに登録するためにはFortinetの従業員2名以上にスポンサーになってもらう必要があるようで、
趣味でFortiGate REST APIをお勉強している者にとってはハードルが高すぎです。。。



#参考サイト
[1] PHPからFortinet REST APIの利用方法
[Rest api usage | Fortinet Technical Discussion Forums](https://forum.fortinet.com/tm.aspx?m=144649#msg163795), 2021/4/12アクセス

[2] Fortinet REST APIでDHCPに関するコンフィグ情報の取得方法
[Fortigate API – FortiOS 6.2 – Balanced](https://loadbalancing.se/2019/05/02/fortigate-api-fortios-6-2/), 2021/4/11アクセス

[3]FNDNサイト
[Fortinet Developer Network（FNDN）開発者コミュニティ - フォーティネット](https://www.fortinet.com/jp/products/management/fortinet-developer-network-fndn), 2021/4/11アクセス