Ad Widget

Collapse

Hex-String как перевисти в удобочитаемый вид?

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • hrusha
    Junior Member
    • Jan 2013
    • 4

    #1

    Hex-String как перевисти в удобочитаемый вид?

    Zabbix 1.8.5 установленный на freebsd 8.2. Есть принтер Hp LJ 5200. В zabbix-e пытаюсь настроить по snmp снять с него статистику. Пытаюсь вывести его модель - нашел oid - .1.3.6.1.4.1.11.2.3.9.4.2.1.1.3.2.0. В ManageEngine MibBrowser выводит нормально HP LaserJet 5200. В zabbix-e создаю элемент данных - выдает 01 15 48 50 20 4C 61 73 65 72 4A 65 74 20 35 32 30 30. На консоле freebsd пишу:
    PHP Code:
    snmpget -public -v 1 10.10.10.61 .1.3.6.1.4.1.11.2.3.9.4.2.1.1.3.2.0
    SNMPv2
    -SMI::enterprises.11.2.3.9.4.2.1.1.3.2.0 Hex-STRING01 15 48 50 20 4C 61 73 65 72 4A 65 74 20 35 32 
    30 30 
    То есть выдает в Hex-STRING. Почитал по форуму (https://www.zabbix.com/forum/archive...p/t-17124.html) предлагают внешнюю проверку для перевода из hex в нормальный вид.
    Но так как я не силен в программировании возникли большие затруднения. Помогите сделать так что бы в zabbix-e выводило HP LaserJet 5200.
  • dima_dm
    Senior Member
    • Dec 2009
    • 2697

    #2
    Без программирования тут ни как, всегда полезно владеть одним или несколькими языками программирования. Пишите на Perl, строк 10-15 программа будет.

    Comment

    • hrusha
      Junior Member
      • Jan 2013
      • 4

      #3
      Перловский скрипт я написал благодаря этой статье http://www.systmbx.com/tutorials/pro...t-hex-to-ascii все отлично переводит. Но возникло несколько вопросов. В перловый скрипт что бы он переводил необходимо передать значение в формате 01154850204C617365724A65742035323030 но snmpget выдает в формате 01 15 48 50 20 4C 61 73 65 72 4A 65 74 20 35 32 30 30. Пробелы я убираю
      PHP Code:
      snmpget -public -v 1 10.10.10.61 .1.3.6.1.4.1.11.2.3.9.4.2.1.1.3.2.0$tr -" " cut -f 4- -" " tr -" " 
      Но при этом последние 3030 обрезается так как они на новой строке. Как сделать что бы они добавлялись?
      И самое главное как это все запихнуть в zabbix?
      На freebsd я делаю файл moe в котором пишу:
      PHP Code:
      snmpget -public -v 1 10.10.10.61 .1.3.6.1.4.1.11.2.3.9.4.2.1.1.3.2.0$tr -" " cut -f 4- -" " tr -" " > /usr/local/etc/zabbix/externalscripts/my
       
      /usr/local/etc/zabbix/externalscripts/hex2ascii /usr/local/etc/zabbix/externalscripts/my 
      Хотя если в консоле freebsd запустить файл moe он должен выводить HP LaserJet 5200 но выводит "L". Почему?

      Comment

      • dima_dm
        Senior Member
        • Dec 2009
        • 2697

        #4
        1) Очень просто, убрать из строки переводы каретки
        Пример:
        Code:
        #!/usr/bin/perl
        $a="aaa
        bbb";
        print "test1: a=$a\n";
        $a=~s/\n//g;
        print "test2: a=$a\n";
        Результат
        Code:
        ./test.pl 
        test1: a=aaa
        bbb
        test2: a=aaabbb
        2) >И самое главное как это все запихнуть в zabbix?
        Просто вывести полученное значение в стандартный вывод. Оно и попадёт в Zabbix, как значение item.
        P.S. SNMP запрос тоже можно сделать из perl скрипта, смотрите пример
        Last edited by dima_dm; 30-01-2013, 07:51.

        Comment

        • hrusha
          Junior Member
          • Jan 2013
          • 4

          #5
          С переводом каретки я разобрался, оказывается можно было просто чуть-чуть поправить snmpget до такого варианта:
          PHP Code:
          snmpget -public -v 1 10.10.10.61 .1.3.6.1.4.1.11.2.3.9.4.2.1.1.3.2.0$tr -"\n" tr -" " cut -f 4- -" " tr -" " 
          и все выводится в нужный формат.
          В Zabbix-е элемент данных надо выбирать с внешней проверкой - это я понял. Но как значение выводимое чрез snmpget засунуть в перловый скрипт который переводит из hex в удобочитаемый формат?
          То есть создаю файл который переводит из hex - test.pl:
          PHP Code:
          #!/usr/bin/perl

          $hex shift;

          while(
          $hex =~ /(.{2})/sg) {
                  
          printf chr(hex($1);
          }
          print 
          "\n"
          Функция shift в скрипте подразумевает введение значения hex руками через консоль. Как сделать что бы значение выводимое через snmpget вставлялось автоматом в поле shift перлового скрипта?

          Comment

          • dima_dm
            Senior Member
            • Dec 2009
            • 2697

            #6
            1) В вашем скрипте ошибка. Нет закрывающейся скобки в строке.
            printf chr(hex($1));
            2) Точно так же можно передать данные, как и в любой другой программе через |.

            Comment

            • hrusha
              Junior Member
              • Jan 2013
              • 4

              #7
              Да, скобку пропустил)
              Но все равно не получается делаю:
              PHP Code:
              snmpget -public -v 1 10.10.10.61 .1.3.6.1.4.1.11.2.3.9.4.2.1.1.3.2.0$tr -"\n" tr -" " cut -f 4- -" " tr -" "  perl test.pl 
              выводит пустую строку. Почему?
              Такое ощущение, что ввод значения в test.pl через | не передается. Как сделать что бы вводилось?

              Comment

              • dima_dm
                Senior Member
                • Dec 2009
                • 2697

                #8
                Прочитать из stdin
                Пример программы, читает из stdin и пишет в stdout
                Code:
                #!/usr/bin/perl
                while (<>)
                {
                print "my output:".$_ ;   
                }
                echo "test test"| ./test.pl
                my output:test test

                Comment

                Working...