Author

Topic: p2p DHT (Read 216 times)

full member
Activity: 1589
Merit: 214
June 28, 2022, 11:26:25 AM
#10
Короче, что я понял, из беглого гуглежа.
p2p-сети - состоят из пиров.
Пиры - это и клиенты и сервера одновременно.
Пиры - не знают, где другие пиры, и ищут пиров Multicast'ом.
Multicast работает по UDP-протоколу.
TCP-протокол - не поддерживает Multicast-запросы, и приходится изъёбываться со списоком нод,
либо поднимать sync-node для Peer-exchange.

Пока, из того, что я запилил - это вот эта форма обратной связи, на CSharp: https://github.com/username1565/CSharpServers/tree/FeedbackForm
Можете поднять, её где-нибудь, чтобы сливать туда - пруфы военных преступлений пидорашек в Украине.
Там впилена SQLite3, каптча, и постинг небольших файлов также.
Большие же файлы можно заливать в ipfs или torrent, а постить коротенькие ссылки и магнет-ссылки.

Сервер является одновременно HTTP/TCP/UDP, и если развить код UDP-сервера,
возможно можно было бы сделать эту шнягу децентрализованной, а оттого и нецензурируемой.
Можно было бы прикрутить синхронизацию базы, также.

Но моего энтузиазма, увы не хватает, так что ебитесь как хотите,
а я пойду пипсовать криптоговно неликвидное всякое,
раз у меня последнее спиздили, всякие конченные и нищие - рашистские и подхуйловские хуесосы ничтожные, из говнявесной параши скамной.
copper member
Activity: 1554
Merit: 489
Stop the war!
June 06, 2022, 12:09:19 AM
#9
Я недавно запилил собственную p2p либу для собственных нужд, с ней простейший менеджер пишется в 10 строк на яваскрипте и работает во всех браузерах.
Для полноценного форума, при желании, конечно допилить надо, но это проще мне будет чем с сишарпом ебаться.
full member
Activity: 1589
Merit: 214
June 05, 2022, 11:35:30 PM
#8
В визуал студии есть сишка, она изначально для сей и была предназначена, потом туда всякие шарпы пихать начали же))
У меня где-то был репо, где я игрался со шлангом. А вот же: https://github.com/username1565/cyclop
Столько вкладок в браузере открыл, чтобы гуглить этот синтаксис...
Компилировал gcc, из под командной строки, вроде.
Ещё TOX компилировал, помню через всякое вот такое вот (коммент) https://github.com/username1565/uTox_winXP/commit/cd23deef631183178d113cbac2dd1812f547fd85#comments

Не знал что Си можно с визуал-студио компилировать.
Но не хотелось бы начинать наноборду, с нуля, тем более - на незнакомом языке.

Я бы может и покопался в этой борде если бы она на сях была.
Одно только упоминание шарпа у меня рвотный рефлекс вызывает уже лет двадцать...
Потому что шарп это дотнет, значит привязка к виндам. Моно - это костыль и ебатня.
Да там всё просто, только написано свиду непонятно.
Можешь качнуть бинарник и попытаться запустить, и там потыкаешь уже.

Если простыми словами описать всё это дело, то работает наноборда эта - вот так:

1. PostMessage - исходный текст поста. Лимит 65535 байт, чтобы не засирать борду.

2. PostHash = sha256(PostMessage).substring(0,32) - половина sha256-хэша - это хэш-код.
Это уже позволяет хранить данные в хэш-таблице вида:
{"PostHash1": "PostMessage1", "PostHash2": "PostMessage2", ...}

3. Дальше уже PostMessage = ReplyToHash + PostMessage; где ReplyToHash - хэш-код поста, к которому пишется ответ PostMessage.
Следовательно, PostHash = sha256(ReplyToHash+PostMessage).substring(0,32),
и хэш-таблица вида:
{"PostHash1": "ReplyToHash1+PostMessage1", "PostHash2": "ReplyToHash2+PostMessage2", ...}
Такая хэш-таблиц может быть преобразована в таблицу базы данных:
|PostHash|ReplyToHash|PostMessage|
и эта таблица уже являет собой - бесконечно-ветвящееся дерево тредов, постов,
и ответов на них, как на любой другой анонимной имиджборде.

4. Если все данные хранить в хэш-таблице, то хэш-таблицу вида:
{"PostHash1": "ReplyToHash1+PostMessage1", "PostHash2": "ReplyToHash2+PostMessage2", ...}
можно попросту засрать спамом, тупо постя туда бредятину всякую, какими-то прогами.
Поэтому было добавлено POW в теге [pow=значение] и Captcha в теге [sign=значение], это было сделано в отдельных двух тегах,
и в PostMessage были добавлены всякие другие теги.
Итак, PostMessage = PostMessage + [другие теги всякие] + [pow=значение] + [sign=значение].
Чтобы работать с каптчей, подключена dll-ка Chaos.NaCl.dll - исходный код которой - имеется.

