[/b/] [/d/] [/tu/] [/a/] [/ph/] [/wa/] [/cg/] [/t/] [/p/]

[Burichan] [Foliant] [Futaba] [Greenhell] [Gurochan] [Photon] - [Home] [Manage] [Archive]

[Return]
Posting mode: Reply
Leave these fields empty (spam trap):
Name
Link
Subject
Comment
File
Verification
Password (for post and file deletion)
  • Supported file types are: GIF, JPG, PDF, PNG
  • Maximum file size allowed is 30720 KB.
  • Images greater than 200x200 pixels will be thumbnailed.

File: 1649460359906.jpg -(222420 B, 1654x2340) Thumbnail displayed, click image for full size.
222420 No.200124  

Так как мой Amazon AWS сервер скоро накроется за неуплату. А пополнить его баланс нормальными способами похоже не получится. Решил перекатится на VPS которые можно оплатить через криптовалюту.
Основное назначение сервера поддерживать мой VPN и конечно у него должен быть выделенный IP.
Нашел несколько вариантов, но весь в сомнениях.
Первое что попалось monovm.com, но фирма литовская.
Второй и весьма дешевый hostinger.com, но у них вовсю поддержка Украины и прочее. В принципе мне все равно, но то что они политизированы добавляет сомнений.
Не знаю что там взбредет этим двум провайдерам в голову. И не отрежут ли они к примеру все российские IP на новом витке санкций или еще чего.
Так же нашел njal.la, хорошо но дорого.

Нашел так же интересный вариант bitlaunch.io , говорят что могут оплатить к примеру VPS от vultr.com . Но на vultr минимальный тариф 6$, а он же через bitlaunch.io уже 14$. Такие наценки меня напрягают. Хотя можно приглядеться к собственному серверу от bitlaunch за 10$, что меня вполне устраивает. Но здесь меня интересует безопасность решений через от bitlaunch. Насколько это надежный провайдер и не получит ли кто сторонний доступ к моей VPN сети.
В целом суммы, конечно, не большие, но лишних денег у меня все равно нет. Так что переплачивать не хочется.

Может что посоветуешь, Новерь? А то я немного в сомнениях.

>> No.200127  
File: 1649490611848.png -(1896575 B, 2383x2449) Thumbnail displayed, click image for full size.
1896575

>>200124
Ты можешь перед оплатой написать в техподдержку хостинга кто ты, для чего собираешься использовать сервер, и спросить все ли ок с этим. Если они будут против по каким-либо причинам, то ты об этом узнаешь сразу и не потеряв ни копейки. Дальше можно оплачивать помесячно, чтобы уменьшить потери от возможных новых санкций.

>> No.200131  

>>200127
Эта унюша очень милая.

>> No.200134  

>>200131
Ты милая.

>> No.200136  

А я?

>> No.200139  

>>200124

Немного не по теме, но можно попытаться завести виртуальную иностранную банковскую карту, пополняемую биткоинами.

Например, есть европейская https://www.wisenex.com/cards.html

Для транзакций ниже 300 евро они спрашивают верификацию по фото европейского паспорта, которое можно сгенерировать тут (например, Эстония): https://www.verif.tools/estonia_passport/

После 300 евро — уже селфи с паспортом
https://wisenex.com/faq_list_verification_levels.html

Есть и другие. В некоторых требуется utility bill (тоже генерируется на verif.tools).

Также смотри: https://thebell.io/grozit-li-nam-suverennyy-runet-kak-platit-za-rubezhom-i-novye-instrumenty-dlya-poiska-fotofeykov

>> No.200151  
File: 1649548244006.jpg -(146503 B, 270x823) Thumbnail displayed, click image for full size.
146503

>>200127
Не особо люблю общаться с поддержкой. А так я совсем уж криминалом не занимаюсь, так что уточнять легальность особо и не требуется. Единственный вопрос может быть: "Я из Рашки, не забаните ли вы меня через месяц или два?"

>>200139
Иметь пополняемую иностранную карту вариант просто идеальный. Но такой способ совсем уж криминальный, с подделкой документов и прочим ради "пары баксов". Но если совсем припрёт можно и таким воспользоваться. В любом случае спасибо за информацию.

А так, остановился на сервере от bitlaunch.io, сейчас уже получил доступ к машине.
Основная проблема была в том, что я впервые работаю с криптовалютой. Зачем-то завел себе полностью подтвержденный аккаунт на Binance. Потом чуть разобравшись уже завел себе Atomic wallet, на него уже через мутные схемы на bestchange.ru купил биткоин. Схемы действительно мутные, сидишь и ждешь пройдет ли операция и не испарятся ли твои деньги в жидком вакууме.
Решил отписаться пока не забыл что делал.

Если есть какие-нибудь советы, в том числе и по криптовалюте с удовольствием их выслушаю?

У самого еще есть вопросы, но не совсем по теме треда.

>> No.200152  

А есть вообще впс провайдеры которые явно указывают на поддержку в их cpu aes инструкций? Ведь не все провайдеры указывают какие цпу стоят на их серверах.
Для того же OpenVPN'а настроенного с шифрованием через aes маловато будет одного ядра на ~2.5ггц, которое идёт по дефолту с большинством начальных тарифов, или я ошибаюсь?
>>200151
А по сабжу если уж ничего криминального не подразумеваешь, то почему просто ру реселлерами впсок не пользуешься? Ну или зарубежными кто принимает оплату ру картами

>> No.200153  
File: 1649556540759.jpg -(200913 B, 559x560) Thumbnail displayed, click image for full size.
200913

Наконец-то все настроил.

>>200152
По поводу производительности CPU сервера могу сказать только по ощущениям пользователя, что особых подтормаживаний интернета не замечал, но я и 100 мегабитные потоки не прокачиваю. Также использую WireGuard, а не OpenVPN.

На счет аренды VPS'ок. То криптовалюта это просто первое что пришло мне на ум когда я неожиданно не смог расплатится обычной. Тем более было интересно как это работает.

>> No.200154  

>>200153
Что за зверь такой, этот wireguard? Есть какие-нибудь преимущества над овпном, shadowsocks'ом?
Я так понял, в нём по дефолту идёт chacha20 как метод шифрования. Лет ~5 назад настраивал shadowsocks через этот алгоритм, он люто-бешено троттлил ~100Mbit канал вплоть до полного дропа пакетов. Так происходило до перехода на улучшенную версию алгоритма xchacha20+обфускацию трафика. В wireguard такого поведения, судя по твоим словам, уже нету.

>> No.200159  
File: 1649574688910.png -(2088873 B, 1000x1414) Thumbnail displayed, click image for full size.
2088873

>>200151

> А так я совсем уж криминалом не занимаюсь, так что уточнять легальность особо и не требуется. Единственный вопрос может быть: "Я из Рашки, не забаните ли вы меня через месяц или два?"

И это и некоторые хостеры могут нелюбить впн.

> Если есть какие-нибудь советы, в том числе и по криптовалюте с удовольствием их выслушаю?

Используй альткоины вроде litecoin, у оригинального биткоина сейчас конские комиссии для небольших транзакций.
>>200152

> Для того же OpenVPN'а настроенного с шифрованием через aes маловато будет одного ядра на ~2.5ггц, которое идёт по дефолту с большинством начальных тарифов, или я ошибаюсь?

Все зависит от того, на какой скорости ты собираешься через него качать.
>>200154

> Что за зверь такой, этот wireguard? Есть какие-нибудь преимущества над овпном, shadowsocks'ом?

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

>> No.200161  

>>200159

> Все зависит от того, на какой скорости ты собираешься через него качать.

Ну например цепочка из нескольких ovpn'ов с aes-128 на скорости хотя бы 75мбит. Тоесть и передача и приём по идее должны так задействоваться 75/75. Какое для такого канала нужно минимальное железо на серверах?

>> No.200163  
File: 1649581434326.png -(1328928 B, 1050x1033) Thumbnail displayed, click image for full size.
1328928

>>200161
Если у тебя два инстанса ovpn на разных ядрах то по идее должно вытянуть. Если ты это хочешь протащить через один инстанс то скорее всего тебе придется искать процессор с 4-5 ГГц.

>> No.200169  

>>200163
А разве возможно овпн запускать как клиент и как сервер с одного инстанса, чтобы подключиться с этой машины в цепочке к следующему серверу? Видимо мне нужно по два инстанса на каждой машине в цепочке, то есть 2 ядра по 2.5ггц на каждой должно хватить, так?

>> No.200171  
File: 1649590539776.jpg -(633537 B, 1200x1600) Thumbnail displayed, click image for full size.
633537

>>200169

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

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

> Видимо мне нужно по два инстанса на каждой машине в цепочке, то есть 2 ядра по 2.5ггц на каждой должно хватить, так?

На первый взгляд да.

>> No.200191  
File: 1649655731402.png -(461813 B, 971x971) Thumbnail displayed, click image for full size.
461813

>>200171
Cпасибо, за разъяснение что да как
Но я думаю, что впс сервер за натом это печально, особенно для таких схем маршрутизации

>> No.200195  
File: 1649661057214.jpg -(273261 B, 1280x720) Thumbnail displayed, click image for full size.
273261

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

>> No.200221  
File: 1649788213894.jpg -(273626 B, 481x629) Thumbnail displayed, click image for full size.
273626

Подтверждаю простату настройки WireGuard. Даже я настроил его на нескольких устройствах всего за пару часов

>> No.200222  

>>200221
×простоту
Х-ы-ы... Х-ы-ы... Он сказал простата...

>> No.200223  

>>200222
А я уже хотел теперь всегда так писать.

>> No.200224  

А я блять почти минуту не мог понять, что он хотел сказать, пока не понял, что это у него за простата такая.

>> No.200227  

>>200124

>Так же нашел njal.la, хорошо но дорого.
>The ToS clearly states that we will not protect users spreading right wing material. The author of the aforementioned article states that in his personal opinion a VPN service should be neutral. We see this differently. If a user spreads right wing propaganda then he/she/it is on the wrong side of history.
>> No.200228  

>>200227
А что плохого в том, что твой провайдер за тебя решает, где правильная сторона истории? Как говорится, one less script for me to maintain.

>> No.200238  
File: 1649855800425.jpg -(68937 B, 838x444) Thumbnail displayed, click image for full size.
68937

>>200224
"простота как 3 рубля" - это укрупнённая или нормальная?

>> No.200239  

>>200238
А тебе мешает?

>> No.200256  
File: 1650053188015.jpg -(697902 B, 1525x2262) Thumbnail displayed, click image for full size.
697902

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

  1. Это поставить на свой сервер "снифер" IP запросов, и когда я захожу на новерь с любого устройства через VPN "счетчик новых сообщений" сбрасывается в ноль.
  2. Затем некая программа или скрипт с некой периодичностью запрашивает новеровскую страницу. Прасит её, находит новые посты, считает их и высылает мне на почту сколько их прошло с последнего моего визита.

Все хорошо и просто, но почта такими темпами быстро засрется. У меня и так есть вещи которые постоянно приходят на почту.

Вариант 2:
Написать простейшее приложение на андроид, которое уже будет генерировать всплывающие сообщения.
Для того чтобы сообщения отсчитывались от последнего визита с любого устройства опять же хорошо иметь "снифер" на VPN сервере, через который проходит трафик с любого устройства. Андроид приложение может как само запрашивать страницу новеря и парсить её, или это может делать программа на сервере, а андроид приложение уже общаться с ней.

Вопрос такой, как это проще всего организовать?

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

>>200227
что-то не нахожу такого на их сайте. В любом случае никогда не относил себя к правому крылу, скорей уж к левому. Но черный юмор я люблю.

>> No.200257  

>>200256
Граббер новеря и бот в ирке, который куда-нибудь сренькает, а на андроиде клиент постоянно подключён к каналу и высвечивает уведомления.
Мне кажется самой простой вариант.

>> No.200258  
File: 1650055828495.jpg -(254331 B, 1474x1052) Thumbnail displayed, click image for full size.
254331

>>200257
Ну, я и думаю написать простенький "граббер", "парсер" серверное приложение на сервере (простите за тавтологию) к которому будет обращаться андроид клиент.

И задача не совсем в том чтобы сделать это как можно быстрее, а сделать красиво и интересно в меру сил, конечно. Чтобы процесс дал какой-то опыт. Ну и в том же духе.

>> No.200259  

>>200256
Я у себя такое реализовал: по крону скрипты ходят по бордам и собирают треды с новыми постами, записывая их в лог, а хвост этого лога отдается простеньким скриптом по http, который есть в закладках что на телефоне что на пк.

>> No.200260  

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

>> No.200261  

>>200124
Есть за $2 в месяц https://buyvm.net/kvm-dedicated-server-slices/ и https://incognet.io/kvm-vps

Оба принимают разные крипты через coinpayments.net, MannDude(IncogNET LLC) официально разрешает держать exit-ноды и не банит по географии https://mastodon.social/@incognet/107902426949056635

>> No.200262  

>>200259
Ты изобрёл RSS.

>> No.200266  

>>200262
RSS требует специального ридера.

>> No.200276  

>>200266
Этот ридер встроен в каждый первый браузер и почтоклиент. Ведь встроен же? Встроен же, да?

>> No.200278  

>>200276
Мобильные вроде в совем большинстве не умеют.

>> No.200327  
File: 1650207955670.png -(155782 B, 500x282) Thumbnail displayed, click image for full size.
155782

>>200278

>> No.200378  
File: 1650485828217.png -(272370 B, 592x850) Thumbnail displayed, click image for full size.
272370

В принципе tcpdump запущенный на сервере отслеживает мои обращения к новерю. Нужно найти еще DNS резольвер который будет отдавать IP новеря снифферу при запуске. Для этого, похоже, нужен скрипт который запустит tcpdump в бекграунде, а в качестве стандартного вывода уже подпихнуть ему мою программу, которая также должна работать в бекраунде. Если правильно понимаю такие программы называют демонами.

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

>>200259
у меня AWS тоже до сих пор работает.

>> No.200379  

>>200378
Это настолько безумная идея, что может сработать.

Нет, можно, конечно, написать сайт-обёртку с крон-скриптом, но где челендж?

>> No.200439  
File: 1650667033504.jpg -(1297907 B, 1131x1600) Thumbnail displayed, click image for full size.
1297907

>>200379
Сайт-обертка не подойдет, так как надо высылать уведомления о появлении новых постах с последнего посещения, и об этом должен сигнализировать телефон. Что бы посмотреть последние посты я всегда могу просто обновить страницу в браузере. Для этого подходят PUSH уведомления на телефон или RSS. С PUSH я более менее разобрался, с RSS неочень.

Для PUSH уведомлений придется написать простенькое приложение на андроид думаю на JAVA, но это не проблема, так как оно будет чуть сложнее Hello World'да в моем представлении.

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

Нужно выбрать на чем написать саму программу. Рассматриваю C/C++, но больше склоняюсь к скрипту на питоне. Как раз хотел попробовать что из себя представляет питон.
Как понял общий скрипт действительно можно добавить в crontab или прописать в systemd.

Единственное, не обещаю что сделаю это быстро. Может быть неспешно в течении месяца, двух.

Кстати, есть вопрос к самому Уцухо.
Ты же сам санкции вводить не собираешься, правда ведь? Это же не место для политики?

сам скрипт снифера

addr=$(host nowere.net | awk '/has address/ {print$4}');
addr="host ""${addr}"" and (port 80 or port 443)";
tcpdump -i eth0 -nn "${addr}";
>> No.200441  

>>200439
Анон, это был двойной сарказм. Но отвечать тебе развернуто я буду уже минимум завтра.

>> No.200445  

>>200439

> с RSS неочень

Там по иедее только xmlку на сервере сформировать, а приложения для телефона уже скорее всего есть готовые.

>> No.200471  

>>200439
Сайт-обёртка запоминает время твоего последнего посещения. Сайт, отдающий RSS, или демон, периодически пингующий Новерь, сравнивает время твоего последнего посещения и время новейшего поста на Новере и отдаёт новый RSS entry или шлёт push-уведомление соответственно.

