Давайте знакомиться
Привет, Хабр! Меня зовут Руслан, я – инженер по сетевой и информационной безопасности в компании-интеграторе STEP LOGIC. Решаю различные задачи, связанные с настройкой и поддержкой сетевого оборудования в компьютерных сетях, работаю над проектами, требующими планирования архитектуры сети, проведения расчетов с IP-адресами, а также подготовки конфигурационных файлов для настройки межсетевых экранов и криптошлюзов. Программированием и кодингом никогда ранее не занимался. В этой статье я расскажу о своем опыте создания при помощи нейросетей Telegram чат-бота, полезного для сетевых инженеров и администраторов.
Как пришла идея создания чат-бота
Любой сетевой инженер периодически сталкивается с ситуацией, когда нужно быстро определить доступные IP-адреса в сети с заданной маской, найти первый и последний IP для назначения его шлюзом по умолчанию, узнать, сколько всего помещается хостов в данной сети, и т.д. и т.п. Одни выучивают IP-сети с масками и их хостами как таблицу умножения, другие же пользуются онлайн или мобильными калькуляторами.
Я отношусь к последним, зубрить – не моё. В связи с этим меня всегда занимал вопрос, почему калькуляторами называются программы, которые по сути могут лишь показать в ответ на введенный “IP-адрес + префикс сети” информацию о его сетевой/wildcard маске, адресе сети, бродкаст адресе, минимальном и максимальном хосте и их количестве в сети.
На мой взгляд, основная задача калькулятора – это выполнение 4-х простых арифметических операций ((+), (-), (×) и (÷)) над 2 или более заданными числами. Так почему же сетевые калькуляторы не могут в арифметику, когда вместо чисел нужно провести вычисления с несколькими сетями? Например, для деления широкой сети 10.0.0.0/24 на несколько узких /28 или для вычитания из сети 0.0.0.0/0 всех частных подсетей? Почему нельзя с помощью калькулятора сложить все смежные сети в списке в общие с более широкой маской или провести умножение (тиражирование) сети от начальной с заданной маской и до нужного количества сетей? Получается, настоящего сетевого калькулятора не существует…
Имея стойкое желание исправить это недоразумение при полном отсутствии опыта программирования, но испытывая большой энтузиазм по поводу возможностей нейросетей, я решил написать свой собственный калькулятор с блэкджеком… арифметикой и прочими приколюхами!
Лиха беда начало
Для того, чтобы убедиться, что ChatGPT в принципе умеет программировать, я попросил его написать простой Python-скрипт, генерирующий пароль заданной длины и сложности.
Результат меня удовлетворил — с первой же попытки я получил рабочий код, поэтому следующим заданием для нейросети стало написание кода, который повторял бы функционал уже готовых онлайн и мобильных IP-калькуляторов. Этого удалось добиться примерно за десяток запросов. Для проверки полученного результата я не использовал специализированное ПО типа сред разработки, а ограничился лишь Notepad++ для разметки и подсветки синтаксиса (для улучшения читаемости), а далее сохранял файл с расширением.py и запускал полученный скрипт в командной строке через Python.
Если скрипт не работал – копировал сообщение об ошибке в ChatGPT (иногда даже без дополнительных комментариев и просьб типа “разберись почему не работает и исправь” — нейросеть и так понимала контекст сообщения и что мне от неё сейчас нужно) и после получения предложений с исправлениями повторял процедуру.
После того, как стандартный функционал был готов, нужно было придумать, как реализовать и добавить остальные 4 простые арифметические функции с заданными сетями. Моё участие ограничилось генерацией идей, что должна делать функция, а реализацией занимался ChatGPT. Никогда прежде мой полёт фантазии ещё не находил путь к воплощению так быстро.
В итоге получился консольный интерактивный скрипт, который имеет меню из 6 пунктов и умеет:
- выводить информацию о введенном IP-адресе и его сети (копия IP-калькуляторов)
- (деление) дробить заданную сеть на все возможные подсети с выбранной маской
- (вычитание) исключать из заданной сети нужное кол-во заданных подсетей
- (сложение) определять суперсет заданного количества подсетей (находить 1 общую сеть, которая бы включала в себя все заданные)
- (умножение) тиражировать заданную подсеть с маской до выбранного количества таких же идущих друг за другом подсетей
- завершать работу скрипта.
выводить информацию о введенном IP-адресе и его сети (копия IP-калькуляторов)
(деление) дробить заданную сеть на все возможные подсети с выбранной маской
(вычитание) исключать из заданной сети нужное кол-во заданных подсетей
(сложение) определять суперсет заданного количества подсетей (находить 1 общую сеть, которая бы включала в себя все заданные)
(умножение) тиражировать заданную подсеть с маской до выбранного количества таких же идущих друг за другом подсетей
Блоки кода в статье специально приводить не буду, чтобы акцентировать Zero-Coding подход, но для любопытствующих выложу исходники на GitHub, когда доберусь до этого пункта в планах развития бота (TO DO лист выложу в следующей статье).
Далее мне захотелось создать из скрипта Portable executable версию, не требующую установки дополнительного ПО, сред разработки, Python и т.д., чтобы его можно было запустить, просто открыв файл. И ChatGPT любезно предложил использовать для этих целей PyInstaller.
Впоследствии я добавил возможность скачивания ранней оффлайн-версии моего сетевого калькулятора в итоговую версию Telegram-бота. Но об этом в другой раз. В этой статье опустим подробный обзор всех имеющихся функций и сосредоточимся на процессе его создания.
Убедившись в реальности выполнения задуманного, я приступил к переносу созданного скрипта на фреймворк Telegram-бота. Изначально я закидывал в чат с ИИ готовый Python-скрипт и просил ChatGPT переделать его в формат Telegram-бота.
Когда скрипт стал больше допустимого предела для одного сообщения в чате, пришлось дробить код на несколько сообщений, предупреждая ChatGPT об этом, чтобы он ждал всю информацию и только потом начинал обрабатывать запрос.
Получалось, если честно, не очень, часть исходного кода из первых сообщений “забывалась” в процессе общения с ИИ в чате и не попадала в его ответ. К тому же он так и норовил пропустить неважные на его взгляд блоки и функции в целях сохранения краткости ответов и предлагал написать их самостоятельно. Часто он обрывал код на середине и не всегда мог правильно его продолжить после этого (в дальнейшем OpenAI это исправили).
Дополнительные сложности создавало и то, что с таким объёмом данных, если что-то не работало после многократных попыток и проб различных вариантов, невозможно было попросить ChatGPT вернуться к “исходному варианту” кода. Так как суммарный объём текста в рамках текущей беседы уже вышел за рамки хранимой истории, в контексте памяти нейросети оставались лишь несколько последних сообщений, в которых были лишь несколько нерабочих вариаций выданного им кода.
Поэтому пришлось выбрать другой подход. Для каждой функции я создал отдельный чат и еще один общий для структуры скрипта без кода каждой отдельной функции (вместо них оставил комментарии о пропуске кода).
В таком виде ChatGPT хватило размера хранимого контекста, чтобы решить задачу по каждой отдельной функции. В чате по общей структуре скрипта ИИ написал базовый фреймворк для работы Telegram чат-бота, заменил способ ввода/вывода данных с input/print на исходящие/входящие сообщения, а также предложил использовать для меню 2 вида кнопок InlineKeyboardButton и KeyboardButton.
До этого момента все работало как чёрный ящик, а все мое участие ограничивалось составлением как можно более понятного ТЗ на естественном языке и копированием и вставкой кода. Теперь же мне пришлось разобраться, как должен работать код в целом и понять его структуру, чтобы после получения результатов в каждом отдельном чате самостоятельно суметь скомпоновать все функции воедино. А после этого еще предстояло переделать каждую арифметическую функцию в формат Telegram-бота по отдельности и собрать их воедино.
К окончанию работ без использования сторонних ресурсов кроме ChatGPT я уже разобрался, как подключаются в скрипт необходимые модули, импортируются необходимые функции, задаются переменные, какие возможности есть в API Telegram, освоил работу функции main со всеми необходимыми обработчиками, понял, как и где объявляются и вызываются функции. Этих азов хватило для того, чтобы, имея рабочую основу полноценного Python-скрипта с несколькими рабочими функциями сетевого калькулятора, придумать новые функции и масштабировать моего чат-бота.
Пока функций было не так много, мне удавалось по памяти находить нужные строки и подставлять в них новые куски кода. С ростом числа строк пришлось визуально отделить каждый блок отступами и символами и добавить к каждому небольшое описание или заголовок в комментариях.
Хоть читабельность кода и была восстановлена, но в голову закралась мысль о необходимости разделения кода на отдельные файлы для улучшения как восприятия, так и быстродействия, что я и собираюсь сделать в будущем.
Когда уже вошел во вкус
Часть идей для новых функций я позаимствовал из рабочих процессов – когда появлялась новая рутинная задача, требующая монотонных повторяющихся действий, я сразу писал для неё Python-скрипт и после его проверки переносил в формат Telegram-бота.
Например, сетевой мультитул помог мне при реализации проекта по поэтапной миграции крупной сети, распределенной по всей России, на отечественное криптооборудование. Первым делом мы размещали перед существующим пограничным оборудованием отечественные криптошлюзы, обеспечивающие шифрование региональных каналов связи с использованием криптоалгоритмов по ГОСТ, а VPN-каналы на западных криптоалгоритмах отключались.
Далее производились необходимые перенастройки и старое зарубежное оборудование выводилось из эксплуатации. При этом как для 1-ого, так и для 2-ого этапа приходилось составлять и заполнять огромные таблицы с адресным планом, выделять подсети и назначать IP-адреса новому оборудованию, а также переносить множество групп и объектов с зарубежных межсетевых экранов FortiGate и Cisco ASA на отечественный UTM Континент 4.
Вот здесь и вступил в дело мой бот, который уже умел производить расчеты с IP-сетями. А для миграции групп и объектов с FortiGate и Cisco ASA на UTM Континент 4 я написал конвертор конфигураций сетевого оборудования. Отправляешь Telegram-боту файлом в сообщении выгрузку конфига, а в ответ он присылает файл импорта настроек в Континент 4.
На тот момент мне нужны были только сетевые объекты (IP и FQDN), так как в Континент 4.1.0 можно было импортировать только их через xml-файл в формате CSV, поэтому я реализовал конвертацию этих настроек из конфигурационных файлов с помощью самописных парсеров.
Я знаю, что подобные сервисы есть на разных сайтах, но, когда они собраны в одном месте с минималистичным интерфейсом без всего лишнего – на мой взгляд гораздо удобнее. Тем более результат можно сразу переслать коллеге или заказчику в рабочий чатик.
Еще одну функцию бота я написал после участия в проекте по внедрению шлюзов защиты корпоративной почты. Перед почтовым сервером в качестве MTA устанавливали дополнительный почтовый шлюз с различными механизмами защиты почтового трафика от спама, вирусов, фишинга, нежелательных вложений и т.д.
Кроме этого, в боте появилась функция поиска всех доменов и поддоменов заданного сайта/приложения для использования их при настройки раздельного туннелирования на домашнем роутере, чтобы направлять через VPN не весь трафик, как это делается большинством VPN-провайдеров, а только трафик до выбранных сервисов. Эту задачу помогли решить 2 функции – поиск доменов и конфигуратор сетевого оборудования. Поиск доменов в ответ на введенное имя приложения/сайта присылает списком все его домены (можно так же найти и все поддомены). Информация берется с сервисов / и /. Дома я использую в качестве роутера и межсетевого экрана NGFW FortiGate 60F, поэтому автоматизировал создание copy-paste строки конфигурации, которую остается только скопировать и вставить в командную строку FortiGate, открытую по SSH для быстрого выполнения необходимых настроек. Присланный список IP-адресов или доменных имен бот обрамляет в синтаксис понятный FortiGate и тиражирует строки для повторения настроек для каждого объекта, а после собирает их в группу, которую остаётся указать в качестве destination в static routes в сторону VPN. С помощью функции конфигуратора сетевого оборудования все нужные настройки выдаются в виде 1 файла с текстовыми командами, которые можно мгновенно применить без использования графического или веб-интерфейса и длительного монотонного ручного процесса ввода.
Чему я научился?
Итак, подводя итог, могу сказать, что ChatGPT действительно хорош в написании рабочего кода на Python по ТЗ на естественном (человеческом) языке. Это очень полезный и эффективный инструмент в руках оператора, который хоть и не является волшебной палочкой, как мне того хотелось бы, но значительно упрощает процесс созидания. Нейросеть помогает практически с нулевыми навыками воплощать в реальность свои самые смелые творческие идеи, а бонусом прилагается попутное изучение и освоение выбранного языка программирования. Так как приходится хотя бы бегло, но вчитываться в код, это неизбежно стимулирует понимание и запоминание его структуры и синтаксиса.
Когда ты сообщаешь об ошибке в коде в ChatGPT, он услужливо объясняет, в чем она была и как её исправить. Лайфхак: для того, чтобы получить подробное и пошаговое объяснение, а не только результат, нужно просто в конце запроса добавить текст “let’s think step by step”.
Иногда приходит осознание, что навыков уже хватает для того, чтобы некоторые блоки кода написать быстрее самостоятельно, используя в качестве шаблонов предыдущие куски кода и объяснения, полученные от нейросети, чем просить её об этом.
Ограничение на количество символов в одном сообщении и хранимого в памяти контекста беседы языковой модели ChatGPT заставляет дробить код на куски, решать определенные задачи с нуля в отдельных чатах, а потом уже самостоятельно вручную компоновать блоки кода в единую цельную структуру. Ждём релиза GPT-5, когда на вход можно будет подавать целую книгу.
Из всего вышесказанного можно сделать вывод, что ChatGPT – отличный репетитор и помощник в изучении не только программирования, но и любых других новых навыков. Конечно, возможно, с выходом новых усовершенствованных языковых моделей, использованием плагинов для различных интеграций со сторонними сервисами процесс написания кода станет ещё более простым. Программирование выйдет за уровень абстракции, когда уже больше не нужно будет не только уметь читать код и определять его синтаксис, но и не придется быть связующим звеном, обеспечивающим копирование, компиляцию и проверку кода. Результат будет выдаваться сразу в виде полностью рабочей программы.
Хотя, на мой неискушенный взгляд, ChatGPT сейчас и так достаточно хорош для того, чтобы решать поставленные задачи по созданию кода с минимальным порогом вхождения в тему. Но как говорится, совершенству нет предела!
Данный Telegram-бот стал для меня своеобразным Pet-проектом. Я делаю его в первую очередь для собственных нужд, но приоритет отдаю функциям, которые могут быть полезны широкому кругу ИТ и ИБ-специалистов. Для всех желающих самостоятельно протестировать то, что у меня получилось – ссылка на чат-бота.
Часто задаваемые вопросы о создании Telegram-бота с нейросетью
Вопрос: Нужно ли быть программистом, чтобы создать такого бота?
Ответ: Не обязательно быть профессиональным разработчиком, но базовое понимание логики и умение работать с API значительно упростят задачу.
Вопрос: Какую нейросеть лучше выбрать для Telegram-бота?
Ответ: Выбор зависит от задач: для чата подойдут GPT-3.5/4, Claude или отечественные аналоги; для генерации изображений — Stable Diffusion или Midjourney API.
Вопрос: Сколько стоит запуск и поддержка бота с нейросетью?
Ответ: Основные расходы: оплата API нейросети (зависит от количества запросов) и хостинга для кода бота (от 5-10$ в месяц).
Вопрос: Где лучше всего разместить код бота?
Ответ: Код можно разместить на облачных платформах (Heroku, PythonAnywhere, VPS), которые обеспечивают постоянную работу бота.
Вопрос: Как подключить бота к API нейросети?
Ответ: Через официальные библиотеки или REST API, используя ключ доступа (API key), полученный при регистрации у провайдера нейросети.
Вопрос: Сложно ли получить токен для Telegram-бота?
Ответ: Нет, это очень просто. Нужно написать @BotFather в Telegram, выполнить несколько команд и получить уникальный токен.
Вопрос: Можно ли сделать такого бота бесплатно?
Ответ: Да, но с ограничениями: бесплатные квоты API нейросетей обычно небольшие, а на бесплатном хостинге могут быть перерывы в работе.
Вопрос: На каком языке программирования писать бота?
Ответ: Чаще всего используют Python (библиотеки aiogram, python-telegram-bot) или Node.js. Python предпочтительнее из-за простоты и хорошей поддержки AI-библиотек.
Вопрос: Как обрабатывать контекст диалога в боте?
Ответ: Нужно хранить историю сообщений пользователя (например, в базе данных или кэше) и отправлять её нейросети вместе с новым запросом.
Вопрос: Что важнее всего проверить перед запуском бота?
Ответ: Корректность обработки ошибок (например, при недоступности API нейросети), безопасность хранения токенов и ограничение запросов для защиты от злоупотреблений.




























