Делал когда-то для себя утилитку, которая визуализирует ARP-cache и следит за тем, чтобы дефолтный gateway был привязан статически (arp -s IP MAC). Дабы обезопасить себя от “Man in the middle” – атак.
Делал на Python-е с использованием тогда PySide (привязка к Qt) для интерфейса (так как PyQt лицензия имеет ограничения). Но до готового вида, когда можно это выложить так и не довел. А стандарты у человека, который привык делать продукт для простых пользователей, как вы понимаете, не самые низкие. Даже если это утилитка с одним окошком. 🙂
В общем, вернулся я к этой тулзе и решил довести до ума. Тем более, что не так давно еще дошли руки сделать что-то поприличней, чем одностраничник на http://binaryplant.com/ (использовал генератор статических сайтов Hugo). И раз уж сделал по эту программку страницу – надо допилить заготовку.
Посмотрел я снова на этот PySide, вспомнил все подводные камни и решил плюнуть да и взять PyQt5, которая под лицензией GPL3. Кстати, я так еще и не успел разобраться как там теперь надо правильно лицензию разместить.
Заодно, наконец, почитал про модный нынче функциональный подход. А конкретно – на python. И с новыми знаниями я все переделал. Точнее, просто сделал с нуля. Что интересно, в процессе переделки я выработал для себя оптимальный вариант совмещения разных подходов. Это ЧИТАБЕЛЬНОСТЬ.
В привычном императивном стиле у меня не было какого-то выбора. А это было весьма досадно, учитывая специфику питона. Вся его читабельность исчезала, когда перед глазами появлялся многоуровневый код с кучей вложенностей.
Короче, генераторы списков, “чистые функции”, map, filter, lamda-функции и т.д. – все это довольно приятная штука, которая позволяет код делать все более и более “само-комментируемым”.
Я довел исходник до вида, когда мне больше ничего не хочется улучшать (не считая имен переменных, конечно). https://github.com/KMiNT21/binaryplant-arp-defender/ – barpdef.py