• Как парсить приложение на андройд?

    hottabxp
    @hottabxp
    Сначала мы жили бедно, а потом нас обокрали..
    1 комментарий
  • Как изменить имя файла в bash после выполнения условия?

    saboteur_kiev
    @saboteur_kiev Куратор тега bash
    software engineer
    #!/bin/bash
    for i in {1..255}
    do
      PUB=$(wg genkey)
      PRIV=$(wg pubkey <<<"${PUB}")
      echo -e "$i\n${PUB}\n${PRIV}\n" >> wgkeys.txt
      echo $i
    done
    Ответ написан
    2 комментария
  • Ошибка на созданный файл в чем причина?

    @SergeyAVolkov
    * - не включает файлы начинающиеся с точки (скрытые файлы).
    Если имя всегда с точкой тогда можно использовать шаблон ".*.pem"
    Если может быть произвольным тогда лучше использовать find, например
    find /var/lib/dkim/ -name '*.pem' -exec chmod 600 {} \;
    Ответ написан
    1 комментарий
  • Как найти причину высокой нагрузки WordPress сайта на хостинг?

    ThunderCat
    @ThunderCat
    {PHP, MySql, HTML, JS, CSS} developer
    Простой ответ: что вы хотите - это вордпересс, цмс с изначально не оптимальной структурой, так как не возможно сделать и быстро и универсально, чем-то приходится жертвовать.

    Сложный ответ: Для того чтобы выявить проблему используют логирование и профилирование. В лог пишутся все запросы к бд или места где предполагается длительное выполнение кода (например запросы к апи или другим сайтам). Затем анализ, потом нахождение решения и фикс.
    Профилирование же состоит из комплекса действий по нахождению узких мест. В частности код условно делится на блоки, затем выполнение каждого блока замеряется и выясняется какой блок создает задержки. Далее соответственно данный блок дробим до тех пор пока не находим конкретное место проблемы. 80% вероятности что это будет какой-то запрос, с выборкой из нескольких таблиц и структурами по типу EAV, 18% что запрос к какому-то апи/сайту и 2% что тормозит именно криво написанный код (хотя это вордпресс, тут вероятности примерно равные). Что делать зависит от того что за проблема в конкретном случае. Иногда надо что-то закешировть, иногда править запрос, добавлять индексы, возможно что-то менять в структуре. Тут уже от ситуации...
    Ответ написан
    5 комментариев
  • Как с помощью JS изменить значение SELECT списка на значение с атрибутом selected?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    <select id='personlist'>
          <option value="1" selected="selected">1</option>
          <option value="2">2</option>
          <option value="3">3</option>
        </select>
        <script>
        document.getElementById('personlist').value='2';
        </script>
    Ответ написан
    Комментировать
  • Сайт с доступом только по https. Плюсы и минусы?

    BasiC2k
    @BasiC2k
    .NET developer (open to job offers)
    Гипотетически закрытие 80 порта может повлиять на:
    1. Работу некоторых парсеров и роботов по индексации;
    2. Работы сервисов, определяющих доступность сайта;
    3. Работу IoT устройств которые не могут по https
    Ответ написан
    Комментировать
  • Можно ли разорвать в USB линию VCC, чтобы передача данных со смартфона продолжала работать?

    @pfg21
    ex-турист
    вытащи аккумы. телефон вполне себе работает чисто на "зарядке" без аакума.
    Ответ написан
    5 комментариев
  • Как проверить открытие письма?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Из соображений безопасности открытие ресурсов по внешним ссылкам многие почтовые клиенты и почтовые сервисы не делают вообще. Тем более когда речь явно идёт о картинке размера 1x1, которую могут игнорировать намеренно (лучше уж тогда не указывать размеры, пусть клиент скачает картинку эту 1x1 и узнает размер только после этого).

    Надо понимать, что E-mail - это канал с негарантированной доставкой до получателя без шансов проверить факт доставки/прочтения. Письмо может вообще не дойти до получателя, может дойти до "Спама", может дойти но сразу пойти в под нож - но мы об этом не узнаем. Все эти пиксельные картинки, оборачивания ссылок в персонально трекируемые, "запрос подтверждения" - всё эти попытки хоть как-то обойти эти ограничения всё равно ни к чему получателя не обязывают. Получатель может всё это полностью проигнорировать.

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

    Я всегда принципиально отказываюсь от всех подтверждающих получение действий и фокусов, потому что если отправитель ПОЛЕНИЛСЯ приаттачить все картинки к письму - то значит я посмотрю на его письмо без картинок и по ссылкам переходить не буду вообще. Не заслужил. Ничего ценного в таких письмах я ещё ни разу не видел.

    Единственное, для чего все эти средства помогают - примерно оценивать степень прочтения в сравнении с предыдущим опытом. Скажем, вчера письмо прочитало 30% получателей, это может означать что его прочитало, например,на самом деле 60%, но лишь половина подвержена трекингу. А если сегодня прочитало 10%, значит, что-то случилось: письмо хуже дошло до получателей, письмо хуже привлекло их внимание... (Все цифры, конечно, от балды, они имеют иллюстративный характер)

    Да и вообще, в наше время почту читает всё меньше людей.
    Ответ написан
    Комментировать
  • Какое оборудование нужно для соединения коммутаторов в разных зданиях на расстоянии 200 м?

    anthtml
    @anthtml
    Системный администратор программист радиолюбитель
    Вариант 1 (самый простой/дешманский): Делим участок на сегменты менее 100м, желательно чтобы стыки были в районе розеток. Покупаем самый дешевый обычный свитч DES/DGS-1005, подключаем и работаем
    Вариант 2 (по дороже): Вариант 1, только вместо свитчей POE-коммутаторы(инжекторы)/удлинители. Если к местам стыков нет возможности подвести 220В
    Вариант 3 (надежный/геморойный): Оптоволокно, если позволяют условия - можно купить готовый оконеченный патчкорд и протянуть, если нет - тянуть кабель и оконечивать. Любой провайдер подрядиться такое спроектировать/сделать.
    Вариант 4. (в прямой видимости): WI-FI радиомост на направленных точках доступа/антенах. Ну не забиваем, что от каждой точки доступа до ближайшего свитча также может быть до 100м
    Вариант 5. (когда проложить нет возможности): Использование технологий PLC (powerline) - подключение по существующей электропроводке, через спец адаптеры. VDSL - подключение по существующей прямой телефонной линии (1 паре)
    Вариант 6. (арендный) При наличии на обоих концах точек присутствия провайдера. Заказать услугу темного волокна или mpls, объединение сетей
    Вариант 7. (интернетный): При наличии на обоих концах точек присутствия провайдера. Объединение сетей через классический VPN.
    Ответ написан
    2 комментария
  • Как добавить отметку времени в выводе команды ping?

    wisgest
    @wisgest
    Не ИТ-специалист
    Вывод команды ping перенаправляется на вход сложной команды.

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

    1. Как работает эта часть кода (pause&pause)>nul

    Пропускаются две первые строки из входного потока принимающего процесса:
    pause ожидает ввод от пользователя и, когда на её вход поступает строка, прекращает ждать, >nul подавляет (перенаправляет на пустое устройство) приглашение от pause нажать любую клавишу (в данном случае подавляется весь вывод составной команды, состоящей из двух pause).

    Вместо этого можно было без >nul использовать, например, две команды set /p, даже и не указывая перед знаком равенства имя переменной, в которую вводится строка.

    Добавлено: Как выяснилось при обсуждении вопроса, дело обстоит сложнее…

    2. Как работает эта часть set /p "data=" && echo(!date! !time! !data!)

    Очередная строка из входного потока вспомогательного процесса cmd, то есть из выходного потока ping, помещается (set /p) в переменную окружения data и в случае успеха (&&), за который считается то, что была введена непустая строка (иначе переменная окружения не изменяется), выполняется следующая команда echo, выводящая строку из разделённых пробелами псевдопеременных date, time и только что установленной переменной data.
    Псевдопеременные date иtime содержат текущие дату и время, но только если не определены одноименные переменные окружения, поэтому для учёта всех возможных случаев их следовало бы в начале явным образом сбросить.

    Имена переменных заключены в восклицательные знаки, а не знаки процента, для отложенного раскрытия изменяющихся переменных в команде повторения (цикле) , а не однократной подстановки их значений до выполнения цикла. Возможность использовать отложенное раскрытие в данном случае включается ключом /v команды cmd. (Возможно также для отложенного раскрытия использовать команду call…)

    Открывающая скобка сразу после echo — это не открывающая скобка составной команды, а разделитель между командой echo и её аргументом, а закрывающая скобка относится к составной команде в цикле for /l %a in () do.

    Зачем нужна команда ping -n 2 8.8.8.8>nul после бесконечного цикла, я не знаю и буду рад увидеть разъяснения этому.
    Добавлено: Но без неё изменяется формат вывода:
    7.10.2022 21:47:58,02 Ответ от 8.8.8.8:
    7.10.2022 21:47:58,04 число байт=32 время=244мс TTL=104
    7.10.2022 21:47:59,04 Ответ от 8.8.8.8:
    7.10.2022 21:47:59,04 число байт=32 время=240мс TTL=104
    7.10.2022 21:48:00,05 Ответ от 8.8.8.8:
    7.10.2022 21:48:00,05 число байт=32 время=233мс TTL=104


    Спасибо за интересный вопрос!
    Ответ написан
  • Почему автоматические не обновляется состояние папки?

    3r1k
    @3r1k
    the quieter you become, the more you hear
    Это связано с блокировкой антивирусом потоков (возможно в прошлом) исполняемого файла explorer.exe
    Исправить возможно получиться проверкой системных файлов:
    Запустить командную строку от имени администратора
    Прописываем команду sfc /scannow и нажимаем Enter
    После этого начнется процесс сканирования системы и замены поврежденных (измененных) элементов
    Ответ написан
    1 комментарий
  • На что обратить внимание на сервере после взлома?

    ky0
    @ky0
    Миллиардер, филантроп, патологический лгун
    В подобных случаях лучше переустановить ОС к чертям, имхо.
    Ответ написан
    Комментировать
  • Как отклонить соединение при 10 и более запросов TTL 58?

    karabanov
    @karabanov
    Системный администратор
    Устанавливаешь ipset (возможно уже установлен) и добавляешь список:
    sudo ipset -N BANNED_IP nethash

    Добавляешь правила:
    # Отбрасываем пакет если TTL 58 и IP есть в списке BANNED_IP
    sudo iptables -A INPUT -m ttl --ttl-eq 58 -m set --match-set BANNED_IP src -j DROP
    
    # Надо как-то добавлять IP отвечающие критериям в список BANNED_IP, для этого
    # Добавляем кастомную цепочку RATE-LIMIT
    sudo iptables -N RATE-LIMIT
    
    # Если TTL 58 передаём пакет на обработку в цепочку RATE-LIMIT
    sudo iptables -A INPUT -m ttl --ttl-eq 58 -j RATE-LIMIT
    
    # Если количество пакетов не превышает 2 в секунду, то пропускаем
    sudo iptables -A RATE-LIMIT -m limit --limit 2/second -j ACCEPT
    
    # Когда лимит превышен добавляем в лог запись об этом событии
    sudo iptables -A RATE-LIMIT -j LOG --log-prefix "LIMIT_EXCEEDED: "
    
    # Затем добавляем IP в список BANNED_IP
    sudo iptables -A RATE-LIMIT -m ttl --ttl-eq 58 -j SET --add-set BANNED_IP src
    
    # Не обязательно, но отбрасываем пакет
    sudo iptables -A RATE-LIMIT -j DROP


    Посмотреть, кто попался sudo ipset list BANNED_IP
    Удалить из списка если надо sudo ipset del BANNED_IP <Забаненый IP>

    Проверить, что работает sudo ping -i 0,1 -t 58 <IP сервера>
    Посмотреть лог tail -F /var/log/syslog | grep LIMIT_EXCEEDED
    Или так dmesg | tail | grep LIMIT_EXCEEDED

    PS
    Себя только не забань. Убедись, что при любом раскладе ты сможешь подключиться к серверу по IPMI или физически присутствуя рядом с ним с монитором и клавиатурой.
    Ответ написан
    1 комментарий
  • Как защитить контент от парсинга с помощью Nginx?

    @rPman
    Основная защита от парсинга - только при доступе к данным по авторизации и установка лимитов на данные (объем, доступный пользователю либо за какой то период времени, например сутки/месяц).

    Анонимно доступные данные, в общем случае, защитить от выгрузки пользователями - невозможно. Все что пользователь видит на экране можно тупо скопировать и проанализировать.

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

    Можно поставить 'палки в колеса', сделав этот процесс сложнее (и дороже), в основном это запутывание/шифрование данных, доступных напрямую (по api) с бакэнда и обфускация кода, его преобразования в видимый пользователю контент, чтобы классические (дешевые) инструменты не работали. Как всегда стоимость защиты (затрат на разработку) должна быть сравнима затрат граберов на получение данных (обычно им проще).
    К сожалению вместе с контент-грабером, в заблуждение будут введены роботы поисковых систем, ведь их основная работа - грабить контент.
    spoiler
    * api не должен быть простым и интуитивно понятным, идентификаторы могут вообще не быть постоянными (их можно преобразовывать на бакэнде на основе данных в сессии)
    * код javascipt, например получения ссылки на объект должен быть нетривиальным, т.е. чтобы получить следующую ссылку на требуемый граберу объект, потребовалось бы использовать сам браузер (а не простенький скрипт парсер html)
    * верстка может быть непостоянной, изменяющиеся, простые гуляющие наименования классов и идентификаторов уже могут создать кучу проблем (я такое встречал), а уж постоянное изменение структуры должно совсем запудрить голову даже опытным граберам (не встречал)
    * шрифт может не являться правильным (видимые символы могут не соответствовать их кодам), при этом генерируемый каждый раз новый под конкретную сессию пользователя. Простая подстановка, сильно усложнит (но не сделает невозможной) получение данных через буфер или document.innerText в консоли браузера, оставив граберу только вариант распознавание экрана скринридером (а не тривиальная верстка потребует от пользователя сложную настройку и автоматизацию и эти инструменты)
    * типовые javascript методы браузера должны быть замещены на 'неправильно работающие', чтобы граберу пришлось использовать внешние скрипты а не простой инжект javascript (обычно это сильно упрощает).
    Ответ написан
    3 комментария
  • Как по всему документу скрыть значения которые имеют undefined?

    0xD34F
    @0xD34F Куратор тега JavaScript
    То есть, вместо того, чтобы изначально не пытаться показывать то, чего нет, вы хотите заметать мусор под ковёр.

    Умно, ничего не скажешь.

    А главное - это будет ни разу не костыль.
    /*
     * надеюсь, хотя бы вместо "по всему документу" вы сумеете подобрать
     * какой-нибудь вменяемый селектор, чтобы не проверять реально всё,
     * а только те элементы, где ваш "undefined" действительно может случиться
     */
    document.querySelectorAll('*').forEach(n => {
      const text = n.innerText?.trim();
      if (text === 'undefined') {
        n.hidden = true;
      }
    });
    Ответ написан
    4 комментария