| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Perl: Общие вопросы > Помогите новичку дописать скрипт. |
| Автор: whopix 20.12.2011, 07:07 |
| Здравствуйте, есть два вопроса 1) чем вывод echo в php отличается от вывода print в perl (это все делается для cacti)? 2) Помогите дописать, переписать, написать скрипт. написал на php на perl не получается. вот как на пхп #!/usr/local/bin/php <?php $i=0; $snmp="snmpwalk -v 2c -c public 127.0.0.1 1.3.6.1.3.59.1.1.2.1.4.239.0.2 | grep 239.0.2 | grep IpAddress | grep -v 192.168.201"; exec($snmp,$result); $snmp="snmpwalk -v 2c -c public 127.0.0.1 1.3.6.1.3.59.1.1.2.1.4.239.0.2 | grep 239.0.2 | grep IpAddress | grep -v 192.168.201"; exec($snmp,$result); while ($i < 255) { $str=str_replace(".239.0.2.".$i.".","",$result,$count); if ($count<>0) print $i.":".$count." "; $i++; } ?> вывод этого скрипта будет вот таким: 4:1 7:2 40:3 53:1 58:1 69:1 70:1 71:2 а структура (дерево) которую он опрашивает вот такая (snmpwalk -v 2c -c public 127.0.0.1 1.3.6.1.3.59.1.1.2.1.4.239.0.2 | grep 239.0.2 | grep IpAddress | grep -v 192.168.201) SNMPv2-SMI::experimental.59.1.1.2.1.4.239.0.2.7.125 = IpAddress: 192.168.25.95 SNMPv2-SMI::experimental.59.1.1.2.1.4.239.0.2.40.125 = IpAddress: 192.168.25.103 SNMPv2-SMI::experimental.59.1.1.2.1.4.239.0.2.40.138 = IpAddress: 192.168.38.21 SNMPv2-SMI::experimental.59.1.1.2.1.4.239.0.2.40.939 = IpAddress: 192.168.202.53 SNMPv2-SMI::experimental.59.1.1.2.1.4.239.0.2.70.133 = IpAddress: 192.168.33.99 SNMPv2-SMI::experimental.59.1.1.2.1.4.239.0.2.71.130 = IpAddress: 192.168.30.162 SNMPv2-SMI::experimental.59.1.1.2.1.4.239.0.2.76.305 = IpAddress: 192.168.105.64 SNMPv2-SMI::experimental.59.1.1.2.1.4.239.0.2.82.115 = IpAddress: 192.168.15.175 смысл такой чтобы опросить устройство по snmp определенный oid подсчитать кол-во одинаковых полей и вывести номер этого поля. для примера SNMPv2-SMI::experimental.59.1.1.2.1.4.239.0.2.40.125 = IpAddress: 192.168.25.103 SNMPv2-SMI::experimental.59.1.1.2.1.4.239.0.2.40.138 = IpAddress: 192.168.38.21 SNMPv2-SMI::experimental.59.1.1.2.1.4.239.0.2.70.133 = IpAddress: 192.168.33.99 должен вывести 40:2 70:1 в принципе на php он тоже не совсем корректен и требует доработок, но выдает нужное. но к сожалению нужно переписать на perl. на перле делал по разному, получилось сделать вывод выборки но посчитать не получилось, в php начинающий в перле еще хуже(но учусь). помогите если не сложно, заранее спасибо. |
| Автор: DurRandir 20.12.2011, 13:28 |
| Код перловый покажите. |
| Автор: whopix 20.12.2011, 13:40 |
| самый простой my $x=system "snmpwalk -v 2c -c public 127.0.0.1 1.3.6.1.3.59.1.1.2.1.4.239.0 | grep 239.0.2 | grep IpAddress | grep -v 192.168.201"; print @x; вывод такой: SNMPv2-SMI::experimental.59.1.1.2.1.4.239.0.2.44.130 = IpAddress: 192.168.30.162 SNMPv2-SMI::experimental.59.1.1.2.1.4.239.0.2.51.305 = IpAddress: 192.168.30.81 SNMPv2-SMI::experimental.59.1.1.2.1.4.239.0.2.70.125 = IpAddress: 192.168.25.95 SNMPv2-SMI::experimental.59.1.1.2.1.4.239.0.2.70.133 = IpAddress: 192.168.33.42 более сложный, этот на нескольких сайтах видел use strict; use warnings; use diagnostics; use Net::SNMP; my $snmp_host = '127.0.0.1'; my $snmp_community = 'public'; my $snmp_oid = '1.3.6.1.3.59.1.1.2.1.4.239.0.2'; my $snmp_session = Net::SNMP->session( -hostname => $snmp_host, -community => $snmp_community, -version => 2, ) or die('Не удалось соединиться!'); my $result = $snmp_session->get_request( -varbindlist => [$snmp_oid], ) or die('Не удалось выполнить запрос!'); print "Значение OID $snmp_oid = $result->{$snmp_oid}\n"; $snmp_session->close(); вывод: Значение OID 1.3.6.1.3.59.1.1.2.1.4.239.0.2 = noSuchInstance т.е. вычисления не смог добавить только вывод пока |