5. Из хэш-таблицы, нанопосты и их цепочки (треды) - извлекаются по хэш-кодам,
возвращаются в браузер, в виде JSON, содержащем PostMessage,
и дальше парсятся JavaScript'ом - на стороне клиента, выдавая распарсенные нанопосты в браузер.
Чтобы работать с JSON'ом, подключена dll-ка Newtonsoft.Json.dll, исходный код которой - имеется.

6. Наноборда, изначально - не имеет сервера (чтобы их не ддосили тупо).
Инфа хранится в раличных местах, которые можно менять, в процессе нанонимной координации.
Сервера - локальные, и хэш-таблица диверсифицирована по различным локальным хранилищам.
Именно диверсификация хэш-таблицы и её контента, гарантирует принципиальную немочерируемость наноборды,
так как контейнеры можно сгенерить в любом месте, и повесить в любое место, а потом спарсить их оттуда.
Сама же хэш-таблица, хранится в виде обычного двоичного файла и самописного индекса для него.

7. Я сделал lite-server, отдельный облегчённый сервер (без админских функций локального сервера),
чтобы повесить его на другой порт, и прокинуть порт в сеть.
Таким образом, наноборда обрела воможность иметь сервера, которые можно запускать на разных айпишниках, и доменах.
Но в клирнете хостить сервер - значит палить IP, и по IP'у сервер могут тупо заддосить.
Или тупо определить координаты, и въебать калибром, если на наноборде наноны постить,
пруфы военных преступлений хуйла, или горелых пидорашек, и всякую расчленёнку, скажем.
Поэтому хостить можно в TOR'e, и я раньше поднимал наноборду в торе, на onion_v2 домене,
пока его не выпилили после какого-то обновления тора. Сейчас нихуа не пашет.

8. Дальнейшая обмазка, по коду - это уже не особо существенно,
работа с конфигами, закачка картинок и парсинг их, HTTP-API в DbApiHandler.cs, TcpServer.cs,
и прочее всякое - это уже как-бы, просто детали реализации.
Клиентская сторона тупо на JavaScript работает и парсит всё это дело.
Скрипты выгружаются с локального сервера в браузер, а дальше уже исполняются в нём.
Это надо, чтобы показать сами посты в html, треды из них, саму борду, и собственно систему систему управления ею.

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

Сейчас все повально на электроне десктопные приложения писать насобачились.
Тоже не айс в плане итогового размера экзешника конечно,
но зато минимальный порог входа и максимальная переносимость.
А такой екзешник реально портабельный, его можно с флешки запустить на разных компах?

И да, если ты пишешь п2п, то ты пишешь и серверную часть тоже))
Ну, если с нуля переписывать на другом языке, то да.
А так-то, там уже есть серверная часть в файле TcpServer.cs
Но как сделать пира из него - я не знаю.
И вообще, пиры вроде на UDP работают, а не держут открытыми TCP-соединения.
Чтобы сделать пира, надо вписать туда клиент тоже, чтобы клиент подключался к другим серверам.
А к каким? Либо сделать что-то вроде "addnode=" как в криптовалютах, либо "seednode" захардкоженные (но их надо хостить тогда),
либо искать пиров мультикаст-запросами в локальной сети, как TOX делает.
Как только его запускешь, он поднимает полную ноду, и находит другие ноды - даже в локалке, без Интернета,
и сразу соединяется с ними, и можно общаться через роутер, например.
Но как это всё вкодить в нанобороду, на шарпеге, это я уже - вообще не ебу.

Баз данных с открытым кодом овер дохуя, самая переносимая - это склайт,
всё в одном файле и исходник - один файл вроде.
Я так и не понял, где код либы Mono.SQLite.dll, и как скомпилировать его в dll-ку, чтобы оно и на Windows и в linux с mono работало.
Поэтому, приходится оставлять скомпилированную dll-ку, в виде бинарного файла, а хотелось бы исходник полный добавить туда.
copper member
Activity: 1554
Merit: 489
Stop the war!
June 05, 2022, 10:41:50 PM
#7
В визуал студии есть сишка, она изначально для сей и была предназначена, потом туда всякие шарпы пихать начали же))

