IRCaBot 2.1.0
GPLv3 © acetone, 2021-2022
#dev
/2023/06/28
~R4SAS
~orignal
~villain
@onon
&N00B
+Most2
+Xeha
+acetone
+r00tobo
+relaybot
+whothefuckami
AreEnn
KabaOS
Nausicaa
Vort
anon2
b3t4f4c3
karamba_i2p
nemiga
not_bob
poriori
profetikla
segfault
soos
tensor
tolik
un
Vort за сутки сбора данных по фейлу туннелей получился вот такой результат:
Vort для того, чтобы хоть как-то понять, что он значит, я сделал симуляцию и попробовал подогнать данные
Vort получилось, что такой результат соответствует количеству фейлов i2pd в 1.5 раза большему, чем у java
Vort да вот только есть проблемка
Vort связанная с моей методикой
Vort я не знаю, в какой пропорции java и i2pd используется для туннелей
Vort вполне может быть, что по результатам того профилирования, которое уже реализовано, как раз в 1.5 раза чаще i2pd узлы и попадаются :)
Vort но при этом мне кажется, что какого-либо массового перекоса не нашлось и этот результат в какой-то мере важен
Vort такс. предыдущий сбор (фейлов в средине) я завершил. поставил новый сбор - фейлов при создании (то есть, разбивку TCSR)
Vort сразу могу сказать, что таймаутов намного больше, чем непосредственно фейлов. а вот как они распределяются по типам узлов (i2pd/java) - это ещё предстоит узнать
weko Vort: так ты смотри не количество а процент
weko Процент фейлов из всех туннелей для i2pd и javai2p
Vort да я это и смотрел. наверно криво выразился
Vort короч с анализом прошлого результата у меня что-то пошло не так )
Vort weko: а, я понял, о чём ты
Vort отношение фейлов и не-фейлов?
weko ну да
Vort тоже можно сделать. но пока что посмотрю на разбивку по типам фейлов
Vort кто больше таймаутов выдаёт, а кто - больше чисто фейлов
Vort ну или одинаково будет
Vort промежуточный результат: за 25 минут аптайма таймаутов в 16 раз больше чем чисто фейлов
Vort weko: короч я понял, что без логирования успехов толку мало. нужна база как минимум. сейчас буду переделывать и перезапускать
weko конечно
Vort да и разбивка успехов по типам (i2pd/java) тоже не помешает сама по себе
weko я говорю нужна грамотная система
Vort ну то на будущее
weko скорее всего существует протокол для таких целей - отправка информации о событиях
weko с клиент на сервер при чём
Vort я видел подобное, но глубоко не влазил
Vort наверно надо начинать поиски с Grafana
Vort это визуализация, но она же не сама по себе
Vort блин,в i2pd успешные и неуспешные туннели, похоже, по-разному хранят хопы :/
Vort вот такой код логирования получился: github.com/Vort/i2pd/commit/4a52c43d57a31dc3e24bb3fa3cb4f58e6fc5278a
Vort там мелкие косяки, но пофиг
orignal таймаутов на построение?
Vort да, последний сбор данных чисто по построениям
Vort можешь последнюю ссылку глянуть, куда я логирование дотыкивал
Vort сейчас за 2 часа аптайма чуть лучше стало - всего в 10 раз больше таймаутов )
orignal то есть где то дропается
Vort ну на это же ещё моя сеть может влиять. но маловероятно что кто-то ещё захочет сбор устанавливать (
orignal так проверь с 1 хопом
Vort "то есть где то дропается" - пока что по графикам подозрение на java узлы. но пока что ещё мало данных набралось
Vort "так проверь с 1 хопом" - что именно проверить?
orignal соотношение отлупов и таймаутов
Vort ок, сейчас
Vort 1 хоп: 11 таймаутов / 2 фейла
orignal это очень интересно
Vort 2 хопа: 396 таймаутов / 16 фейлов
orignal почему вообще происходит таймуат?
Vort 3 хопа: 450 таймаутов / 71 фейл
orignal ну например может просто не удалось соединиться
polistern Vort, погляди на influx, если нужно клиент->сервер, или на prometeus, если метрики должен сам сервер забирать. Можно ещё в graphite, там матаппарат лучше.
Vort polistern: это больше weko интересовало. я пока что "вручную" данные собираю и меня это устраивает
polistern weko, ^^^
hypn_ я ещё с какимто агрегаторов возился
hypn_ на z
hypn_ zabbix
hypn_ данных с кластера
hypn_ не помню его scope
Vort "<~orignal> ну например может просто не удалось соединиться" - то есть, как пример - узел просто оффлайн?
polistern Ну не, заббикс больше именно про мониторинг.
Guest59958 orignal: Где i2p принимает подключения и где посылает?
Guest59958 Э... А какого черта я гость?
Vort или когда узел оффлайн, то туннель даже не начинает строиться?
orignal в NTCP2 и SSU2
Vort weko: глянь через major, тут ответы про сбор лога в чате были
orignal Vort так а как ты знаешь оффлайн он или нет?
orignal ты создаешь запрос на тоннель
orignal пытаешься его отослать а если не удается то просто дропапается сообщение
segfault В libi2pd?
Vort orignal: то есть, в случае с 1 хопом - создаётся запрос, и если нету транспорта, то пытается создаться транспорт, а если не создался, то туннель отваливается по таймауту?
orignal именно так
orignal транспорт просто дропает сообщение не зная его природы
orignal можно конечно присобачить к кажому I2NP сообщению коллбэк что делать если дропанулось
orignal но зачем?
Vort плохо понимаю, о каких дропах речь :(
Vort если 1 хоп, то надо же напрямик к узлу подключиться?
Vort видимо, моих знаний для анализа недостаточно
orignal правильно
orignal а если не удается подключиться?
orignal запрос будет сидеть в очереди и потом дропнется
Vort а, понятно
Vort это можно даже и логировать
Vort на 1 хопе проще всего отлаживать
orignal так о чем и речь
orignal на нем проще понять причины
orignal и в общем то найти виновника
segfault orignal: какой тип для b32 адреса?
orignal IdentHash
segfault А в каком хедере он?
orignal а grep-ом поискать тебе религия не позволяет?
segfault А всё. Нашёл
segfault origanl: А как в i2p читаются конфиги? Есть какой-то объект, у которого можно спросить что-то из конфигов?
Vort по названию параметров просто поиск делаешь и всё
Vort по всем исходникам )
Vort там будет видно, где это название упоминается
orignal заебал
orignal template<typename T>
orignal bool GetOption(const char *name, T& value)
Vort вот я вписал в поиск "logclftime" и сразу нашёлся Config.cpp
orignal вот этой функцией
orignal которая в свою очередь дергаем boost::program_options
Vort и в Daemon.cpp нашлось: bool logclftime; i2p::config::GetOption("logclftime", logclftime);
Vort вот и пример
Vort поиск - полезная штука :)
segfault Спасибо
segfault Я просто думал, что конфиги читаются 1 раз при старте, а потом хранятся в памяти.
segfault И перечитаваются, когда об этом просят
orignal так оно и есть
Vort только не перечитываются вроде
orignal boost::program_options читает при старте и дальше из памяти берется
segfault origanl: у этой функции нет ограничения на длину строки? Можно в i2pd.conf будет присать 50 b32 адресов через запятую?
orignal хоть миллион
segfault origanl:
orignal это ж std::string
segfault Окей
segfault origanl: А строку с b32 адресом (и подписью ".b32.i2p") какой функцией можно сконвретить в IdentHash ?
segfault orignal:
polistern segfault, FromBase32 разве нет там? Что за ide у тебя, что она тебе никак не подсказывает?
segfault У меня нет ide
polistern В блокноте сидишь?
polistern Так настрой емакс, отлично он всё показывает.
segfault Я потом настрою, когда буду за нормальным ПК
segfault Сейчас я пишу на коленке
polistern Не хочешь сам настраивать - подключи doomemacs
orignal отвали а?
orignal если ты не в состоянии посчмотреть как это сделано в других местах
orignal тогда лучше и не пытаейся
orignal но перестань заебывать меня по каждой ерунде
segfault Хорошо
segfault polistern: Я его когда-то давно пробовал. Он меняет хоткеи, а мне это не нравится
polistern Там просто отключи evil мод и всё, я в нём пробовала сидеть.
Vort решил я посчитать TCSR отдельно по каждому количеству хопов. вот такое получилось:
Vort TCSR[1]: 0.927 (S: 255, T: 17, F: 3, T/F: 5.7)
Vort TCSR[2]: 0.210 (S: 186, T: 664, F: 35, T/F: 19.0)
Vort TCSR[3]: 0.355 (S: 432, T: 673, F: 113, T/F: 6.0)
Vort 2 хопа у меня - это только exploratory, они видимо через слабые узлы идут
Vort какой вывод из этого делать - пока что не знаю. на всякий случай выложил
segfault void NTCP2Session::HandleSessionRequestReceived И другие методы как-то очень странно сделаны. Если что-то не получилось и был вызван Terminate(), то зачем ветка else? Всё, что после это блока if -- и так ветка else. В результате там
segfault какая-то кошмарная вложенность.
segfault Даже с очень мелким шрифтом оно не влезает в экран, либо шрифт настолько мелкий, что читать его невозможно.
segfault Ну как невозможно, возможно
segfault Просто второй таб не открыть :)
segfault orignal: А вот сейчас, я думаю, вопрос уже не пустяковый. В каком конкретно методе делать проверку на заблокированность b32? Чтобы не было потом, что программа колом стоит. Где можно безопасно
segfault отреджектить запрос на подключение и где можно адекватно прекратить попытку подключения? Надо ли писать о том, что какое-то соединения откланено, в логи? Не знаю нужно ли, но интересно почитать
segfault логику работы класса NTCP2. Что скрывается за BobX, AliceX и т.п.? Подскажи где это можно вычитать. В статьях ацетона, я что-то такое не видел. Спасибо.
segfault P.S. Класс для "черного списка" я уже написал. И он балополучно собирается вместе с проектом :)
segfault Я вот попробовал поправить конструкцию if-else
segfault Не проверял, но должно по прежнему работать.
polistern segfault,
Vort решил потыкать один из пиров, который раз выдал таймаут. и обнаружил трассировку на 30 хопов (traceroute) O_o
Vort 71.193.40.167
Vort ну и 200мс пинг. не знаю, связано ли это, наверно нет. но такого я ещё не видел :)
Vort сделал 3 скана nmap -p 14904 71.193.40.167
Vort Nmap done: 1 IP address (1 host up) scanned in 1.12 seconds
Vort Nmap done: 1 IP address (1 host up) scanned in 0.64 seconds
Vort Nmap done: 1 IP address (1 host up) scanned in 2.51 seconds
Vort надо будет глянуть какие таймауты в i2pd
Vort перепроверил через Wireshark - по 2 секунды отвечать на SYN для этого узла - норма
Vort узел i2pd, флаги XR
orignal значит очередной умник через впн
orignal надо в профилировщике такие банить
orignal считаю что если коннект больше полсекунды то такому узлу бан
segfault origanl: Подскажешь ответ на прошлый вопрос?
orignal нет
orignal я тебе по моему ясно сказал
orignal если ты не понимаешь как оно вообще работает зачем лезешь?
segfault Потому что самому эта фича нужна
segfault Там осталось писать буквально пару if
orignal а мне некогда
segfault Ладно, я тогда потом PR кину с классом для блокировки
segfault А потом допишу, когда разирусь
orignal для входящих надо проверять при получении SessionConfirmed
orignal и имей ввиду что если там какая нибудь хуйня типа вычитывания параметра и проход по этому списку при каждом соединении то такое однозначно фтопку
orignal будет добр сделать unordered_set
orignal и сделай это в классее TransportSession
Vort 71.193.40.167 - это IP крупного провайдера - Comcast, VPN тут не при чём скорее всего
orignal почему?
orignal ну него там сидит впн а чувак через него
orignal впн же поднять можно где угодно
orignal в любом случае такое вот надо банить
orignal реально умники сидящие через тор и впн заебали
Vort лучше причину устранить вначале. скорее всего, узел просто перегружен, а i2pd пофигу
orignal я думал если перегружен то дропает соединение
orignal а зачем устранять причину,
orignal нам ведь важно что отвечает медленно
orignal а не по какой причине
Vort сеть его перегружает - это проблема
Vort то есть, туда пихается больше, чем может влезть
Vort ну и решается она как я понимаю на двух уровнях
orignal ну вот такие узлы надо исключать из тоннелей
Vort один из вариантов - отпрофилировать, верно
orignal увидели большое время коннкета до свидания
Vort но второй вариант - ставить флаг перегруза
orignal и как ты определишь перегруз?
Vort надо конечно найти какой-то узел с такой фигнёй, который можно подебажить. иначе сложно
Vort как вариант - по потерям пакетов
Vort ещё вариант - по пингу
Vort чётких идей у меня нету
Vort и подозреваю, что это сложно
Vort но надо о второй стороне проблемы не забывать всё равно
orignal я считаю что не надо заморачиваться а просто такие узлы исключать
Vort одно другому не мешает
orignal помечать как медленные
orignal и на 15 минут или примерно так исключать
orignal а вообще пора объявить крестовый поход против тор и впн
orignal иначе так все и будет тормозить
orignal то есть сидеть он так может но транзита хрен дождется
Vort могут быть доли процента, мало на что влияющие
Vort я считаю, что нужен инструмент, которым можно пройтись и потыкать все узлы
Vort потом построить гистограмму, допустим, пингов
Vort по ней будет виден и масштаб проблемы и куда границу ставить надо
weko [13:11:21] <Vort> какой вывод из этого делать - пока что не знаю. на всякий случай выложил
weko По логике, раз 1 хоп - 0.927, значит 3 хопа должно быть 0.859 (0.927 ^ 3), фактически гораздо ниже. Не могу сказать, что знаю все различные моменты 1-го и 3-х хопов, но точно вот что. При 1-хопе с пиром гарантированно есть созданный транспорт, а вот при 3-х хопах между 1 и 2, 2 и 3
weko маловероятно что транспорт создан. Но однако это не свидельствует о том, что дело в создании транспорта, ведь в случае 1-хоп туннеля у нас есть гарантия что пир в сети, а с 3-хопами у нас нет такой гарантии про 3 пира
Vort weko: хехе. я тоже о степени тройки думал сказать
Vort видимо результат 3х хопового TCSR состоит из 1хопового у себя * 1хоповый у 1 соседа * 1хоповый у 2 соседа
Vort то есть, я предполагаю, что у "соеседей" TCSR в среднем хуже, чем у меня
Vort ну или таки что-то не понимаем
Vort "в случае 1-хоп туннеля у нас есть гарантия что пир в сети" - точно? у меня просто сомнения есть
weko [17:38:27] <9d54b3orignal> а зачем устранять причину,
weko Важно лишь в случае, если это баг. Если это баг, а узлы начнут профилироваться, будет 6не хорошо
Vort просто в таком случае таймауты на 1 хопе - это большая странность
Vort weko: 1. узел на себя берёт больше, чем надо. 2. сеть в узел пихает больше, чем тот может переварить
weko [17:45:53] <Vort> я считаю, что нужен инструмент, которым можно пройтись и потыкать все узлы
weko [17:46:12] <Vort> потом построить гистограмму, допустим, пингов
weko О чём я уже говорил)))
weko Пинги, скорость. Потом корреляцию с реализацией, флагами, версией протокола, мб даже странами и кластерами
orignal баг в чем?
orignal в TCP?
weko [17:55:41] <Vort> "в случае 1-хоп туннеля у нас есть гарантия что пир в сети" - точно? у меня просто сомнения есть
weko Лось говорил что первый хоп берётся из созданных транспортов. Хотя у меня до сих пор сомнения по этому решение и я даже отмечал потенциальный способ облегчить атаку
Vort а кстати не факт что я словил таймаут на том узле через NTCP2. мог ведь и через SSU2. или не мог?
orignal не всегда
weko [17:56:31] <Vort> просто в таком случае таймауты на 1 хопе - это большая странность
weko Так их вроде и не так много
orignal может браться может нет
Vort ну вот когда не берётся, значит, и таймауты лезут. наверно
Vort "Так их вроде и не так много" - да, но всё равно лучше, чтобы не было. ну или хотя бы понять, что за хрень происходит
weko [18:00:00] <orignal> баг в чем?
weko [18:00:04] <orignal> в TCP?
weko В i2pd или java i2p. В таком случае приоритет закрыть баг, через время начать профилировать.
weko Баг это или нет - поможет определить статистическая корреляция по нескольким параметрам (писал выше)
Vort weko: кстати, не хочешь ли попробовать мои данные по результатам создания туннелей поанализировать и повизуализировать? а то у меня что-то плохо получается
weko [18:02:23] <Vort> "Так их вроде и не так много" - да, но всё равно лучше, чтобы не было. ну или хотя бы понять, что за хрень происходит
weko Выглядит как нормальное количество как раз ввиду локальных ситуаций
weko Vort: а какие столбцы у тебя есть?
Vort weko: дата, тип (S успех T таймаут F фейл), список идентов (хопы)
Vort ещё подготовлю RI
weko Нужны ещё данные с RI - java/i2pd, версия протокола
weko Может ещё ip адреса
Vort ну я сами RI подготовлю. или ты сам не расковыряешь?
Vort там просто ищешь SSU - и смотришь следующий байт - 2 или не 2
weko [18:06:58] <Vort> там просто ищешь SSU - и смотришь следующий байт - 2 или не 2
weko А если нету ssu или это первая версия?
Vort а где нету SSU* - ну и хрен с ними. почти везде есть
weko Во втором случае опредение будет неверное
Vort то же и с первой. думаю, что это мелочи
Vort можно версию ещё проверить
Vort в какой-то версии же убрали SSU
weko А в java убрали?
Vort а хз...
weko Надо смотреть ещё v=2 или как там
Vort ну поэтому и предлагал альтернативный вариант обработки сделать )
Vort вдруг что-то упускаю
Vort короч я сейчас подготовлю
weko В java же другой способ указать вторую версию
weko Вот его нужно определять
weko Vort: я могу попробовать что-то сделать, но в любом случае желателен больший набор данных
Vort по 3 хопам там хватает данных
Vort вот по 1 хопу, особенно по таймаутам и фейлам - мало
weko И нужен чистый - тоесть все пиры брались с одинаковой вероятностью
Vort ну как i2pd делает, так и собирается
Vort это я не трогал
weko В этом проблема
weko Как ты говорил есть exploratory туннели
Vort они 2хоповые вроде только
Vort а у меня нету 2 хопов других
Vort у меня два проксика, 1 хоп и 3 хопа + служебный 3 хопа, всё
weko В данном случае можно исключить. Но нет ли других факторов?
Vort я i2pd вообще не грузил. ну если не забыл ничего. через 1 хоп вот этот чат. 3 хопа вообще "пустой"
weko Нет вопрос только в выборе хопов
weko В идеале должно быть абсолютно равномерно и нам должны быть известны правила
weko Ну тоесть полностью исключить профилирование
Vort думаешь, со стандартными настройками полезной информации извлечь не выйдет?
Vort переписывать i2pd для того чтобы собрать статистику - это уже не такая простая задача
Vort да и такой узел будет гадить сети. не такая уж большая проблема, но всё же
weko Vort: да нет не будет
weko мы же со своих туннелей статистику собираем
weko их поведение нужно довести до равномерного распеделения по пирам, чтобы исключить подводных камней в статистике
R4SAS Guest (which asks me about Docker), I really don't know
R4SAS Ask here please.
R4SAS I have no time now for working on issue
user Предлагаю радикальную идею. Делать exploratory 0-hop и строить туннели только из отвечающих роутеров.
relaybot 13apophis: равномерное распределение по нодам в графе с динамическими соединениями ... задача даже теоретически "сложная"
orignal нулевые тоннели нельзя если ты не публикуешь IP
weko <user> Предлагаю радикальную идею. Делать exploratory 0-hop и строить туннели только из отвечающих роутеров.
weko и потерять анонимность....
user И что кто узнает?
weko <+relaybot> apophis: равномерное распределение по нодам в графе с динамическими соединениями ... задача даже теоретически "сложная"
weko задача не убрать погрешность а сделать их не значительными
weko <user> И что кто узнает?
weko ну вот ты знаешь зачем они нужны?
user Что чувак с таким-то ip использует i2p?
weko user: это и так известно
user Ну так
weko <weko> ну вот ты знаешь зачем они нужны?
user Расскажи
weko нашёлся самый умный
weko сначала иди учи матчасть
user Ну ты же сказал знаешь
user Расскажи
user Единственный момент, когда будет деанон, это если у тебя скрытый сервис и через exploratory опубликуется лизсет
user Или я не прав
orignal лизсет никогда через него не публикуется
user Ну так а где деанон будет?
orignal не будет
orignal нг смысла нет
orignal можно просто устанваливаться соединения
weko orignal: я рассказывал в чём проблема может быть при не анонимном получении RI
orignal угу
weko и делать ситуацию ещё хуже точно нельзя
user 0-hop tunnels With no remote routers in a tunnel, the user has very basic plausible deniability (since no one knows for sure that the peer that sent them the message wasn't simply just forwarding it on as part of the tunnel).
user Правду пишут?
weko видно что у тебя в лиссете всегда один и тот же пир в количестве одной штук
weko штуки
user Лизсет для кого?
user Для сервиса?
weko ну например
orignal есть же умники которые вешаеют сервисы на тоннели нулевой длины
user Ну так я и написал, что не подходит держателям сервисов
orignal но они это делают
weko user: учи матчасть бля
user Ну или если это открытосервис
orignal не ну зондирующий пул никогда не генерит лизсеты
weko orignal: ну это понятно
user Может это было в старых версиях, помню читал варианты атак, там лизсет публиковался именно через exploratory
orignal в i2pd никогда
orignal у меня лизсет всегда делается в Destination
orignal а у зондирующего пуле его нет
relaybot 13apophis: > weko: задача не убрать погрешность а сделать их не значительными
relaybot 13apophis: ты это где видал, чтобы погрешность можноп было убрать ? ... статистически не значительными это правильно.
weko ну а о чём
relaybot 13apophis: я не хочу тебе советовать, но если ты серьезно решил и2пд архитектурой занятся, то надо симулятор "приближенный" сделать. Не кодить сильно, но есть продукты <clipped message>
relaybot 13apophis: мультиагентных систем которые могут быть адаптированы. Тогда будет теоретических и возможно практических толк и на долго.
weko симулятор - согласен. про мультаентные системы не понял - что это такое?
relaybot 13apophis: ты же по английки говоришь, посмотри на гоогл. агенты будут нодами.. их взаимодействие ... соединениями. Пишешь поведение одного агента и взаимодействие ег <clipped message>
relaybot 13apophis: о с другим. и истанциируешь их сотнями тысяч или > .... смотришь статистику с чего пожелаешь.
relaybot 13apophis: Посоветовал бы: ГАММА. Там язычок легкий скриптовый. Но это не симулятор ТСП/ИП и протоколов, такой есть конечно, но для общего анализа это уж слишком будет.