LINUX.ORG.RU

Разобраться с SNMP


0

0

Вот хочу разобраться с SNMP, что бы самому что нибудь наваять для мониторинга и возможно управления. Гуглил долго но так и не нашёл описания структуры пакета протокола (в rfc ничего что могло бы помочь). Может подскажете какую либо самую простую софтину (лучше если она использует только GET) дабы покопаться в исходниках.

Заранее спасибо!!!

★★★★★
Ответ на: комментарий от barmaleus

насколько я понял у SNMP, есть операция GET, которая позволяет запрашивать данные с устройств, а SET для настройки.

cyclon ★★★★★
() автор топика
Ответ на: комментарий от barmaleus

Про net-snmp я знаю, но хочется посмотреть на что то попроще и не использовать готовую библиотеку.

cyclon ★★★★★
() автор топика

> Гуглил долго но так и не нашёл описания структуры пакета протокола (в rfc ничего что могло бы помочь).

Ты плохо смотрел. SNMP использует ASN.1 (BER кодирование) для описания PDU, который потом запихивается в UDP пакет. Структура PDU описана в RFC 1157.

Вобщем лучше взять net-snmp и не париться.

anonymous
()
Ответ на: комментарий от anonymous

спасибо за ссылку, буду курить

cyclon ★★★★★
() автор топика

Ну ты попал, кто-то сильно пошутил насвав его Простым протоколом управления сетю :)

#!/usr/bin/perl
use Net::SNMP;
if (!@ARGV) {print "Определение SysID, использование:\n$0 IP \[community string\]\ndefault community string -- TestComm\n";exit}

my ($host, $comm)= @ARGV;
# print "testing $host...\n";
($session, $error) = Net::SNMP->session ( -hostname => $host,
-community => $comm || TestComm,
-port => 161,
-version => 2,
);
if (!defined($session)){
print "connectoin err\n$error\n";
}



$testOBJ='.1.3.6.1.2.1.1.2.0';

$tab = $session->get_request (
-varbindlist => [$testOBJ]
);
if (!defined($tab)){
# print $session->error,"\n";
$session->close;
}
$c_oid= $tab->{$testOBJ};
$session->close;

print $c_oid."\n";


gnomino
()
Ответ на: комментарий от cyclon

Не совсем. ASN.1 используется как разметка для структуры пакета. С помощью транслятора (asn1c, snacc), можно преобразовать эту разметку в процедуру маршаллинга/демаршаллинга в кодированное представление. Вот это кодированное представление и есть PDU, отсылаемый в UDP пакете.

anonymous
()
Ответ на: комментарий от cyclon

Верно. В принципе, BER довольно простая кодировка, TLV's идущие последовательно. Можно руками выписать, а можно выдернуть из RFC определение PDU и транслировать asn1c.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.