Я бы может и покопался в этой борде если бы она на сях была. Одно только упоминание шарпа у меня рвотный рефлекс вызывает уже лет двадцать... Потому что шарп это дотнет, значит привязка к виндам. Моно - это костыль и ебатня.

Сейчас все повально на электроне десктопные приложения писать насобачились. Тоже не айс в плане итогового размера экзешника конечно, но зато минимальный порог входа и максимальная переносимость.

И да, если ты пишешь п2п, то ты пишешь и серверную часть тоже)) Баз данных с открытым кодом овер дохуя, самая переносимая - это склайт,  всё в одном файле и исходник - один файл вроде.
full member
Activity: 1589
Merit: 214
June 05, 2022, 10:23:13 PM
#6
Если ты сам перечитаешь свой пост, то поймешь, что все твои проблемы с непереносимостью и несовместимостью изначально в этом " я на Windows XP".
А дальше, как следствие, по нарастающей еще и в этом "куча, 3.5, 4.0, 4.5.6, 5.0, 6.0, какие-то sdk блядь, netstandart, netcore,"
Ну, хз, хз.
На XP c .NET Framework 4.0 и Visual Studio 2010,
прога, компилируется норм, в standalone portable exe - win32(x86),
и пашет внутри XP, и на других виндах, win 8.1, win 10, и даже на linux с mono.

А всякий код вроде "4.5.6, 5.0, 6.0, какие-то sdk блядь, netstandart, netcore",
который есть на гитхабах - уже не конпелируется нихуа на XP,
там надо какие-то пакеты обновления ставить, и библиотеки подключать, и визуал студио обновлять - хз короче.

Для того, чтобы минимально ебаться с переносимостью, надо юзать код на чистых сях.
Они одинаковые на всех системах во все времена.
На сях есть проблема с интеграцией с вэбом и прочей гуйней конечно.
Код становится громоздким и плохо читабельным.  
Си - это CLang? На XP можно сконпелировать?
Если да, то знал бы я шланг, я бы уже давно, наверное, переписал это. Кстати, это идея.

Насчет переносимости, я уже сказал, что скомпилированный exe,
можно таскать на флешке и переносить с шинды на шинду, и запускать на разных платформах.
Именно это я и понимаю под переносимостью, так что не вижу проблем.
Но там код на шарпе и жаваскрипте, и не везде можно скомпилировать.
Но на ubuntu с помощью mono - можно сбилдить, вроде.

Насчет проблем с интеграцией, пусть код будет громоздким - пофиг,
вообще хотелось бы чтобы весь этот код был вписан внутрь исходника,
чтобы не было всяких зависимостей от каких-то там dll-лок проприетарных,
и прочей еботы, с закрытым кодом.
Наноборда - это же общественное достояние.
А исходника Mono.Data.SQLite.dll, например, я найти не могу, и не знаю как билдить его,
поэтому приходится пхать туда скомпилированный бинарник, и дёргать его за методы потом.

Если нет желания ебаться с вэб-гуйней на сях, то лучший выход имхо - это заюзать node.js.
При правильном подходе, яваскрипт будет работать одинаково во всех браузерах,
на всех операционках без сишной ебатни типа ./configure && make && make install.
Если надо, то для такой цели, как глобальная, анонимная, нецензурируемая борда,
а то и вовсе - всеобщее децентрализируемое немодерируемое хранилище бинарных данных,
можно было бы и поебтись с веб-гуйнёй на сях, и прописать всё это, чтобы - для потомков, и чтобы - на века.

Насчет node.js - это скорее серверная сторона.
Я особо не знаю node.js, хотя ставил его вроде на windows 8.1 x64.
Я знаю, что там куча версий этих нод, и они постоянно меняют стандарты,
надо обновления гребучие ставить, пакеты качать,
уязвимости вручную разрешать, в общем надо - пердолиться с нодой.

Если можно на node.js перепилить всю эту шнягу, то было бы годно.
Но я не знаю так там всё это делать, и какую базу данных лучше использовать, будет ли она опен-сорцной,
будет ли её исходник.
Вообще, там скрипты для браузерного исполнения - Pure JavaScript a "standalone client side".

потому что я на Windows XP
Эмм... Какие от этого могут быть преимущества в 2022-ом году, тем более для программирования? Только не пишите про поддержку старого железа, так как сейчас меньше чем за 200 долларов можно собрать что-нибудь, например, на Intel i7 4790 + Z97M + 16GB с SSD, что будет тащить современные винды или KDE со всеми свистоперделками в виде прозрачности с кубами.
Да хз. Просто хрюша у меня с 2002-го года работает, на 80386 процессоре,
и всякие win32 проги сбилденные на ней - пашут, без выебонов, и на x64 платформах, как portable exe.
Потому что там тот же набор инструкций у x86 и x86-64 процов.

Поэтому, так как ассемблер я не знаю,
я стремлюсь сделать так,
чтобы исходный говнокод был максимально полный,
и чтобы по возможности .NET Framework был как можно ниже (4.0, -> 3.2 -> 2.0, ...),
и JavaScript чтобы имел меньшую версию (не ES6, а ES5, например),
то есть ближе к истокам, так сказать,
и чтобы на выходе вылазил из компилятора - exe-шник win32 (x86),
то есть чтобы оно билдилось на XP, без всяких либ СТОРОННИХ,
из ядра x64 винд этих новых, которые постоянно обновляются.
Потому что когда ядра эти обновляются, либы тоже обновляются, и нихера не конпелируется потом,
и вылазят ошибки ебучие, которые заёбуешься с красными глазами сидеть и фиксить потом.
А обновления, как правило - запускаются исподтишка.

У меня шинда хрюша - она не обновляется,
то есть, там как-бы нет такого бекдора, чтобы левые бинари по сети залили и подменили библиотеки,
поэтому она как-бы полноценна, и самодостаточна. Моё мнение.
staff
Activity: 3472
Merit: 4111
Crypto Swap Exchange
June 05, 2022, 01:41:13 PM
#5
потому что я на Windows XP
Эмм... Какие от этого могут быть преимущества в 2022-ом году, тем более для программирования? Только не пишите про поддержку старого железа, так как сейчас меньше чем за 200 долларов можно собрать что-нибудь, например, на Intel i7 4790 + Z97M + 16GB с SSD, что будет тащить современные винды или KDE со всеми свистоперделками в виде прозрачности с кубами.
copper member
Activity: 1554
Merit: 489
Stop the war!
June 05, 2022, 03:27:15 AM
#4
Если ты сам перечитаешь свой пост, то поймешь, что все твои проблемы с непереносимостью и несовместимостью изначально в этом " я на Windows XP". А дальше, как следствие, по нарастающей еще и в этом "куча, 3.5, 4.0, 4.5.6, 5.0, 6.0, какие-то sdk блядь, netstandart, netcore,"

Для того, чтобы минимально ебаться с переносимостью, надо юзать код на чистых сях. Они одинаковые на всех системах во все времена. На сях есть проблема с интеграцией с вэбом и прочей гуйней конечно. Код становится громоздким и плохо читабельным.  
Если нет желания ебаться с вэб-гуйней на сях, то лучший выход имхо - это заюзать node.js. При правильном подходе, яваскрипт будет работать одинаково во всех браузерах, на всех операционках без сишной ебатни типа ./configure && make && make install.
full member
Activity: 1589
Merit: 214
June 04, 2022, 10:09:29 PM
#3
На сишарпе ты такого не найдешь, потому что он для принципиально других приложений. Тебе нужна либа на сях которую уже сам подключишь хоть к шарпу, хоть к хаскелю.
libp2p попробуй, сейчас модной стала.
Была ещё libtorrent вроде, там тебе и DHT и PEX и вот это вот всё в одном флаконе.
Ну и сам можешь с нуля всё заебашить если время и желание есть. За одно принципы этих протоколов изучишь, может пригодятся ещё в будущем.

Да я тут именно с шарпегом извращаюсь, потому что я на Windows XP и этот код, изначально, написан на шарпе.
Вот с ним и мудохаюсь, тут: https://github.com/username1565/nanoboard даже SQLite пытался прикрутить, вроде даже работает.
Но она уже заебала и глючит, я там такой хуйни нагородил шо пиздос.

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

Эта наноборда основана на хэш-таблице, являющей собой файл базы и индекс для неё.
Она не имеет сервера (но его таки-можно поднять и прокинуть в сеть),
серверА - локальные, и именно диверсифицированное хранение хэш-таблицы - обеспечивает
цензуроустойчивость борды этой.

Сейчас, проблема борьбы с цензурой и пропагандой, стоит особо остро.
Особенно в деле приёмо-передачи и хранения, оперативных данных.
Везде мочерня. Подментованные админы - под присягой срабатывают, и всё нахуй трут в ебеня,
как только замечают что-либо годное, но противоречащее ихней национальной позиции.
Так, из-за цензуры - формируется нацизм и рашизм, и преобладает в подавляющем большинстве - только односторонняя инфа.

