PHP Effektiver Stringvergleich snmp
Hallo Leute!
Es geht um folgendes:
Ich bekomme per snmpget über PHP, von einem Switch folgenden Zeichenfolge zurück:
" STRING: Herstellername (Typname) ",
im Falle des Herstellers HP/ProCurve sieht er so aus:
STRING: ProCurve J4900B Switch 2626, revision H.10.50, ROM H.08.05 (/sw/code/build/fish(mkfs))
Diese würde ich gern am Herstellernamen unterscheiden, da es drei Switch-Hersteller gibt ...
Dies dient dann dazu den richtigen SNMP-Einstiegspunkt zu setzen,
um danach über snmpwalk zu nutzen, um Infos abzufragen.
Habe den Stringvergleich u.a. mit strpos, strscpn versucht?
Gibt es da etwas effektiveres??
Mir würde reichen zu sagen:
STRING:
und danach die ersten beiden Buchstaben vergleichen, dies mit einem Wahrheitswert zurück zu geben.
Das Script ist zwar lauffähig, aber es trifft keine eindeutige Unterscheidung.
Anbei der Codeschnipsel:
Besten Dank!
Es geht um folgendes:
Ich bekomme per snmpget über PHP, von einem Switch folgenden Zeichenfolge zurück:
" STRING: Herstellername (Typname) ",
im Falle des Herstellers HP/ProCurve sieht er so aus:
STRING: ProCurve J4900B Switch 2626, revision H.10.50, ROM H.08.05 (/sw/code/build/fish(mkfs))
Diese würde ich gern am Herstellernamen unterscheiden, da es drei Switch-Hersteller gibt ...
Dies dient dann dazu den richtigen SNMP-Einstiegspunkt zu setzen,
um danach über snmpwalk zu nutzen, um Infos abzufragen.
Habe den Stringvergleich u.a. mit strpos, strscpn versucht?
Gibt es da etwas effektiveres??
Mir würde reichen zu sagen:
STRING:
und danach die ersten beiden Buchstaben vergleichen, dies mit einem Wahrheitswert zurück zu geben.
Das Script ist zwar lauffähig, aber es trifft keine eindeutige Unterscheidung.
Anbei der Codeschnipsel:
//Abfrage des Herstellers
$devicename = snmpget($host, $communitystring, "sysName.0");
$hersteller1 = "Cisco";
$hersteller2 = "Procurve";
$hersteller3 = "3com";
if(strpos($devicename, $hersteller2 === TRUE))
{
$snmp_adress = "enterprises.11.2.14.11.5.1.9.4.2.1";
}
elseif(strpos($devicename, $hersteller1 === TRUE))
{
$snmp_adress = "Beispiel1.11.2.14.11.5.1.9.4.2.1";
}
else
{
$snmp_adress = "beispiel2.11.2.14.11.5.1.9.4.2.1";
}
//Host, Communitystring und SNMP_Einstiegspunkt (Adress)
$host = $argv[1];
$communitystring = $argv[2];
//$snmp_adress = 'enterprises.11.2.14.11.5.1.9.4.2.1';
$datenarray = snmpwalk("$host","$communitystring","$snmp_adress");
$arraycount = count($datenarray);
Besten Dank!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 96084
Url: https://administrator.de/contentid/96084
Ausgedruckt am: 24.11.2024 um 03:11 Uhr
4 Kommentare
Neuester Kommentar
Moin,
schau dir mal den Rückgabewert der funktion "strpos()" an: PHP-Manual - strpos()
Deine Bedingungen werden nur erfüllt wenn "strpos()" TRUE zurückgibt, was aber nie der Fall sein wird ;)
~Arano
schau dir mal den Rückgabewert der funktion "strpos()" an: PHP-Manual - strpos()
Deine Bedingungen werden nur erfüllt wenn "strpos()" TRUE zurückgibt, was aber nie der Fall sein wird ;)
~Arano
Ja, das ist richtig !
strpos ist gar nicht falsch gewesen. strpos liefert dir im Erfolgsfall die Position der Stelle an der die Zeichenkette gefunden wurde zurück, oder FALSE wenn sie nicht gefunden wurde. Um die Prüfung damit nun durchzuführen, kannst du folgendes verwenden:Zusätzlich könntest du noch prüfen lassen ob die Position an der die Zeichenkette gefunden wurde korrekt ist - für den Fall das die gesuchten Zeichenketten auch in den anderen Devicenamen an einen späteren Stelle vorkommen dann sähe es ungefähr so aus:
Mir ist eben noch aufgefallen das du auch einen Fehler in deinen Bedingungen hattest:Das hätte eigentlich eine Fehlermeldung werfen sollen !?
Gruß Arano
strpos ist gar nicht falsch gewesen. strpos liefert dir im Erfolgsfall die Position der Stelle an der die Zeichenkette gefunden wurde zurück, oder FALSE wenn sie nicht gefunden wurde. Um die Prüfung damit nun durchzuführen, kannst du folgendes verwenden:
<?php
if(strpos($devicename, $hersteller1)!==FALSE)
$snmp_adress = 'enterprises.11.2.14.11.5.1.9.4.2.1';
elseif(strpos($devicename, $hersteller1)!==FALSE)
$snmp_adress = 'Beispiel1.11.2.14.11.5.1.9.4.2.1';
else
$snmp_adress = 'beispiel2.11.2.14.11.5.1.9.4.2.1';
?>
<?php
// rueckgabe von strpos in $pos speichern,
// pruefen ob es NICHT gleich FALSE ist und
// noch mal pruefen ob die Stelle an der sie gefunden wurde die richtige ist
if(($pos=strpos($devicename, $hersteller1))!==FALSE && $pos==8)
$snmp_adress = 'enterprises.11.2.14.11.5.1.9.4.2.1';
elseif(($pos=strpos($devicename, $hersteller1))!==FALSE && $pos==8)
$snmp_adress = 'Beispiel1.11.2.14.11.5.1.9.4.2.1';
else
$snmp_adress = 'beispiel2.11.2.14.11.5.1.9.4.2.1';
?>
<?php
// du hattest:
if(strpos($devicename, $hersteller2 === TRUE))
// sollte aber so sein:
if(strpos($devicename, $hersteller2) === TRUE)
?>
Gruß Arano