DHT bootstrap сервер для FlylinkDC++

Разработка и поиск скриптов, обсуждение PtokaX.
Аватара пользователя
flylinkdc
 
Хаб: dchub://dc.fly-server.ru
 
Сообщения: 427
Откуда: Караганда -> Липецк

Сообщение 02 апр 2014, 15:10

Еще одну багу нашел похоже.
но уже на клиенте

Код: Выделить всё
91.229.148.4 - - [02/Apr/2014:16:06:59 +0400] "GET /dcDHT.php?cid=MTDAAY6M6L6BNVW3UYME2AR2WYO4UGFMNX6ZSFA&encryption=1 HTTP/1.1" 200 2286 "-" "FlylinkDC++ r501 build 9474"
91.229.148.4 - - [02/Apr/2014:16:07:01 +0400] "GET /dcDHT.php?cid=MTDAAY6M6L6BNVW3UYME2AR2WYO4UGFMNX6ZSFA&encryption=1 HTTP/1.1" 200 2286 "-" "FlylinkDC++ r501 build 9474"
91.229.148.4 - - [02/Apr/2014:16:07:03 +0400] "GET /dcDHT.php?cid=MTDAAY6M6L6BNVW3UYME2AR2WYO4UGFMNX6ZSFA&encryption=1 HTTP/1.1" 200 2286 "-" "FlylinkDC++ r501 build 9474"
91.229.148.4 - - [02/Apr/2014:16:07:09 +0400] "GET /dcDHT.php?cid=MTDAAY6M6L6BNVW3UYME2AR2WYO4UGFMNX6ZSFA&encryption=1 HTTP/1.1" 200 2286 "-" "FlylinkDC++ r501 build 9474"
91.229.148.4 - - [02/Apr/2014:16:07:11 +0400] "GET /dcDHT.php?cid=MTDAAY6M6L6BNVW3UYME2AR2WYO4UGFMNX6ZSFA&encryption=1 HTTP/1.1" 200 2286 "-" "FlylinkDC++ r501 build 9474"
91.229.148.4 - - [02/Apr/2014:16:07:13 +0400] "GET /dcDHT.php?cid=MTDAAY6M6L6BNVW3UYME2AR2WYO4UGFMNX6ZSFA&encryption=1 HTTP/1.1" 200 2286 "-" "FlylinkDC++ r501 build 9474"
91.229.148.4 - - [02/Apr/2014:16:07:19 +0400] "GET /dcDHT.php?cid=MTDAAY6M6L6BNVW3UYME2AR2WYO4UGFMNX6ZSFA&encryption=1 HTTP/1.1" 200 2286 "-" "FlylinkDC++ r501 build 9474"
91.229.148.4 - - [02/Apr/2014:16:07:21 +0400] "GET /dcDHT.php?cid=MTDAAY6M6L6BNVW3UYME2AR2WYO4UGFMNX6ZSFA&encryption=1 HTTP/1.1" 200 2286 "-" "FlylinkDC++ r501 build 9474"
91.229.148.4 - - [02/Apr/2014:16:07:23 +0400] "GET /dcDHT.php?cid=MTDAAY6M6L6BNVW3UYME2AR2WYO4UGFMNX6ZSFA&encryption=1 HTTP/1.1" 200 2286 "-" "FlylinkDC++ r501 build 9474"
91.229.148.4 - - [02/Apr/2014:16:07:29 +0400] "GET /dcDHT.php?cid=MTDAAY6M6L6BNVW3UYME2AR2WYO4UGFMNX6ZSFA&encryption=1 HTTP/1.1" 200 2286 "-" "FlylinkDC++ r501 build 9474"
91.229.148.4 - - [02/Apr/2014:16:07:31 +0400] "GET /dcDHT.php?cid=MTDAAY6M6L6BNVW3UYME2AR2WYO4UGFMNX6ZSFA&encryption=1 HTTP/1.1" 200 2286 "-" "FlylinkDC++ r501 build 9474"
91.229.148.4 - - [02/Apr/2014:16:07:33 +0400] "GET /dcDHT.php?cid=MTDAAY6M6L6BNVW3UYME2AR2WYO4UGFMNX6ZSFA&encryption=1 HTTP/1.1" 200 2286 "-" "FlylinkDC++ r501 build 9474"
91.229.148.4 - - [02/Apr/2014:16:07:39 +0400] "GET /dcDHT.php?cid=MTDAAY6M6L6BNVW3UYME2AR2WYO4UGFMNX6ZSFA&encryption=1 HTTP/1.1" 200 2286 "-" "FlylinkDC++ r501 build 9474"
91.229.148.4 - - [02/Apr/2014:16:07:41 +0400] "GET /dcDHT.php?cid=MTDAAY6M6L6BNVW3UYME2AR2WYO4UGFMNX6ZSFA&encryption=1 HTTP/1.1" 200 2286 "-" "FlylinkDC++ r501 build 9474"
91.229.148.4 - - [02/Apr/2014:16:07:43 +0400] "GET /dcDHT.php?cid=MTDAAY6M6L6BNVW3UYME2AR2WYO4UGFMNX6ZSFA&encryption=1 HTTP/1.1" 200 2286 "-" "FlylinkDC++ r501 build 9474"
91.229.148.4 - - [02/Apr/2014:16:07:49 +0400] "GET /dcDHT.php?cid=MTDAAY6M6L6BNVW3UYME2AR2WYO4UGFMNX6ZSFA&encryption=1 HTTP/1.1" 200 2286 "-" "FlylinkDC++ r501 build 9474"
91.229.148.4 - - [02/Apr/2014:16:07:51 +0400] "GET /dcDHT.php?cid=MTDAAY6M6L6BNVW3UYME2AR2WYO4UGFMNX6ZSFA&encryption=1 HTTP/1.1" 200 2286 "-" "FlylinkDC++ r501 build 9474"
91.229.148.4 - - [02/Apr/2014:16:07:53 +0400] "GET /dcDHT.php?cid=MTDAAY6M6L6BNVW3UYME2AR2WYO4UGFMNX6ZSFA&encryption=1 HTTP/1.1" 200 2286 "-" "FlylinkDC++ r501 build 9474"


