Avatar billede jackass- Nybegynder
26. maj 2010 - 10:36 Der er 12 kommentarer og
1 løsning

Bøvl med snmpwalk

Hej,

Jeg får følgende fejl fra scriptet:

PHP Notice:  Undefined offset: 0 in /home/www/cisco/showAPinfo.php on line 36
PHP Notice:  Undefined offset: 0 in /home/www/cisco/showAPinfo.php on line 37
PHP Notice:  Undefined offset: 0 in /home/www/cisco/showAPinfo.php on line 38

Linie 36-38 er nederst hvor de 3 array elementer med index 0 printes ud.


Scriptet ser således ud:

$file = "/etc/hosts";
$lines = file($file);
$community = "public";

print "<table border=1 bgcolor=#ffffff>";
                print "<tr>
                        <td><b>Hostname</b></td>
                        <td><b>Model</b></td>
                        <td><b>Serial Number</b></td>
                        </tr>";

foreach ($lines as $host)
{
        if (preg_match("/10\.10\.15\./",$host))
        {
                $hostArr = preg_split('/[\s]+/',$host);
                $hostname = strtoupper($hostArr[1]);
                $hostip  = $hostArr[0];


                $sysName                = snmpwalk("$hostip","$community","sysName.0");
                $sysModel              = snmpwalk("$hostip","$community","1.3.6.1.2.1.47.1.1.1.1.13.1");
                $sysSerial              = snmpwalk("$hostip","$community","1.3.6.1.2.1.47.1.1.1.1.11.1");

                print "<tr>
                        <td>$sysName[0]</td>
                        <td>$sysModel[0]</td>
                        <td>$sysSerial[0]</td>
                        </tr>";
        }
}


Nogen idé om hvad fejlen er? Har et tilsvarende andet scriptet som i princippet er magen til og som ingen problemer giver :-/
Avatar billede Slettet bruger
26. maj 2010 - 12:22 #1
har du prøvet at var_dump()'e dem ud, måske indeholder de ikke arrays (men false eller lignende)

Kan du beskrive hvad snmpwalk GØR - på 2 linjer : )
Avatar billede jackass- Nybegynder
26. maj 2010 - 12:49 #2
De indholder tilsyneladende arrays.. Hvis jeg var_dump'er de 3 arrays giver det følgende:

Hostname Model Serial Number
array(0) { } array(0) { } array(0) { }
array(0) { } array(0) { } array(0) { }
array(0) { } array(0) { } array(0) { }
array(0) { } array(0) { } array(0) { }
array(0) { } array(0) { } array(0) { }
array(0) { } array(0) { } array(0) { } 
array(0) { } array(0) { } array(0) { }
array(0) { } array(0) { } array(0) { }

Altså har de ingen elementer .. hvilket er temmeligt underligt, for det virker fint fra en shell eller et andet script :-/

snmpwalk poller en host via SNMP protokollen som returnerer data ud fra forskelige OIDs, eksempel dette:

[root@LinuxSrv]# snmpwalk -v2c -c public 10.10.10.5 1.3.6.1.2.1.47.1.1.1.1.13.1
SNMPv2-MIB::sysName.0 = STRING: ME-AP05
Avatar billede jackass- Nybegynder
26. maj 2010 - 12:52 #3
Jeg gør det samme i et andet script, som output'er fint nok, fx:

<tr>
<td>ASA1</td>
<td>192.168.100.2</td>
<td>STRING: "8.0(4)"</td>
<td>STRING: "JNX1228L1K4"</td>
<td>STRING: "ASA5510-K8"</td>
</tr>
Avatar billede Slettet bruger
26. maj 2010 - 12:57 #4
På samme maskine og med samme "rettigheder" ?

- for, der MÅ være grænser for hvem som må spørge den slags info - det er jo hacker-guld!
Avatar billede jackass- Nybegynder
26. maj 2010 - 13:00 #5
Hmm.. kan det være PHP's snmpwalk der mangler noget MIB halløj mon?

Hvis jeg laver et lille simpelt script:

<?php
$ent = snmpwalk("10.10.10.5","public","1.3.6.1.2.1.47.1.1.1.1.13.1");
var_dump($ent);
?>

..og eksekverer det fra shell:

[root@LinuxSrv]# php skod.php
array(0) {
}

Men hvis jeg poller samme OID direkte fra shell, får jeg et output:

[root@LinuxSrv]# snmpwalk -v2c -c public 10.10.10.5 1.3.6.1.2.1.47.1.1.1.1.13.1
SNMPv2-SMI::mib-2.47.1.1.1.1.13.1 = STRING: "AIR-AP1242AG-E-K9 "
Avatar billede jackass- Nybegynder
26. maj 2010 - 13:00 #6
Hmm.. kan det være PHP's snmpwalk der mangler noget MIB halløj mon?

