Я машины состояний встречаю прежде всего во встраиваемых системах. Это довольно мощный инструмент создания асинхронных процессов, без реальной многозадачной ОС.
А когда то умение писать код быстрее других было каким то показателем? мне казалось уметь надо не быстро писать а хорошо понимать что ты делаешь. А писать можно и медленно.
Ну и опять же, хороший программист посмотрит дизассемблерный листинг и поймет что там к чему, плохой не поймет. То же и тут только теперь не ассемблер а уже высокоуровневый код.
Вот я иногда пишу на VHDL - но я понимаю во что это превратится на кристалле. Можно и без понятия писать - но цена ошибки будет высока.
А в WinSSHTerm есть возможность импорта/экспорта части хостов? у ZOC это только на свежих версиях ито так себе. А еще в ZOC в профиле пароли зашифрованы но как не ясно, от того мало доверия этому шифрованию.
Хочу сразу обратить внимание что свой приемник делал как альтернативу приемникам основанным на Gosnmp/SNMP4J а не Net-SNMP но тем не менее сравнивать будем именно с Net-SNMP.
Итак давайте сразу заметим что при отправке Trap, коммутаторы используют свой локальный Engine-ID, а в конфигурации snmptrapd указывается связка engineid + username + auth/priv параметры.
В случае же Inform, Engine-ID используется удаленной стороны, то есть сервера.
И мы видим что в случае трапов, мы можем использовать одинаковые имена с разными параметрами (протоколы, пароли), так как engineid разный.
А в случае с Inform так не получится - engine id один, нашего сервера.
Я же решил отказаться от привязке к engine id в принципе (хотя разумеется добавить это не составит труда), а дать возможность сделать две стадии выборки учетных данных, по username + ip и просто по username (хотя можно еще и по engineid добавить).
Это не является какой то серьезной проблемой, можно просто использовать разные имена но все же.
Есть еще приемники трапов на базе SNMP4J, тот же Apache NiFi в связке с чем либо (Kafka например и далее чтото) Гибко, хорошо но затратно и явно не для простых кейсов.
Про Gosnmp можно даже не говорить - там даже v2c и v3 на одном порту принимать проблема.
Ну и да, не вижу смысла в каком то предварительном обработчике перед тем как записать в файл в моем случае, так как все легко дописывается прямо в приемнике, но в целом можно и отдать куда то еще на пост обработку.
По поводу тога как я организовал тест на заббиксе - это все было в целях демонстрации однако в реальной сети, иногда приходится вручную заводить элементы данных - разумеется это не интерфейсы. Авто обнаружение помогает в основном в простых случаях. Я довольно часто руками что то завожу, ну как пример состояние какого нибудь TurboRing кольца.
По поводу Cisco/не Cisco - могу написать отдельную статью о настройке Trap/Inform v3 на Eltex/Huawei/Maipu - будет полезно?
Но тем не менее, оно реально хорошо сделано. Если пробежаться по коду то там все достойно. Но честно скажу - ее я особо не тестировал глубоко. Можно будет сделать сравнительные тесты.
WebNMS имела проблемы а на нее уже было много всего завязано.
gosnmp не понравился по разным пичинам
Неплохое знание ASN.1 и прочих вещей позволило в течение нескольких месяцев создать свою библиотеку
Своя понятнее
gosnmp не нравится парсер ASN.1, не нравится приемник трапов, не нравится работа со строками, не нравится работа с репортами, не нравится работа с буферами, не нравится работа с ошибками и еще много много чего
Есть у меня тесты и того и того с Элтексом которые gosnmp проваливает
Не верите? а это я писал :-) решил прям расписать.
И статью пробовал показать ИИ - ну GPT сказал надо все исправить и переделать.
Я разумеется не стал. Мне кажется ценность "человеческого" материала важнее чем опечатки. Ну и любой ИИ скажет - слабая подача, нет сравнения и прочее.
Но я специально не намерен писать что эта библиотека превосходит другие, я попытался скорее описать чем она интересна .
PS:
Кстати snmpgo не заслуженно непопулярна - тоже рекомендую, писал какой то японец.
Ну разумеется. Самый простой способ - найти нормального поставщика кто разбирается в том что продает.
Спасибо, было интересно
От части да, только вот иногда нейросети откровенно врут
Ох… пишущий привод есть, иногда пишу чтото. А софт этот помню кроме последних двух
Я машины состояний встречаю прежде всего во встраиваемых системах. Это довольно мощный инструмент создания асинхронных процессов, без реальной многозадачной ОС.
Как пример - TCP.
А еще можете ознакомится с такой штукой:
https://www.state-machine.com
Однако это не догма, если задача решается как у вас то почему нет?
А когда то умение писать код быстрее других было каким то показателем? мне казалось уметь надо не быстро писать а хорошо понимать что ты делаешь. А писать можно и медленно.
Ну и опять же, хороший программист посмотрит дизассемблерный листинг и поймет что там к чему, плохой не поймет. То же и тут только теперь не ассемблер а уже высокоуровневый код.
Вот я иногда пишу на VHDL - но я понимаю во что это превратится на кристалле. Можно и без понятия писать - но цена ошибки будет высока.
А в WinSSHTerm есть возможность импорта/экспорта части хостов? у ZOC это только на свежих версиях ито так себе. А еще в ZOC в профиле пароли зашифрованы но как не ясно, от того мало доверия этому шифрованию.
Добрый день.
Спасибо за комментарий.
Попробую по порядку ответить на ваши вопросы.
Хочу сразу обратить внимание что свой приемник делал как альтернативу приемникам основанным на Gosnmp/SNMP4J а не Net-SNMP но тем не менее сравнивать будем именно с Net-SNMP.
Итак давайте сразу заметим что при отправке Trap, коммутаторы используют свой локальный Engine-ID, а в конфигурации snmptrapd указывается связка engineid + username + auth/priv параметры.
В случае же Inform, Engine-ID используется удаленной стороны, то есть сервера.
Вот тут описана настройка и разница:
https://www.net-snmp.org/tutorial/tutorial-5/commands/snmptrap-v3.html
И мы видим что в случае трапов, мы можем использовать одинаковые имена с разными параметрами (протоколы, пароли), так как engineid разный.
А в случае с Inform так не получится - engine id один, нашего сервера.
Я же решил отказаться от привязке к engine id в принципе (хотя разумеется добавить это не составит труда), а дать возможность сделать две стадии выборки учетных данных, по username + ip и просто по username (хотя можно еще и по engineid добавить).
Это не является какой то серьезной проблемой, можно просто использовать разные имена но все же.
Есть еще приемники трапов на базе SNMP4J, тот же Apache NiFi в связке с чем либо (Kafka например и далее чтото) Гибко, хорошо но затратно и явно не для простых кейсов.
Про Gosnmp можно даже не говорить - там даже v2c и v3 на одном порту принимать проблема.
Ну и да, не вижу смысла в каком то предварительном обработчике перед тем как записать в файл в моем случае, так как все легко дописывается прямо в приемнике, но в целом можно и отдать куда то еще на пост обработку.
По поводу тога как я организовал тест на заббиксе - это все было в целях демонстрации однако в реальной сети, иногда приходится вручную заводить элементы данных - разумеется это не интерфейсы. Авто обнаружение помогает в основном в простых случаях. Я довольно часто руками что то завожу, ну как пример состояние какого нибудь TurboRing кольца.
По поводу Cisco/не Cisco - могу написать отдельную статью о настройке Trap/Inform v3 на Eltex/Huawei/Maipu - будет полезно?
Спасибо за уделенное внимание!
Я на винде ZOC использую, на MAC он тоже есть, только он коммерческий, а так удобный.
А так здорово что чтото создали - нужно как нибудь поглядеть на репозиторий.
Ну я по диагонали пробежался , разъемы интересные :-)
Пока в виде комментария добавлю скриншоты из Wireshark как GoSNMP и PowerSNMPv3 работает с буфферами и параметром maxMsgSize:
А теперь зададим MaxMsgSize как 1200
Разумеется придется разное количество запросов делать - так как в результатах будет разное количество данных.
Ну что тут сказать - только выскажу свое почтение.
Я тоже лет 15 назад писал TCP/IP стек под Renesas RX да потом забросил.
Сейчас иногда вспоминаю и пытаюсь доделать.
Делал его чуть продвинутее чем uIP и чуть компактнее чем lwIP
Сейчас конечно скажут зачем когда есть CyclonTCP и lwIP в целом неплох.....
Но тем не менее, оно реально хорошо сделано. Если пробежаться по коду то там все достойно. Но честно скажу - ее я особо не тестировал глубоко. Можно будет сделать сравнительные тесты.
Так я все написал, причины создания были:
WebNMS имела проблемы а на нее уже было много всего завязано.
gosnmp не понравился по разным пичинам
Неплохое знание ASN.1 и прочих вещей позволило в течение нескольких месяцев создать свою библиотеку
Своя понятнее
gosnmp не нравится парсер ASN.1, не нравится приемник трапов, не нравится работа со строками, не нравится работа с репортами, не нравится работа с буферами, не нравится работа с ошибками и еще много много чего
Есть у меня тесты и того и того с Элтексом которые gosnmp проваливает
Есть тесты с другими девайсами.
Да цель - свой продукт и он есть и не один.
Вот тут я немного рассказал об этом
https://youtu.be/bI66ejMpPnU?list=PLh8giz78WRMzJJIE6DQ2mQQN-b72FtZv8
Возможно кто-то из читателей там был даже (точнее знаю, точно был :-) ).
А вы про это, ну это никак не влияет на работу, а код вот он - опен сурс, кто желает может как угодно переделать.
Ну эта функция нужна чтоб PRTG при отображении алагма, писал что пошло не так. А название.... как то давно делал не предал значения.
Суть сенсора в том, что XML (но можно и JSON для более менее свежих версий) может содержать данные каналов, а может содержать секцию:
<error>1</error> и <text> тут сообщение об ошибке </text> и все.
И вот любые ошибки не на уровне каналов я вывожу сюда.
А буква... А где именно? в исходнике примера для С9800? вроде не должна. Давайте проверю
На мой взгляд у gosnmp слишком "другая" архитектура.
Тогда уж snmpgo - куда более правильная.
И опять же, создание своего велосипеда дает такой опыт который по другому получить крайне сложно. Академический интерес не всегда плохо.
Не верите? а это я писал :-) решил прям расписать.
И статью пробовал показать ИИ - ну GPT сказал надо все исправить и переделать.
Я разумеется не стал. Мне кажется ценность "человеческого" материала важнее чем опечатки. Ну и любой ИИ скажет - слабая подача, нет сравнения и прочее.
Но я специально не намерен писать что эта библиотека превосходит другие, я попытался скорее описать чем она интересна .
PS:
Кстати snmpgo не заслуженно непопулярна - тоже рекомендую, писал какой то японец.
Добрый вечер.
Большинство использует для высокопроизводительных систем Net-SNMP, SNMP++
Java 'вскую JNMP4J
Python - тут есть из чего выбрать: нативнцй питон, обертка над net-snmp
На Go есть gosnmp и snmpgo
Теперь про коммерческие - есть несколь джаваских и C#
Я свою делал потому что столкнулся с проблемами с некоторыми коммутаторами, но прежде всего был академический интерес.
А - забыл, есть еще что-то на расте, и вот это интересно
Go чем хорош? конечно же множим горутины :-) ну и без зависимостей
Нейронка использовалась только для генерации GoDoc и английского ридми. Еще как код ревью .
Клод .
Код писался без ИИ .
Могу за каждую строчку ответить