SnmpSim. Запускаем в Docker

В предыдущем посте была рассмотрен запуск симулятора snmpsim в Windows. Здесь же рассмотрим особенности запуска этого симулятора в Docker.

Для запуска snmpsim в докере мы будем использовать образ python:3.7-slim-buster. Почему не Alpine можно узнать из статьи на Хабре. В целом алгоритм достаточно прост: установить из pip симулятор snmpsim, скопировать папку data (содержащую файл public.snmprec) и открыть 161 порт.

И тут самое важное: требуется стартовать snmpsimd.py непременно из под process-user и process-group равными root.

Ниже подробный Dockerfile:

1
2
3
4
5
6
7
8
9
FROM python:3.7-slim-buster

RUN pip install --no-cache-dir snmpsim

ADD data /usr/local/snmpsim/data

EXPOSE 161/udp

CMD ["snmpsimd.py", "--agent-udpv4-endpoint=0.0.0.0:161", "--process-user=root", "--process-group=root"]

Файл public.snmprec из вышеупомянутой папки data подробно описан в предыдущем посте по snmpsim в Windows.

Собственно остаётся перейдти в папку с Dockerfile и выполнить команды:

1
docker build . -t snmp-sim

и

1
docker run -p 161:161 snmp-sim

Проверить обмен с симулятором можно с помощью программы MIB Browser

SnmpSim. Запускаем в Windows

Как сообщает Википедия, SNMP (англ. Simple Network Management Protocol — простой протокол сетевого управления) — стандартный интернет-протокол для управления устройствами в IP-сетях на основе архитектур TCP/UDP. К поддерживающим SNMP устройствам относятся маршрутизаторы, коммутаторы, серверы, рабочие станции, принтеры, модемные стойки и другие. Протокол обычно используется в системах сетевого управления для контроля подключённых к сети устройств на предмет условий, которые требуют внимания администратора.

Касательно принтеров возможен опрос их характеристик по SNMP-протоколу, например: количество отпечатанных листов разных форматов, количество оставшегося ресурса фотобарабана и т.д.
Иногда требуется симулировать ответы устройства по SNMP для целей тестирования, в том числе нагрузочного.

В вопросе симуляции ответов SNMP устройств отличным помощником выступает SNMP Simulator, который сам себя характеризует как pure-Python, open source and free implementation of SNMP agents simulator. Исходные коды симулятора расположены на Github по адресу: https://github.com/etingof/snmpsim

Для функционирования симулятора потребуется Python любой версии из ряда: 2.4, 2.5, 2.6, 2.7, 3.2, 3.3, 3.4, 3.5, 3.6, 3.7. Скачать его можно отсюда: https://www.python.org/downloads/

Для установки симулятора введите команду в терминале (PowerShell, CommandPrompt):

1
$ pip install snmpsim

Далее для симуляции потребуется текстовый файл public.snmprec, содержащий в каждой отдельной строке:

OID|тип_значения|значение

Например:

1
2
3
4
5
6
1.3.6.1.2.1.1.1.0|4|Linux 2.6.25.5-smp SMP Tue Jun 19 14:58:11 CDT 2007 i686
1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.8072.3.2.10
1.3.6.1.2.1.1.3.0|67|233425120
1.3.6.1.2.1.2.2.1.6.2|4x|00127962f940
1.3.6.1.2.1.4.22.1.3.2.192.21.54.7|64x|c3dafe61
...

Для симуляции ответов принтера используйте тип_значения равным 4, что означает OctetString.

Я использовал, в частности, файл public.snmprec такого вида:

1
2
3
4
5
1.3.6.1.2.1.43.5.1.1.17.1|4|A7980275412
1.3.6.1.2.1.25.3.2.1.3.1|4|KONICA MINOLTA bizhub C227
1.3.6.1.4.1.18334.1.1.1.5.7.2.3.1.5.1|4|735
1.3.6.1.4.1.18334.1.1.1.5.7.2.2.1.5.2.1|4|190
1.3.6.1.4.1.18334.1.1.1.5.7.2.2.1.5.1.1|4|5

При запуске симулятор будет искать файл, симулирующий ответы public.snmprec, по нескольким путям, но я рекомендую разместить public.snmprec в папке:

1
C:\Users\{userName}\SNMP Simulator\Data

Запустить симулятор можно из терминала командой:

1
snmpsimd.py --data-dir=./data --agent-udpv4-endpoint=0.0.0.0:161

Симулятор будет слушать 161 порт и отвечать на входящие OID значением из файла public.snmprec, если оно там присутствует.

Проверить обмен с симулятором можно с помощью программы MIB Browser

Ну вот и всё! Спасибо Ilya Etingof за зачётный симулятор!

Алгоритм создания блога на GitHub Pages

Обучаясь в рамках бесплатного курса “Как вести блог и развивать личный бренд” Высшей Школы Программирования Сергея Бобровского я столкнулся с необходимостью описать алгоритм создания блога на github.io.

GitHub Pages отличная площадка, позволяющая разместить статический сайт с именем https://username.github.io прямо на GitHub. При этом не требуется организации хостинга, развертывания БД и т.д. Такой сайт может служить блогом о ваших проектах, любимых книгах, … да о чём угодно вашей душе.

Я решил использовать GitHub Pages для личного блога. Для этого потребуется выполнить следующие шаги:

  1. Создайте на GitHub открытый репозиторий (public repository) называющийся username.github.io, где username - это ваше имя пользователя на GitHub. Учтите, что если имя репозитория не будет в точности соответствовать username на GitHub, то сайт не заработает.

Для организации блога/сайта на GitHub Pages можно использовать различные инструменты (самый известный - Jekyll). Я остановил свой выбор на Hexo. Подкупила простота и возможность использовать Markdown при создании постов. Для установки Hexo:

  1. Установите Node.js и Git.

  2. Установите Hexo следующими командами:

1
2
3
4
5
$ npm install hexo-cli -g
$ hexo init blog
$ cd blog
$ npm install
$ hexo server

В Hexo существует порядка 336 шаблонов и я почти на день погрузился в их изучение.

В конечном итоге вернулся к дефолтному шаблону landscape, т.к. большинство шаблонов Hexo на китайском языке.

  1. Отредактируйте файл _config.yml:

    1
    post_asset_folder: true

    Это позволит автоматически создавать папку для ресурсов в source/_posts с имененм нового поста.

  2. Создайте новый пост блога командой:

    1
    $ hexo new "имя-нового-поста"
  3. Отредактируйте файл имя-нового-поста.md, расположенный в папке source/_posts. Для примера можно использовать hello-world.md файл, расположенный в той же папке. Изображения и другие ресурсы поместите в папку source/_posts/имя-нового-поста, созданную автоматически благодаря настройками из пункта 4. Размещение изображений в посте отличается от стандантного Markdown. Для того чтобы вставить изображение возпользуйтесь:

    1
    {% asset_img image.jpg My specific image title %}

    Hexo сам найдёт изображение image.jpg в папке source/_posts/имя-нового-поста и добавит его в пост.

  4. Откройте в браузере страницу с адресом Hexo сервера по умолчанию: http://localhost:4000/ и оцените результат. Если результат устраивает, переходите к пункту 8. Если нет, вернитесь к пункту 6.

  5. Для автоматического деплоя блога на GitHub установите hexo-deployer-git

    1
    $ npm install hexo-deployer-git --save

    и отредактируйте файл _config.yml:

    1
    2
    3
    deploy:
    type: git
    repo: <repository url> # https://github.com/username/username.github.io
  6. Выполните деплой блога командой:

    1
    $ hexo clean && hexo deploy
  7. Откройте в браузере страничку https://username.github.io и сделайте репост вашего шедевра для друзей.

О чем этот блог

Меня зовут Артём Остащенко. Я - C#.NET разработчик, балующийся фронтендом. Так как я по образованию инженер в области материалов и компонентов твердотельной электроники, то программирование изучал самостоятельно. В этом мне очень помогли ITVDN, Hexlet, HTML Academy, Ulearn.me, Stepik и Сергей Игоревич Бобровский. Этот блог будет посвящён разработке ПО для принтеров, электросчётчиков, C#, фронтенду (JS, React) и книгам, которые я прочёл и рекомендую другим.