• Мониторинг L2 канала. Как реализовать?

    @iddqda
    network engineer, netdevops
    сходу три варианта:

    1. плюс к пингам мониторьте остояние ospf соседства (1.3.6.1.2.1.14.10.1.6)
    2. переходите на BGP и фильтруете адреса линков
    3. инкапсулируете в GRE MPLS VXLAN whatever
    Ответ написан
  • Отправка файла на сервер на чистом javascript?

    @iddqda
    network engineer, netdevops
    Комментировать
  • Как сохранить vpn файл?

    @iddqda
    network engineer, netdevops
    мышкой выделить
    вставка средней кнопкой (колесиком)

    а логин пароль скомпрометирован
    меняйте
    Ответ написан
  • Как выдать пользователю sudo через FreeIPA?

    @iddqda
    network engineer, netdevops
    не знаю что такое freeIPA
    но по запросу
    sudoers nopasswd freeIPA
    гугл выдал решение
    https://serverfault.com/questions/993497/freeipa-s...
    Ответ написан
  • Как лучше обыграть валидацию форм, если на странице 2 формы?

    @iddqda
    network engineer, netdevops
    во первых валидацию можно написать на js
    document.getElementById("myForm").addEventListener('submit', (event) => {        
            const data = new FormData(event.target);
            if(!formValid(data)) {
                  event.preventDefault();  // отменяем action формы
                  return;
            }
    })


    а во вторых можно не перегружать страницу
    точно так же сделать свой обработчик на submit
    в нем fetch post (ajax умер давно)
    document.getElementById("myForm").addEventListener('submit', (event) => {             
            const data = new FormData(event.target);
            fetch("/register", {
                method: 'POST',                                            
                body: data
            })
            .then((response) => response.json())
            .then((data) => {
                // тут рисуешь алерты в DOM
            })
            .catch((error) => {            
                console.log(`fetch.post response came up with an error: ${error}`);
            });
            event.preventDefault();
        })

    а со стороны фляги
    if request.method == 'POST':               
       data = request.form
       ok, err = validateForm(data)
       if not ok:
           return jsonify(err)
       DoRegisterUser(data)
       return redirect(url_for(index))


    в третьих если все же хочется оставить валидаторы wtf то просто надо сохранить состояние карточки
    для этого при переворачивании карточки добавить/убрать бит в cookie
    а при перезагрузке страницы прочитать этот бит и повернуть карточку нужной стороной
    https://www.w3schools.com/js/js_cookies.asp

    з.ы. может все совсем не так. я не настоящий сварщик (с)
    Ответ написан
    Комментировать
  • Как преобразовать строку в оператор?

    @iddqda
    network engineer, netdevops
    еще можно сделать как в питоне
    d = {'+': (a,b) => a+b, '-': (a,b) => a-b }
    const sum = '+'
    d[sum](123,321)
    444
    
    const minus = '-'
    d[minus](123,321)
    -198


    хотя это тот же свич по сути
    Ответ написан
    Комментировать
  • Как реализовать показ рекламы в wifi сети с помощью captive portal с периодичностью 30 мин?

    @iddqda
    network engineer, netdevops
    теоретически наверно как то так это должно работать

    есть у вас wifi controller (WC) и внешнее приложение captive portal (CP)
    клиент регистрируется в CP
    CP авторизует клиента в WC ровно на пол часа
    проходит пол часа или больше и следующий запрос от клиента WC редиректит в CP
    CP смотрит по своей базе, видит, что это клиент уже зарегистрирован, а значит он пришел за рекламой. Показывает ему рекламу и вновь авторизует на WC пересылая обратно запрос от клиента.

    не знаю как для всех контоллеров, а для unify, например, редирект на CP выглядит так
    GET /guest/s/default/?id=be:ef:00:df:dd:ee&ap=78:78:78:78:78:78&t=1500000000&url=http://captive.apple.com%2fhotspot-detect.html&ssid=blabla HTTP/1.0

    а авторизация клиента на контроллере вот так:
    from pyunifi.controller import Controller
        c = Controller(UNIFI_WLC_IP, UNIFI_WLC_USER, UNIFI_WLC_PASSW, UNIFI_WLC_PORT, INIFI_WLC_VER, UNIFI_WLC_SITE_ID, UNIFI_WLC_SSL_VERIFY)
    
        c.authorize_guest(mac, TIME_QOUTE, 
            up_bandwidth=None, down_bandwidth=None, byte_quota=None, ap_mac=None)
    Ответ написан
    Комментировать
  • Какую БД выбрать для маленького файлового сервиса?

    @iddqda
    network engineer, netdevops
    FastAPI предполагает работу с БД через ORM в частности SQLAlchemy
    Который предоставляет слой абстракции.
    поэтому не так важно какая база будет использоваться.

    Начните с SQLite а потом, если не хватит, легко смигрируете на мускуль или постгрес
    Ответ написан
  • Как отправить команды подтверждения на оборудование cisco через скрипт python?

    @iddqda
    network engineer, netdevops
    может если до питона дорос то и нахрен уже всякие старомодные ftp?
    result = ssh.send_command('show run')
    with open(f"{device_name}.cfg") as f:
      f.write(result)

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

    з.ы. конкретно эта твоя задача решается совсем просто: scp cisco:running-config .
    Ответ написан
    Комментировать
  • Отказоустойчивый удаленный доступ, возможен ли при следующих условиях?

    @iddqda
    network engineer, netdevops
    если только isp1 и isp2 поженятся и разродятся нетиповым решением в вашу пользу
    а так вешайте два локальных ip на ваш сервер и на микротике пробрасывайте порт с каждого внешнего на каждый внутренний адрес

    для удобства можно адрес сервиса менять в ДНС динамически при недоступности любого ISP
    Ответ написан
    Комментировать
  • Как проверить наличие значения в базе данных?

    @iddqda
    network engineer, netdevops
    if cur.fetchone() is None:

    Но вообще можно сразу эту логику прописать в запросе
    Гугли sql insert if not exist
    Для разных рмдб рецепт может отличаться. К примеру в SQLite есть конструкция insert or ignore

    З.Ы. Написал ответ, а потом только прочитал вопрос. Ну пусть будет. Хотя предыдущие ответы подходят лучше конечно
    Ответ написан
    Комментировать
  • Как поднять собственный DDNS сервер?

    @iddqda
    network engineer, netdevops
    Я такой dyndns на обычном bind делал. Но в качестве клиента был нормальный полноценный Линукс сервер. Там нужно под каждого клиента создать пару ключей, поставить утилиту nsupdate и как то активировать запуск утилиты с нужными параметрами при смене адреса. Я делал такое ансиблом, но вряд ли это вариант для ваших нонейм роутеров. Хотя вроде опенврт и подобные можно так настроить. Тот же Линукс по сути.

    С другой стороны у многих производителей дешманских роутеров есть свой динднс сервис. У кинетика есть точно и у асусов вроде есть. Ну и прочие производители часто встраивают клиентскую часть для всяких паблик динднс сервисов типа noip или cloudflare. Проще всего их использовать хоть и за денежку малую.
    Ответ написан
    Комментировать
  • Как оправдать намерение поставить в офисе Jabber-клиент?

    @iddqda
    network engineer, netdevops
    Закопайте уже несчастного жабера
    посмотри slack и его опенсорсную альтернативу (плюс onprem вариант) rocket.chat
    а вообще, если это только тебе одному нужно, то тебе же и придется подстраиваться под остальных, а не наоборот

    и в этой ситуации лучше всего подойдет телеграм, потому как он много у кого есть и можно самописными ботами расширить функционал.
    к примеру ставишь какой нибудь redmine как issue tracker, а задачи юзеры в телеграме заводят и отслеживают
    Ответ написан
    Комментировать
  • Почему подсетки не видят друг друга?

    @iddqda
    network engineer, netdevops
    не знаком с пфсен, но вроде бы это файрвол.
    а в файрволах по умолчанию есть зоны (inside, outside, итп)
    разные интерфейсы могут быть в разных зонах, например локалка в inside, а ваш прямой канал outside
    опять же по умолчанию, очень часто разрешен проход пакетов в сторону inside -> outside
    а вот политику ouside -> inside необходимо прописывать явно
    ну или внутренний и внешний интерфейсы в одну зону сунуть
    Ответ написан
  • Как считать кол-во повторяющихся эл-ов в массиве?

    @iddqda
    network engineer, netdevops
    я подобное примерно так делаю:
    let arr = [1,3,3,4,5,5,5];
    obj = new Object();
    arr.forEach((el)=>(obj.hasOwnProperty(el)) ? obj[el]++ : obj[el] = 1);
    console.log(obj); // Object { 1: 1, 3: 2, 4: 1, 5: 3 }

    ну т.е. использую свойство объекта - уникальность ключей
    Ответ написан
    Комментировать
  • Можно ли сделать таймер для удаления директории linux?

    @iddqda
    network engineer, netdevops
    За удаление чужой информации с сервера заказчика можно (в теории) присесть на бутылку
    не говоря уже о том, что удалять или даже посто модифицировать /var - это вредительство
    home/username свой можете подчистить конечно.
    Но интересней будет зашифровать нужные файлы асимметричным ключом. тем же openssl rsautl
    и да, это интересно, но не менее подло.
    Лучше по человечески с заказчиком отношения выстраивать
    Ответ написан
    2 комментария
  • Как передать переменную из Flask в JavaScript?

    @iddqda
    network engineer, netdevops
    Вот так примерно

    html:
    <div>
        <button id="jsfetch">fetch json</button>
      </div>

    js:
    document.querySelector("#jsfetch").addEventListener("click", Handler);
    function Handler(event) {
        fetch('/api')
            .then((response) => {
                return response.json();
            })
            .then((myjson) => {
                console.log(myjson);
            });
    }


    flask:
    from flask import jsonify
    data = { 
        "id": 123,
        "name": "Вася",
        "surname": "Пупкин"
    }
    
    @app.route('/api')
    def api():
        return jsonify(data)


    Запускаешь, нажимаешь на кнопку и видишь в консоли браузера:
    Object { id: 123, name: "Вася", surname: "Пупкин" }
    Ответ написан
    Комментировать
  • Как задать IP-адрес и маску на интерфейс Catalyst 2970?

    @iddqda
    network engineer, netdevops
    попробуй на интерфейсе сказать no switchport
    но скорей всего эта модель не умеет в L3
    для интерфейса управления используй int vlanX
    Ответ написан
    Комментировать
  • Как записывать в фаил чтобы можно было редактировать вручную?

    @iddqda
    network engineer, netdevops
    yaml

    In [1]: import yaml                                                                                                                                                           
    In [2]: ymlsample=""" 
       ...: branch1:  
       ...:   name: branch1 
       ...:   ip: 1.2.3.4 
       ...:   ASN: 65101 
       ...:   type: cisco 
       ...:   auth: 
       ...:     username: username 
       ...:     password: password 
       ...: branch2:  
       ...:   name: branch2 
       ...:   ip: 2.3.4.5 
       ...:   ASN: 65102 
       ...:   type: juniper 
       ...:   auth: 
       ...:     username: username 
       ...:     password: password 
       ...: """                                                                                                                                                                   
    
    In [3]: hosts = yaml.safe_load(ymlsample)                                                                                                                                     
    In [4]: hosts                                                                                                                                                                 
    Out[4]: 
    {'branch1': {'name': 'branch1',
      'ip': '1.2.3.4',
      'ASN': 65101,
      'type': 'cisco',
      'auth': {'username': 'username', 'password': 'password'}},
     'branch2': {'name': 'branch2',
      'ip': '2.3.4.5',
      'ASN': 65102,
      'type': 'juniper',
      'auth': {'username': 'username', 'password': 'password'}}}
    Ответ написан
    Комментировать
  • Подходит ли macbook air 2019 для web разработки?

    @iddqda
    network engineer, netdevops
    у меня макэйр 13" 14-го года с 4Г памяти и 128Г флеш
    но web-dev у меня хобби просто. даже на джуна не тяну.
    Тем не менее могу отметить, что все что нужно на маке есть
    ноды/питоны/go, VSCode, Git, apache, nginx и все нормальные браузеры
    все это вполне шевелится и ни капельки не раздражает.
    При этом сам ноут легкий красивый и батарейки все еще хватает часов на 7

    Однако если брать изначально под задачу я б конечно новую прошку взял на 16"
    или подождал когда прошку на 13" обновят (вроде в марте)
    Ответ написан
    Комментировать