API DHCP Clients

Started by Ghostrider, September 04, 2019, 12:29:26 PM

Previous topic - Next topic
Hallo Zusammen,

ich bin vor einiger Zeit von PFsense zu OPNsense gewechselt und bin sehr zufrieden. Aktuell arbeite ich an einem Projekt, bei dem ich alle Geräteinfos (Name, MAC, IP) brauche, die in der DHCP Liste von OPNsense stehen. Wie komme ich da am besten ran?

Ich habe bereits gesehen, dass es eine API gibt, aber dort nichts in Richtung DHCP gefunden. Habe ich es dort übersehen, oder ist das damit nicht möglich? Falls nicht, wäre es möglich mittels Web Scraping an die Infos zu kommen, oder gibt es noch einen besseren Weg?

Würde mich freuen, wenn mir da jemand Helfen könnte.

Vielen Dank
Henrik

Ich denke da gibt's derzeit keine API aber es währe vermutlich einfacher für dich, wenn du die API entwickelst und contributest und dann selbst verwendest. Web Scraping ist da vom Code her komplizierter.

Schau dir mal das Plugin von mir an, ist ein ähnlicher Fall:

https://github.com/opnsense/plugins/tree/master/sysutils/api-backup

Es gab mal einen der dafür nen PR reingestellt hat, wurde aber rejected!
Kannst du mal testen:

https://github.com/opnsense/core/pull/3110

Vielen Dank für eure antworten. Das hilft mir schonmal echt weiter.
Ich versuche mich dann jetzt mal daran das ganze als Plugin zu entwickeln und die Backup-Api von fabian als Vorlage zu nehmen, scheint mir ja grundsätzlich sehr ähnlich zu meinen Problem zu sein. Ich muss die lokale dhcpd.conf Datei einlesen, dann in dem Plugin verarbeiten (in json umwandeln) und dann als response ausgeben. Oder habe ich noch etwas vergessen?

Mir ist nur noch nicht ganz klar, wo ich meinen Code dann hinpacken muss, damit es funktioniert und muss die OPNSense bei Änderungen am Code immer neugestartet werden, oder funktioniert das einfach so?

Viele Grüße
Henrik

Quote from: Ghostrider on September 05, 2019, 09:08:54 AM
Vielen Dank für eure antworten. Das hilft mir schonmal echt weiter.
Ich versuche mich dann jetzt mal daran das ganze als Plugin zu entwickeln und die Backup-Api von fabian als Vorlage zu nehmen, scheint mir ja grundsätzlich sehr ähnlich zu meinen Problem zu sein. Ich muss die lokale dhcpd.conf Datei einlesen, dann in dem Plugin verarbeiten (in json umwandeln) und dann als response ausgeben. Oder habe ich noch etwas vergessen?

Mir ist nur noch nicht ganz klar, wo ich meinen Code dann hinpacken muss, damit es funktioniert und muss die OPNSense bei Änderungen am Code immer neugestartet werden, oder funktioniert das einfach so?

Viele Grüße
Henrik

https://www.routerperformance.net/opnsense/plugin-development/

Nicht mehr ganz frisch, gilt aber noch so ...

super, vielen Dank. Dann schaue ich mir das mal genauer an und probiere das ganze zu laufen zu bekommen. Habe ansonsten auch noch folgende Anleitung gefunden:
https://docs.opnsense.org/development/examples/helloworld.html

Wenn ich da das mit der GUI weglasse und nur den Bereich für die API nehme sollte das ja auch klappen, oder?

Viele Grüße
Henrik

March 16, 2021, 09:49:29 AM #6 Last Edit: May 31, 2021, 10:30:36 AM by badsmoke
gibt es Neuigkeiten? wäre daran sehr interessiert

Es gibt ein python script unter "/usr/local/opnsense/scripts/dhcp/" get_leases.py
was genau das macht was man braucht

hab jetzt einfach mal unter "/usr/local/opnsense/mvc/app/controllers/OPNsense/DhcpLeases/Api/DhcpleasesController.php"
Diese Datei abgelegt:


<?php/* * Copyright (C) 2018 Fabian Franz * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright notice, *    this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in the *    documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE * AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */namespace OPNsense\DhcpLeases\Api;use OPNsense\Base\ApiControllerBase;class DhcpLeasesController extends ApiControllerBase{    const GET_LEASES_PATH = '/usr/local/opnsense/scripts/dhcp/get_leases.py';    public function leasesAction()    {        $this->response->setStatusCode(200, "OK");        $this->response->setContentType('application/xml', 'UTF-8');        $command = escapeshellcmd('/usr/local/opnsense/scripts/dhcp/get_leases.py');        $output = shell_exec($command);        $this->response->setContent($output);    }    public function afterExecuteRoute($dispatcher)    {        $this->response->send();    }}



jetzt kann man per curl curl -k -u "KEY":"SECRET" https://192.168.10.1/api/dhcpleases/dhcpleases/leases"

die leases abholen



--- fix typo


Ich könnt Mal versuchen ein Plugin zu basteln .. das parallel läuft. Vielleicht motiviert das die Jungs das wieder aufzunehmen

Verzeihen Sie mir, wenn ich über Google Übersetzer spreche ...
Das von badsmoke gepostete Snippet funktioniert - ich musste nur die Controller-Datei für Dhcp-Leases erstellen. Das einzige Problem, das ich hatte, war, dass dem Pfad, auf den in curl verwiesen wird, ein "s" am Ende von / lease -> / leases fehlte

Ich musste $this->response->setContentType('application/json', 'UTF-8'); verwenden bei 21.7.3

Hi,

was ist eigentlich daraus geworden?
Implementiert wurde es bisher nicht oder?

Gruß