На каком языке?
К примеру на php, но могу и на BASH и на C++.
Приведенная функция выводит Виланы, осуществляет поиск по названию, по вхождению портов (с тагом и без),
Я привел часть кода. остальные функции думаю понятны
Код:
$snmp_read_community="public";
function snmpget_vlanentry($snmp_deviceip,$snmp_deviceegport,$snmp_deviceunport,$snmp_devicevlanid,$snmp_devicevlanname)
{
global $snmp_read_community;
$ret="";
$rev_bits=false;
$dev_name=snmp_device_test($snmp_deviceip);
if($dev_name===false)
return("");
$rev_bits=(strpos($dev_name,"DGS-3024")!==false);
$snmp_oid=getvendoroid($snmp_deviceip,"VlanCtrlName");
$snmp_oid_egports=getvendoroid($snmp_deviceip,"VlanCtrlTagged");
$snmp_oid_unports=getvendoroid($snmp_deviceip,"VlanCtrlUnTagged");
$result=snmpwalkoid($snmp_deviceip, $snmp_read_community, substr($snmp_oid,0,-1));
if($result!==false)
{
for(reset($result); $i = key($result); next($result))
{
$arr_tmp=explode(".",eregi_replace("SNMPv2-SMI::enterprises. ","",$i));
$vlan_id=$arr_tmp[count($arr_tmp)-1];
$vlan_name=str_replace("\x22","",str_replace("STRING: ","",$result[$i]));
if(!($snmp_devicevlanid!="0"&&$vlan_id!=$snmp_devicevlanid))
{
if(!($snmp_devicevlanname!=""&&!stristr(" $vlan_name",$snmp_devicevlanname)===true))
{
//get tagged ports
$vlan_egports=snmpget($snmp_deviceip,$snmp_read_community,"$snmp_oid_egports$vlan_id");
if($vlan_egports!==false)
$vlan_egports=eregi_replace("\n","",eregi_replace("Hex-STRING: ","",$vlan_egports));
if(!($snmp_deviceegport!="0"&&!testhexport($snmp_deviceegport,$vlan_egports)))
{
//get untagged ports
$vlan_unports=snmpget($snmp_deviceip,$snmp_read_community,"$snmp_oid_unports$vlan_id");
if($vlan_unports!==false)
$vlan_unports=eregi_replace("\n","",eregi_replace("Hex-STRING: ","",$vlan_unports));
if(!($snmp_deviceunport!="0"&&!testhexport($snmp_deviceunport,$vlan_unports)))
{
//print match data
$ret=sprintf("%s!%s|%s [%s]|%s[%s]|%s[%s]",$ret,$snmp_deviceip,$vlan_id,$vlan_name,strhex2dec($rev_bits,$vlan_egports),str_replace(" ","",$vlan_egports),strhex2dec($rev_bits,$vlan_unports),str_replace(" ","",$vlan_unports));
}
}
}
}
}
}
return ($ret);
}
function testhexport($port,$port_data)
{
$port_binary=strhex2bin($port_data);
return(($port_binary[$port-1]=="1")?true:false);
}
function strhex2bin($hex)
{
$hex=str_replace(" ","",$hex);
$last = strlen($hex)-1;
$ret="";
for($i=0; $i<=$last; $i++)
{
switch(hexdec($hex[$last-$i]))
{
case 0: $ret.="0000"; break;
case 1: $ret.="1000"; break;
case 2: $ret.="0100"; break;
case 3: $ret.="1100"; break;
case 4: $ret.="0010"; break;
case 5: $ret.="1010"; break;
case 6: $ret.="0110"; break;
case 7: $ret.="1110"; break;
case 8: $ret.="0001"; break;
case 9: $ret.="1001"; break;
case 10: $ret.="0101"; break;
case 11: $ret.="1101"; break;
case 12: $ret.="0011"; break;
case 13: $ret.="1011"; break;
case 14: $ret.="0111"; break;
case 15: $ret.="1111"; break;
}
}
return($ret);
}