Autor Zpráva
Gogo_v
Profil
Dobrý den. pokouším se zjistit kde jsem udělal chybu ale nějak na to ne a ne přijít.
mam tři pole
První pole ifI
Array ( [11] => 11 [20] => 20 [22] => 22 [25] => 25 [26] => 26 )
Druhé pole  bridge
Array ( [:mib-2.17.4.3.1.2.0.2.155.75.144.14] => 20 [:mib-2.17.4.3.1.2.0.2.155.98.68.87] => 20 [:mib-2.17.4.3.1.2.0.2.155.100.57.98] => 11 [:mib-2.17.4.3.1.2.0.2.155.128.23.192] => 11 [:mib-2.17.4.3.1.2.0.10.138.147.156.114] => 25 [:mib-2.17.4.3.1.2.0.11.253.90.210.178] => 25 [:mib-2.17.4.3.1.2.196.125.79.189.49.192] => 25 )
třetí pole macs
Array ( [:mib-2.17.4.3.1.1.0.2.155.75.144.14] => 00:02:9B:4B:90:0E [:mib-2.17.4.3.1.1.0.2.155.98.68.87] => 00:02:9B:62:44:57 [:mib-2.17.4.3.1.1.0.2.155.100.57.98] => 00:02:9B:64:39:62 [:mib-2.17.4.3.1.1.0.2.155.128.23.192] => 00:02:9B:80:17:C0 [:mib-2.17.4.3.1.1.0.10.138.147.156.114] => 00:0A:8A:93:9C:72 [:mib-2.17.4.3.1.1.0.11.253.90.210.178] => 00:0B:FD:5A:D2:B2 [:mib-2.17.4.3.1.1.196.125.79.189.49.192] => C4:7D:4F:BD:31:C0 )

pokouším se načíst hodnoty s pole
foreach($macs as $idm => $mac) {          // projdeme seznam MAC adres
        echo "<br> bridge <br>";
          print_r($bridge);
    echo "<br> MAC <br>";
          print_r($macs);
          // vypis z array  viz. výše
          
         echo "<br> Bridge ID ==*".$idm . "*<br>"; 
        echo "final=".$bridge[$idm];    ?????? <<  Tady mi to ovšem nevrací nic :(
// a dál to už pochopitelně nefunguje ....        
        $ifIndex = $ifI[$bridge[$idm]];       // ifIndex dostaneme z indexu záznamu, převedený na číslo portu a pak na ifIndex
    $ifIndex = trim($ifIndex);
        echo "<br>IfID =". $ifIndex. "--<br>";
       
             }

Výsledek z předcházejících echo
Bridge ID ==*:mib-2.17.4.3.1.1.0.2.155.75.144.14*
final=
IfID =--

Děkuji moc za kopanec kde jsem co zmastil :)
Majkl578
Profil
Gogo_v:
echo "final=".$bridge[$idm]; ?????? << Tady mi to ovšem nevrací nic :(
A mělo by? Vždyť pole v $bridge žádný klíč :mib-2.17.4.3.1.1.0.2.155.75.144.14 neobsahuje.
Gogo_v
Profil
Majkl578:
no mělo protože to samozřejmě v tom poli je blbě sem to překopíroval. :) mam spíše podezření jestli mu na začátku v klíči nevadí ta dvojtečka.
Odkaz na celkový náhled dat
Majkl578
Profil
[#3] Gogo_v:
V tom výpisu na odkaze, který jsi poslal, vidím to co tady - rozdílné klíče. Viz první:
:mib-2.17.4.3.1.2.0.11.253.90.210.178
vs.
:mib-2.17.4.3.1.1.0.11.253.90.210.178

:mib-2.17.4.3.1.2.0.12.66.28.141.200
vs.
:mib-2.17.4.3.1.1.0.12.66.28.141.200

:mib-2.17.4.3.1.2.0.12.66.47.164.231
vs.
:mib-2.17.4.3.1.1.0.12.66.47.164.231

Jinak je to nepřehledné, vhodnější by bylo místo print_r používat var_dump (v tomto případě možná spíš var_export).

mam spíše podezření jestli mu na začátku v klíči nevadí ta dvojtečka
To určitě ne. Leda nějaká mezera nebo něco podobného tvářícího se na první pohled stejně.
Gogo_v
Profil
No možná bude lepší celá funkce :) podle mně by měl projít celá pole a porovnat každou položku. A tím pádem tam shodu najit. Ty rozdílné klíče samozřejmě vidím ale vidím i stejné a přesto to nevypíše níc. Možná tam ma opravdu nejakou triviální chybu. Základ funkce je převzat ze stránek samuraj-cz.com Tam mu to ale běhá na windows takže jsem to upravoval na Linux a asi sem to někde podělal :(
// pole portů doplní o MAC adresu
function getMACs(&$interfaces, $ip, $comm) {
    $vlans = array();
    getInterPart($vlans, $ip, $comm, ".1.3.6.1.4.1.9.9.46.1.3.1.1.18", "Index");      // VLAN ifIndex 
    getInterPart($vlans, $ip, $comm, ".1.3.6.1.4.1.9.9.46.1.3.1.1.3", "Type");        // VLAN type, 1 - OK 
  foreach($vlans as $vlan_id => $vlan) 
        if($vlan["Type"] == 1) {
            $macs = array();
            getInterPart3($macs, $ip, $comm."@".$vlan_id, ".1.3.6.1.2.1.17.4.3.1.1");   // seznam MAC adres pro danou VLAN
    var_export($macs);
            $bridge = array(); 
            getInterPart3($bridge, $ip, $comm."@".$vlan_id, ".1.3.6.1.2.1.17.4.3.1.2"); // urceni, kteremu bridge portu MAC adresa patri
            
        $ifI = array();
            getInterPart2($ifI, $ip, $comm."@".$vlan_id, ".1.3.6.1.2.1.17.1.4.1.2");    // k bridge portu urci jeho interface index
        echo "<br> ifI <br>";
    var_export($ifI);
            foreach($macs as $idm => $mac) {          // projdeme seznam MAC adres
        echo "<br> bridge <br>";
        var_export($bridge);
                echo "<br> macs <br>";
     var_export($macs);
         echo "<br> Bridge ID ==*".$idm . "*<br>"; echo "final=".$bridge[$idm]; 
        $ifIndex = $ifI[$bridge[$idm]];       // ifIndex dostaneme z indexu záznamu, převedený na číslo portu a pak na ifIndex
                $ifIndex = trim($ifIndex);
        echo "<br>IfID = ". $ifIndex. "--<br>";
        if($interfaces[$ifIndex]["Trunk"] == 2){echo "<br> MAC = ".$mac; $interfaces[$ifIndex]["MAC"] = $mac; }
                else $interfaces[$ifIndex]["MAC"] = "";
            }
        }
}


P.S. Tak dal jsem si říct a přes str_replace přepsal ty kliče ... a funguje to. Sice jsem to nepochopil ... ale asi to ta funkce která čte SNMP data nějak jinak vrací ... každopádně díky za Váš čas

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0