IRCaBot 2.1.0
GPLv3 © acetone, 2021-2022
#dev
/2023/03/18
~AreEnn
~R4SAS
~orignal
~villain
&N00B
+Xeha
+relaybot
DUHOVKIN
Guest7184
Leopold
Nausicaa
Ruskoye_911
Vort
anon2
b3t4f4c3
karamba_i2p
nemiga
not_bob_afk
plap
poriori
profetikla
soos
teeth
un
weko_
whothefuckami
nick_kramer_117 orignal: "Переписать с ипозованием boost::asio и std, вместо прямых системных вызывов.
nick_kramer_117 Дублирование кода из HTTPServer.h/.cpp - такой сервер уже там есть." - Возьму на вооружение/изучение boost::asio. Про дублирования кода - хотел сделать не зависимый TCP сервер от HTTP
orignal nick_kramer_117 ты объясни нам что за задачу решаешь снчала
orignal мы целый день гадаем
orignal разумеется в любом случае без пряммых вызвов как ты сделал а через буст как везде чтобы переносимость была
orignal для тредов используй std::thread
orignal Vort в TunnelEndpoind.cpp
orignal и в NTCP2.cpp
nick_kramer_117 Просто хотел сделать изночально консольный вывод информации об i2pd роутере.
orignal там создаются они
orignal а сервер отдельынй зачем?
nick_kramer_117 Чтобы вдальнейшем можно было сделать проброс инфы удалённо, как вэбконсоль (грубо говоря аналог вэб консоли).
orignal а чем тебе I2PControl не устраивает как говорит polistern
orignal он как раз для этого запросы и ответы в JSON
orignal может добавлять свои команды какие надо
nick_kramer_117 Так Я хотел изучить этот момент, но почему то переходя по ссылке на сайте i2p, на тему I2PControl мне писало что "ресурс временно не лоступен".
Словесник-Былинник не нравится мне ваши идеи. На пятки наступаете
nick_kramer_117 не доступен*
orignal так ты бы код поизучал
orignal не смысла городить еще один сервер
orignal кстати вся инфа о роутере давно уже отдается
nick_kramer_117 itoopie.i2p.xyz - вот тут пологаю должно было быть подробности про i2pcontrol
nick_kramer_117 Но эта ссылка не работает. Хотелось бы посмотреть пример как актевировать ш2зконтрол
nick_kramer_117 Всё подразобрался) приношу извинения запотраченное время, проще реально работать через JSONRPC
nick_kramer_117 Чем как Я нагородил корявый тсп сервер
orignal itoopie это малый кусок
nick_kramer_117 Я уже понял, на днях заюзаю ш2зконтрол
Vort натыкал логирование в TunnelEndpoint.cpp и NTCP2.cpp
Vort теперь полно в логах вот такого: TunnelMessage: I2NP message size 2106 is not enough, msg.data->len: 2052
Vort то есть, 62к создаётся задолго до пересечения границы в 4096 байт
Vort а вот что именно создаётся при пике - это ещё надо выловить
orignal я там не помню
Vort интересно, там хоть иногда бывает enough. а то что-то часто пишет в лог
Vort (немного наугад спрашиваю) может, туда можно 4096 блоки втыкать когда 2106 не хватает?
orignal может и правда кося
orignal почему 2106 не хватает для 2052?
Vort ну там ещё size должен влезть
orignal разбираться надо
Vort я так и не понял, как он считается
orignal посомотрю я
Vort if (msg.data->len + size > msg.data->maxLen)
orignal ну это смещение
orignal там сложно все
Vort у меня дурацкая идея воткнуть туда тупо NewI2NPShortMessage вместо NewI2NPMessage. сломается всё или нет? )
Vort хотя там наверно два уровня проверки в таком случае должно быть
Vort что если в 4к не влезет, тогда уже 62к делать
Vort сейчас узнаю, сломал или нет
Vort да вроде прожевало 4к блок нормально )
Vort интересно, получится ли ситуация, когда и 4к не хватит
orignal смотри в чем идея
orignal 2K там не просто так а с расетом на стандартный пакет стримов
orignal который 1700 с чем то байт
orignal плюс всякие там заголовки
orignal и вот на конеце тоннеля расчет такой что как правило будет такой пакет
Vort там два места с NewI2NPMessage. и в том и в том случае ожидается стандартный размер?
Vort я просто в одном случае вижу много невлезаний, а в другом - мало
orignal с этим надо разбираться
orignal я говорю просто в чем идея
Vort в ConcatFollowOnFragment невлезает чаще, а в ConcatNextOutOfSequenceFragment - реже
orignal я прнояду чего там
ovril orignal: а есть какие-то способы весь трафик системы завернуть в i2p принудительно?
HidUserZ Вроде был
weko Ну примерно тоже самое что и с торификацией
HidUserZ Ну в торификации вроде transparent proxy
weko [23:29:07] <nick_kramer_117> Я уже понял, на днях заюзаю ш2зконтрол
weko Если за это взялся, напиши, чтобы было как аналог вебконсоли! Там придётся команды дописать, но это я и прошу. Там ещё иссуй от ацетона висит, с запросом команд для ш2з-контрол
weko HTTPServer: Duplicate remote endpoint detected: <ip>
weko Это что? Вебконсоль?
weko Я там какие то айпишки левые увидел
weko Хотя у меня консоль не доступна всем подряд
Vort и опять добавленных логов не хватило чтобы понять, где во время пика создаются 62к сообщения :(
Vort всякие странности и интересности понаходились, но мне надо именно то, что я ищу, а не что попало
Vort вот одна из интересностей к примеру: paste.i2pd.xyz/?086a515d4c51600b#4JDiwjg1wfqbUcR8BzvkcsSb58xFKXpoppNf85xZf1Wo
Vort ну понятно. посмотрел я самостоятельно, откуда могут идти вызовы NewI2NPMessage(). в коде столько мест, что отладочные сообщения растыкивать задолбаешься
Vort придётся делать то, что надо было делать сразу - печатать стеки в конструкторе. точнее, в NewI2NPMessage ()
orignal так тебе не надо твои тебе надо только приходящие
Vort мне надо понять, что даёт пик. а мои или не мои покажут трассировки стеков. если удастся словить пик
orignal ты в NTCP2 смотрел?
orignal нет оснований полагать что длинные сообщения не передаются и через NTCP2
weko orignal:
weko [06:31:08] <b39775weko> HTTPServer: Duplicate remote endpoint detected: <ip>
weko [06:31:08] <b39775weko> Это что? Вебконсоль?
weko [06:31:27] <b39775weko> Я там какие то айпишки левые увидел
weko [06:31:44] <b39775weko> Хотя у меня консоль не доступна всем подряд
Vort "ты в NTCP2 смотрел?" смотрел. но поставил немного неверное условие. надо было не size > 4096, а size >= 4078 ставить
orignal я не знаю о чем это
weko orignal: это о логах
weko В логах такое
Vort а, это я добавлял кажется
Vort да, точно
Vort забей )
weko И что оно значит
orignal а самому то в код глянуть не судьба? ))
weko Почему в логах про вебконсоль левые айпи
weko Хотя их там быть не может
Vort чтобы это починить, надо делать потокобезопасность вебконсоли
Vort это вылазит, когда ты смотришь список адресов
Vort через консоль
orignal это транспорты
weko Аа
weko Ясно
orignal очевидно же по коду
weko Понятно
weko Я могу код и неверно понять, а потом окажется что это реально кто-то стучиться
polistern orignal, пока ничего лучше не придумала, чтобы Ping добавить в i2pcontrol. Есть возражения?
orignal у меня есть лучше идея: добавить команду в боб
orignal но можно и в i2pcontrol но тогда он всегда пойдет с shared local destination
orignal кстати боб мы можем менять как хотим ибо джава его уже не поддерживает
weko ну я понимаю что вы держите боб для совместимости
weko но зачем его дополнять
weko есть же новый SAM
weko ну "новый"
orignal потому что в боб проще
weko <~orignal> но можно и в i2pcontrol но тогда он всегда пойдет с shared local destination
weko так можно сделать выбор дестинейшена.
orignal и боб не только для совместимости
orignal он для технических нужд типа lookup
weko а что там есть что нету в sam?
orignal потому ping в дполнение к lookup смотрится огичным
weko в сам есть же lookup
weko ну по сути то да
orignal i2pcontrol на данный момент не умеет создавать дестинейг=гины
orignal в отличие от боба
weko мне не нравится вот это зоопарк протоколов
weko этот*
weko orignal: в SAM есть же lookup вроде, так что боб в этом смысле не уникален
orignal по мне вот сэм это какой то набор костялей
orignal там другой
weko реализация или сам протокол?
orignal там не ищет лизсет
orignal сам протокол дурацкий
orignal боб по моему мнению много перспективнее
orignal и разуменее сделан
weko а боб чем плох что его в джаве слили
weko просто лень было его поддерживать?
orignal он не угодил лично деду
orignal там какие то разборки были с его автором
weko лол
weko опять из-за разборок страдает продукт
orignal там не то что разборки
orignal тот чувак свалил а дед не стал его развивать
orignal там наример была подпись DSA толлько
orignal боб с EDDSA есть только у нас
orignal у них никогда не было
weko весело
orignal там нет датаграм
weko может стоит навести порядок, это мягко говоря странно
orignal которые можно сделать легко
orignal ну так я о чем и говорю мы ты от боба отказываться не планиурем
weko хорошо тогда нужна к нему документация полноценная
orignal у нас еще есть команда lookuolocal которая ищет лизсет в нетб если фулфдфил
weko у джавистов же старая
weko а всё остальное также ?
polistern Как передавать в него параметры можно потом докрутить отдельно. Хоть во всю троицу его добавить. Главное первый шаг сделать. Ну и плюс пинг то это утилита по сути, и вот в CLI смотрелся бы органично.
orignal полностью аналогично lookup
orignal lookup только возращает адрес а ping должен время в милисекундах
orignal короче делай как считаешь лучше
weko при чём время именно запроса наверное, с вычетом lookup
orignal естествено
weko а что не нравится в SAM именно
orignal команданая сессия
weko всмысле?
orignal ты для поддержания сессии должен держать открытым сокет
orignal отдельный
weko да, и чем это плохо
weko если программа не может держать сокет значит и данные слать не выйдет
weko а если ссесия не нужна то она закроется даже если если по какой то причине этого не произошло
orignal а если просто лаганула сеть то дестинейшин сдохнет
weko палка о двух концах...
weko ну лаганула как ? на таймаут сокета?
weko этож надо сокет закрыть намеренно
orignal собака провод выдернула ))
weko ну там и данные передать не выйдет
orignal так ты воткнул обратно и все надо создавать по новой
orignal дестинейшин тоннели лизсеты
weko на такой случай нужен умный роутер который будет не удалять дестинейшен, а замораживать его ))
weko типо оставлять туннели, но новые не создавать
orignal ну так надо логику сэма менять
orignal но никто ж этого не сделал
weko мне кажется задумка хорошая
weko что зачем нужен б32 если программа которая его использует не может с ним работать
weko при этом программа забагала и не закрывает б32
weko да даже если и не багала
weko соединение порвалось и дестинейшен остался висеть на веки вечные
orignal ну у боба есть команда его прибить
weko ну вот, а если её не выполнить
weko будет висеть вечность
polistern Наверное тогда пока в боб, хоть тестить проще будет. Там считай всё готово для этого. Сегодня-завтра скажу что да как с пингом.
orignal ну да вот давай попробуем
Vort по поводу пиков. такое ощущение, что пакеты просто где-то зависают. и всё
orignal в хэше в TunnelEndpoint где же еще
Vort есть несколько подозреваемых создателей таких пакетов. основные: i2p::garlic::WrapECIESX25519Message, i2p::CreateRouterInfoDatabaseLookupMsg и i2p::garlic::ElGamalAESSession::WrapSingleMessage
Vort с количеством созданий аномалий нет вообще никаких
Vort правда, особо большой пик я пока что не словил. но похоже это всё не на атаку, а просто на какой-то глюк
orignal да ты прав
orignal auto m = NewI2NPMessage ();
orignal в std::shared_ptr<I2NPMessage> WrapECIESX25519MessageForRouter (std::shared_ptr<const I2NPMessage> msg, const uint8_t * routerPublicKey)
Vort ну я же все эти места и смотрю
orignal вот нахуя я так делаю?
Vort это отдельный вопрос :)
Vort такс, мне надо рестарт. место закончилось. придётся стеки удалять :(
Vort почему оно создаётся - это отдельный вопрос. меня же интересует почему оно не удаляется вовремя, а зависает в памяти. ну и какой из перечисленных типов так делает надо бы узнать
orignal я думаю зависает потому что висит в очереди на отправку
Vort у какой-то из разновидностей (по месту создания) выше шанс так зависнуть? или примерно одинаково?
orignal одинаково
Vort как я понимаю, самый простой вариант - попробовать обернуть эти сообщения в буферы размером поменьше
Vort даже если и будет зависать, то не так много
orignal да так
orignal <orignal> auto m = NewI2NPMessage ();
orignal вот это никуда не годится
orignal но надо учитывать размер обертки
orignal чем я и займусь
Vort ну и глянь если можешь почему слишком часто не влазят сообщения в TunnelEndpoint::ConcatFollowOnFragment
Vort может, это и норма, я не знаю, но у меня вызывает подозрение
Vort кстати, мой вариант запихнуть в 4к сработал. очень редко и 4к не хватало, но в целом было норм
orignal насколько часто по сравнению с тем когда влазит?
orignal *** ушел ***
Vort вот этого не глянул. но чтобы каждую секунду по несколько раз не влазило - это постоянно
Vort ещё и размер подозрительно гуляет. 2048, 2050, 2052
Vort других вариантов невлезания не замечал
Vort отключу логирование стеков. похоже, ничего ценного больше я из них сейчас не выжму. заодно поставлю логирование размеров в TunnelEndpoint
Vort уже вижу паттерн относительно TunnelEndpoint::ConcatFollowOnFragment
Vort всегда влазит, когда 1к (логично), никогда не влазит когда 2к (почему?)
Vort я видел по истории коммитов, что когда-то было сделано удвоение размера буфера. ну так вот, видимо, сделано не до конца
Vort ну это так кажется по результатам поверхностного анализа
Vort 1052, 1054, 1056 - влазят, 2048, 2050, 2052 - не влазят
Vort а нет, я не прав!
Vort иногда 2048, 2050, 2052 тоже влазят
Vort так что надо разбираться с условиями, когда они влезть не могут. явно "size" другой. но каким он бывает - я пока не разобрался
Vort добавлю ка его печать, чтобы уже было однозначно
Vort в общем, этот +size бывает примерно до килобайта
Vort 2k+1k понятно, что не влезет
Vort orignal: посчитал за 10 минут аптайма: влезло 1166 раз, не влезло 107 раз
Vort за 20 минут аптайма: влезло 2394 раз, не влезло 217 раз
Vort 9% невлезаний получается
Vort ещё одну вещь надо отметить (чуть по другой теме):
Vort похоже, что пул для IdentityEx таки притормозил раздувание кучи
orignal ага все так обычно влезает
Vort то есть, 9% невлезаний - это типа норма?
Vort даже если и так, то всё равно сомневаюсь, что аж 62к надо выделять
Vort хотя может это и не страшно, хз
orignal ну я это чиню счас
Vort окей
orignal я к тому что это не бага
orignal сделал
polistern orignal, базово сделала, но ответы не получаю. Вызываю Stream::SendPing и потом жду ответ через Receive. Видимо как-то по другому нужно понги отлавливать.
orignal а как сделано для keepalive?
polistern Только отправка
orignal надо посмотреть мы вообще ответы обрабатывыаем?
orignal возможно этого кода просто нет ))
polistern Тоже думала подсмотреть, но ничего не нашла))
orignal надо его написать значит ))
orignal ну не написал как обычно
polistern Так я о чём, они по особенному приходят?
orignal так посмотри как они отправляются
orignal отправляться то они точно отправляются ибо notbob с i2pd работает
orignal ну соотвесвенно надо ловить их получаение
orignal в том месте где мы ловим пинги
polistern Формируется ECHO пакет и шлётся через SendPackets.
orignal а какие там номера стримов?
polistern Где там?
orignal строка 1214 Streaming.cpp смотри
orignal там просто в лог пишется
orignal а надо какой то коллбык там вызывать
orignal / pong
orignal LogPrint (eLogInfo, "Streaming: Pong received rSID=", packet->GetReceiveStreamID ());
orignal DeletePacket (packet);
orignal return;
orignal то есть понимаешь мы его просто дропаем хотя и получаем
polistern Аааа, всё, ща что-нибудь придумаю
orignal смотри как сделан коллэк для ацептора
orignal примерно также
polistern В кои то веки в нутро этого нашего I2P полезла))
orignal подверишашь коллбэк ддя пинга и его вызываешь там если есть
orignal а в твоем коллбэке уже что надо делаешь
orignal естесвенно туда номер передаешь чтобы знать какому пингу соотвествеует
orignal я просто не доделал ибо не знал что с ним делать
polistern Можно просто сделать SetPongCallback, и вызывать его в HandlePong
orignal можно
Vort orignal: так а в тех функциях, которые, собственно, участвуют в создании пиков потребления RAM, блоки настраиваемого размера сделать можно?
Vort "i2p::garlic::WrapECIESX25519Message, i2p::CreateRouterInfoDatabaseLookupMsg и i2p::garlic::ElGamalAESSession::WrapSingleMessage"
orignal это следубщий шаг
Vort ок
orignal там надо уметь вычиислять длину
orignal потмоу что там же всякие заголовки
orignal и ее надо посчитать там аккаунтно