>> No.200475  
File: 1650761610758.jpg -(46438 B, 800x600) Thumbnail displayed, click image for full size.
46438

>>200471
В моем случае сайт-обертка не нужен. Так как я захожу на новерь только через VPN достаточно снифера на сервере. Если я зайду на новерь с любого устройства телефон, ноутбук, ПК то он увидит соответствующий трафик. Собственно, просто наличия такого трафика достаточно для сброса счетчика новых постов. Правда не знаю насколько снифер будет тормозить интернет в целом.
На сервере пишу скрипт на питоне который грузит нулевую новеря и парсит последние посты, определяет новые либо по времени, либо по номеру поста, шлет PUSH уведомление через FCM. Собственно все.

Из остального, полез разбираться RSS, но только еще больше запутался. Кто его поддерживает, кто нет. Сервисы которые его предоставляют. Похоже для кашерности нужно вообще поднять свой RSS типа Tiny Tiny RSS. Но это, я думаю, перебор, так что склоняюсь к PUSH уведомлениям.

Как понял PUSH уведомления можно слать прямо с сайта если есть SSL сертификат. Но поднимать свой сайт я не хочу и тем более получать сертификат. Так что напишу простенькое мобильное приложение. Пользоваться собираюсь Firebase, у них с документацией и примерами на любом языке все хорошо.

Нашел вообще сервис где все готово, и мобильное приложение, и готовая питоновская библиотека. Это Pushbullet. Но думаю использовать его будет не совсем спортивно.

Так что теперь надо просто погрузиться в чтение мануалов.

>> No.200973  
File: 1651969083497.png -(31357 B, 1441x790) Thumbnail displayed, click image for full size.
31357

Набросал некий питоновский код. Пока не все гладко.
Если кому интересен прогресс, могу и код выложить (только не представляю как его поддержит чановская разметка). И подробней описать.

В любом случае забираю тред под тесты :3

>> No.200976  

>>200973

> Пока не все гладко.

А что не гладко то?

>> No.200977  

>>200976
...но зачем?!

>> No.200978  

>>200977
Чтобы было удобно же.

>> No.200979  

>>200973

> могу и код выложить (только не представляю как его поддержит чановская разметка)

https://nowere.net/faq.html — в самом низу; tab или 4 пробела в начале строки.

>> No.200997  
File: 1652032242852.png -(351131 B, 737x921) Thumbnail displayed, click image for full size.
351131

>>200976

>А что не гладко то?

На скрине:
время - это когда я заглядывал на новерь.
Так в указанные промежутки я в него не заходил.
Проблема в том что, когда я запрашиваю страницу для парсинга последнего поста. то этот запрос тоже отслеживается tcpdump. Сейчас я пытаюсь отслеживать временные интервалы запроса. Может стоит сменить настройки tcpdump, возможно доходят всякие блуждающие пакеты. Ну и может стоит перейти с time на datetime.
Максимальный номер поста на нулевой работает отлично. Но надо и удаленные посты подсчитывать, если они были обнаружены.
На скрине был обнаружен новый пост, но сообщение 0 новых постов. И срабатывает только раз. Надо дебажить.

>>200979
Это я читал. Но в питоне tab или 4 пробела это синтаксический элемент, формирующий блоки кода. Если его похерить, то код превращается в белеберду. Но, хорошо, я все равно попробую.

Это моя первая программа на питоне так что не судите строго. Да и вообще забагованный промежуточный вариант. но допиливать я его скорее всего буду только завтра ночью. А сегодня - Компай!

Код:

import sys
import os
import os.path
import time
import subprocess
import re
import urllib
import urllib.request
#import urllib.error
from urllib.error import URLError, HTTPError
delay_period_sec = 10
Message_period_sec = 60
link = "http://nowere.net/b"
file_name = "/root/Data_Post_No.dat"
command = """addr=$(host nowere.net | awk '/has address/ {print$4}');
addr="(tcp[tcpflags] & tcp-fin != 1) and (tcp[tcpflags] & (tcp-ack | tcp-syn) != 0) and src ""${addr}"" and (port 80 or port 443)";
tcpdump -i eth0 -nn "${addr}" -l """
if not os.path.isfile(file_name):
file = open(file_name, 'w+') # open file in write mode
file.write('Last_viewed = 0\n')
file.write('Status = "down"\n')
file.close()
file = open(file_name, 'r')
try:
Last_viewed = int(re.search(r'Last_viewed = (\d+)',file.readline()).group(1))
except:
Error_read == True
else:
Error_read == False
try:
Status = re.search(r'Status = "(down|up)"',file.readline()).group(1)
except:
Error_read == True
else:
Error_read == False
file.close()
if Error_read:
Last_viewed = 0
Status = 'down'
file = open(file_name, 'w')
file.write('Last_viewed = ' + str(Last_viewed) + '\n')
file.write('Status = "' + Status +'"\n')
file.close()
print('Last_viewed = ', Last_viewed)
print('Status = "' + Status + '"')
Last_reported = Last_viewed
p = subprocess.Popen(command, shell=True, bufsize=-1, stdout=subprocess.PIPE)
os.set_blocking(p.stdout.fileno(), False)
start = time.time()
Message_time = time.time()
delay = 0
while True:
#------------------------------------------
if time.time() > start + delay:

local_time = time.localtime()
disable_time_start = local_time.tm_hour * 3600 + local_time.tm_min * 60 + local_time.tm_sec

Error_flag = False
Error_text = ''
try:
f = urllib.request.urlopen(link)
except HTTPError as e:
#Error_flag = True
Error_text = 'The server couldn\'t fulfill the request.\nError code: ' + e.code
Status = "down"
except URLError as e:
#Error_flag = True
Error_text = 'We failed to reach a server.\nReason: ' + e.reason
Status = "down"
else:
site = f.read().decode('utf-8')
#last_post = re.findall(r'<span .*<a .*No\.(\d+)</a>.*</span>', site)
last_post = re.findall(r'<span class="reflink"> <a href=".{0,100}">No\.(\d+)</a> </span>', site)
Max_No = max(list(map(int, last_post)))
Status = "up"
# for No in last_post:
# print(No)
print("Max No ", Max_No)

local_time = time.localtime()
disable_time_end = local_time.tm_hour * 3600 + local_time.tm_min * 60 + local_time.tm_sec

#print("nothing happening")
delay += delay_period_sec
#break
    tcp_loop = True
#------------------------------------------
tcp_viewed = False
while tcp_loop:
# first iteration always produces empty byte string in non-blocking mode
line = p.stdout.readline()
if line != b'':
visit_time_string = re.search(r'\d{1,2}:\d{1,2}:\d{1,2}',line.decode('utf-8')).group(0)
visit_time_list = list(map(int,re.split(':', visit_time_string)))
visit_time = visit_time_list[0] * 3600 + visit_time_list[1] * 60 + visit_time_list[2]
if disable_time_start <= disable_time_end:
if not ((visit_time >= disable_time_start) and (visit_time <= disable_time_end)):
tcp_viewed = True
print(visit_time_string)
else:
if not (((disable_time_start <= visit_time) and (visit_time <= 24*3600 -1)) or ((0 <= visit_time and visit_time) <= (disable_time_end))):
tcp_viewed = True
print(visit_time_string)
else:
tcp_loop = False
#------------------------------------------
    if tcp_viewed == True:
Last_viewed = Max_No
    if time.time() > Message_time:
        file = open(file_name, 'r')
Last_viewed_file = int(re.search(r'Last_viewed = (\d+)',file.readline()).group(1))
Status_file = re.search(r'Status = "(down|up)"',file.readline()).group(1)
file.close()

print( 'Last_viewed_file ',Last_viewed_file)
print( 'Status_file ' + Status_file)
        if Status != Status_file: 
if Status == 'down':
#Send_Message('chan is DOWN!\n' + Error_text)
print('chan is down!\n' + Error_text)
else:
#Send_Message('chan is UP again!')
print('chan is UP again!')
        if Last_viewed != Last_viewed_file:    
if Last_reported < Max_No:
New_posts = Max_No - Last_viewed
#Send_Message(str(New_posts) + ' new posts')
print(str(New_posts) + ' new posts')
Last_reported = Max_No
        file = open(file_name, 'w')
file.write('Last_viewed = ' + str(Last_viewed) + '\n')
file.write('Status = "' + Status +'"\n')
file.close()
        Message_time += Message_period_sec
#------------------------------------------
time.sleep(0.5)
p.terminate()
>> No.201003  

>>200973
Это ты дудосил новерь сутра содомит?

[spoiler которого нет]
Шутка
[/spoiler которого нет]

>> No.201009  
File: 1652045656803.png -(2534528 B, 1080x1920) Thumbnail displayed, click image for full size.
2534528

>>201003

>delay_period_sec = 10
>sec

Ты перепутал с миллисекундами

[spoiler]
Оценил :3
[/spoiler]

>> No.201022  

>>200997
Разрежь код на функции с понятным названием.

>> No.201055  

Test

>> No.201056  
File: 1652133040504.png -(75348 B, 1439x1709) Thumbnail displayed, click image for full size.
75348

Ну вот, гораздо лучше. Основной функционал вроде работает. Долго ковырялся над тупой ошибкой.

>>201022

>Разрежь код на функции с понятным названием.

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

>> No.201169  
File: 1652479021891.jpg -(2398078 B, 2659x3513) Thumbnail displayed, click image for full size.
2398078

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

Другая проблема концептуальная. Писать свое приложение под андроид это наверное весело, но долго и потребует установки соответствующей SDK. Но за это время интерес может угаснуть, поэтому я склоняюсь поставить pushbullet или slack как в статье:
https://www.geeksforgeeks.org/python-web-app-to-send-push-notification-to-your-phone/
И управиться за пару выходных.
Вопрос в том, стоит ли писать своё приложение, когда перед носом лежит пара простых решений?
Тем более требуют времени другие важные дела, которые реально займут много времени, и уже не терпят отлагательств.

>> No.201177  

>>201169
Очень хорошая картинка.

>> No.201180  

>>201169

> И вот дилемма. В некоторых случаях пропускать постинг или пропускать новые посты за пару минут после посещения.

Почему бы не забить на tcpdump вообще и не обрабатывать свои посты по общему принципу? Будешь получать на пару уведомлений в день больге, что тут такого?

> Вопрос в том, стоит ли писать своё приложение, когда перед носом лежит пара простых решений?

Ты же вроде pushbullet собирался использовать. С ним не срослось? Тогда как на счет любимого мессенджера?

>> No.201193  

Test

>> No.201194  

Test2

>> No.201195  
File: 1652562959598.png -(156041 B, 1080x2160) Thumbnail displayed, click image for full size.
156041

>>201180

>Почему бы не забить на tcpdump вообще и не обрабатывать свои посты по общему принципу? Будешь получать на пару уведомлений в день больге, что тут такого?

Тогда встает вопрос с обнулением постов. Но если tcpdump будет глючить может быть так и поступлю.

>Ты же вроде pushbullet собирался использовать. С ним не срослось? Тогда как на счет любимого мессенджера?

Да я чего-то на целое свое приложение размахнулся. Но все же запустил pushbullet. Буквально 20 минут и код уже работал, дольше в автостарт добавлял.

В общем, запустил все. Буду тестить. Скрины прилагаю.

З.Ы. Перебрал вчера, тяжко.

>> No.201196  
File: 1652563064484.png -(127042 B, 1080x2160) Thumbnail displayed, click image for full size.
127042
>> No.201197  

>>201195

> Тогда встает вопрос с обнулением постов.

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

>> No.201198  
File: 1652567945476.jpg -(180690 B, 850x1206) Thumbnail displayed, click image for full size.
180690

>>201197
Можно, но пока и с tcpdump работает нормально. По крайней мере сообщение о твоем посте я получил. Конечно, нужно больше времени, что бы все проверить. Но пока все работает как задумано изначально.

>> No.201202  

Возможно немного не по теме, но раз такой тред то спрошу: как сейчас можно оплачивать что-либо с интернет магазинов? Про посредников знаю, но не хочется терять 5/10% за выкуп товара этими же посредниками, а выкупать его самостоятельно. Такая возможность сейчас имеется?

>> No.201203  

>>201202
Крипта.

>> No.201213  

>>201203

А что, есть проблема с конвертацией на вебмани и оплатой? Основная проблема в доставке из европы и сша.

>> No.201214  

>>201213
Вопрос был про оплату ведь.

>> No.203139  
File: 1662318582891.gif -(769 B, 23x15) Thumbnail displayed, click image for full size.
769

>>200256
Как успехи, работает твоя уведомлялка как и задумывалось?

>> No.203153  
File: 1662412226444.jpg -(1191084 B, 1176x1736) Thumbnail displayed, click image for full size.
1191084

>>203139
Да, все работает отлично.
Увидел твое сообщение почти сразу, другое дело иногда просто нет времени ответить (сегодня весь вечер менял SSD в ноуте).
Да и из-за треда про "низкую скорость постинга" сумма постов перевалила за 500 (бесплатный придел для pushbullet в месяц). Так что пришлось посидеть недельку без уведомлялки. Уже было как-то не удобно и не привычно.

А так из проблем.
Однажды отвалилась из-за библиотеки самого pushbullet. Починилось добавлением автозапуска при падении.
Пару раз летел сервер, причем без какой либо возможности восстановить данные. Провайдер бэкапы не поддерживает.
Интервал был в две недели. Начал грешить на tcpdump. Работает без остановки две недели, а потом делит какой-нибудь указатель на ноль. Поправил код. Теперь рестартую tcpdump каждые 24 часа. После этого уже полтора месяца как нормальный полет.

Вообще рекомендую очень удобно.

>> No.203159  

>>203153
А у тебя он не посылает текст сообщения, или уже допилил эту фичу?
Я вот не стал заморачиваться с отслеживанием последнего захода. Написал просто парсер постов, вытаскивает и загружает текст и картинки с новых постов, день потестил, вроде даже работает, насчет работоспособности без недочетов не совсем уверен.
Основывается также на номере последнего поста и написан на питоне. Могу поделиться, если тебе он пригодится.

>> No.203173  
File: 1662490023830.jpg -(99801 B, 1024x768) Thumbnail displayed, click image for full size.
99801

>>203159

>А у тебя он не посылает текст сообщения, или уже допилил эту фичу?

Нет, но я как бэ этого от него и не требую. Количества новых постов мне вполне достаточно. А что бы прочитать пост я запускаю браузер. Ну и смотрю пост в контексте треда. (Единственное, в твоем варианте можно прочесть удаленные посты.)

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

Так же как и у меня крутится на сервере и использует pushbullet, или нашел решение по интересней?

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

>Могу поделиться, если тебе он пригодится.

Если хочется поделиться то выкладывай, я с удовольствием посмотрю. Могу и свою крайнюю версию выложить.
Но а так считаю свою уведомлялку законченной (не без широховатостей, конечо) и уже думаю о других вещах :3

>> No.203184  

>>203173

> Так же как и у меня крутится на сервере и использует pushbullet, или нашел решение по интересней?

Пока что это просто парсер, который я запускаю с домашнего компьютера, мне изначально было больше интереснее вытаскивать именно содержимое поста, а не фокусироваться на уведомлениях, он качает нулевую, вычисляет последний пост (кстати не самым лучшим образом, кмк), парсит его по номеру, качает картинку и пишет в локальный файл текст поста. Я так до конца и не решил что с этим парсером делать дальше.
Есть некоторые опасения у меня насчёт f strings в нём, там же может eval произойти если кто-то в пост код напишет, или я что-то не так понимаю?

> Если хочется поделиться то выкладывай, я с удовольствием посмотрю.

Держи вообщем : https://0x0.st/ofBr.py
Наверное, единственная функция, которая будет тебе хоть как-то полезна отсюда, это def parse_post

> Могу и свою крайнюю версию выложить.

Давай.

> и уже думаю о других вещах :3

Что за вещи такие?

>> No.203211  
File: 1662654837396.jpg -(101714 B, 678x1200) Thumbnail displayed, click image for full size.
101714

>>203184
Вот мой код:
https://0x0.st/ofpi.py
Воспользовался твоим же файлообменником, в CMD тоже работает.

Код у тебя аккуратнее моего. Все в функциях, и минимальное тело самой программы. У меня же ни одной функции нет, но код меньше 200 строк, не заблудишься. Для работы с html кодом у тебя отдельная библиотека, я же просто написал регэкспы. А также у меня print по каждому чиху, поскольку я им отлаживался (писал в notepad++, запускал на сервере, смотрел консоль).

>Есть некоторые опасения у меня насчёт f strings в нём, там же может eval произойти если кто-то в пост код напишет, или я что-то не так понимаю?

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

>Я так до конца и не решил что с этим парсером делать дальше.

Если есть 5 - 10 свободных баксов в месяц то арендуй сервер. И скрип свой будешь крутить и VPN настроишь и тимспик для друзьяшек подымишь.

>Что за вещи такие?

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

>> No.203234  

>>203211

> А также у меня print по каждому чиху, поскольку я им отлаживался (писал в notepad++, запускал на сервере, смотрел консоль).

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

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

Проверил, просто прописав в хтмл блок с постом p=3, eval'a не произошло, прилетел тип стринг, так что наверное норм будет.

> Если есть 5 - 10 свободных баксов в месяц то арендуй сервер. И скрип свой будешь крутить и VPN настроишь и тимспик для друзьяшек подымишь.

У меня есть сервер, друзьяшек только нету, изначально в скрипте вызов был через

html_page = requests.get('https://nowere.net/b', proxies=dict(https='socks5://127.0.0.1:1080'))

Просто писать и дебажить всё-таки удобнее через иде с дебаггером, простыни будет меньше и быстрее дело пойдёт. Можно конечно и через pdb, но выйдет дольше, как минимум к нему привыкнуть нужно.

Вообщем вот такой франкенштейн у меня получился : https://0x0.st/ofwr.py
Посылает и текст и пикчу в уведомление, попробуй, только пути относительные на время тестов оставил и пикчи грузит в директорию pics, которую надо создать.

>> No.203289  
File: 1662847101371.jpg -(69254 B, 640x480) Thumbnail displayed, click image for full size.
69254

>>203234
Обязательно поковыряю твой код. Сейчас немного занят, но на неделе думаю время найдется.
Вообще я не уверен что такая фича удобна, но нужно попробовать. В идеале ее хорошо бы сделать настраиваемой. Только пока не придумал как ей динамически управлять. Короче, на неделе поковыряю.

>Вообще без дебаггера?

Ну в консоль вываливается строки на которых программа свалилась. Они же видны если свалится демон при проверке статуса. Так что не совсем в слепую.

>Рекомендую pycharm

Я почему-то думаю в сторону VS Code... просто лень ставить IDE для одного языка, которая потом будет пылиться. А то я так и HAXE изучать брался, хотел на нем диаграмму Вороного реализовать. Но на это не находилось времени. А потом и вообще забросилось. Как и множество из моих начинаний. Но могу вернуться к задаче и через несколько лет.

>кстати он очень наругался на твой код

warning не error, так что это еще ни о чем не говорит... Хотя я те ворнинги не видел и, конечно, хорошо когда их вообще нет :3

>я даже боюсь его редачить, чтобы не сломать.

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

Если есть еще идеи по поводу скрипта то предлагай!

>> No.203290  
File: 1662854897085.jpg -(71808 B, 1379x274) Thumbnail displayed, click image for full size.
71808

>>203289

> warning не error

Справедливо.

> Хотя я те ворнинги не видел и, конечно, хорошо когда их вообще нет :3

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

> Они же видны если свалится демон при проверке статуса

А у тебя уже есть какой-то поттерд демон под это?

> Если есть еще идеи по поводу скрипта то предлагай!

Вообщем погоняв скрипт, обнаружил что процессор греется на пару градусов больше, чем должен, глянул в top. А там 100% cpu по потоку, всё указывает на то, что скрипт большую часть времени бесполезно что-то там вычисляет, вместо того чтобы, например, просто уснуть. У тебя такого нету на сервере?
А ещё он же ведь должен при заходе на сайт сбрасывать счетчик вывода вот этой линии 7 new posts , которая после Max no цифры?

> В идеале ее хорошо бы сделать настраиваемой. Только пока не придумал как ей динамически управлять.

А вообще можно его сделать с параметрами по типу python3 nowere.py --text-only или --text-image или --notif, ну на что фантазии хватит, обрабатываемыми внутри скрипта, и засунуть в демон, оттуда и рестартить как хочется.
Только переписать бы для начала, чтобы не молотил впутсую, вообщем франкенштейна промежуточного переделать во что-то гармоничное и более упрощённое, прежде чем аргументы обрабатывать начинать.

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

>> No.203312  
File: 1662999850718.jpg -(199875 B, 1400x879) Thumbnail displayed, click image for full size.
199875

>>203290
Вообще, готов переделать свой код во что-то более менее читаемое и интегрировать твой код. Добавить фичей и написать полный гайд по настройке. Если это нужно хотя бы 2,5 анонам.
Можно даже попробовать написать андроидное приложение.

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

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

>А у тебя уже есть какой-то поттерд демон под это?

Да, скрипт добавлен в systemctl

sudo systemctl --force --full edit Nowere_polling.service
#----------------------------------
[Unit]
Description=<Nowere.net polling>
After=network.target
[Service]
ExecStart=/usr/bin/python3 /root/py_prog.py
StartLimitIntervalSec=500
StartLimitBurst=5
Restart=on-failure
RestartSec=5s
[Install]
WantedBy=multi-user.target
#-----------------------------------
sudo systemctl daemon-reload
sudo systemctl enable Nowere_polling.service

Для работы pushbullet нужно там зарегистрироваться, получить токен, установить их приложение на телефон. Ну и что-бы работал скрип поставить соответствующую библиотеку:

pip install pushbullet.py
>Вообщем погоняв скрипт, обнаружил что процессор греется на пару градусов больше, чем должен, глянул в top. А там 100% cpu по потоку, всё указывает на то, что скрипт большую часть времени бесполезно что-то там вычисляет, вместо того чтобы, например, просто уснуть. У тебя такого нету на сервере?
>А ещё он же ведь должен при заходе на сайт сбрасывать счетчик вывода вот этой линии 7 new posts , которая после Max no цифры?

Лично нагрузку не мерял, но догадываюсь что скрипт прожорлив. Он засыпает в лучшем случае только на 500 миллисекунд, да и подроцесс tcpdump постоянно молотит весь сетевой трафик. Такая низкая задержка чтобы не упустить вывод tcpdump. Но с этими параметрами можно, конечно, поиграть.

>А вообще можно его сделать с параметрами по типу python3 nowere.py --text-only или --text-image или --notif, ну на что фантазии хватит, обрабатываемыми внутри скрипта, и засунуть в демон, оттуда и рестартить как хочется.
>Только переписать бы для начала, чтобы не молотил впутсую, вообщем франкенштейна промежуточного переделать во что-то гармоничное и более упрощённое, прежде чем аргументы обрабатывать начинать.

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

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

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

tcpdump должен быть запущен с той стороны откуда идет непосредственный запрос на новерь. Т.е. если используешь VPN то tcpdump должен быть запущен на VPN сервере, если выходишь непосредственно со своего копьютера (без прокси и VPN) то tcpdump нужно запустить на этом компьюторе.

>> No.203344  

>>203312

>Вообще, готов переделать свой код во что-то более менее читаемое и интегрировать твой код. Добавить фичей и написать полный гайд по настройке

Сейчас попробовал начать рефакторинг кода, как-то туговато пошло.

>Можно даже попробовать написать андроидное приложение.

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

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

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

>Для работы pushbullet нужно там зарегистрироваться, получить токен, установить их приложение на телефон. Ну и что-бы работал скрип поставить соответствующую библиотеку: pip install pushbullet.py

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

>Лично нагрузку не мерял, но догадываюсь что скрипт прожорлив. Он засыпает в лучшем случае только на 500 миллисекунд, да и подроцесс tcpdump постоянно молотит весь сетевой трафик. Такая низкая задержка чтобы не упустить вывод tcpdump. Но с этими параметрами можно, конечно, поиграть.
>Да и вообще, сдетать tcpdump опциональным (так как он не всегда работает хорошо и не всем нужен, а ресурсы жрет) просто звянькать новое сообщение без номера. Ну и твою фичу с картинками тоже в опцию. Можно еще подумать над фичами, например другой тип оповещений, ну и т.д.

Я так понял он просто вытягивает визиттайм? Как-то работает странно, когда просто захожу на нулевую не срабатывает, надо именно по номеру последнего поста зайти в урле, кликнув на него. И все равно дальше выдает старое количество постов, пока кто-нибудь не запостит еще один пост. Наверно где-то не допилен кондитион.

>tcpdump должен быть запущен с той стороны откуда идет непосредственный запрос на новерь. Т.е. если используешь VPN то tcpdump должен быть запущен на VPN сервере, если выходишь непосредственно со своего копьютера (без прокси и VPN) то tcpdump нужно запустить на этом компьюторе.

Не обязательно на сервере, просто запустил на компе скрипт с tun0, а не ens33, и заработало, правда с проблемами выше. Но суть понял уже, просто отладить с компа удобнее опять же.

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

Во, вот так или же системде подсовывать аргументы при рестарте а он дальше прокинет и обработает уже сам скрипт.

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

>Он засыпает в лучшем случае только на 500 миллисекунд

Вот эту загадку от жака фреско я не смог решить за 30 секунд, всмысле когда крашится системд его через 500 рестартит? Потому что в коде while true не имеет ни одного break и последние строчки просто не досягаемы для интерпретатора.

Бтв, серваки до 10 долларов это же 1-2 ядра максимум и если с двумя еще хоть как-то то вот с одним запускать такую прожорливость tcpdump'a очень не очень. У тебя помимо скрипта же еще что нибудь скорее всего запущено, не подлагивает прокси или впн или тс сервак или что еще там у тебя?

>> No.203346  
File: 1663100612015.jpg -(96881 B, 640x710) Thumbnail displayed, click image for full size.
96881
while torsocks curl -sI https://nowere.net/b/ | grep -i -e '^Last-Modified' -e '^Content-Length'; do date +..%m-%d\ %T; sleep 1800; done
>> No.203376  
File: 1663191464968.jpg -(155481 B, 720x1000) Thumbnail displayed, click image for full size.
155481

>>203344

>Сейчас попробовал начать рефакторинг кода, как-то туговато пошло.

Ты только не слишком торопись. Главное не скорость, а желание. А то мне фана не останится. Да и в целом неплохо бы разделить задачи.
Правда выдалось 1,5 свободных дня, но мне было слишком лень что-то делать. Но в выходные ночью обязательно засяду за это дело (не знаю на счет пятницы ибо буду пьян).

>Можно даже попробовать написать андроидное приложение.
>Вот это было бы неплохо, а как ты его представляешь себе в реализации?

Ну можно написать что-нибудь к примеру на JAVA, или пофигу на чем... только не слишком извращенном (я все равно не мастер ни в одном).
А насчет сообщений есть такая штука как FCM:
https://firebase.google.com/docs/cloud-messaging/send-message#python_1

> Только вот юмора не понял, зачем несколько раз открывать файл в нескольких режимах, а потом просто инициализировать переменные? Можно же просто их инициализировать и сказать что-то типо если нету файла создай и запиши туда это, иначе считай.

Ну там в начале и проверяется, что файл существует. Если нет то создается дефолтный. А дальше стандартная работа с чтением. Вообще я открываю файл, делаю что надо (читаю, пишу), и сразу закрываю. Чтобы если программа рухнет, то файл не повредился. Не знаю на сколько это правильно.

>Я так понял он просто вытягивает визиттайм? Как-то работает странно, когда просто захожу на нулевую не срабатывает, надо именно по номеру последнего поста зайти в урле, кликнув на него. И все равно дальше выдает старое количество постов, пока кто-нибудь не запостит еще один пост. Наверно где-то не допилен кондитион.

Не знаю, я делал под себя. Попробуй просто запустить в консоли

command = """addr=$(host nowere.net | awk '/has address/ {print$4}');
addr="dst ""${addr}"" and (port 80 or port 443)";
tcpdump -i eth0 -tttt -nn "${addr}" -l """

И по-заходи на новерь, проверь когда будет срабатывать.

>Потому что в коде while true не имеет ни одного break и последние строчки просто не досягаемы для интерпретатора.

предпоследняя строчка

time.sleep(0.5)

и она срабатывает

>Бтв, серваки до 10 долларов это же 1-2 ядра максимум и если с двумя еще хоть как-то то вот с одним запускать такую прожорливость tcpdump'a очень не очень. У тебя помимо скрипта же еще что нибудь скорее всего запущено, не подлагивает прокси или впн или тс сервак или что еще там у тебя?

Как ни странно у меня все срабатывает и ничего не тормозит. Именно по этому критерию и оценивал.

>>203346
Твой скрипт не работает и в принципе бесполезен. Но спасибо за идею также оценивать Last-Modified. Если произошло изменение Last-Modified и нового поста не появилось, то скорее всего Уцухо долбанул полкой.

А на счет пика. Если бы я был бы жиробасом, то просто сел бы на спинку, а ноги поставил на сидушку. Лайфхакер 80 левел.

>> No.203462  

>>203376

>Ты только не слишком торопись. Главное не скорость, а желание. А то мне фана не останится. Да и в целом неплохо бы разделить задачи. Правда выдалось 1,5 свободных дня, но мне было слишком лень что-то делать. Но в выходные ночью обязательно засяду за это дело (не знаю на счет пятницы ибо буду пьян).
>Ну можно написать что-нибудь к примеру на JAVA, или пофигу на чем... только не слишком извращенном (я все равно не мастер ни в одном).
>А насчет сообщений есть такая штука как FCM: https://firebase.google.com/docs/cloud-messaging/send-message#python_1

Да неплохо было разделиться, я про джаву знаю чуть менее чем нихуя, как и про разработку под андроид. Но если прямо так нету времени или не хочется, то заставлять себя не надо, не знаю что на меня за порыв такой нашел поговнокодить и сколько еще это продлится. Файрбейз походу удобный, под него надо приложение писать на андроид самому? Бтв автоперевод страницы очень уместен в переводе названий: Ява ОТДЫХАТЬ Питон Идти. Хз почему он вообще срабатывает.

>Ну там в начале и проверяется, что файл существует. Если нет то создается дефолтный. А дальше стандартная работа с чтением. Вообще я открываю файл, делаю что надо (читаю, пишу), и сразу закрываю. Чтобы если программа рухнет, то файл не повредился. Не знаю на сколько это правильно.

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

>Не знаю, я делал под себя. Попробуй просто запустить в консоли И по-заходи на новерь, проверь когда будет срабатывать

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

>предпоследняя строчка
>time.sleep(0.5)
>и она срабатывает

Проблема была походу в пайчарме, я скопировал текст и он на 3 ласт строках не подцепил инденты питона. Тоже уже исправил, теперь ничего не грузит и ничего не дудосит. Заодно арги прописал на обработку ну и попробовал с системд запускать с ними, работает, можно легко управлять передавая в демон нужный режим работы. Куда только выложить не знаю, чтоб инденты не зафакапить. У тебя нормально скорировалось?

>> No.203550  
File: 1663373982878.gif -(67039 B, 710x600) Thumbnail displayed, click image for full size.
67039

>>203462
Скидывай код как есть. Я еще ничего не гонял. Мне не удобно отлаживать код, поскольку линукс у меня только на сервере.
Сейчас как дурак крутил с пьяну глазу код туда сюда.
Думал над структурой, может быть что то в духе:
Data (для текущих данных), prog (сама программа), lib (папка с питоновыми функциями), config (файл конфигурации).
Мыслей больше, но они несформированные.
Вообще хорошо составить что-то типа ТЗ для тебя самого, это пол дела на самом деле. Как-нибудь достану блокнот, набросаю псевдокод.
Короче, в выходные буду заниматься этим кодом, в будни своими делами.
Если хочешь можно вообще git завести, но я в этом не особо мастер. Будет поводом разобраться.

>> No.203551  
import argparse
import datetime
import os.path
import re
import subprocess
import sys
import time
import urllib
import urllib.request
from urllib.error import URLError, HTTPError
from lxml import etree
from pushbullet import PushBullet
def initial_arg():
argparser = argparse.ArgumentParser(description='nowere.py --param')
argparser.add_argument('--notif', help='Notify about new posts after last visit only', action='store_true')
argparser.add_argument('--text-only', help='Send notification with post text only', action='store_true')
argparser.add_argument('--text-image', help='Send notification with post text and image', action='store_true')
	start_arg = None
args, unknown = argparser.parse_known_args()
if len(unknown) != 0: # еррор кондишион и выход, непонятные арги
print(f'Unknown args {unknown}')
argparser.print_help(sys.stderr)
sys.exit(1)
	if (len(sys.argv)) == 2:  # Проверка на один единственный арг, первый само имя скрипта
for arg in vars(args): # перебор и поиск введенного арга
if getattr(args, arg):
start_arg = arg
print(f'Starting arg is --{start_arg}')
break
else:
start_arg = 'text_only'
print(
f'Starting arg is --{start_arg}') # сработает без аргументов, дефолт значение, либо выдавать инфо и выходить, нижние две строки
# argparser.print_help(sys.stderr)
# sys.exit(1)
del argparser, args, unknown
return start_arg
def parse_post(number, text):
if Last_reported < number:
root = etree.HTML(text)
path = root.find('.//td[@id="reply%d"]' % number)
OP_post_tag = 0
if path is None:
OP_post_tag = 1
image_url = None
blockquote_mark = 0
post_text = str()
picture_path = None
if OP_post_tag == 1:
path = root.find('.//form[@id="delform"]')
for i in path.iter():
if i.attrib.get('class') == 'filetitle':
thread_name = i.text
post_text = post_text + f'New thread started, title : {thread_name}\n'
elif i.attrib.get('target') == '_blank':
if start_arg == 'text_image':
if image_url is None:
image_url = f'https://nowere.net{i.attrib.get("href")}'
image_name = image_url[-17:]
picture_request = urllib.request.urlretrieve(f'{image_url}', f'pics/{image_name}')
picture_path = f'pics/{image_name}'
post_text = post_text + f'Picture attached with post, name: {image_name}\n'
else:
continue
else:
continue
elif i.attrib.get('class') == 'omittedposts':
break
elif i.tag == 'table':
break
elif i.attrib.get('clear') == 'left':
break
elif i.tag == 'blockquote':
blockquote_mark = 1
if blockquote_mark == 1:
# TODO Comment is too long
if i.tag == 'div':
blockquote_mark = 0
post_text = post_text + 'Comment is too long for this version of the script.\n'
continue
# TODO Comment is too long
if i.text is not None:
post_text = post_text + f'{i.text}\n'
if i.tail:
i.tail = i.tail.strip('\n')
i.tail = i.tail.strip()
if i.tail:
post_text = post_text + f'{i.tail}\n'
return str(post_text), picture_path
else:
return None, None
def tcp_loop():
	tcp_loop_state = True
# ------------------------------------------
tcp_viewed = False
while tcp_loop_state:
# first iteration always produces empty byte string in non-blocking mode
line = p.stdout.readline()
if line != b'':
visit_time_string = re.search(r'\d{4}-\d{2}-\d{2} \d{1,2}:\d{1,2}:\d{1,2}\.\d*',
line.decode('utf-8')).group(0)
visit_time = datetime.datetime.strptime(visit_time_string, '%Y-%m-%d %H:%M:%S.%f')
# visit_time_list = list(map(int,re.split(':', visit_time_string)))
# visit_time = visit_time_list[0] * 3600 + visit_time_list[1] * 60 + visit_time_list[2]
			if not disable_time_start < visit_time < disable_time_end:
if not tcp_viewed:
print(visit_time_string)
tcp_viewed = True
# print(visit_time_string)
		else:
tcp_loop_state = False
return tcp_viewed
def send_notification(post_text, picture):
if start_arg == 'notif':
post_text = str(New_posts) + ' new posts'
push = pb.push_note(data, post_text)
elif start_arg == 'text_only':
push = pb.push_note(data, post_text)
elif start_arg == 'text_image':
if picture is not None:
with open(f'{picture}', "rb") as pic:
file_data = pb.upload_file(pic, f'{picture[5:]}')
push_picture = pb.push_file(**file_data)
push = pb.push_note(data, post_text)
else:
push = pb.push_note(data, post_text)
delay_period_sec = 10
Message_period_sec = 60
link = "http://nowere.net/b"
file_name = "Data_Post_No.dat"
access_token = ""
command = """addr=$(host nowere.net | awk '/has address/ {print$4}');
addr="dst ""${addr}"" and (port 80 or port 443)";
tcpdump -i tun0 -tttt -nn "${addr}" -l """
start_arg = initial_arg()
try:
file = open(file_name, 'r')
Last_viewed = int(re.search(r'Last_viewed = (\d+)', file.readline()).group(1))
Status = re.search(r'Status = "(down|up)"', file.readline()).group(1)
except Exception as e:
with open(file_name, 'w') as file:
file.write('Last_viewed = 0\nStatus = "down"\n')
Last_viewed = 0
Status = 'down'
pb = PushBullet(access_token)
data = 'Nowere'
text = ''
print('Last_viewed = ', Last_viewed)
print('Status = "' + Status + '"')
Last_reported = Max_No = Last_viewed
flag_reset_tcpdump = 0
pre_utc_dt = datetime.datetime.utcnow()
p = subprocess.Popen(command, shell=True, bufsize=-1, stdout=subprocess.PIPE)
os.set_blocking(p.stdout.fileno(), False)
start = time.time()
delay = chan_status_notified = 0
while True:
# ------------------------------------------
if time.time() > start + delay:
		disable_time_start = datetime.datetime.now()
int_time_start = int(time.time())
		request_time = datetime.datetime.utcnow()  # debug
		try:
f = urllib.request.urlopen(link) # может иметь таймаут вплоть до 30 секунд, 10 не подойдёт, начнётся дос
print(f'Request {request_time}') # debug
except HTTPError as e:
# Error_flag = True
Error_text = 'The server couldn\'t fulfill the request.\nError code: ' + str(e.code)
Status = "down"
except URLError as e:
# Error_flag = True
Error_text = 'We failed to reach a server.\nReason: ' + str(e.reason)
Status = "down"
else:
site = f.read().decode('utf-8')
# last_post = re.findall(r'<span .*<a .*No\.(\d+)</a>.*</span>', site)
last_post = re.findall(r'<span class="reflink"> <a href=".{0,100}">No\.(\d+)</a> </span>', site)
Max_No = max(list(map(int, last_post)))
Status = "up"
		if Status == 'up':
picture_send = text_send = False
post_text, picture = parse_post(Max_No, site)
if picture is not None:
picture_send = True
if post_text is not None:
text_send = True
print("Max No ", Max_No)
		disable_time_end = datetime.datetime.now()
int_time_end = int(time.time())
delay += (int_time_end - int_time_start + delay_period_sec)
	tcp_viewed = tcp_loop()
	if tcp_viewed:
if Last_viewed < Max_No:
Last_viewed = Max_No
with open(file_name, 'w') as file:
file.write(f'Last_viewed = {Last_viewed}\nStatus = "{Status}"\n')
	if chan_status_notified == 1 and Status == 'up':
