• Верификация номера телефона на сайте. Какие методы есть?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Я бы не стал пренебрегать вариантом с Telegram. Аккаунт в Telegram сейчас есть у значительной части пользователей. При этом в Telegram сейчас появился платный сервис Telegram Gateway для отправки кодов авторизации по номеру телефона. Либо можно использовать авторизацию бесплатно через бота либо виджет Telegram Login - так делают некоторые сайты уже давно. Через бота можно с помощью ссылки вида t.me/MyAwesomeBot?start=секретный_код, бот обработает код и запишет в профиль пользователя привязку к его Telegram user_id. Или попросить пользователя найти этого бота и ввести ему код вручную. Не очень удобно, и нет привязки к номеру, но зато это бесплатно.

    В WhatsApp можно легально использовать WhatsApp Business API, но надо быть бизнесом (хотя бы ИП), частному лицу не дадут зарегистрировать бизнес-аккаунт. Отправка только по шаблонам, которые модерируются при регистрации. Но для кодов может быть достаточно всего одного шаблона.

    Либо использовать нелегальный WhatsApp Web API, с которым работает Web-версия WhatsApp. Они это не любят и могут за такое номер забанить, поэтому если захочется рискнуть - следует по крайней мере использовать какой-нить новый ненужный номер, чтобы было не жалко и в случае потери.

    Есть ещё Viber, там тоже можно платно посылать сообщения от имени бизнеса по номеру телефона, но пользовательская база в России у Viber не очень большая.

    Также можно использовать регистрацию через соцсети (vk, facebook), в них всё же очень активно занимаются борьбой с авторегистрациями.

    Также можно использовать приложения типа Google Authenticator с авторизацией по одноразовым кодам, привязанным к аккаунту Google.

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

    Авторизация через почту не то чтобы прошлый век... Просто спамеры и злоумышленники могут почтовые ящики создавать тысячами быстро и бесплатно. В отличие от мессенджеров, в которых в силу привязки к телефонному номеру нужно этот номер где-то ещё получить, что какая-никакая сложность и ограничение бесконтрольного роста автоматических регистраций. Капчи и контрольные вопросы в век нейросетей и аутсорсинговых индусов уже давно работают не особо хорошо. Придётся часто прыгать с бубном в попытке изобрести новый забор против злоумышленников, который они ещё не придумали, как обходить. Поэтому-то сейчас все массово и используют номер телефона: это просто, понятно пользователям, легко тиражируется и достаточно прилично закрывает значительную часть проблемы авторегистраций и спамеров.
    Ответ написан
    Комментировать
  • Как сделать список destination в iptables?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Например, так:

    iptables -t mangle -N SPISOK
    iptables -t mangle -A SPISOK -d 10.9.0.0/24 -j RETURN
    iptables -t mangle -A SPISOK -d 10.11.0.0/24 -j RETURN
    iptables -t mangle -A SPISOK -d 10.14.0.0/24 -j RETURN
    iptables -t mangle -A SPISOK -j MARK --set-mark 4
    iptables -t mangle -A PREROUTING -i enp1s0 -s 10.8.0.0/24 -j SPISOK
    Ответ написан
    Комментировать
  • Если установленное приложение с вирусом используется через CrossOver или PlayOnMac, могут ли они заразить основную систему?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Приложению будут доступны все файлы, которые доступны запустившему его пользователю. Это значит, что оно может заразить exe-файлы, зашифровать документы, найти и угнать файлы с паролями, данные из браузера, а ещё оно может потенциально распознать, что это Linux/Mac и принести в систему зловредов под эти системы.

    НИКОГДА нельзя рассчитывать на то, что пронесёт. Если хочется проверить работу вирусов, то только виртуалка и лучше с наглухо отрубленной сетью.
    Ответ написан
    9 комментариев
  • Сложная маршрутизация на linux роутере. Как правильно готовить policy based routing?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    По поводу этого лучше всего начать с LARTC HOWTO.

    Если кратко, маршрутищация в iproute2 устроена так. Есть несколько таблиц маршрутизации, из которых 3 есть всегда (local, main, default), но можно создать ещё. По правилам (команда ip rule) перебираются таблицы, подходящие под условия, в соответствии с приоритетами (preference, первое число в выводе команды). И в каждой таблице есть свои маршруты. Таблицу local изменять нельзя и перед ней ничего маршрутизировать нельзя (это можно обойти через nat в PREROUTING, но это уже другой вопрос).

    Самый простой вариант - это source routing. Впервые мне это понадобилось, когда я подключил дома второго провайдера с внешним IP, и мне потребовалось отвечать с обоих внешних адресов со всего интернета. Делается так:

    1. В /etc/iproute/rt_tables описываем псевдонимы для новых таблиц (необязательно - можно использовать числовые идентификаторы - но так удобнее). Например, 10 - isp1, 20 - isp2.

    2. Задаём правила, которые приведут к выбору таблицы в зависимости от source address:

    ip rule add pref 10 from IP1 lookup isp1
    ip rule add pref 20 from IP2 lookup isp2

    3. В каждую таблицу добавим маршрут default через нужного оператора:

    ip route add default via GATEWAY1 table isp1
    ip route add default via GATEWAY2 table isp2

    4. В таблице main (которая используется по умолчанию, если не указать таблицу в команде явно) описываем маршрут "по умолчанию" - через того оператора, через которого будет идти исходящий трафик (не ответный на входящий), в данном случае пусть будет isp1:

    ip route add default via GATEWAY1

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

    В дальнейшем всё это обросло кучей других особенностей, например, ip rule fwmark по меткам, которые ставилилсиь в iptables по connmark и иногда другим условиям, но это уже следующий уровень сложности и более специфичне задачи. И LARTC HOWTO почитать всё равно рекомендую, ибо там основа основ и все гуру по нему учились.
    Ответ написан
    3 комментария
  • Как сделать так, чтобы кнопку в сообщение было видно определённым ролям?

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

    Как вариант, можно сделать отдельный служебный канал для пользователей с нужной ролью, пусть там делают все эти свои действия. Иногда это неплохое решение подобной задачи.
    Ответ написан
  • Как настроить webhook для бота aiogram 3 и nginx?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Код на python использует polling, причём тут вебхуки? Для вебхуков надо web app сделать, который их принимает. Вот в документации пример: https://docs.aiogram.dev/en/latest/dispatcher/webh... и там же есть образец настройки nginx.
    Ответ написан
    Комментировать
  • В чём смысл равного ограничения времени для разных ЯП в спортивном//олимпиадном программировании?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Смысл в первую очередь в том, чтобы участник не написал алгоритм, который будет считать 10 часов или 10 суток или вообще 10 лет, что помешает закончить олимпиаду в разумные сроки. А ведь олимпиады, как правило, проводятся в реальном времени, прогоняются тесты и выдаётся результат прям вот сразу...
    Ответ написан
    Комментировать
  • Как импортировать контакты (клиентов из CRM) в группу Телеграм?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Такого способа нет. Поиск в Телеграме такого большого количества номеров гарантирует бан аккаунта. Кроме того, у многих пользователей номер может быть скрыт настройками приватности.

    Приавильное решение - разослать пользователем SMS со ссылкой на канал. Также канал пихать на сайт, в личный кабинет, письма о заказах, визитки менеджеров итд итп. Параллельно не забывать вести канал интересным контентом, не очень редко, чтобы канал не казался заброшенным, но не слишком часто, чтобы пользователей не задолбало и они не отписались (тем паче сейчас почти любой пользователь подписан как минимум на пару-тройку каналов заведомо интереснее вашего).
    Ответ написан
    Комментировать
  • Есть ли скрипт для изменения определённого текста в коде страницы?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    magesypro.com##.active.mdpDeblocker-the-modal.mdpDeblocker-modal
    magesypro.com##body:remove-class(mdpDeblocker-blur)
    magesypro.com##.mdpDeblocker-wrapper
    magesypro.com##.mdpDeblocker-blackout


    Правила, после которых всё стало хорошо (использовал uBlock Origin в Firefox).
    Ответ написан
    1 комментарий
  • Насколько целесообразно использовать ленточную схд для продакшена?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Ленточная библиотека похожа на CD-changer: есть N кассет, и специальный механизм перемещает выбранную в считыватель, после чего начинается собственно считывание. Непосредственного доступа к данным на ленточках как на дисках нет. Одновременно читать несколько ленточек можно только если в ленточной библиотеке несколько считывателей (в частности, довольноо обычное дело когда там два считывателя). Одновременно читать несколько файлов с одной ленточки тоже нельзя, считывание происходит по очереди (и придётся в любом случае перемотать к нужному месту).

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

    Обычно ленточки используют как раз для такого хранения информации, когда её нужно доставать редко и по запросу. Исходники старого продакшна - вполне себе неплохой пример. Ведь когда проект завершается и сдаётся - он в подавляющем большинстве случае нужен затем почти никогда. Но если в вашем случае надо доставать их часто и быстро, то ленточная библиотека вам точно не подойдёт.
    Ответ написан
    Комментировать
  • Как получить username пользователя имея id без использования telegram web, но используя Python?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Получить id по username средствами Bot API нельзя. Его можно получить только вместе с событием, связанным с пользователем. Например, пользователь нажал кнопку /start, пользователь написал боту или в общую группу с ботом, пользователь вступил в группу...

    Telegram Bot API предполагает (и это абсолютно правильно!), что боты не могут писать произвольным пользователям и вообще знать об их существовании. Речь должна идти исключительно об инициативе пользователя начать коммуникацию. Иногда косвенно: например, вступая в группу, куда администратор добавил бот. Но случайных пользователей без их явно выраженного действия бот не может найти.

    Конечно, это можно обойти клиентским API (telethon выкидывает из-за того что его активно используют спамеры, но это тоже решаемо). Но я бы рекомендовал зайти с другой стороны: не надо вообще делать всякую фигню, на которую Bot API не рассчитан. Никакой пользы от неё нет.

    Например, если задача в том, чтобы получить список контактов для взаимодействия, то НЕ НАДО было собирать ссылки на профили пользователей. Вместо этого следовало просить их написать боту или вступить в группу. А там уже ботом словить информацию по ним и записать куда надо для ботовых задач.
    Ответ написан
    Комментировать
  • Как взять фото из SQLite и отправить через телеграм бота?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Для начала, картинки - бинарные файлы. Какой тип у поля в базе данных? Если текстовый - поздравляю, картинки уже побились необратимо.

    После пересоздания базы с нужным типом данных у этого поля (BLOB) придётся заново загрузить все файлы.

    А теперь самое главное: хранить файлы в базе - плохая идея. Правильно хранить их отдельно как файлы в файловой системе, а в базе хранить имя файла. Рекомендую сразу же переделать.
    Ответ написан
    3 комментария
  • Есть ли программа, которая при отправке запроса проверяет через какие маршрутизаторы и роутеры проходит запрос?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    С роутерами просто, а вот с L2 сложнее.

    Программный способ:

    Для нормальных управляемых коммутаторов можно на базе CDP/LLDP построить граф соседства. Я даже когда-то нашёл скрипт под CDP, который генерил граф для graphviz, и адаптировал под свои задачи и свой алгоритм discovery других свитчей, в том числе не только под Cisco, но и под Juniper.

    Также можно LLDP-клиент на конечные машины поставить, для Linux это linuxlldpd, для винды наверное можно поискать. Я когда-то наваял скрипт для cdp под питон для винды, который правда почему-то только на XP не падал и я тогда не разобрался почему. В этом направлении можно собрать инфу и по конечным машинам. А дальше уже разбираться с тем, что не распозналось нормально. Например, 5 машин висят на одном порту - как пить дать там неуправляемый свитч по дороге...

    Ручной способ для управляемых свитчей:

    Смотреть мак-адреса на портах, потом по макам выявлять, что это такое. Всё записывать в файлик.

    Механический способ:

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

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    А вот что именно должна делать команда

    ${WEBPACK_COMMAND:- ng build --configuration=production}


    и почему удивляет, что она завершается некорректно? Определена ли вообще переменная $WEBPACK_COMMAND? Почему при сборке вообще потребовалось брать название команды из внешней переменной? Тут вообще работают bash-евые подстановки в командах (подозреваю что нет, но не проверял)? Может, там и shell в базовом образе не bash, а классический sh?

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

    До кучи, тут CMD - это команда, запускаемая при старте контейнера. Но по логике этого докерфайал, эта команда предполагалась к запуску только при сборке образа. Чтоб это исправить, надо поменять CMD на RUN.

    Что будет при неуказании CMD запускаться в создаваемом на базе этого образа контейнере будет в таком случае унаследовано из FROM node:14-alpine, в данном случае видимо это запуск nginx. Если нужно запускать что-то своё вместо дефолта, то CMD надо переопределить на команду реального запуска приложения (типа CMD node /path/to/app.js или что там у вас в node.js принято делать для запуска?),

    Ну и делать внутри образа две копии приложения тоже немного странно. Лучше или собирать приложение сразу в конечном каталоге /usr/share/nginx/html, либо изменить конфиг nginx на использование другого каталога. Скорее всего, в этом образе - как и в официальном образе nginx - конфиг лежит в /etc/nginx/conf.d/default.conf.

    А ещё более хорошо и правильно освоить multi stage build в докере.
    Ответ написан
  • Какое лучшее приложение терминала (локального) для Android?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Есть терминалы под сам андроид, без какой-либо обвязки и утилит, что в системе есть - тем и пользуйся. Ничего сравнимого с Termux, у которого есть готовая мини-система, пакетная база и пакетный менеджер.

    Нужно ещё понимать, что с какого-то SDK Level приложения больше не могут делать exec и запускать другие приложения соответственно. А с более низким SDK Level больше невозможно пройти review у гугла. Поэтому Termux нынче распространяется через сайт в виде apk-файла, а не из магазина.

    А чем Termux не угодил? Всё остальное всё равно никак по фичам не дотягивает.
    Ответ написан
    Комментировать
  • Не работает удаление файла в python что делать?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Смотрим в код программы:

    voice_input = record_and_recognize_audio()
    os.remove("microphone-results.wav")


    Если внутри функции record_and_recognize_audio случается исключение (speech_recognition.WaitTimeoutError) из-за ошибки, то файл не будет создан. Соответственно, удалять будет просто нечего.

    Как решать? Ну для начала можно просто не удалять файл. Всё равно он при каждом вызове функции перезатирается. Не самое плохое решение, на самом деле.

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

    Но ещё более правильно почитать учебник или какие-то уроки по основам языка. Программировать копипастами чужого кода без какого-либо понимания - так себе путь.
    Ответ написан
    Комментировать
  • Нужна помощь/совет - Telegram бот?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    В pythonanywhere в бесплатном тарифе доступен ограниченный список сайтов https://www.pythonanywhere.com/whitelist/
    Ответ написан
    Комментировать
  • Как соответствовать LGPL для Qt?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Да, лицензия LGPL для того и придумана, чтобы можно было линковать закрытый код с открытым, при этом изменения в сам этот открытый код необходимо публиковать.
    Ответ написан
    Комментировать
  • Как читать сообщения из канала telegram программно?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Перед такими вопросами надо сначала гуглить.

    Мне потребовалось менее 5 минут, чтобы найти это:

    https://github.com/tdlight-team/tdlight-java
    https://github.com/Telegram4J/Telegram4J

    Оба проекта выглядят достаточно живыми.

    Вот до кучи пример самостоятельного использования tdlib в связке с Spring Boot: https://habr.com/ru/articles/738022/
    Ответ написан
    1 комментарий
  • Как управлять по сети загрузкой ОС?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Нормальное решение - сетевая загрузка (PXE) и подсовывать нужный конфиг. Можно даже использовать загрузчики типа ipxe, которые умеют качать файлы по http. Но для одно компа это может оказаться чересчур.

    Как вариант, можно было бы настроить grub, чтобы он загружал систему из "saved", и тогда можно было бы менять командой grub-set-default, затем перезагружать. Но это сохраняется в файл, который из-под Windows будет недоступен.

    Думаю, проще одну из систем поставит в виртуалку в другой, тогда обе могут быть доступны постоянно.
    Ответ написан
    2 комментария