Альтернативная зона .bit

Дата публикации 7 сен 2017 | Редактировалось 10 янв 2018
Не моё, но может кому то интересно. Как то давно мне присылали.

Альтернативная зона DNS .bit


Материал из Википедии:
Namecoin (англ. name — «имя», англ. coin — «монета») — основанная на технологии Bitcoin система хранения произвольных комбинаций вида «имя-значение», наиболее известным применением которой является система альтернативных корневых DNS-серверов.
Nameсoin не управляются какой-либо одной организацией.
Каждый узел сети Nameсoin имеет полную копию распределённой базы данных.
Принцип одноранговой сети и отсутствие административного центра делает невозможным изъятие имени.
Сейчас в Namecoin регистрируются домены только в зоне .bit, для которых используется
пространство имён «d/» (например, запись домена «bitcointalk.bit» использует имя «d/bitcointalk»).
Мощность распределённой вычислительной сети гарантирует, что не появится двух одинаковых имён и что ваше соответствие «имя-значение» («домен-адрес» в частном случае) не сможет быть присвоено и изменено ни одним посторонним лицом.
https://namecoin.info/ - главная страница проекта
https://namecoin.info/?p=download - скачать namecoin wallet
https://wiki.namecoin.org/index.php?title=Welcome - Wiki
Для регистрации домена и управления им качаем namecoin wallet.
Регистрация нового домена стоит 0.02NMC, обновление записи - 0.005NMC.
На момент написания текста биржевой курс NMC/USD - 0.36.
То есть регистрация и обновление домена - это примерно 0.0072$ и 0.0018$ соответсвенно.
Срок жизни домена 36000 блоков - примерно несколько месяцев. Потом домен нужно обновить за те же 0.005 NMC.
Купить NMC можно на криптобиржах за USD. Например http://btc-e.com (принимает PerfectMoney).
Простой способ регистрации и конфигурации домена:
  1. Скачиваем wallet, запускаем, ждём синхронизации сети (будет скачано несколько ГБ блокчейна).
  2. Переходим на вкладку Manage Names
  3. Пишем свой домен в поле Name (напрмер d/mysite для mysite.bit) и нажимаем Submit
  4. Переходим на вкладку Custom Configuration и пишем {"ip":["123.123.123.1", "123.123.123.2"]} если например хотим привязать наш домен к ip-адресам "123.123.123.1" и "123.123.123.2". Нажимаем Ok.
  5. Ждём 12 блоков для регистрации нового домена и 6 блоков для обновления записи (примерно 3 часа).
  6. PROFIT!!!
Для резольвинга доменов в зоне .bit традиционные DNS бесполезны. Зато очень полезны альтернативные DNS.
Например проект https://www.opennicproject.org/.
То есть для использования в своём софте, мы просто хардкорно зашьём в код ip-адреса альтернативных DNS.
Берём ip-адреса с этой страницы http://wiki.opennicproject.org/Tier2.
А далее из своего софта для резольвинга доменов используем вместо gethostbyname другую
малопопулярную и плоходокументированную API-функцию, принимающую ip-адреса альтернативных DNS в качестве аргумента и не использующую DNS из настроек системы по умолчанию.
Вот и вся технология!
Альтернативная API-функция доступна начиная от Windows XP, не требует наличия дополнительных библиотек, админ привилегий и т.п. 100% применима для доступа к CC из тихих, маленьких и незаметных программ.
Для тех, кто считает хардкорный список ip-адресов opennicproject проблемой:
  1. DNS живут долго (годами).
  2. В свой софт можем вшить большой список DNS. Все сразу не отвалятся 100%. Да и через год не отвалятся.
  3. В большинстве случаев DNS opennicproject используют обычные пользователи персональных ЭВМ, просто прописав их в настройки сети. Поэтому 99.99% запросов к DNS opennicproject это запросы резольвинга google.com, fb.com и прочего 100% траст. Поэтому и сами DNS сервера - это очень очень много траста, который не загадить 0.00000001% запросов для резольвинга CC софтом, который антивирусы считают вредоносным.
  4. Мы не используем DNS opennicproject в качестве CC или чего либо ещё. Только для резольвинга домена.
  5. Opennicproject не имеет никакого влияния на зону .bit.
  6. Opennicproject очень лояльно относится к серым и чёрным темам. И кроме зоны .bit, также резольвит .onion, .i2p. А так же поддерживает свои альтернативные зоны (это основная деятельность организации), например зону .pirate.
Ещё добавлю что новые .bit домены доступны в opennicproject DNS сразу после того как станут доступны в самом блокчейне без задержки.

Пример кода:
Код (C++):
  1. #include "windows.h"
  2. #include "stdio.h"
  3. #include <winsock2.h>
  4. #include <windns.h>
  5.  
  6. #pragma comment(lib,"ws2_32.lib")
  7. #pragma comment(lib, "Dnsapi.lib")
  8.  
  9. void main()
  10. {
  11.     DNS_STATUS dnsStatus;
  12.     IN_ADDR ipaddr;
  13.     PDNS_RECORD ppQueryResultsSet, p;
  14.     PIP4_ARRAY pSrvList = NULL;
  15.  
  16.  
  17.     char* bitdomen = "bluishcoder.bit"; //целевой домен
  18.  
  19.     char* dnsips[] = { "103.25.202.192", "92.222.80.28", "78.138.97.93" }; //вшитые IP dns со страницы http://wiki.opennicproject.org/Tier2
  20.     int num_dnsips = sizeof(dnsips) / sizeof(dnsips[0]);
  21.  
  22.     pSrvList = (PIP4_ARRAY)LocalAlloc(LPTR, sizeof(IP4_ARRAY));
  23.  
  24.  
  25.     bool good_resolve = false;
  26.     for (int i = 0; i < num_dnsips; i++)
  27.     {
  28.         pSrvList->AddrArray[0] = inet_addr(dnsips[i]);
  29.         pSrvList->AddrCount = 1;
  30.  
  31.         //Та самая альтернативная API-шка
  32.         dnsStatus = DnsQuery(bitdomen,
  33.             DNS_TYPE_A,
  34.             DNS_QUERY_USE_TCP_ONLY,
  35.             pSrvList, // Documented as reserved, but can take a PIP4_ARRAY for the DNS server
  36.             &ppQueryResultsSet,
  37.             NULL);
  38.  
  39.         p = ppQueryResultsSet;
  40.  
  41.         while (p) // Loop through the returned addresses
  42.         {
  43.  
  44.             ipaddr.S_un.S_addr = (p->Data.A.IpAddress);
  45.  
  46.             char* hostIP = inet_ntoa(ipaddr); // Результат!!!
  47.  
  48.             printf("The IP address of %s is %s \n", p->pName, hostIP);
  49.  
  50.             p = p->pNext;
  51.  
  52.             good_resolve = true;
  53.         }
  54.  
  55.         if (good_resolve)
  56.             break;
  57.     }
  58.  
  59.     if (pSrvList) LocalFree(pSrvList);
  60.  
  61.     DnsRecordListFree(ppQueryResultsSet, DnsFreeRecordList);
  62.  
  63.     //hostIP сохраняем, вставляем в url-запросы и отстукиваем через wininet например
  64.  
  65. }

1 5.373
RET

RET
Well-Known Member

Регистрация:
5 янв 2008
Публикаций:
17