DISCLAIMER: Представленные в статье методы написания кода и подходы к процессу разработки не претендуют на эталонность или экспертный уровень. Терминология может быть неточной. Вся представленная информация является внезапным озарением, догадками и собственным видением автора, применением его немногочисленного опыта, накопленного в попытках быстро освоить программирование на Python с нуля без глубокого погружения. Критика и советы в комментариях приветствуются и будут приняты на вооружение.

Давайте знакомиться

Привет, Хабр! Меня зовут Руслан, я – инженер по сетевой и информационной безопасности в компании-интеграторе STEP LOGIC. Решаю различные задачи, связанные с настройкой и поддержкой сетевого оборудования в компьютерных сетях, работаю над проектами, требующими планирования архитектуры сети, проведения расчетов с IP-адресами, а также подготовки конфигурационных файлов для настройки межсетевых экранов и криптошлюзов. Программированием и кодингом никогда ранее не занимался. В этой статье я расскажу о своем опыте создания при помощи нейросетей Telegram чат-бота, полезного для сетевых инженеров и администраторов.

Как пришла идея создания чат-бота

Любой сетевой инженер периодически сталкивается с ситуацией, когда нужно быстро определить доступные IP-адреса в сети с заданной маской, найти первый и последний IP для назначения его шлюзом по умолчанию, узнать, сколько всего помещается хостов в данной сети, и т.д. и т.п. Одни выучивают IP-сети с масками и их хостами как таблицу умножения, другие же пользуются онлайн или мобильными калькуляторами.

Я отношусь к последним, зубрить – не моё. В связи с этим меня всегда занимал вопрос, почему калькуляторами называются программы, которые по сути могут лишь показать в ответ на введенный “IP-адрес + префикс сети” информацию о его сетевой/wildcard маске, адресе сети, бродкаст адресе, минимальном и максимальном хосте и их количестве в сети.

Рис. 1. Типичный IP-калькулятор
Рис. 1. Типичный IP-калькулятор

На мой взгляд, основная задача калькулятора – это выполнение 4-х простых арифметических операций ((+), (-), (×) и (÷)) над 2 или более заданными числами. Так почему же сетевые калькуляторы не могут в арифметику, когда вместо чисел нужно провести вычисления с несколькими сетями? Например, для деления широкой сети 10.0.0.0/24 на несколько узких /28 или для вычитания из сети 0.0.0.0/0 всех частных подсетей? Почему нельзя с помощью калькулятора сложить все смежные сети в списке в общие с более широкой маской или провести умножение (тиражирование) сети от начальной с заданной маской и до нужного количества сетей? Получается, настоящего сетевого калькулятора не существует…  

Имея стойкое желание исправить это недоразумение при полном отсутствии опыта программирования, но испытывая большой энтузиазм по поводу возможностей нейросетей, я решил написать свой собственный калькулятор с блэкджеком… арифметикой и прочими приколюхами!

Нейросеть приходит на помощь

Сначала была идея разработки с помощью нейросетей iOS/Android-приложения, но подходящих инструментов для этого я не нашёл. Попадались либо новейшие и якобы полностью автоматизированные профессиональные и дорогостоящие AI-инструменты, которые скорее рассчитаны на использование средним бизнесом без штатных программистов, либо более дешевые No-code/Zero-code платформы для разработки графических интерфейсов для мобильных приложений с ограниченным набором функций на выбор, а для моих задач все равно потребовалась бы кодировка логики и алгоритмов для выполняемых приложением функций и вычислений, или продвинутые среды разработки, требующие знания языка программирования, но ускоряющие процесс кодинга с помощью подсказок от ИИ и автозаполнения, где возможно. Все это требовало либо большого количества денег, либо времени для длительного погружения в специфику работы данных инструментов. Кроме того, мне пришлось бы разбираться в нюансах дальнейшей публикации приложения в Google Play и AppStore, что не вписывалось в формат “нейросеть всё сделает сама”, на который я нацелился.