Hvis jeg laver et lille simpelt script:

<?php
$ent = snmpwalk("10.10.10.5","public","1.3.6.1.2.1.47.1.1.1.1.13.1");
var_dump($ent);
?>

..og eksekverer det fra shell:

[root@LinuxSrv]# php skod.php
array(0) {
}

Men hvis jeg poller samme OID direkte fra shell, får jeg et output:

[root@LinuxSrv]# snmpwalk -v2c -c public 10.10.10.5 1.3.6.1.2.1.47.1.1.1.1.13.1
SNMPv2-SMI::mib-2.47.1.1.1.1.13.1 = STRING: "AIR-AP1242AG-E-K9 "
Avatar billede jackass- Nybegynder
26. maj 2010 - 13:01 #7
Ja, samme maskine osv, og det er naturligvis restricted i firewall hvilke IP'er der kan må snakke SNMP :)
Avatar billede Slettet bruger
26. maj 2010 - 13:06 #8
Hm.. det var sært.
Man skulle da tro at root var "bagmand" for begge forespørgsler i dét tilfælde... ?
Avatar billede jackass- Nybegynder
26. maj 2010 - 13:13 #9
Hmm har fundet problemet og det er faktisk rimelig ugennemtænkt i PHP 5.3.0 (som jeg kører).

Hvis man på normal vis poller en OID rod, får man jo output af alle sub OIDs:

[root@LinuxSrv]# snmpwalk -v2c -c public 10.10.10.5 1.3.6.1.2.1.47.1.1.1.1.13
SNMPv2-SMI::mib-2.47.1.1.1.1.13.1 = STRING: "AIR-AP1242AG-E-K9 "
SNMPv2-SMI::mib-2.47.1.1.1.1.13.2 = ""
SNMPv2-SMI::mib-2.47.1.1.1.1.13.3 = ""
SNMPv2-SMI::mib-2.47.1.1.1.1.13.4 = ""

Eller man kan polle den ene man er interesseret i, som fx:

[root@LinuxSrv]# snmpwalk -v2c -c public 10.10.10.5 1.3.6.1.2.1.47.1.1.1.1.13.1
SNMPv2-SMI::mib-2.47.1.1.1.1.13.1 = STRING: "AIR-AP1242AG-E-K9 "


Men! I PHP kan man ikke polle enkelte OIDs som fx "1.3.6.1.2.1.47.1.1.1.1.13.1", man SKAL polle et niveau længere oppe "1.3.6.1.2.1.47.1.1.1.1.13" og så bruge output array index nummeret (fx $array[0]) til at finde den rigtige value i stedet for at polle direkte efter den ønskede OID value ".1".

Det må de sq da godt se at få ændret ASAP :-/
Avatar billede Slettet bruger
26. maj 2010 - 13:48 #10
Man skulle da ellert tro at det er den samme bagved-liggende funktion som henter data..

Hvad ER en OID ?
Avatar billede jackass- Nybegynder
26. maj 2010 - 14:09 #11
Hmm det er et stort spørgsmål, og svaret er endnu større.

OID = Object Identifier i en MIB (Management Information Base - http://en.wikipedia.org/wiki/Management_information_base)

Der er defineret en masse MIBs hvor også Cisco har nogle.

Eksempelvis kan du på følgende side se:
http://tools.cisco.com/Support/SNMP/do/BrowseOID.do?local=en&translate=Translate&objectInput=entPhysicalName

1.3.6.1.2.1.47.1.1.1.1 svarer til ENTITY-MIB "entPhysicalEntry" og derunder er der nogle sub indexes .1 .2 .3 som hver især giver en masse info.

Alternativet er at et program/script skal telnet eller ssh ud på udstyret, logge ind, fyre diverse kommandoer af og bruge systemressourcer samt en masse tid for at finde informationer.

SNMP er meget mere brugbart til disse formål. Eksempelvis har jeg et script der telnet'er ud på udstyr og samler info som navn, serienumre, modelnummer + andet. Afviklingen tager 1m2.706s

Til sammenligning tager samme script (men med brug af SNMP i stedet) 0m8.641s og CPU har overhovedet ikke rørt på sig.
Avatar billede Slettet bruger
26. maj 2010 - 14:48 #12
Takker - det ER jo smart : )
- svarer PC'er på netværket også på den protokol ?

Sjovt: Jeg troede at du mente "sikkerhed" da du skrev "MIB halløj"
- Men In Black :)
Avatar billede jackass- Nybegynder
26. maj 2010 - 15:17 #13
Lukker denne igen
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester