SNMPTRAPD на RHEL 6

Следующее решение основано только на xxd (один из инструментов, упомянутых в вопросе), Bash и GNU sed.

Предполагается, что ввод состоит из полных байтов (групп из восьми букв), произвольно разделенных символами новой строки.

Подход таков:

  1. Удалите все символы новой строки.

  2. Сгруппируйте буквы в группы из четырех букв, оканчивающиеся пробелами.

  3. Отфильтруйте эти квадграфы в шестнадцатеричные цифры, не отделенные друг от друга.

  4. Сгруппируйте пары шестнадцатеричных цифр вместе, каждая пара в отдельной строке.

  5. Прочтите эти байтовые значения с помощью цикла оболочки и восстановите xxd совместимый шестнадцатеричный дамп.

  6. Перенаправить в xxd -r для преобразования дампа в шестнадцатеричные данные.

Код:

#!/bin/bash

addr=0
tr -d '\n' | \
sed -e 's/..../& /g' |
sed -e 's/AAAA /0/g' \
    -e 's/AAAB /1/g' \
    -e 's/AABA /2/g' \
    -e 's/AABB /3/g' \
    -e 's/ABAA /4/g' \
    -e 's/ABAB /5/g' \
    -e 's/ABBA /6/g' \
    -e 's/ABBB /7/g' \
    -e 's/BAAA /8/g' \
    -e 's/BAAB /9/g' \
    -e 's/BABA /A/g' \
    -e 's/BABB /B/g' \
    -e 's/BBAA /C/g' \
    -e 's/BBAB /D/g' \
    -e 's/BBBA /E/g' \
    -e 's/BBBB /F/g' |
sed -e 's/../&\n/g' |
while read hexbyte ; do
  if [ $((addr % 16)) == 0 ] ; then
     printf "%08x: " $addr
  fi
  printf "%s" $hexbyte
  if [ $((addr % 16)) == 15 ] ; then
    printf "\n"
  else
    printf " "
  fi
  : $(( addr++ ))
done |
xxd -r - -

Скромный прогон образца:

$ cat data
AAAABBB
B
ABABABAB
ABABAABBBBAABBAB

$ ./ab.sh < data > data.bin

$ xxd data.bin
0000000: 0f55 53cd                                .US.

Вот модификация кода для обработки конечной группы из семи или менее битов, путем дополнения ее нулями, чтобы получился полный байт, так что, например, файл не содержащий ничего, кроме B , отображается в байт 0x80 :

#!/bin/bash

addr=0
tr -d '\n' | \
sed -e 's/..../& /g' |
sed -e 's/AAAA /0/g' \
    -e 's/AAAB /1/g' \
    -e 's/AABA /2/g' \
    -e 's/AABB /3/g' \
    -e 's/ABAA /4/g' \
    -e 's/ABAB /5/g' \
    -e 's/ABBA /6/g' \
    -e 's/ABBB /7/g' \
    -e 's/BAAA /8/g' \
    -e 's/BAAB /9/g' \
    -e 's/BABA /A/g' \
    -e 's/BABB /B/g' \
    -e 's/BBAA /C/g' \
    -e 's/BBAB /D/g' \
    -e 's/BBBA /E/g' \
    -e 's/BBBB /F/g' \
    -e 's/AAA$/0/g' \
    -e 's/AAB$/2/g' \
    -e 's/ABA$/4/g' \
    -e 's/ABB$/6/g' \
    -e 's/BAA$/8/g' \
    -e 's/BAB$/A/g' \
    -e 's/BBA$/C/g' \
    -e 's/BBB$/E/g' \
    -e 's/AA$/0/g' \
    -e 's/AB$/4/g' \
    -e 's/BA$/8/g' \
    -e 's/BB$/C/g' \
    -e 's/A$/0/g' \
    -e 's/B$/8/g' |
sed -e 's/../&\n/g' |
sed -e 's/^.$/&0\n/' |
while read hexbyte ; do
  if [ $((addr % 16)) == 0 ] ; then
     printf "%08x: " $addr
  fi
  printf "%s" $hexbyte
  if [ $((addr % 16)) == 15 ] ; then
    printf "\n"
  else
    printf " "
  fi
  : $(( addr++ ))
done |
xxd -r - -
1
14.11.2018, 21:18
1 ответ

прокомментируйте следующую строку в/etc/snmp/snmp.conf

mibs +ALL

И добавьте следующую строку.

mibs +SNMPv2-MIB

Наконец, перезапустите службу

service snmpd restart
1
27.01.2020, 23:43

Теги

Похожие вопросы