Потом я вспомнил про свой опыт запуска готовых Telegram-ботов с Github с помощью BotFather (https://t.me/botfather), что было максимально просто и доступно, и подумал, а чем Telegram-бот не кроссплатформенное GUI-приложение, работающее на любом телефоне и компьютере? Тем более что из графики для калькулятора потребуется только несколько кнопок (средство ввода чисел) и однострочный дисплей (средство вывода результата), а всё это, и даже больше, есть в Telegram-ботах. И, как говорится в рекламе, если не видно разницы, зачем платить больше?

Лиха беда начало

Для того, чтобы убедиться, что ChatGPT в принципе умеет программировать, я попросил его написать простой Python-скрипт, генерирующий пароль заданной длины и сложности.

Результат меня удовлетворил - с первой же попытки я получил рабочий код, поэтому следующим заданием для нейросети стало написание кода, который повторял бы функционал уже готовых онлайн и мобильных IP-калькуляторов. Этого удалось добиться примерно за десяток запросов. Для проверки полученного результата я не использовал специализированное ПО типа сред разработки, а ограничился лишь Notepad++ для разметки и подсветки синтаксиса (для улучшения читаемости), а далее сохранял файл с расширением .py и запускал полученный скрипт в командной строке через Python.

Если скрипт не работал – копировал сообщение об ошибке в ChatGPT (иногда даже без дополнительных комментариев и просьб типа “разберись почему не работает и исправь” - нейросеть и так понимала контекст сообщения и что мне от неё сейчас нужно) и после получения предложений с исправлениями повторял процедуру.

После того, как стандартный функционал был готов, нужно было придумать, как реализовать и добавить остальные 4 простые арифметические функции с заданными сетями. Моё участие ограничилось генерацией идей, что должна делать функция, а реализацией занимался ChatGPT. Никогда прежде мой полёт фантазии ещё не находил путь к воплощению так быстро.

В итоге получился консольный интерактивный скрипт, который имеет меню из 6 пунктов и умеет:

  1. выводить информацию о введенном IP-адресе и его сети (копия IP-калькуляторов)

  2. (деление) дробить заданную сеть на все возможные подсети с выбранной маской

  3. (вычитание) исключать из заданной сети нужное кол-во заданных подсетей

  4. (сложение) определять суперсет заданного количества подсетей (находить 1 общую сеть, которая бы включала в себя все заданные)

  5. (умножение) тиражировать заданную подсеть с маской до выбранного количества таких же идущих друг за другом подсетей

  6. завершать работу скрипта.

Блоки кода в статье специально приводить не буду, чтобы акцентировать Zero-Coding подход, но для любопытствующих выложу исходники на GitHub, когда доберусь до этого пункта в планах развития бота (TO DO лист выложу в следующей статье).

Рис.2. Прототип моего сетевого калькулятора
Рис.2. Прототип моего сетевого калькулятора

Далее мне захотелось создать из скрипта Portable executable версию, не требующую установки дополнительного ПО, сред разработки, Python и т.д., чтобы его можно было запустить, просто открыв файл. И ChatGPT любезно предложил использовать для этих целей PyInstaller.

Рис. 3. Запросы ChatGPT для создания portable версии калькулятора
Рис. 3. Запросы ChatGPT для создания portable версии калькулятора

Впоследствии я добавил возможность скачивания ранней оффлайн-версии моего сетевого калькулятора в итоговую версию 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, поэтому я реализовал конвертацию этих настроек из конфигурационных файлов с помощью самописных парсеров.

Позже, после выхода обновления Континент 4.1.7, я нашел python-скрипты на GitHub "Кода Безопасности" (https://github.com/itseccode/c4_tools) с готовыми парсерами конфигураций различных вендоров, такими как Континент 3.9.3, FortiGate 7.2.0, Cisco ASA 8.3 / 8.4 / 9.1, Check Point R77.30 / R80.20 / R81.10, позволяющими конвертировать не только сетевые объекты, но также сервисы и связанные с ними правила МЭ и NAT, и добавил их в чат-бота. Данные инструменты вкупе с ботом позволили сильно сократить время, которое бы занял ручной перенос этих правил.

А для настройки старых криптошлюзов Континент 3.9 пригодилась функция вычитания сетей из начальной заданной. Так как в Континент 3.9 нельзя туннелировать в VPN сразу весь трафик (невозможно создать защищенный объект 0.0.0.0/0 - программа управления ЦУС выдаст на такую попытку ошибку), а также недопустимо, чтобы защищенные сети пересекались с IP-адресами на интерфейсах КШ, к тому же нельзя указывать защищенные сети в виде диапазонов (можно только подсетями), то для того, чтобы решить задачу заворота всего трафика регионального филиала через VPN в центр, приходилось создавать группу состоящую из десятков-сотен узких защищенных подсетей, таким образом, чтобы в сумме они покрывали весь диапазон 0.0.0.0/0 за вычетом вышеуказанных исключений. Очевидно, что чем больше криптошлюзов, тем больше будет исключений на каждый их сетевой интерфейс. Высчитывать сотни и тысячи таких подсетей вручную на листочке довольно трудоемкое занятие, а шанс допустить ошибку возрастает с каждым новым расчетом. Мой чат-бот умеет решать задачу исключения подсетей практически моментально всего в несколько кликов (например, для исключения всех частных подсетей из сети 0.0.0.0/0 для получения списка публичных подсетей достаточно только мыши, данная функция содержит виртуальную клавиатуру с кнопками-примерами всех частных подсетей).

Многие заказчики покупают у нашей компании постпроектную сервисную поддержку, в рамках которой мы периодически проводим диагностику сетевого оборудования и пишем новые правила. Для проведения диагностики коллегам из техподдержки приходится проводить обследование сети, строить схемы связи и причесывать настройки. Часто из-за отсутствия схем требовалось по ARP-таблицам выяснить, к чему подключено оборудование. Периодически сталкиваясь с этой задачей, я решил добавить в бота определение производителя оборудования по его MAC-адресу. А для решения вопросов, связанных со страной подключения и переопределения списков доступа/блокировок, в боте появилась возможность определения страны и ASN по присланному IP-адресу.

Бывали случаи, когда нужно было проверить доступность из интернета только что опубликованных сервисов или VPN-шлюзов. По старинке проверяли через telnet на нужный порт, так как установка специализированного ПО для проверки связности занимает больше времени. Однако ноутбук с windows / linux не всегда были под рукой, что сподвигло меня дописать для бота функцию проверки открытых портов. Мобильный телефон всегда в кармане, а проверить порты (самые частые вынес в виде кнопок) через бота еще проще чем с помощью командной строки и telnet.

Я знаю, что подобные сервисы есть на разных сайтах, но, когда они собраны в одном месте с минималистичным интерфейсом без всего лишнего – на мой взгляд гораздо удобнее. Тем более результат можно сразу переслать коллеге или заказчику в рабочий чатик.

Еще одну функцию бота я написал после участия в проекте по внедрению шлюзов защиты корпоративной почты. Перед почтовым сервером в качестве MTA устанавливали дополнительный почтовый шлюз с различными механизмами защиты почтового трафика от спама, вирусов, фишинга, нежелательных вложений и т.д.

Когда наступает момент перевода системы в промышленную эксплуатацию, возникает вопрос, каким образом быстро проверить и протестировать настроенную систему. Раньше я использовал личную почту, отсылая с неё письма со «спамом», тестовыми EICAR-вирусами во вложении и т.п. Но с развитием тренда на повсеместное усиление безопасности, время на эту процедуру стало возрастать – приходилось искать способ скачать EICAR-файл, так чтобы его не заблокировал браузер/антивирус, а потом отправить его так, чтобы письмо не отбросил собственный почтовик. А большинство временных одноразовых почтовых ящиков позволяют только принимать, но не отправлять письма.

В итоге было придумано решение по интеграции бота с бесплатным почтовым доменом в Cloudflare и отправки через Mailtrap с него писем, содержащих тестовые строки, определяемые системами защиты почты как спам/вирус/фишинг. Проводить базовую проверку работы шлюзов защиты почты стало намного проще и быстрее. В планах добавить функционал оценки рейтинга письма по SPF/DKIM/DMARC по аналогии с сервисами типа https://www.mail-tester.com/.

Кроме этого, в боте появилась функция поиска всех доменов и поддоменов заданного сайта/приложения для использования их при настройки раздельного туннелирования на домашнем роутере, чтобы направлять через VPN не весь трафик, как это делается большинством VPN-провайдеров, а только трафик до выбранных сервисов. Эту задачу помогли решить 2 функции – поиск доменов и конфигуратор сетевого оборудования. Поиск доменов в ответ на введенное имя приложения/сайта присылает списком все его домены (можно так же найти и все поддомены). Информация берется с сервисов https://www.netify.ai/ и https://securitytrails.com/ . Дома я использую в качестве роутера и межсетевого экрана NGFW FortiGate 60F, поэтому автоматизировал создание copy-paste строки конфигурации, которую остается только скопировать и вставить в командную строку FortiGate, открытую по SSH для быстрого выполнения необходимых настроек. Присланный список IP-адресов или доменных имен бот обрамляет в синтаксис понятный FortiGate и тиражирует строки для повторения настроек для каждого объекта, а после собирает их в группу, которую остаётся указать в качестве destination в static routes в сторону VPN. С помощью функции конфигуратора сетевого оборудования все нужные настройки выдаются в виде 1 файла с текстовыми командами, которые можно мгновенно применить без использования графического или веб-интерфейса и длительного монотонного ручного процесса ввода.

Что получилось в итоге

Таким образом, на момент написания статьи помимо сетевого калькулятора мой бот содержит уже более 4 тысяч строк кода и оброс большим количеством возможностей.

  • Продвинутый IP-калькулятор с возможностью выполнения математических операций с IP-сетями.

  • Сетевой мульти-инструмент (швейцарский нож) – набор из 11 полезных сетевых диагностических утилит.

  • Конфигуратор сетевого оборудования – набор из конфигураторов/конверторов для 3 вендоров Cisco / FortiGate / Континент и 1 универсальный конфигуратор МЭ для ОС linux - iptables.

  • 2 вида кнопок (внутри чата в сообщениях бота и внутри клавиатуры пользователя) – в кнопки для чата я вынес пункты меню, которые полезно оставить в чате, чтобы в любой момент можно было по ним перейти в другой интересующий раздел без необходимости проходить всю цепочку с самого начала, а в клавиатурные кнопки – подсказки, необходимые лишь для одной конкретной функции.

  • Рандомизация входных значений в качестве примера. Я добавил на кнопки всплывающей клавиатуры подсказки с наиболее подходящими примерами входных значений для каждой задачи. На одной из кнопок, где это применимо, настроил рандомизатор, чтобы при каждом вызове функции предлагался новый пример.

  • Для повышения дружелюбности и интуитивности графического интерфейса, добавил к каждому пункту меню эмодзи, а также все сообщения с запросом пометил знаком “❓”, с ответом (результатом) – “❕”, а сообщения об ошибке – “⚠️”. Общаться с ботом и воспринимать сообщения стало намного приятнее.

  • Завел второго тестового бота через BotFather, чтобы тестировать сначала на нём все нововведения, не прерывая работы продуктивного бота, а после проверки перезапускать его на новом коде.

  • Во время отладки по рекомендации ChatGPT добавил в тестового бота счётчики выполнения функций и включил логирование в консоль для отладки возможных проблем.

  • В большинстве функций появилась фильтрация вводимых входных значений, чтобы игнорировать сообщения в неожидаемом формате (или выдавать ошибку).

  • В некоторых функциях (в основном в калькуляторе IP-сетей) добавил обработку ввода и его приведение к универсальному формату. К примеру, в функцию вывода информации об IP-адресе сейчас можно присылать вводные данные в любом виде:

    • 10.0.0.0/8

    • 10.0.0.0 255.0.0.0

    • 10,0,0,0 255,0,0,0

    • 10.0.0.0/255.0.0.0

    • 10.0.0.0\8

    • 10.0.0.0|8

    • И даже так – 10.  0.  0,0  \ 255. 0, 0 ,0.

Рис. 4. Как выглядит меню чат-бота сейчас
Рис. 4. Как выглядит меню чат-бота сейчас

Как я уже упоминал ранее, в последствии функции моего конвертора конфигурационных файлов обросли полным набором возможностей из инструментов коллег из "Кода Безопасности".

Рис. 5. Конвертор правил МЭ/NAT в формат Континент 4
Рис. 5. Конвертор правил МЭ/NAT в формат Континент 4

Смею предположить, что существенная часть полезности моего чат-бота для сетевых инженеров будет заключаться именно в этих инструментах, так как они выполняют наибольшее количество операций и обрабатывают наибольшие объёмы входных данных, по сравнению со всеми остальными инструментами в боте. На мой взгляд, их использование заметно сократит время, затрачиваемое на выполнение работ по миграции в рамках импортозамещения оборудования NGFW.

Более подробно обо всех доступных на сегодня возможностях бота и планах по его развитию я расскажу в своей следующей статье.

Чему я научился?

Итак, подводя итог, могу сказать, что ChatGPT действительно хорош в написании рабочего кода на Python по ТЗ на естественном (человеческом) языке. Это очень полезный и эффективный инструмент в руках оператора, который хоть и не является волшебной палочкой, как мне того хотелось бы, но значительно упрощает процесс созидания. Нейросеть помогает практически с нулевыми навыками воплощать в реальность свои самые смелые творческие идеи, а бонусом прилагается попутное изучение и освоение выбранного языка программирования. Так как приходится хотя бы бегло, но вчитываться в код, это неизбежно стимулирует понимание и запоминание его структуры и синтаксиса.

Когда ты сообщаешь об ошибке в коде в ChatGPT, он услужливо объясняет, в чем она была и как её исправить. Лайфхак: для того, чтобы получить подробное и пошаговое объяснение, а не только результат, нужно просто в конце запроса добавить текст “let’s think step by step”.

Иногда приходит осознание, что навыков уже хватает для того, чтобы некоторые блоки кода написать быстрее самостоятельно, используя в качестве шаблонов предыдущие куски кода и объяснения, полученные от нейросети, чем просить её об этом.

Ограничение на количество символов в одном сообщении и хранимого в памяти контекста беседы языковой модели ChatGPT заставляет дробить код на куски, решать определенные задачи с нуля в отдельных чатах, а потом уже самостоятельно вручную компоновать блоки кода в единую цельную структуру. Ждём релиза GPT-5, когда на вход можно будет подавать целую книгу.

Из всего вышесказанного можно сделать вывод, что ChatGPT – отличный репетитор и помощник в изучении не только программирования, но и любых других новых навыков. Конечно, возможно, с выходом новых усовершенствованных языковых моделей, использованием плагинов для различных интеграций со сторонними сервисами процесс написания кода станет ещё более простым. Программирование выйдет за уровень абстракции, когда уже больше не нужно будет не только уметь читать код и определять его синтаксис, но и не придется быть связующим звеном, обеспечивающим копирование, компиляцию и проверку кода. Результат будет выдаваться сразу в виде полностью рабочей программы.

Хотя, на мой неискушенный взгляд, ChatGPT сейчас и так достаточно хорош для того, чтобы решать поставленные задачи по созданию кода с минимальным порогом вхождения в тему. Но как говорится, совершенству нет предела!

Данный Telegram-бот стал для меня своеобразным Pet-проектом. Я делаю его в первую очередь для собственных нужд, но приоритет отдаю функциям, которые могут быть полезны широкому кругу ИТ и ИБ-специалистов. Для всех желающих самостоятельно протестировать то, что у меня получилось – ссылка на чат-бота https://t.me/STEPLOGIC_NetCalc_bot.

Welcome! И буду рад отзывам и предложениям в комментариях!

Комментарии (22)


  1. seregadomain
    27.11.2023 11:37
    +2

    Я считаю, это шикарная демонстрация того, что людям надо не боятся AI, а брать его в оборот.


  1. Nik2008
    27.11.2023 11:37

    Начал читать и бросил на первых абзацах !

    Центральная нить, не надо учится надо быть блогером))

    Перефразируя не надо быть одаренным программистом и постоянно самосовершенствоваться, надо спросить ГПТ набросать говнокод и пусть дальше с ним парятся само обученные программисты, может я слишком поверхностно пробежал, но от заголовка так и повеяло))

    Именно следуя такой парадигме дети и не хотят грызть науку ни в универе ни самостоятельно, если из каждого утюга только и слышно, что завтра, а то и сегодня программисты вымрут как класс так на кой учится будем жить по заветам ГПТ)


    1. chelaxian Автор
      27.11.2023 11:37
      +2

      «Не читално осуждаю
      А стоило бы! В заключении я как раз и подвожу к мысли, что ChatGPT это не волшебная палочка, а всего лишь чрезвычайно эффективный (но ограниченный) и экономящий время инструмент в руках оператора. Изначальная задумка предполагала моё минимальное участие, но в результате этого не получилось и всё равно пришлось разбираться в коде и я поднатаскал скиллы Python получше чем после каких-нибудь курсов skillbox / geekbrains. Таким образом самообучение с ИИ как раз только выигрывает.


      1. Nik2008
        27.11.2023 11:37
        +1

        Мне хватило шапки) если бы заголовок был другим и начало, я может быть и ознакомился более детально)

        От обилия ГПТ уже изжога


        1. chelaxian Автор
          27.11.2023 11:37

          тут соглашусь - заголовок слегка кликбейтный вышел) но да простят меня читатели - это моя первая статья на Хабре


  1. CCNPengineer
    27.11.2023 11:37

    спасибо. интересно. но зачем в виде телеграм. чтобы запускать со смартфона? полезнее иметь исполняемый код локально на лаптопе. и никуда не отсылать конфиг.

    я делал свой код с помощью жпт чтобы искать в конфигурации файрвола среди тысяч строк аксес листов совпадающий по трем параметрам или по двум. адрес источника, адрес назначения и порт.


    1. chelaxian Автор
      27.11.2023 11:37
      +2

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

      по поводу конфиденциальности - согласен, есть вопросы. поэтому думаю о том чтобы выложить исходники на github, чтобы каждый мог локально у себя копию бота развернуть и вопрос доверия не возникал бы в принципе. а так, можно предварительно очищать конфиг от конфиденциальных данных в открытом виде, если такие имеются, или использовать функцию их кодировки в конфиге. но кроме конвертации конфигов в боте есть и куча других полезных и удобных онлайн-функций, в которых не используется отсылка конфига.


  1. net_racoon
    27.11.2023 11:37

    Ну фиг знает. IP калькулятор -не нужен, т.к. это делается все в голове. Всякие тулзы есть в онлайне. Зачем это все это?


    1. chelaxian Автор
      27.11.2023 11:37

      так в этом же и есть суть мульти-инструмента - швейцарского ножа. ложки, вилки, ножи, отвертки, кусачки, штопор и т.д. тоже есть в отдельном виде, но в таком формате они пользуются немалой популярностью. удобно же! все в 1 месте сразу, не надо искать и занимает мало места. плюс есть и уникальные фичи, которых нет в онлайне. и если внимательно читали начало - имеющиеся IP-калькуляторы не умеют складывать, вычитать, умножать и делить IP-сети, а в голове с определенного количества операндов это уже не делается.


      1. net_racoon
        27.11.2023 11:37

        Можете привести пример операции с IP подсетями, которую нельзя посчитать в голове?


        1. chelaxian Автор
          27.11.2023 11:37

          конечно. сможете вычесть из 0.0.0.0/0 все bogon-сети и прислать список оставшихся подсетей, чтобы использовать их в качестве маршрутов?


          1. net_racoon
            27.11.2023 11:37

            Эмм.. чаво? В каком случае это может понадобиться и как часто это надо?


            1. chelaxian Автор
              27.11.2023 11:37

              вы, видимо, никогда не настраивали АПКШ Континент 3.7-3.9 :) счастливый человек! а вообще это может понадобиться везде, где захотите через PBR или static route завернуть маршрутами в туннель или еще куда ВСЕ публично маршрутизируемые сети (кроме частных и зарезервированных, типа мультикастов, лупбеков и т.п.). Потому что маршрутизация оперирует подсетями, а не диапазонами. И не везде и не всегда получится указать такой маршрут через 0.0.0.0/0.


              1. net_racoon
                27.11.2023 11:37

                Дык обычно такие вещи делаются от обратного. Типа все кроме... Или вы хотите всю получившуюся портянку в PBR запихать?


                1. chelaxian Автор
                  27.11.2023 11:37

                  ну да. иногда приходится такие костыли городить. тот же упомянутый мной Континент 3 по другому не умеет туннелировать трафик через VPN. в нем нельзя указать 0.0.0.0/0 в VPN, а узкими маршрутами все исключения в дефолт оставить. согласен, что кейс специфичный, но вы просили пример операции, которую нельзя в голове без калькулятора выполнить. из более жизненных кейсов могу привести в пример функцию сложения сетей в списке. вряд ли в голове можно обработать список из 10000 строк с подсетями, чтобы убрать все дубли и суммаризовать в нём все смежные подсети, а потом получившиеся собрать снова и так пока не останутся только уникальные, непересекающиеся, допустим, 5000 строк с подсетями. а в моем боте это делается через 2 клика ctrl-c / ctrl-v. даже лимит telegram в 4096 символов на сообщение не помеха и ввод / вывод работает как с 1 так и с несколькими сообщениями.


  1. seregadomain
    27.11.2023 11:37
    +2

    Я считаю, это шикарная демонстрация того, что людям надо не боятся AI, а брать его в оборот.


  1. seepeeyou
    27.11.2023 11:37

    А зачем надо было это разрабатывать именно с помощью гпт? Была идея во что бы то ни стало применить нейросети, а уже потом под это искалась задача? Это же школьный проект, простейшие вычисления, конвертация.


    1. chelaxian Автор
      27.11.2023 11:37

      как я написал в начале - у меня немного другая специализация, в которой я умею решать задачи более высокой сложности, навыков программирования у меня до этого не было от слова совсем, даже школьного уровня. и так как это не рабочий проект, а моё неосновное хобби, которым я занимаюсь в свободное время, то и времени ему уделялось соответственно, и цель была в первую очередь проверить действительно ли возможно без знания языков программирования создать какой-либо полезный проект с помощью ИИ. не было цели (да и времени) создать что-то уникальное, сложное, платное. проще всего для такого проекта было выбрать близкую мне по профессии тематику, чтобы было проще с вдохновением на идеи. результат меня не разочаровал. затраты по времени по моей прикидке оказались даже меньше, чем если бы этого бота писал с нуля и без ИИ самостоятельно опытный программист, да и я немного вкатился, так сказать, и что-то уже и сам умею без нейросети кодить (какие-нибудь простейшие парсеры). выходит эксперимент удался и польза от него есть. надеюсь вдохновить своим скромным опытом остальных читателей тоже начать изучать смежные специализации с помощью ИИ, ведь главное это начать, а впечатления от опыта работы с ChatGPT очень мотивируют продолжать такое интерактивное и интересное обучение.


      1. chelaxian Автор
        27.11.2023 11:37

        наверное, стоило эту мысль более явно в статье обозначить. выходит это совсем не очевидно, раз такие вопросы возникают


  1. DenSyo
    27.11.2023 11:37
    +1

    Как человек, так же свою первую статью на Хабре посвятивший сетевым инструментам с калькулятором сетей, категорически приветствую! Пара моментов, для перевода числа из одной системы счисления в другую требуется пересчёт, математическое действие - функция калькулятора. В своём калькуляторе специально не стал показывать общее количество хостов - для сетей с маской 23 и менее это спорный вопрос, но это точно не общее количество адресов минус 2. Адрес x.x.x.255 - всегда широковещательный, их все не надо считать (могу ошибаться и возможно, есть системы, где такие адреса можно выдавать хостам). Адрес x.x.x.0 - обычно широковещательный, и тогда его не надо считать, но некоторые системы позволяют использовать его в качестве адреса хоста, тогда надо считать.


    1. chelaxian Автор
      27.11.2023 11:37

      О! Доброго утречка, коллега :)
      Обязательно и вашу статью почитаю сегодня.

      По поводу маски - да, я в курсе, там в основном только для масок /31 (2 хоста) и /32 (1 хост) отличается формула количества хостов, а для /30 и шире N-2 работает. Это если принять, что общее количество хостов - это количество IP-адресов, которые можно назначить хостам в 1 локальной сети с такой маской. x.x.x.0 и x.x.x.255 только в сетях не шире /24 могут являются адресами сети и бродкаста, а в сетях с маской /23 и шире вполне могут быть адресами хостов (другой вопрос в том, что не всё оборудование и ПО может это поддерживать). так же, например, в RA VPN для пула IP-адресов подключаемых клиентов у многих вендоров задается не подсеть а диапазон, потому что в итоге строится подключение точка-точка с 1 IP (сеть /32) и понятие адреса сети и бродкаста не применимы и можно использовать x.x.x.0 и x.x.x.255 в качестве адреса хоста.


  1. NIKTO56
    27.11.2023 11:37
    +1

    Хороший опыт. Я тоже попробую. Учусь программированию.


    1. chelaxian Автор
      27.11.2023 11:37

      Рад, что понравилось! Удачи в начинаниях! И тоже делитесь опытом!