Вероятно в старых версиях FlylinkDC++ (заметил на build 9474) был глюк и запрос к DHT Bootstrap шел каждую секунду.
а в новых я наверно зря user agent-а выкинул.

Вопрос - в php вообще есть возможность создание глобального объекта в памяти - типа хэш-мапы
чтобы он жил все время и был виден между коннектами с разных сессий?
Последний раз редактировалось flylinkdc 02 апр 2014, 15:30, всего редактировалось 1 раз.

Аватара пользователя
HackFresse
 
Сообщения: 507

Сообщение 02 апр 2014, 16:14

нагородить можно много чего, вопрос целесообразности.

не нужно зацикливаться на мелких технических нюансах, тут нужно от бОльшего уже переходить к мелочам, а никак не наоборот

а счет вредителей - viewtopic.php?f=6&t=1010 - если кто-то это делает, значит, это кому-нибудь нужно

Аватара пользователя
flylinkdc
 
Хаб: dchub://dc.fly-server.ru
 
Сообщения: 427
Откуда: Караганда -> Липецк

Сообщение 02 апр 2014, 17:40

HackFresse писал(а):не нужно зацикливаться на мелких технических нюансах

Мне они мешают т.к. работают в продуктивном скрипте с 2011 года и создают лишнюю нагрузку!

Я в первом посте попросил подсказать по действующему php подсказать как сделать

1. Реализовать расшаренный коннект к базе (сейчас используется MySQL)
2. Биндинг переменных

Ответа не получил.
ты тоже не знаешь как это делается?


Аватара пользователя
HackFresse
 
Сообщения: 507

Сообщение 23 апр 2014, 00:07

А как генерится CID для каждого дхт-клиента? Какие есть особенности?

Аватара пользователя
flylinkdc
 
Хаб: dchub://dc.fly-server.ru
 
Сообщения: 427
Откуда: Караганда -> Липецк

Сообщение 23 апр 2014, 00:33

HackFresse писал(а):А как генерится CID для каждого дхт-клиента? Какие есть особенности?


Если DHT_KEY не прописан в конфиге(первый запуск) то генерация идет псевдо-случайным генератором

1.
if (SETTING(DHT_KEY).length() != 39 || CID(SETTING(DHT_KEY)).isZero())
set(DHT_KEY, CID::generate().toBase32());