Поэтому, для полной, глобальной, реализации гласности, согласно статье 19 ВДПЧ,
думаю, было бы годно, запилить глобальную, децентрализованную, систему хранения данных,
основанную на примитивной хэш-таблице, но защищённой от спама - каптчёй, как в наноборде этой.
Так как стандарты языков меняются, взять тот же ёбанный шарп, их там куча, 3.5, 4.0, 4.5.6, 5.0, 6.0,
какие-то sdk блядь, netstandart, netcore, которые не конпелируются нихуя и выбивают ошибки,
и всё это вяжется ещё и на проприетарнейшую шиндошс, которая блять имеет закрытый исходный код.

И вообще, операционные системы подменяют, сукка, нихуя не грузится, отказываются от обслуживания,
меняют версии дегенераты ебучие, выпиливают фичи всякие (наприер onion v2 домены),
и в результате долгосрочного наблюдения, складывается такое впечатление,
что делается это чисто на зло - чтобы поднасрать исподтишка.
Сидит какой-то козлосучий гондон дегенератский, пасёт, мол, что хочет чел.
Ага, onionv2, а мы блять исходник поменяем, всё нахуй пересрём, "аххаха аххаххаха", блять,
и сидит, годами, смотрит чо они теперь делать будут...
Как будто школота какая-то ёбанная повылазила, из ебеней своих.

Короче, думаю, было бы годно, сделать некую liveusb-версию, с полноценной осью опен-сорцной,
чтобы там сразу как грузишься - чтобы врубалась хэш-таблица, и синхрилась.
Можно было бы сделать репликацию также, и подключить кучу устройств,
чтобы был один облачный диск, на несколько эксабайт,
и чтобы туда можно было лить, лить, лить, лить всякую хуйню, в том числе и файлы, непрерывно,
запрашивать её по хэшам, и постить туда текст, и вложения, анонимно,
и комментировать файлы и посты - по этим хэшам, и общаться так, как на наноборде.

Также, вообще, следовало бы полностью описать всё это дело, и принять за стандарт,
так как контент для хэш-таблицы (нанопосты), их можно было бы генерировать локально,
а потом заливать в децентрализованное облачное хранилище, как в fidonet, скажем.

Таким образом, всякие научные наработки, могли бы, по-факту, тупо храниться на бумаге,
и в любой момент, могли бы быть оцифрованными, и анонимно - добавленными в облако, к человечеству,
для рассмотрения, комментирования, и исправления ошибок всяких.
Таким образом, научно-технический прогресс, можно было бы свести к безошибочности, наверное,
за счет масштабной синергии международной,
так как различные формулы, наработки, идеи, описания - всё это могло бы быть шустро оптимизированно и исправлено,
в процессе переформулирования проблем и выработки наилучших и элегантных решений,
реализованных, например - в виде того же кода.
copper member
Activity: 1554
Merit: 489
Stop the war!
June 04, 2022, 02:20:10 AM
#2
На сишарпе ты такого не найдешь, потому что он для принципиально других приложений. Тебе нужна либа на сях которую уже сам подключишь хоть к шарпу, хоть к хаскелю.
libp2p попробуй, сейчас модной стала.
Была ещё libtorrent вроде, там тебе и DHT и PEX и вот это вот всё в одном флаконе.
Ну и сам можешь с нуля всё заебашить если время и желание есть. За одно принципы этих протоколов изучишь, может пригодятся ещё в будущем.
full member
Activity: 1589
Merit: 214
June 03, 2022, 06:16:57 PM
#1
Перерыл весь гитхаб, нифига не нашёл.
Короче, задача, сделать распределённую и децентрализованную хэш-таблицу key-value,
которая синхронизируется между пирами.
С# (CSharp), .NET Fmamework 4.0 или даже .NET 3.5.

Как я это вижу?
1. Нода, peer - это клиент и сервер одновременно.
2. Список активных пиров сохраняется и синхронизируется между ними (Peer-Exchange).
3. После запуска ноды, и поднятия сервера, клиент пытается подключиться к другим пирам из списка,
а если не получается, то отправляя запросы мультикастом на 255.255.255.255.
Если какой-то из них откликается - с ним устанавливается соединение, и его IP добавляется в список активных пиров.
4. После подключения и добавления пира в список пиров, с ним удерживается активное TCP-соединение.
5. Через это соединение - синхронизирутся общая хэш-таблица или Dictionary, вида {"хэш":"значение", "хэш1":"значение1", }.
6. Хэш-таблица может иметь размер сотни гигов, поэтому надо бы как-то по кускам её отдавать.

Идея сырая, как кодить не знаю.
Сразу скажу нафига это - а чтобы децентрализировать неубиваемую цензуроустойчивую анонимную имиджборду,
где свобода слова - превыше всего, вот нафига: https://github.com/username1565/nanoboard/issues/21
Jump to: