~AreEnn
~R4SAS
~acetone
~orignal
~villain
&N00B
+Xeha
+relaybot
DUHOVKIN
Guest8639
HackerMan
Most2
Nausicaa
Ruskoye_911
Vort
`
ananas
anon3
dressedie
nemiga
not_bob_afk
plap
poriori_
profetikla
segfault
soos
teeth
un
weko_
whothefuckami
weko
apophis тебе уже сказано, срач иди в #ru разводи
orignal
ну и в чем тогда проблема?
Leopold
что-то упускается, где-то ошибка
relaybot
13apophis: > weko: apophis тебе уже сказано, срач иди в #ru разводи
relaybot
13apophis: шизок, ты смешон своим праведным гневом. Мания преследования у тебя
weko
orignal: не знаю хочу сейчас проверить игру
Leopold
Может, есть буфер какой-то
weko
apophis #ru туда пиши
relaybot
13apophis: > weko: apophis #ru туда пиши
relaybot
13apophis: я о твоем рассуждении писал и сравнивал с классической литературой. Тебе не нравится ? .. спортлото
weko
мне не нравится что ты разводишь срач в чате не для срачей
weko
иди в канал где это уместно
relaybot
13apophis: > weko: мне не нравится что ты разводишь срач в чате не для срачей
relaybot
13apophis: я не развожу срач, я констатирую факт. Свобода анонимного и2пд, ты против ?
weko
#ru go ahead
Leopold
Ну его, давай посмотрим, чем принципиально udp в i2pd отличается от tcp аналога и от обычного клирнет сервера с udp
weko
стоп я ещё кое что не проверил
weko
вот от сервера ответ то приходит
weko
но какой там порт указан?
weko
а хотя даже если один то пофиг
relaybot
13apophis: > weko: #ru go ahead
relaybot
13apophis: это не твой язык, не смеши. Аналитика у тебя тоже ушла не далее .. английского :)))
weko
/ingore <3
weko
ignore*
weko
Leopold: я хочу сначала перепроверить баг
Leopold
у udp пакета есть мак-адрес?
weko
нет конечно
weko
mac на уровень ниже
weko
даже на два уровня
Leopold
мак адрес это часть tcp пакета, разве нет?
orignal
нет конечно
orignal
это часть езернет фрейма
amias_bonaventure
mac sushestvuet v predelah shirokoveshatelnogo domena vtorogo urovnia modeli osi
Leopold
оки
weko
да воспроизводится
weko
но при этом явно связано с i2p, потому что когда один клиент через i2p, а другой напрямую, то работает нормально
weko
походу делает на каждый порт от клиента другой который использует
weko
он не от адреса зависит
orignal
так посмотри в коде
weko
тут очень интересная ситуация по пакетам. может это и не то конечно. пока изучаю просто
weko
да кажется начал понимать
orignal
и что там?
weko
я просто не хочу щас писать, а потом написать "не, это другое
weko
щас перепроверю и скажу
weko
orignal: вот точно видно. сервер в один момент только с одного ip шлёт на сервер
orignal
в смысле?
weko
ну вот я смотрю что i2pd пересылает на сервер
weko
игры
orignal
UDP пакеты
orignal
и что там во from ?
weko
включил запись пакетов - первые 6 секунд только с одного адреса, потом через 6 секунд только со второго
relaybot
13apophis: выстрел в пустоту .. интересный фильм. Без фобий плиз
weko
чётко видно как меняется
orignal
и в чем заключается мысль?
Leopold
udp-сессия умирает?
orignal
так может просто так с сесиий прихлодит
orignal
в UDP не бывает сессий
weko
orignal: но я то на сервере одновременно с двух клиентов
weko
короче оно то работае
weko
но ни когда идут данные одновременно
weko
могу симулировать такое самим
orignal
а как должно выглядеть "одновременно"?
weko
ну что малая задержка между пакетами
weko
не знаю))
weko
я со своим сервером через nc подключался - данных мало и точно не одновременно
orignal
я посмотрб как там сделано
orignal
и кроме того это не объясняет проблему
weko
объясняет
weko
как раз таки
orignal
чем?
weko
ну тем что до сервера не доходит
weko
с одного клиента
weko
есть подозрение что там не хэшмап используется, а просто одна переменная с сокетом
orignal
доходит же после 6 секунд
weko
оно не доходит
weko
оно меняется
weko
просто было с одного места стало с другого
orignal
там все хуже
orignal
std::vector<UDPSessionPtr> m_Sessions;
weko
да оно вообще может полностью рассинхронится что нигде не работает
weko
например i2pd шлёт только для одного адреса, а принимает только через другой
weko
в итоге оба клиента сосут
weko
да любой пакет ломает
weko
вот я подключился, делаю один пакет с другого деста - ломается
orignal
придется таки разбираться что там псих понаделывал
weko
короче неверный адрес отправления i2pd делает
weko
ну и порт соотвественно тоже потому что сокет
weko
не с того сокета
weko
в общем прошлую теорию отмели зато нашли причину
weko
могу попробовать симулировать такое же самим
weko
udp.port == 22221 && ( ip.src == 127.3.171.140 || ip.src == 127.70.210.27)
weko
через этот фильтр смотрел
weko
22221 - порт сервера, ну и соотвенно ip-шки, который i2pd использует
weko
src - только от i2pd
weko
вот и выходит что косяк
orignal
ниче не понял
orignal
еще раз
orignal
серез 127.0.0.1 22221
orignal
*сервер
weko
короче i2pd может отправлять только с одного сокета
weko
тогда как должно с двух
orignal
ну надо поглядеть
orignal
мы на работе по udp по сотням сокетов враз отправлем
weko
тут не сотни до дохуя
weko
но*
weko
ну в плане не за раз
weko
m_LastSession - интересно
orignal
у нас по паре десятков одних мультикастов выкидывается
orignal
и каждлый на своем VLAN-е
orignal
ну m_LastSEssion это как раз понятно
orignal
чтобы каждый раз не искать
weko
типо оптимизация
orignal
это скорее всего я добавил
weko
так надо хэштаблицу
orignal
погоди
weko
это костыль
weko
потому что поиск в хэштаблицу O(1)
orignal
ну все ясно чо
orignal
посмотри на HandleRecvFromI2PRaw
weko
я вот тоже щас смотрел не нашёл ничо
weko
вижу
orignal
там логика какая
weko
но у меня то не Raw
orignal
идет сначала repliable а потом raw
orignal
откуда ты знаешь что не raw
orignal
это же датаграммы внутри i2p
orignal
бывают repliable бывают raw
weko
а
orignal
приходят raw с другой сессии
orignal
а мы срем ею в последню
weko
а как определяется raw или repliable?
Leopold
:/
orignal
на там в заголовке датаграммы это
orignal
а отправитель как делает тут надо смотреть
weko
а по поведению они чем отличаются?
weko
просто заголовок и всё типо?
orignal
ну ты видишь разныне фнукции вызываются
weko
вижу но видимо должна одна
orignal
I2PUDPServerTunnel::HandleRecvFromI2P вот там все правильно
orignal
а в I2PUDPServerTunnel::HandleRecvFromI2PRaw все плохо
weko
вижу что плохо
weko
просто если починить они будут одинаковые
orignal
то есть вызываются разные методы в зависимости от типа датаграммы
orignal
так просто ты не починишь потому что у raw нет адреса
orignal
то есть так и получается когда одна сессиия то все хорошо
orignal
а когда много то хуйня получается
weko
ну это понятно
weko
тоесть в raw не написано куда отправлять ответ, да?
orignal
правльно
weko
точнее откуда пришло, нам это тут важно
orignal
потому надо счнала найти сессию
weko
но в i2p одно и тоже
weko
но мы то всё равно знаем откуда пришло
orignal
там порты разные
orignal
но мы не проверяем
weko
а как i2pd решает что отправить raw или repliable ?
orignal
знать то мы знаем но только ключ s сессии
orignal
короче тут думать надо
orignal
там у клиентского тоннеля есть логика
orignal
вроде считывает пачку пакетов из буфера
orignal
снчачала repliable потом пачка raw
weko
так просто меняем чтобы всегда были repliable
orignal
медленно будет
weko
ну там 32 байта же всего
weko
нет?
orignal
replable там всегда проверка подписи
orignal
32 байт пох
orignal
не пох проверка подписи
weko
м
weko
так надо чтобы в сессии подпись один раз проверялась при создании ключа
orignal
а у raw нет подписи
orignal
короче дай мне это обдумать
orignal
проблема в общем то ясна
orignal
естествеенно так и было задумано
orignal
просто надо чтобы raw назходило свою сессиию а не послденюю
weko
ну смотри мы знаем с какой сессии пришло raw
weko
надо эту информацию сохранить в сообщение
weko
и обрабатывать далее уже
orignal
дай подумать
weko
k
orignal
там же ECIES сесиии есть
orignal
можно с ними увязывать
orignal
смотри че
orignal
я думаю не будет больного ущерба если сделать UDP тоннели только с типом 4
orignal
тогда это резко упростит все дело
orignal
*большого
orignal
просто 0 не поддерживаем ддя UDP и все
weko
А на старых нету сессий что ли?
weko
Ну я согласен что смысла в поддержки старья особо нет
weko
0 сложнее просто навернякп
orignal
на 0 нету сессиий
orignal
там вообще полное уродство
orignal
когда я делал этот код для UDP 0 еще актвино использовался
weko
так там и так всегда подпись проверяется значит
orignal
потому и не сделал по человечески
weko
значит и смысла в raw для 0 нет
orignal
именно там
orignal
именно так
orignal
потому оно всегда repliable и можно гнать только raw
orignal
это моя старая идея
weko
я слегка запутался, но главное что проблему нашёл
weko
orignal: можно ещё на уровне destination если raw пришло, то переделывать в repliable уже после того как проверили подпись
weko
а точнее там даже не проверяем
weko
просто переделывать
weko
orignal: по поводу m_LastSession - вероятно так лучше, потому что даже если map использовать, то быстрее так чем поиск в map
weko
но это экономия на спичках конечно
weko
Да и тут нужно unordered_map
orignal
да я починю
orignal
тут понятно что надо делать
orignal
завтра если будет время
orignal
for (auto & s : m_Sessions )
orignal
{
orignal
if (s->Identity.GetLL()[0] == ih.GetLL()[0] && remotePort == s->RemotePort)
orignal
{
orignal
пиздец
orignal
ну псих и рукожоп
orignal
придется всерьез заняться переделкой
mauzer
:\
orignal
про GetLL это уже явно мои костыли )))
weko
orignal: да вообще я думаю этот код нужно вынести в Datagram.cpp и сделать чтобы можно было несколько портов делать
weko
Сейчас нельзя
weko
Но это уже куда большая переделка
weko
бОльшая
orignal
да я починю по мелочи завтра
gimonchik
[10:39] <ffffffgimonchik> Подскажите пж как в опенссл использовать кузнечик и стрибок?
orignal
я не использую у меня своя реализация
orignal
посмотри файл Gost.cpp
gimonchik
Спасибо
orignal
34.10 он сделан поверх openssl-ской эллиптической кривой
orignal
34.11 свои таблцы прямо в коде
orignal
34.12 не используется
Komap_
здеь 000000000000000000
Komap_
)))))))))))))))))
gimonchik
А есть какие-нибудь готовые либы для гостовской криптографии в c++?
gimonchik
Чтоб у них была документация нормальная
orignal
скорее всего но мне проще было поверх openssl сделать
orignal
weko я поправил
orignal
пробуй
weko
Понял проверю
orignal
я пробовал видеотрансляцию локально
orignal
вроде нормально идет
orignal
пародон багу сделал
orignal
вот тперь бери
orignal
починил
un
кончилась атака? рейт растет
orignal
не думаю
orignal
просто перерыв
un
рейт почти как раньше сегодня под 50
orignal
Transit: 771.92 GiB (1541.07 KiB/s)
orignal
вот и вся причина
orignal
обычно около 8000
orignal
bitrate= 924.9kbits/s
orignal
видеопоток прет без помех
orignal
кстати сегодня месяц в момента начала атаки
Vort
срок аренды хостинга кончился что ли ?
orignal
может проплатили на месяц
orignal
атаку заказали
weko
видимо решили не продлевать
weko
возможно дудосили какой то сервис
Vort
сложно поверить, что какой-либо сервис мог бы принять столько трафика
weko
так и не принимал
Vort
я думаю, сервису и доли этого DDoS`а хватило бы
weko
может быть
orignal
я думаю это было какое то заказанное исследование
weko
orignal, Leopold проверил
weko
работает!
orignal
замечтально
orignal
не прошло и 2-х лет как починили багу ))
weko
да уж
weko
надо сайт обновить
Leopold
Ееее :D
orignal
какой сайт?
orignal
я там возможно еще кое что переделаю для клиентских раз уж взялся с целью отпилизации
weko
orignal: games.i2p
weko
там просто про баг написано
orignal
ну так еще надо будет релиз сделать
weko
orignal: сделай чтобы можно было несколько туннелей на один дест ))
weko
orignal: ну я напишу что будет пофикшену в 2.51 и чтобы это будущий релиз
orignal
а что счас разве нельзя?
weko
нельзя
weko
там в коде не сделано
orignal
почему это?
orignal
что не сделано?
orignal
пишешь keys= одинаовые и все
orignal
если transient
weko
ClientDestination::CreateDatagramDestination
weko
вот смотри
orignal
то например keys=transient1
orignal
сча
weko
а или это не то
weko
ща
orignal
нее оно тут непримчем
weko
да понял
weko
щас
orignal
это чтобы сообщение Data роутить внутри
weko
auto r = FindReceiver(toPort);
weko
хм
orignal
ну естественно порты надо разные
weko
ну это понятно
weko
просто как будто не работало
weko
dgram->SetReceiver (std::bind (&I2PUDPServerTunnel::HandleRecvFromI2P, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, std::placeholders::_4, std::placeholders::_5));
weko
void SetReceiver (const Receiver& receiver, uint16_t port) { std::lock_guard<std::mutex> lock(m_ReceiversMutex); m_ReceiversByPorts[port] = receiver; };
weko
не пойму
weko
void SetReceiver (const Receiver& receiver) { m_Receiver = receiver; };
orignal
что именно не понтяно?
weko
всё понял
weko
но да тут по порту не задаётся
weko
вот смотри вызов фуннкции
weko
там не задётся порт
weko
и потому оно просто идёт в m_Reciever и всё
weko
кусушмук
weko
receiver
weko
для raw вообще нету функции с портом. только такая void SetRawReceiver (const RawReceiver& receiver) { m_RawReceiver = receiver; };
orignal
это я посмотрю насчет портов
orignal
так нет ты не долгнал
orignal
вот мы ставим коллюэк
weko
да ставим
orignal
в который порт передается в качестве парамтра
weko
ну и что
weko
один UDPTunnel на один порт
weko
всё равно
orignal
а все понял твою мысль
orignal
а надо их разводить по портам
orignal
сделаю
weko
я может и сам смогу
weko
во первых поменяю map на unordered_map
orignal
нет в Destination пока не лезь
orignal
как раз там map менять не надо
weko
да ладно разрешу комфликт
weko
почему
weko
нам не нужен порядок там
orignal
там упорядоченность по порту нужна
orignal
не помню для чего
weko
а
orignal
ну попробуй
weko
оно в Private я могу проверить где используется
orignal
только имей виду что оно для стримов там
orignal
там смысл в дефолтном деситнейшине
weko
так это только DatagramDestination
weko
orignal: так сделать переменную под дефолтный
weko
но вот в TCP и UDP если порт неверный то ничего не коннектит
weko
но я так понимаю тут бывает что порт 0
weko
если не задать
orignal
потому я тебе и говорю что тут не так просто
orignal
надо продумать вопрос
orignal
а еще надо шифрованные лизсеты для UDP
orignal
а там еще конь не валялся ))
weko
так это же на уровень ниже
weko
только параметры парсить и всё
orignal
неее там в DatagramDestination надо что то менять
orignal
я давно смотрел
weko
а чего так? странно
orignal
уже не помню
weko
если шифрованный просто наследуется от обычного или же там какая то логика сделано через флаг, то всё равно теже функции
weko
надо выходит только парсить параметры и передавать в Destination
weko
а защиту от дурака уже сложнее )
orignal
там же запрос делает не по хэшу а по хитрой херне
orignal
кроче не помню уже что там надо менять
weko
а
weko
ну короче если ООП правильно использовать то должно нормально быть
weko
потому что это уровень более низкий
orignal
угу
orignal
но он был добавлен позднее и сбоку
weko
ну тогда ясно
orignal
а переписывать целый кусок мне влом
weko
я просто вот думаю что конфигурацию дестинейшенов и туннелей надо сделать отдельную
weko
но это в теории в будущем
orignal
давно надо бы
weko
а то настройки в мешанину идут у них ))
orignal
просто опять же изначально было сделано вот так
orignal
что очевидно
weko
ну правда обратную совместимость ХЗкак
orignal
счнала у меня даже настроек тонней не было были просто параметры общие
weko
может назвать как то .conf2
orignal
да легко
orignal
параметр либо keys либо local_destination
orignal
и все
weko
ну да логично
weko
а сами десты задавать в другом файле типо destinations.conf и destinations.d
weko
удобнее даже dests.conf и dests.d
orignal
я кстати так в whitei2p и делал
weko
ну он то позже уже
orignal
но я его так и не сделал
weko
i2p daemon и white i2p
weko
смешно
orignal
так я его так назвал назло деду ))