2.
CID CID::generate()
{
uint8_t data[CID::SIZE];
for (size_t i = 0; i < sizeof(data); ++i)
{
data[i] = (uint8_t)Util::rand();
}
return CID(data);
}

Аватара пользователя
HackFresse
 
Сообщения: 507

Сообщение 23 апр 2014, 14:15

хм.. вот я вижу старый коммент http://habrahabr.ru/post/133102/#comment_4418695 про ADC

— передача настоящего CID, позволяющая однозначно идентифицировать одного и того же клиента на любом хабе (в NMDC иллюзия CID генерируется на стороне клиента хешем НИК+АДРЕС_ХАБА), от этого появляются плюшки вроде единого личного чата между собеседниками для всех хабов и т.д.


Т.е. теперь схема работы такая:

1) Если в глобальных настройках CID не задан принудительно вручную, то генерим его (массив каких-то рандомных значений, из которых получается строка в base32 длиной в 39 символов) и записываем в глобальные настройки.
2) Сохранённое значение используем на всех хабах вне зависимости от протоколов, хабов и ников.
3) CID меняется только в случае изменения глобальной настройки (обнуление значения или ручная правка юзером), при перезапуске клиента CID остаётся прежним.

всё верно?
Последний раз редактировалось HackFresse 23 апр 2014, 14:15, всего редактировалось 1 раз.

Аватара пользователя
flylinkdc
 
Хаб: dchub://dc.fly-server.ru
 
Сообщения: 427
Откуда: Караганда -> Липецк

Сообщение 23 апр 2014, 19:35

Да. CID остается всегда один. генерируется он снова только если его сотрут в конфиг файле руками в FAR-е
т.к. в GUI замены этого параметра нет

Аватара пользователя
HackFresse
 
Сообщения: 507

Сообщение 30 апр 2014, 12:07

А как часто дц-клиент обращается к dht-серверу?
При загрузке/включении dht-сети, чтобы забрать первоначальный список других участников -- понято, а дальше?

Т.е. при сценарии "утром включили дц-клиента с активным dht-функционалом, и не выключали до позднего вечера" -- сколько раз и в каких случаях дц-клиент обратится к дхт-серверу?

Аватара пользователя
flylinkdc
 
Хаб: dchub://dc.fly-server.ru
 
Сообщения: 427
Откуда: Караганда -> Липецк

Сообщение 30 апр 2014, 14:24

Есть таймер секундный
void TaskManager::on(TimerManagerListener::Second, uint64_t aTick) noexcept

В нем такой алгоритм

Код: Выделить всё
		const bool l_15000 = aTick - lastBootstrap > 15000;
const bool l_nodes_cnt = aTick - lastBootstrap >= 2000 && l_dht->getNodesCount() < 2 * DHT_K;
if (l_15000 || l_nodes_cnt)
{
// bootstrap if we doesn't know any remote node
const bool l_result = BootstrapManager::getInstance()->process();
if(l_result == false)
{
m_lastDownloadDHTError = aTick;
}
else
{
m_lastDownloadDHTError = 0;
}
lastBootstrap = aTick;
}
}


BootstrapManager::getInstance()->process() "выталкивает" один элемент из массива полученных нод
если их становится = 0 то идет снова обращение к dht-серверу.
aTick - lastBootstrap > 15000 - т.е. гарантированно каждые 15 сек обрабатывается одна нода.
DHT_K - зашита и равна 10
я залогирую детально эту всю часть чтобы можно было посмотреть как и что шлется..

Аватара пользователя
HackFresse
 
Сообщения: 507

Сообщение 30 апр 2014, 19:07

При загрузке дц-клиента взяли 50 каких-то нод, начали перебирать их по-очереди (делать попытки подключаться).

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

Обходим по таймеру все записи в dht-таблице (проверка активности нод), если не осталось ни одной активной -- идём к бутстрап-серверу?

Аватара пользователя
flylinkdc
 
Хаб: dchub://dc.fly-server.ru
 
Сообщения: 427
Откуда: Караганда -> Липецк

Сообщение 30 апр 2014, 19:50

Да, что-то вроде такого.

Аватара пользователя
HackFresse
 
