Нам удалось найти базу данных клиента, который выполняет
бесконечный цикл запросов TTH
и повторить это в лабораторных условиях.
Данная ошибка происходит из-за разрушенной базы данных на той стороне.
C:\777777777777777777771>echo PRAGMA integrity_check; | sqlite3.exe FlylinkDC.sqlite
*** in database main ***
Main freelist: freelist leaf count too big on page 50621
Page 51783: btreeInitPage() returns error code 11
On tree page 21791 cell 14: Rowid 10 out of order (previous was 197822)
On tree page 21791 cell 14: invalid page number 1768300021
On page 50828 at right child: invalid page number 51787
Fragmentation of 9 bytes reported as 0 on page 3020
On tree page 50994 cell 79: 2nd reference to page 50621
On tree page 50994 cell 79: Child page depth differs
On tree page 50994 cell 80: Child page depth differs
Page 51784: btreeInitPage() returns error code 11
Error: near line 1: database disk image is malformed
В версии выше r401 это исправлено и приводит к завершению работы приложения в случае любого исключения при работе с базой данных.
В версии 403 и выше к сообщению будет добавлена краткая инструкция как в этих случаях поступать пользователю.
Предлагаю обсудить способ, как бороться со старыми клиентами, которые остаются у пользователей
Рабочая версия такая
1. в bool UploadManager::prepareFile(UserConnection& aSource, const string& aType, const string& aFile, int64_t aStartPos, int64_t& aBytes, bool listRecursive)
При помощи map-контейнера ведем счетчик загрузок по ключу Юзер + aFile когда aFile имеет тип: TTH/
2. Если счетчик по паре превышает N раз - то
- зовем aSource.disconnect() и убиваем соединение.
- баним aSource.error("Вы забанены т.к. у вас старая версия клиента - обновитесь");
Возможно, дополнительно шлем сообщение личкой
кто что скажет?
повторить DoS атаку можно так:.
1. на клиенте А старой версии r398 нужно поставить битую базу данных
FlylinkDC-sqlite-corrupt.rar
2. на клиенте В расшарить 21.Одеяло.avi
это мультик с TTH - HDWK5FVECXJDLTECQ6TY435WWEE7RU25RSQYYWY
через некоторое время А начнет досить В
![](http://1.bp.blogspot.com/_YBd5SH5XWpA/TUeGEx0wfrI/AAAAAAAAB-8/WcpEIVjxtYE/s320/dos.png)
42 комментария:
Сделайте автоматическое обновление как у Chrome и проблем таких не будет, многие не умеют/боятся переустанавливать программы.
давно пора это сделать
Норм, только бан на сколько времени и бан на что (ип\ник\др)?
В личку нужно отправлять тоже, текст изменить бы, для особо не понятливых...
Сделайте автоматическое обновление как у Chrome и проблем таких не будет, многие не умеют/боятся переустанавливать программы.
Сделать то сделают, вопрос в другом - Как бороться с древними версиями? Зачастую пользователь такого "спамера" и не догадывается что Ддосит другие клиенты. Попробуй заставь народ обновиться до последней версии - многие даже не знают как настроить клиент.
Тут помогут админы хабов (если им больше нечем заняться конечно), простейшим скриптом с фильтрацией "Тэга клиента" предупреждать юзеров.
"Тут помогут админы хабов (если им больше нечем заняться конечно)"
Помогают бесполезно типа качает и ладно, многие не знают как это делать.
Предлагаю так: чтоб выводило сообщение что доступна новая версия( что в принципе и так есть) и в настройках поставить автообновление и поставить галку ( если оно включено чтоб выводило ваш клиент будет закрыт для обновления, и отчет времени) типо наверно так.
Лучше более радикальное решение. В программе сделать опцию Забанить старые клиенты (по умолчанию включить), при бане отправлять сообщение о том, что клиент устарел и ссылку на скачивание нового клиента. А лучше сделайте автообновление в r500, чтобы такой проблемы вообще не возникало.
Я за принудительное обновление, тока сделать надо грамотно и всё учесть. А что допустим если вы выпустите версию которая всё время падает и клиенты обновятся до неё, и что тогда? Будет падать пока вручную не обновишь... Надо всё предусмотреть, как вариант сделать лаунчер или апдейтер которые будут висеть в трее и проверять наличие обнов...
Обычно делают лаунчер, который запускает прогу, и фоне проверят наличие новых версий, и если есть но скачивает и заменяет файлы, а при следующем запуске запускает уже новую версию.
Последний вариант самый лучший. Главное чтобы обновление шло совсем втихаря. А то есть такие товарищи, которые могут оборвать скачку обновления (умру, но дам клиенту обновиться).
А что делать тем, у кого локальная сеть? Очень много хабов с локальными сетями и у людей нет выхода на инет... Значит систему обновления нужно делать переносимой. Т.е какой-то блок ставится у провайдера, есть система обновления этого блока у провайдера. А вот сборки провайдерские должны в себе уже иметь работу обновления именно с контентом провайдера.
Мне понравилась идея про серверную часть. Т.е. если нету выхода в интернет в сети то:
-нужно встроить в клиент проверку на наличие доступа в интернет. по-умолчанию предлагаю считать что интернет есть. если нет то обращаемся к хабу за последней версией.
-на хабе/сервере ставиться "блок" к которому иногда коннектяться лаунчеры клиентов и проверяют наличие обнов. если есть обновляются в фоновом режиме.
-серверная часть должно быть устроена так, чтобы её можно было принести на флешке(с актуальной на данный момент версией) и оперативно установить.
-если интернет есть, то тогда без вопросов обновляем всё в фоновом режиме.
если это соберётесь это реализовывать, то нужно подумать как снизить нагрузку на хаб/сервер.
Ну тогда уже если делать такой "локальный сервер обновлений"? то пусть он программе выдает магнетку, и флай уже сам качает новую версию прям с хаба.
К сожалению пока не произойдёт достаточно таких эксцессов как этот никто из имеющих отношение к разработке флая и даже сам Павел никогда не посмотрят в сторону разумной и крайне необходимой идеи. По сути мы наблюдаем на примере русскую народную пословицу: Пока гром не грянет мужик не перекрестится.
Я уверен это будет настоящей эпопеей.
Вы никогда не знали как нужно делать клиент и что нужно людям.
Работаете тут за бесплатно для кучи баранов и кретинов. Все идеи которые появились в первые в грейлинке и которые вы спёрли вы и то по сей момент нормально реализовать не можете. Только мучаете тех кто следит за флайлинком понимая что чуда не произойдёт но всё же хочет быть в курсе событий. Вы просто бездарности. Сами ничего не можете придумать. Хорошие и классные идеи отвергаете. То взяли от грейлинка взяли криво и забыли. Над разработчиками всегда берут шествие личности творческие, вдохновители, креативщики и большие идейщики. У вас в команде все узколобые и глупые программеры включая Павла.
Уважаемый аноним
К сожалению пока не произойдёт достаточно таких эксцессов как этот никто из имеющих отношение к разработке флая и даже сам Павел никогда не посмотрят в сторону разумной и крайне необходимой идеи. По сути мы наблюдаем на примере русскую народную пословицу: Пока гром не грянет мужик не перекрестится.,
Идею в студию.
Работаете тут за бесплатно для кучи баранов и кретинов. Все идеи которые появились в первые в грейлинке и которые вы спёрли вы и то по сей момент нормально реализовать не можете.
А они могут нормально реализовывать ? посмотрите их лог изменений, там тоже не мало всяких ляпов, это раз. В вторых им очень удобно тырить идеи с других клиентов с открытым кодом, от них же мы еле допросились формат TTH NTFS Stream. Не успели мы прикрутить MediaInfo как поддержка тут же появилась и у них. вы всё просите DCLS ссылки... давно бы сделали, если бы грей не закрывал свой код, они это придумали и нам приходится по увиденному придумывать велосипед, а это не такая и простая задача, мы не китайцы, которые увидев что-то могут в точности скопировать и у нас нет пары сотен китайцев в подвале, которые это с легкостью бы сделали.
Да и банить не надо, лучше просто скидывать подключение, на некоторых хабах за бан кикают с хаба ботом автоматически
Анонимная творческая личность
прошу воздержаться от оскорблений
и стараться писать по теме с конкретными техническими предложениями.
Алгоритма автоматического обновления
у нас нет.
предлагаю в теме обсудить алгоритм защиты от DoS атаки.
Алгоритм защиты от DoS атаки:
Автообновление + блокировка старых клиентов с отправкой в личку сообщений о необходимости обновится.
Не давать скачивать старым версиям <400, и писать в личу о том что их клиент устарел. А то так получается история как с IE6, уже всем миром с ним борятся, сама M$ и даже некоторые европейские страны заявляли, что это "прокисшее молоко", а толку нету. Разработчики веба ломают мозг и пишут костыли под IE6, пользователи видят, что всё нормально показывает и не видят причин обновляться, вот так и получается замкнутый круг.
Давно борюсь за обновнение юзерами Флайлинка, прошу обновиться тех, кто просит слот. Отказ в выдаче слота действует далеко не всегда.
Бан старых версий нужен. Как и в автобане надо сделать сообщение в статусной графе закачки, а не в ЛС
Пока молния в жопу не ударит, мужик не перекрестится!
Так же сделать, чтобы инсталляк определял директорию, в которой находится Flylink, и инсталил новую версию туда, а то устанавливается по умолчанию в C:\Flylink. Надеюсь, не надо объяснять, что это сильно упростит обновление программы неграмотным пользователям.
Я считаю, что бан - это слишком.
Считаю, что вполне достаточно кика с сообщением в личку и в статусной графе закачки.
Автообновление с "нуля" трудновыполнимо:
Во-первых будет излишне нагружать хабы, во-вторых может переписать нормальную версию глючной.
Абсолютно бредовая идея всяких обновлялок, сидящих в трее - вам мало мусора в трее???
Если воплощать обновление, то это должно выглядить как в программе mTorrent, поставить по-умолчанию галку "проверка обновлений" и возможность установить галку "обновляться до бета-версий".
Вот примерно так. А программы все воруют друг у друга - и это правильно)))
Добавить в автобан или реализовать по другому эту функцию...
Лс или в строка передачи не важно, главное достучаться до пользователя со старым клиентом что необходимо обновление
Только не через лс, делайте в строке передачи. Иначе в бан на многих хабах раздающие залетят.
>Абсолютно бредовая идея всяких обновлялок, сидящих в трее - вам мало мусора в трее?
Зачем в трее, делается без трея и без окна, проверят наличие новой версии и сама закрывается она не сидит постоянно а только при запуске флая.
>Анонимная творческая личность
прошу воздержаться от оскорблений
Это критика.
>и стараться писать по теме с конкретными техническими предложениями.
В этом нет никакого смысла так как большинство моих предложений за всё время существования флайлинка сочли бредовыми.
>Алгоритма автоматического обновления
у нас нет.
предлагаю в теме обсудить алгоритм защиты от DoS атаки.
Знаете Павел а вы ведь этим постом подтвердили что вы скажем так помягче дурак. Автоматическое обновление это крайне важно.
Вы слепой?
Я не говорил что, авто-обновление не важно, я сказал, что у нас нет алгоритма применимого к флаю.
Сотрясать воздух анонимно проще всего.
если такой умный пришли хоть один патч на публичное обозрение.
и только после этого можешь строить из себя нахального крутого программера.
и забукмарь свои сообщения себе в календарь
с напоминанием показать детям.
если после его прочтение через много лет не станет стыдно за свои мессаги в публичном блоге.
Анонимная публикация сообщений в данный блог с сегодняшнего дня запрещена.
Анонимная публикация сообщений в данный блог с сегодняшнего дня запрещена.
До полной кучи и голосовать запретить надо.
Кстати всех недовольных прошу обратить внимаение что поддерживается OpenID, в том числе и от AOL, т.е. по номеру ICQ, думаю анонимным крутым тру программистам не составит труда включить его поддержку в своём профиле.
Бороться со старыми версиями можно просто:
1) не пускать на хабы, если владельцы хабов не понимают чем плохи старые клиенты, ну что же их дело.
2) переводить хабы на ADC протокол, старые клиенты с ним просто не заработают ;)
На счёт ADC: во всю идёт разработка моста к ADCH++ по поддержки скриптов от Ptokax, простые уже работают на ура, скрипты вроде Экзекутора должны заработать в ближайшем релизе 2.53.
будут ещё обновления?
будут, пока тестируем новый функционал, не хотим вам давать сырую бетку
бета70 86 - зависла при долгом развернутом виде, с открытой очередью закачки..
"не хотим вам давать сырую бетку" -улыбнуло
Нужен автобан на старые версии. Потихонечку заставим всех обновиться )
странно
но в последнее время стало таких дос атак больше
но шара у досящих людей =0 а клиент стронг 2.42
автобан необходим людей которые так досят :(
Т.к. я наиболее часто освещал данную проблему флайлинка. И ещё год назад намекал на проблему именно sqlite, правда разработчики флайлинка не шли на контакт. Пришлось собственным разработчиком обзавестись. Ну так вот, не очень сложно было найти место в коде, которое при определённых условиях могло отсылать сотни запросов в секунду.
Т.к. на нашем хабе 90% сидят на нашем автоматически обновляемом клиенте. Проблему решали именно на проблемном клиенте. Т.е. не давали столько запросов отсылать.
Но как бы сказал Хаус нужно лечить не симптомы, а болезнь.
Т.к. такой человек ничего скачать не может. А база сама чиниться не умеет, вот мне кажется надо в этом направлении думать. Для начала хотя бы просто удалять её.
У вас целый год был патч исправляющий ошибку и вы им не поделились?
О да, это единственное что вы удосужились написать. Вы в своём репертуаре Павел. Больше походит на оправдание своей инертности, как главного по проекту.
Вот вы сделали сейчас отсылание фейла с сообщением "у вас старый клиент", для реализации этого(как борьбы с флудом) не нужно было вообще в суть проблемы вникать, и сделать это можно было ох как давно.
Поиск места, где не контролируемо могут отсылаться запросы, то же было простой задачей(считаю по потраченным деньгам).
Ну, а о том что sqlite ломается и это ставит крест на возможности скачать что-то, известно с тех пор как появился sqlite в flylink(и рекомендации были удалять битую базу).
Не было известно лишь о том что флуд связан именно sqlite(хотя намёки я вам давал (1 пост)). Можно было обратить внимание и проверить.
P.s. в наших реализ версиях ещё нет, готового варианта. Т.к. я считаю защита от флуда лишь половина проблемы. Хаб и проблемный клиент всё ещё испытывают сопутствующие проблемы.
проблема старая. давно замечал такую хрень у клиентов. кто на старых версия программ тупо качают файлик TTH и бесконечно так. всегда таких добавлял в списки друзей и блокировал скачивание :D
а как разрушается эта база данных?
У одной девушки когда она ставит новую версию флайлинка он похоже работает до первого перезапуска... потом при запуске выдается ошибка базы данных. Затем она ставит старую версию, которая работает. Как быть, когда ждать версию которая "лечит" базу данных ?
Отправить комментарий