chan_status_notified = 0
print('chan is UP again!')
text = 'chan is UP again!'
push = pb.push_note(data, text)
elif Status == 'down':
# Send_Message('chan is DOWN!\n' + Error_text)
if chan_status_notified == 0:
print('chan is down!\n' + Error_text)
text = 'chan is down!\n' + Error_text
push = pb.push_note(data, text)
chan_status_notified = 1
continue
	if Last_viewed < Max_No:
if Last_reported < Max_No:
New_posts = Max_No - Last_viewed
print(str(New_posts) + ' new posts')
			if text_send or picture_send:
send_notification(post_text, picture)
			Last_reported = Max_No
		with open(file_name, 'w') as file:
file.write(f'Last_viewed = {Last_viewed}\nStatus = "{Status}"\n')
	# ------------------------------------------
utc_dt = datetime.datetime.utcnow()
if (utc_dt.hour == 21) and (pre_utc_dt.hour == 20):
p.terminate()
p = subprocess.Popen(command, shell=True, bufsize=-1, stdout=subprocess.PIPE)
os.set_blocking(p.stdout.fileno(), False)
print('TCPDUMP reset')
push = pb.push_note(data, 'TCPDUMP reset')
pre_utc_dt = utc_dt
time.sleep(0.5)
p.terminate()
>> No.203552  

>>203550

>Думал над структурой, может быть что то в духе:
>Data (для текущих данных), prog (сама программа), lib (папка с питоновыми функциями), config (файл конфигурации).

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

>Если хочешь можно вообще git завести, но я в этом не особо мастер. Будет поводом разобраться.

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

Системд, если надо:

systemctl --force --full edit Nowere_polling@.service

#----------------------------------
[Unit]
Description=<Nowere.net polling>
After=network.target
[Service]
Environment="SCRIPT_ARGS=%i"
ExecStart=/usr/bin/python3 /root/nowere/main.py $SCRIPT_ARGS
#StartLimitIntervalSec=500 #старая версия системд
StartLimitBurst=5
Restart=on-failure
RestartSec=5s
[Install]
WantedBy=multi-user.target
#----------------------------------

Вызов в зависимости от аргумента:

systemctl start Nowere_polling@--text-image.service
>> No.203557  

>>203550

> Мне не удобно отлаживать код, поскольку линукс у меня только на сервере.

Жиза. Чертов мак.

>> No.203794  
File: 1663459553629.jpg -(208439 B, 442x551) Thumbnail displayed, click image for full size.
208439

test

>> No.203795  

>>203794
passed

>> No.203796  
File: 1663462310658.jpg -(35536 B, 400x400) Thumbnail displayed, click image for full size.
35536

>>203552
Запустил твой код у себя на сервере, вроде работает. Завелся не сразу, забыл установить lxml. Кстати наверное номер последнего поста тоже стоит искать через etree, поскольку сейчас с регулярным выражением можно просто запостить искомую строку в теле поста и сломать весь скрипт.

Подумал над содержанием файла Config, получилось 7-мь параметров. Думаю редактировать конфиг проще чем запускать скрипт с аргументами.

#config
#Отладочные сообщения. Допустимые значения {true | False}
debug = true
#добавить к каждому print условие
#if debug:
# print('')
# Если хочешь можно добавить уровни, типа error, warning. Так как каждый print systemctl логирует.
#Период опроса. Не менее 10 секунд, чтобы не напрягать новерь. Стандартным лучше сделать 60. Ну, или на твое усмотрение.
delay_period_sec = 10
#polling_period = 60, возможно будет более наглядным
#Способ оповещения. Допустимые значения {pushbullet | и все, позже можно добавить FCM}
Message_method = pushbullet
#PushBullet
access_token = ""
#Тип оповещения. Допустимые значения {notif | text_only | text_image}
start_arg = notif
#Message_type = notif, помоему будет более наглядным
#Использование tcpdump. Позволяет получить количество не прочитанных постов. Допустимые значения {true | False}
tcpdump_enabled = true
#Интерфейс для мониторига захода на новерь. Пример eth0, tun0, ...
tcpdump_interface = eth0
#tcpdump_interface = tun0 в твоем случае.
#В коде что-то типа этого
#command = """addr=$(host nowere.net | awk '/has address/ {print$4}');
#addr="dst ""${addr}"" and (port 80 or port 443)";
#tcpdump -i """ + tcpdump_interface + """ -tttt -nn "${addr}" -l """

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

image_name = image_url[-17:]

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

>> No.203797  

>>203796

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

Это можно сделать очень просто, положить рядом со скриптом config.py и импортить параметры из него, туда писать все эти параметры, как бы превращая внутренности сразу в код питона, такой вариант для ленивых.
А можно посложнее, прицепить какой-нибудь конфиг парсер и полноценно обрабатывать параметры с любого файла. Хотя какая разница, это же просто расширение.
Ну и initial_arg отомрёт за ненадобностью тогда, весь запуск будет зависеть от правильности этого конфига.

>Кстати наверное номер последнего поста тоже стоит искать через etree, поскольку сейчас с регулярным выражением можно просто запостить искомую строку в теле поста и сломать весь скрипт

Функция уже готова, впринципе можно заменить просто.

>Если хочешь можно добавить уровни, типа error, warning. Так как каждый print systemctl логирует

Даже хз как это на уровни делить.

>#Период опроса. Не менее 10 секунд, чтобы не напрягать новерь. Стандартным лучше сделать 60. Ну, или на твое усмотрение.
>delay_period_sec = 10
>#polling_period = 60, возможно будет более наглядным

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

>#Использование tcpdump. Позволяет получить количество не прочитанных постов. Допустимые значения {true | False}
>tcpdump_enabled = true

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

>image_name = image_url[-17:]
>Как понимаю ты берешь последние 17 символов названия картинки, но наверное здесь лучше использовать регулярное выражение, поскольку даже небольшое изменение в размерах испортит код. Не знаю, конечно, может для вакабы это не изменно, но все же...

Да, но я не видел чтобы тут картинки назывались не по этому паттерну. Вот если будет по другому, придётся переписать.
Как-то прям навоняло этой строчкой, и зачем я сзади прописал резать. Правильнее будет не с -17 а с 25, тоесть с https://nowere.net/b/src/ резать до конца. Но регэксп лучше наверное будет, хотя хз, он же вроде таким же будет, как и просто срезание. Вообщем напиши его если хочешь, я добавлю.

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

И еще заметил, я забыл добавить закрытие файла в try, допиши лучше, а то мало ли.

И лучше к вечеру выключать, а то тут вайперы приходят.

>> No.204069  

>>203796
Уперся в лимит сообщений от пушбуллет, но успел рабочий код сделать, как следует потестить не могу только.
Конфиг сделал, намного удобнее стало управлять скриптом.
Запилил так же гит, хз как с ним работать только, именно не одному а с кем то если пилить коммиты.
https://notabug.org/dovivorobushkivavshiysya/nowerenet/ посмотри на досуге, если ещё не забил на это всё.

>> No.204213  
File: 1664672223239.jpg -(39707 B, 400x400) Thumbnail displayed, click image for full size.
39707

>>204069
Зарегистрировался там. Буду разбираться с этим репозиторием. А так вытащил твой проект гитом. А потом 2 часа если не больше мучал systemctl. Он не хотел сознаваться где ошибка. Походу config.read('config.ini', encoding='utf-8') на 15-той строчке не поддерживает относительный путь при запуске через systemctl. Сейчас вроде работает с абсолютным.

А так, во вторник и четверг должен быть свободный вечер. По изучаю твой код. К выходным что-нибудь отвечу.
Блин. Потратил кучу свободного времени моделируя в матлабе и симулинке, что бы получить тривиальные результаты, которые никуда не годятся.

>> No.204219  

>>204213
Ой ёй, я совсем забыл про демона, гоменасай анон, поправил пути, работает с конфигом демона, самым первым, что ты кидал в тред. Только почему-то принты в лог не всегда кидает.
Дал тебе права на редактирование репозитория, можешь привязаться к нему через свой аккаунт и пуллить пушить, было бы неплохо проверить.



Delete Post []
Password

[/b/] [/d/] [/tu/] [/a/] [/ph/] [/wa/] [/cg/] [/t/] [/p/]