Сообщения: 507

Сообщение 01 май 2014, 00:04

А можно сделать обращение к бутстрап-серверу более частым?

Когда у клиента количество активных нод ниже какого-то минимального значения (но обращения 1 раз в n минут, чтобы не зацикливался).

Как бутстрап-сервер узнает, какие из отдаваемых им dht-нод актуальны?
Пока только по обращениям за первоначальным xml-списком (ты запросил список == ты активная нода), а это не очень точные и верные данные.

Запросить список я мог неделю назад, у меня IP уже 5 раз менялся, но из-за достаточно большого количества известных нод (найденных самостоятельно) к бутстрап-серверу я уже не обращусь и никак ему не скажу, что я очень даже активная нода, но с другим IP.

А сервер будет выдавать всем новеньким устаревшую инфу.

Аватара пользователя
flylinkdc
 
Хаб: dchub://dc.fly-server.ru
 
Сообщения: 427
Откуда: Караганда -> Липецк

Сообщение 16 май 2014, 09:20

В базе накопилось много старых записей.

SELECT * FROM `dhtInfo` WHERE dht_time < DATE_ADD(NOW(), INTERVAL -10 DAY)

11 тыщ записей.

Куда правильнее такой удалятор засунуть
в сам скрипт никак нельзя? чтобы не связываться с хроном?

Как в php сделать код - чтобы он срабатывал один раз в сутки?

Аватара пользователя
Chavy
 
Сообщения: 46

Сообщение 16 май 2014, 22:18

flylinkdc писал(а):Как в php сделать код - чтобы он срабатывал один раз в сутки?

В файлик или базу записать текущее время. После при каждом заходе посетителя на сайт сверять записанное в файл время с текущим. Если прошло более суток, попробовать установить лок на файл. Если лок установился - записывать в файл текущее время и выполнить требуемый код. Лок на файл гарантирует что скрипт запустится один раз.

Аватара пользователя
flylinkdc
 
Хаб: dchub://dc.fly-server.ru
 
Сообщения: 427
Откуда: Караганда -> Липецк

Сообщение 06 июн 2014, 10:18

Кусок кода на стороне клиента
Код: Выделить всё
		const DHTServer& l_server = CFlyServerConfig::getRandomDHTServer();

string l_url = l_server.getUrl() + "?cid=" + ClientManager::getMyCID().toBase32() + "&encryption=1"; // [!] IRainman fix.

// store only active nodes to database
if (ClientManager::isActive(nullptr))
{
l_url += "&u4=" + Util::toString(DHT::getInstance()->getPort());
}



к урлу дописывается u4= только если клиент работает в активном режиме + коммент store only active nodes to database

В php-сервера стоит вот такая штука
Код: Выделить всё
// UDPPort
if (!isset($_GET["u4"])) {
$udp = 6250;
} else {
$udp = $_GET["u4"];
}

if ($udp == 0){
$udp=6250;
}


тут явно что-то не доделано.
HackFresse - что скажешь?

Аватара пользователя
flylinkdc
 
Хаб: dchub://dc.fly-server.ru
 
Сообщения: 427
Откуда: Караганда -> Липецк

Сообщение 06 июн 2014, 10:24

Еще вопрос по апачу
я хочу залочить доступ к dht клиенту определенной версии - 9474 билд
В нем наверное где-то ошибка и обращение к серверы идет очень часто :(

Cделал вот такой файлик.

Код: Выделить всё
/var/www# cat .htaccess
RewriteEngine On
#SetEnvIfNoCase user-Agent "^Mozilla.*" bad_bot
SetEnvIfNoCase user-Agent "^FlylinkDC++ r501 build 9474.*" bad_bot
SetEnvIfNoCase user-Agent "^FlylinkDC++ r501-x64 build 9474.*" bad_bot
<Limit GET HEAD>
Order Allow,Deny
Allow from all
Deny from env=bad_bot
</Limit>


php скрипт не зовется
но в логах попытки доступа всеравно есть
Код: Выделить всё
/var/log/apache2# tail -f access.log  | grep 178.172.240.108
178.172.240.108 - - [06/Jun/2014:11:20:56 +0400] "GET /dcDHT.php?cid=7I35FBBIFJEJOTK7GVLV4EAQ2RZTXN52DFHZTEQ&encryption=1&u4=6250 HTTP/1.1" 400 423 "-" "FlylinkDC++ r501 build 9474"
178.172.240.108 - - [06/Jun/2014:11:20:58 +0400] "GET /dcDHT.php?cid=7I35FBBIFJEJOTK7GVLV4EAQ2RZTXN52DFHZTEQ&encryption=1&u4=6250 HTTP/1.1" 400 423 "-" "FlylinkDC++ r501 build 9474"
178.172.240.108 - - [06/Jun/2014:11:21:04 +0400] "GET /dcDHT.php?cid=7I35FBBIFJEJOTK7GVLV4EAQ2RZTXN52DFHZTEQ&encryption=1&u4=6250 HTTP/1.1" 400 423 "-" "FlylinkDC++ r501 build 9474"
178.172.240.108 - - [06/Jun/2014:11:21:06 +0400] "GET /dcDHT.php?cid=7I35FBBIFJEJOTK7GVLV4EAQ2RZTXN52DFHZTEQ&encryption=1&u4=6250 HTTP/1.1" 400 423 "-" "FlylinkDC++ r501 build 9474"
178.172.240.108 - - [06/Jun/2014:11:21:08 +0400] "GET /dcDHT.php?cid=7I35FBBIFJEJOTK7GVLV4EAQ2RZTXN52DFHZTEQ&encryption=1&u4=6250 HTTP/1.1" 400 423 "-" "FlylinkDC++ r501 build 9474"
178.172.240.108 - - [06/Jun/2014:11:21:16 +0400] "GET /dcDHT.php?cid=7I35FBBIFJEJOTK7GVLV4EAQ2RZTXN52DFHZTEQ&encryption=1&u4=6250 HTTP/1.1" 400 423 "-" "FlylinkDC++ r501 build 9474"
178.172.240.108 - - [06/Jun/2014:11:21:18 +0400] "GET /dcDHT.php?cid=7I35FBBIFJEJOTK7GVLV4EAQ2RZTXN52DFHZTEQ&encryption=1&u4=6250 HTTP/1.1" 400 423 "-" "FlylinkDC++ r501 build 9474"


логирование отключить как-то можно избирательно по юзер-агенту?

Аватара пользователя
flylinkdc
 
Хаб: dchub://dc.fly-server.ru
 
Сообщения: 427
Откуда: Караганда -> Липецк

Сообщение 06 июн 2014, 11:16

Вчера приделал вот такую штуку
1. На стороне клиента в момент завершения работы DHT-менеджера шлю дополнительный запрос с параметром &stop=1
Код: Выделить всё
void BootstrapManager::shutdown()
{
if(!m_dht_bootstrap_count.empty())
{
CFlyLog l_dht_log("[Shutdown DHT]");
for(auto i=m_dht_bootstrap_count.cbegin();i!= m_dht_bootstrap_count.cend();++i)
{
std::vector<byte> l_data;
const string l_url = i->first + "&stop=1";
l_dht_log.step("Bootstrap count = " + Util::toString(i->second) + ", URL: " + l_url);
Util::getBinaryDataFromInet(Text::toT(m_user_agent).c_str(), 4096, l_url, l_data, 2000);
}
m_dht_bootstrap_count.clear();
}
}


2. На стороне сервера добавил вот такой кусок удаляющий по ключу CID+IP
проверку по IP я добавил чтобы нельзя было удалить из базы данные с другого хоста (CID ведь можно подделать в URL-е)
хотя тут может и зря защитился :)

Код: Выделить всё
if (isset($_GET["stop"]))
{
$query = "delete FROM $data_table WHERE cid = '$cid' and ip = '$host'";
$result = mysql_query($query, $connect) or die(mysql_error());
mysql_close($connect);
die("Shutdown OK!");
}


Код: Выделить всё
 tail -f access.log  | grep MSL2NL7QB24PKECJEJFPGWY7S3TGTPMXPWDTWPA
81.20.194.149 - - [06/Jun/2014:12:06:15 +0400] "GET /dcDHT.php?cid=MSL2NL7QB24PKECJEJFPGWY7S3TGTPMXPWDTWPA&encryption=1&u4=10890 HTTP/1.1" 200 2349 "-" "FlylinkDC++ r503-beta29 build 16562"
81.20.194.149 - - [06/Jun/2014:12:06:20 +0400] "GET /dcDHT.php?cid=MSL2NL7QB24PKECJEJFPGWY7S3TGTPMXPWDTWPA&encryption=1&u4=10890&stop=1 HTTP/1.1" 200 344 "-" "FlylinkDC++ r503-beta29 build 16562"


Критикуйте?
Мне не понятно почему этой операции не было сделано в оригинальном StrongDC++
и клиент не сообщал серверу о том что он выключается..
Без нее ведь база достаточно быстро будет пухнуть.

Или тут в чем-то другом причина и нужно хранить мертвых клиентов?

Аватара пользователя
HackFresse
 
Сообщения: 507

Сообщение 06 июн 2014, 13:35

Дополнительный запрос куда-то в интернеты при закрытии клиента?
Процесс флайлинка и так совсем недавно долго и упорно висел в памяти после закрытия клиента (проблема точно решена?), добавлять еще время на дополнительный запрос.. лично я бы не стал


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

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


HackFresse писал(а):А можно сделать обращение к бутстрап-серверу более частым?

Когда у клиента количество активных нод ниже какого-то минимального значения (но обращения 1 раз в n минут, чтобы не зацикливался).

Как бутстрап-сервер узнает, какие из отдаваемых им dht-нод актуальны?
Пока только по обращениям за первоначальным xml-списком (ты запросил список == ты активная нода), а это не очень точные и верные данные.

Запросить список я мог неделю назад, у меня IP уже 5 раз менялся, но из-за достаточно большого количества известных нод (найденных самостоятельно) к бутстрап-серверу я уже не обращусь и никак ему не скажу, что я очень даже активная нода, но с другим IP.

А сервер будет выдавать всем новеньким устаревшую инфу.

Аватара пользователя
flylinkdc
 
Хаб: dchub://dc.fly-server.ru
 
Сообщения: 427
Откуда: Караганда -> Липецк

Сообщение 06 июн 2014, 13:47

HackFresse писал(а):Дополнительный запрос куда-то в интернеты при закрытии клиента?

могу таймаут поставить 1 сек.
процесс флая висел долго у тебя? можешь повторить или опиши условия?
Считаю что обращение к dht-серверу при закрытии клиента необходимо чтобы удалить из таблицы заведомо мертвый IP-port

Аватара пользователя
HackFresse
 
Сообщения: 507

Сообщение 06 июн 2014, 14:52

процесс флая висел долго у тебя? можешь повторить или опиши условия?

Описывал уже, было подтверждение от других юзеров, viewtopic.php?f=6&t=1028&p=22212&hilit=%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D1%81#p22212 и дальше по теме, viewtopic.php?p=22260#p22260 .
Если в последней версии закрытие оптимально и процесс не висит после закрытия окна - очень хорошо. Но я этого не знаю/не тестировал, потому и поставил знак вопроса

Если дц-клиент будет сообщать о своей активности только в случае отсутствия у него локального списка dht-нод, и пытаться сообщать о своей неактивности только при закрытии -- будут ли все ноды в таблице актуальными ?

Аватара пользователя
flylinkdc
 
Хаб: dchub://dc.fly-server.ru
 
Сообщения: 427
Откуда: Караганда -> Липецк

Сообщение 10 июн 2014, 20:47

В 61 бетку добавил возможность включить логирование DHT
http://www.fly-server.ru/install/r5xx/src-bin/
Можно посмотреть что и как пересылается - возможно заметите баги/не оптимальности
пишите

Аватара пользователя
flylinkdc
 
Хаб: dchub://dc.fly-server.ru
 
Сообщения: 427
Откуда: Караганда -> Липецк

Сообщение 20 июн 2014, 09:46

Вкоммитил изменения серверной части.
https://github.com/pavel-pimenov/dht-se ... 8950a42a75

Идея алгоритма
1. новые версии флалинков после активации DHT отсылают запрос на тест UDP порта
если с внешнего сервера прошел ответный пакет UDP пакет по DHT порту то флай шлет на DHT сервер
запрос вида /dcDHT.php?cid=VTLZXAUSQMNMHKGWO3SIH3ZG3ZAUDXY5VKVGKWY&encryption=1&u4=17582&live=1
2. После завершение DHT менеджера - идет запрос такой
/dcDHT.php?cid=VTLZXAUSQMNMHKGWO3SIH3ZG3ZAUDXY5VKVGKWY&encryption=1&u4=17582&stop=1
3. Всем клиентам возвращается пачка узлов у которых поле live=1 т.е. мы гарантированно возвращаем IP:Port где прошел тест на доступность во внешний инет + узел еще включен (есть процент вероятности что он выключился аварийно но тут я пока не придумал как лучше)
может переодически слать "маркер жизни"...

Пример из лога:
Код: Выделить всё
95.188.83.94 - - [19/Jun/2014:23:03:14 +0400] "GET /dcDHT.php?cid=VTLZXAUSQMNMHKGWO3SIH3ZG3ZAUDXY5VKVGKWY&encryption=1&u4=17582&stop=1 HTTP/1.1" 200 288 "-" "FlylinkDC++ r503-beta63 build 17309"
95.188.83.94 - - [19/Jun/2014:23:07:07 +0400] "GET /dcDHT.php?cid=VTLZXAUSQMNMHKGWO3SIH3ZG3ZAUDXY5VKVGKWY&encryption=1&u4=17582&live=1 HTTP/1.1" 200 283 "-" "FlylinkDC++ r503-beta64 build 17320"
95.188.83.94 - - [20/Jun/2014:01:38:30 +0400] "GET /dcDHT.php?cid=VTLZXAUSQMNMHKGWO3SIH3ZG3ZAUDXY5VKVGKWY&encryption=1&u4=17582&stop=1 HTTP/1.1" 200 288 "-" "FlylinkDC++ r503-beta64 build 17320"
95.188.83.94 - - [20/Jun/2014:03:47:19 +0400] "GET /dcDHT.php?cid=VTLZXAUSQMNMHKGWO3SIH3ZG3ZAUDXY5VKVGKWY&encryption=1&u4=17582&live=1 HTTP/1.1" 200 283 "-" "FlylinkDC++ r503-beta64 build 17320"
95.188.83.94 - - [20/Jun/2014:07:42:03 +0400] "GET /dcDHT.php?cid=VTLZXAUSQMNMHKGWO3SIH3ZG3ZAUDXY5VKVGKWY&encryption=1&u4=17582&live=1 HTTP/1.1" 200 283 "-" "FlylinkDC++ r503-beta64 build 17320"
95.188.83.94 - - [20/Jun/2014:07:46:30 +0400] "GET /dcDHT.php?cid=VTLZXAUSQMNMHKGWO3SIH3ZG3ZAUDXY5VKVGKWY&encryption=1&u4=17582&stop=1 HTTP/1.1" 200 288 "-" "FlylinkDC++ r503-beta64 build 17320"
95.188.83.94 - - [20/Jun/2014:09:36:07 +0400] "GET /dcDHT.php?cid=VTLZXAUSQMNMHKGWO3SIH3ZG3ZAUDXY5VKVGKWY&encryption=1&u4=17582&live=1 HTTP/1.1" 200 283 "-" "FlylinkDC++ r503-beta64 build 17320"


Аватара пользователя
HackFresse
 
Сообщения: 507

Сообщение 23 июн 2014, 14:00

история о том, как поломать совместимость и игнорить всех клиентов старых версий

"Не обновился на r503-beta99 build 100500 -- никакая ты не DHT-нода. и пока не обновишься до самой последней дебаг-версии -- не попасть тебе в список. А в списке dht-узлов будут только те, кто последнюю тестовую версию поставил"

Аватара пользователя
flylinkdc
 
Хаб: dchub://dc.fly-server.ru
 
Сообщения: 427
Откуда: Караганда -> Липецк

Сообщение 23 июн 2014, 14:08

Данный код уже влит в релизную ветку.
ноды будут раздаваться всем клиентам - даже старым
только их список теперь будет актуальный
будут отдаваться только те, кто сидят на новых клиентах с открытыми DHT портами.
а остальные ноды (даже старые) найдутся уже без DHT сервера..

Пред.След.

Вернуться в Помощь & идеи



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

cron