PHP Klasse in IP-Symcon einbinden (SNMP)

Hallo,

ich wollte gerne eine Abfrage von einem Router machen. Aber leider weiß ich nicht wie man eine SNMP Class in IPS einbindet, geht dasüberhaupt?

Das Skript, aber das braucht aber leider Class dazu. Mit dem SNMP Modul komme ich nicht weiter, hier finde ich den Traffic vom Interface nicht mal.

<?php
// SNMP Konfiguration
$host = 'hostname'; // MikroTik Router Hostname oder IP-Adresse
$community = 'public'; // SNMP Community-String
$interface = 'ether1'; // Name des zu überwachenden Interfaces

// SNMP OIDs
$rxOID = 'IF-MIB::ifInOctets';
$txOID = 'IF-MIB::ifOutOctets';

// Verbindung zum Router aufbauen
$session = new SNMP(SNMP::VERSION_2c, $host, $community);

// Abfrage des RX/TX Traffics des Interfaces
$rx = $session->get($rxOID . '.' . $interface);
$tx = $session->get($txOID . '.' . $interface);

// Ausgabe der Ergebnisse
echo 'Interface: ' . $interface . "\n";
echo 'RX: ' . $rx . "\n";
echo 'TX: ' . $tx . "\n";

// SNMP Session schließen
$session->close();
?>

Warum verwendest du nicht das SNMP Modul?

Dass er das Symcon SNMP Modul nicht verwendet kann ich sehr gut nachvollziehen, denn allein dessen Parametrierung (OID Dateien einladen, welche dann u.a. auch noch die Settings.json zustopfen) ist nicht in jedem Fall zielführend.

Die passenden MIBs würde ich unabhängig von Symcon herausfinden (SNMP Walk mit Desktop Software).

Die Klasse wird offenbar eine Bibliothek sein, die man sich herunterladen kann. Die Dateien in einen Unterordner von scripts packen und dann mit include im normalen Symcon Script einbinden.

Hi, habe ich versucht, aber der gibt nur den Inhalt der Class aus:

Diese habe ich hier her:
https://www.php.net/manual/en/class.snmp.php#snmp.class.constants.version-2c

Ich habe es jetzt so gemacht, läuft ohne fehler durch, gibt nur keine Daten aus :frowning:

<?php

class SNMP {
    /* Constants */
    const VERSION_1 = 0x00;
    const VERSION_2c = 0x01;
    const VERSION_3 = 0x03;
    const ERRNO_NOERROR = 0;
    const ERRNO_ANY = -1;
    const ERRNO_GENERIC = 2;
    const ERRNO_TIMEOUT = 3;
    const ERRNO_ERROR_IN_REPLY = 4;
    const ERRNO_OID_NOT_INCREASING = 5;
    const ERRNO_OID_PARSING_ERROR = 6;
    const ERRNO_MULTIPLE_SET_QUERIES = 7;

    /* Properties */
    public $info;
    public $max_oids;
    public $valueretrieval;
    public $quick_print;
    public $enum_print;
    public $oid_output_format;
    public $oid_increasing_check;
    public $exceptions_enabled;

    /* Methods */
    public function __construct(
        $version,
        $hostname,
        $community,
        $timeout = -1,
        $retries = -1
    ) {
        // constructor code
    }

    public function close() {
        // method code
    }

    public function get($objectId, $preserveKeys = false) {
        // method code
    }

    public function getErrno() {
        // method code
    }

    public function getError() {
        // method code
    }

    public function getnext($objectId) {
        // method code
    }

    public function set($objectId, $type, $value) {
        // method code
    }

    public function setSecurity(
        $securityLevel,
        $authProtocol = "",
        $authPassphrase = "",
        $privacyProtocol = "",
        $privacyPassphrase = "",
        $contextName = "",
        $contextEngineId = ""
    ) {
        // method code
    }

    public function walk(
        $objectId,
        $suffixAsKey = false,
        $maxRepetitions = -1,
        $nonRepeaters = -1
    ) {
        // method code
        // return value (an array or false)
        return is_array($result) ? $result : false;
    }
}



// SNMP Konfiguration
$host = '192.168.0.1'; // MikroTik Router Hostname oder IP-Adresse
$community = 'public'; // SNMP Community-String
$interface = 'ether4'; // Name des zu überwachenden Interfaces

// Verbindung zum Router aufbauen
$session = new SNMP(SNMP::VERSION_2c, $host, $community);

// SNMP OIDs
$rxOID = 'IF-MIB::ifInOctets';
$txOID = 'IF-MIB::ifOutOctets';

// Abfrage des RX/TX Traffics des Interfaces
$rx = $session->get($rxOID . '.' . $interface);
$tx = $session->get($txOID . '.' . $interface);

// Ausgabe der Ergebnisse
echo 'Interface: ' . $interface . "\n";
echo 'RX: ' . $rx . "\n";
echo 'TX: ' . $tx . "\n";

// SNMP Session schließen
$session->close();

?>

Das ist ja die php eigene Klasse. Die musst du nicht so einbauen, sondern durch laden der SNMP DLL (also nur auf Windows Möglich). ABER!!! mit diesr Klasse stürzt IP-Symcon regelmäßig ab (es laufen alle Threads voll). Die solltest du daher nicht verwenden.

Stattdessen eine nicht von dlls abhängige Bibliothek wie z.B. diese GitHub - FreeDSx/SNMP: A Pure PHP SNMP Library.

Deren Abhängigkeiten müssen außerhalb von Symcon aufgelöst werden und dann geladen.

Wie man das danach machen kann, zeigt ganz gut das Symcon snmp Modul SNMP/libs at master · symcon/SNMP · GitHub

Den Ordner libs (z.B. aus dem Modul) in deinen Ordner scripts laden.

include_once './libs/vendor/autoload.php';
use FreeDSx\Snmp\SnmpClient;