Вернуться   Биткоин Форум > Разработка и Техническое Обсуждение
6 сентября 2011, 3:46:38 AM   # 1
 
 
Сообщений: 64
Цитировать по имени
цитировать ответ
по умолчанию Re: Satoshi работы клиента: Node Discovery

Взлом Биткоин адресов.
500 Биткоинов взломаны в "мозговом кошельке" с паролем "bitcoin is awesome"
Адрес кошелька: 14NWDXkQwcGN1Pd9fboL8npVynD5SfyJAE
Приватный ключ: 5J64pq77XjeacCezwmAr2V1s7snvvJkuAz8sENxw7xCkikceV6e
подробнее...


Всем кто хочет заработать Биткоины без вложений - рекомендую сайт http://bitcoin-zarabotat.ru
Satoshi Операция Клиент: Node Discovery
-------------------------------------------------

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

1. Вершины открыть свой собственный внешний адрес различными способами.
2. Узлы получить обратный адрес удаленных узлов, подключенных к ним.
3. Узлы подключения к IRC для получения адресов.
4. Узлы делает запрос DNS для получения IP-адреса.
5. Узлы могут использовать адреса жестко закодированные в программное обеспечение.
6. Узлы обмениваются адресами с другими узлами.
7. Узлы хранения адресов в базе данных и прочитать эту базу данных при запуске.
8. Узлы могут быть предоставлены адреса в качестве аргументов командной строки
9. Узлы чтения адреса из предоставленного пользователем текстового файла при запуске

Временная метка сохраняется для каждого адреса, чтобы отслеживать, когда узел
адрес был в последний раз видел. AddressCurrentlyConnected в net.cpp ручками
обновления штампа времени, когда сообщение принимается от узла.
Timestamps обновляются только на адрес и сохраняется в базе данных
когда метка времени составляет более 20 минут назад.

Смотрите статью Node Connectivity для получения информации о каком типе
адреса имеют преимущество, когда на самом деле подключения к узлам.

В первом разделе мы рассмотрим, как узел обрабатывает запрос
адреса через "getaddr" сообщение. Понимая роль
метки времени, он станет более понятным, почему метки времени держали путь
они для каждого из различных способов адрес обнаружен.


обработка сообщений "getaddr"
-----------------------------------

Когда узел принимает "getaddr" запрос, это первые цифры, сколько
адреса имеют, которые имеют метку времени, в течение последних 3-х часов.
Затем он отправляет эти адреса, но если есть более 2500 адресов
видели в последние 3 часа, он выбирает около 2500 из имеющихся
последние адреса с помощью случайного выбора.


Теперь давайте посмотрим на пути узел узнает о адресов узлов.


Внешний адрес 1. Местные клиента
-----------------------------------
Клиент использует два метода для определения своих собственных внешних, маршрутизируемым IP
Адрес: он использует IRC, предпочтительно, и если это не удается, он использует
веб-служба общественной возвращающая информации.

Из нити, созданной для этой работы (так называемый ThreadIRCSeed в irc.cpp),
клиент делает соединение IRC к 92.243.23.21 или irc.lfnet.org,
если прямое соединение IP не удается. Порт 6667. [1]
Если соединение успешно, клиент выдает команду USERHOST к
сервер IRC, для того, чтобы получить свой собственный IP-адрес. [2]

Кроме того, клиент запускает поток под названием ThreadGetMyExternalIP (в net.cpp)
который пытается определить IP-адрес клиента, как видно снаружи
Мир. Это дает IRC нить возможность открыть для себя IP-адрес
во-первых, спать и проверка периодически в течение 2 минут, а затем
продолжается, если метод IRC не удалось.

Во-первых, он пытается подключиться к 91.198.22.70 порт 80, который должен быть
checkip.dyndns.org сервер. Если не удается установить соединение, запрос DNS сделан
для checkip.dyndns.org и связи предпринимаются по этому адресу.
Затем он пытается установить соединение с 74.208.43.192 порт 80, который должен быть
www.showmyip.com сервер. Если не удается установить соединение, запрос DNS сделан
для www.showmyip.com и попытка подключиться к этому адресу.

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



2. Подключите обратный вызов Адрес

-----------------------------------
Когда узел получает начальное "версия" сообщение, и этот узел инициировал
соединение, то узел рекламирует свой адрес на пульт дистанционного управления, так
что он может подключиться обратно к локальному узлу, если он хочет. [3]
После отправки своего собственного адреса, он посылает "getaddr" сообщение с запросом
на удаленный узел, чтобы узнать о более адресов, если удаленный узел
версия недавно или если локальный узел еще не имеет 1000 адресов.


3. IRC Адреса
-----------------------------------

В дополнение к обучению и обмену свой собственный адрес, узел
узнает о других адресах узлов через канал IRC. См irc.cpp.
После изучения его собственный адрес, узел кодирует свой собственный адрес в строку
который будет использоваться в качестве псевдонима. Затем он случайным образом присоединяется к IRC-канал с именем
между # bitcoin00 и # bitcoin99. Затем он выдает команду ВОЗ.
Поток считывает строки, как они появляются в канале и декодирует
IP-адреса других узлов в канале. Он делает это в
петля, навсегда, пока узел не будет отключен.

Когда клиент обнаруживает адрес из IRC, он устанавливает метку времени
по адресу к текущему времени, но он использует "штраф"
51 минут, что означает, что она выглядит, как это было на самом деле видели
почти час назад.


4. Адреса DNS
-----------------------------------
При запуске клиент делает запросы DNS на жесткое закодированные имена DNS
для того, чтобы узнать об адресах других узлов. [4] В версии
v0.3.24, эти адреса были [5]:

bitseed.xf2.org
bitseed.bitcoin.org.uk
dnsseed.bluematt.me

Недавний запрос из этих адресов возвращены 48 узлов. Обратите внимание, что
DNS ответ может содержать несколько IP-адресов для запрашиваемого имени.


Адреса, обнаруженные с помощью DNS изначально дают нулевую отметку времени,
поэтому они не рекламируются в ответ на "getaddr" запрос.



5. Hard Coded "семя" Адреса
-----------------------------------
Клиента содержит жестко закодированы IP-адреса, которые представляют Bitcoin узлы. [6]
Эти адреса используются только в крайнем случае, если нет другого способа
произвел любые адреса на всех. [7]
Когда цикл обработки в резьбовое соединение ThreadOpenConnections2 ()
видит пустой адрес на карте, она использует "семя" IP-адрес в качестве резервного.

Существует код отодвигаться от семенных узлов, когда это возможно. презумпция
является то, что это, чтобы избежать перегрузки этих узлов. После того, как на локальном узле
достаточно адресов (предположительно, извлеченные из семян узлов), то
резьбовое соединение будет закрывать соединение узла семян. [8]

Семенной Адреса изначально дают нулевую отметку времени,
поэтому они не рекламируются в ответ на "getaddr" запрос.



6. Текущая "адр" объявления
-----------------------------------
Узлы могут получить адреса в "адр" сообщение после того, как
послал "getaddr" запрос, или "адр" Сообщения могут поступать
незапрашиваемая, потому что узлы рекламировать адреса беспричинно
когда реле адреса (см ниже), когда они рекламируют
их собственный адрес периодически, и когда производится соединение.

Если адрес из действительно старой версии, она игнорируется; если из
не-так-старая версия, она игнорируется, если мы имеем 1000 адресов уже.

Если отправитель послал более 1000 адресов, все они игнорируются.

Адреса, полученные от "адр" сообщение имеет метку времени, но
метка времени не обязательно честь непосредственно.


Для каждого адреса в сообщении:
  * Если метка является слишком низкой или слишком высокой, он установлен на 5 дней назад.
  * Мы вычитаем 2 часа от временной метки и добавьте адрес.

Обратите внимание, что когда какой-либо адрес добавляется, по какой-либо причине, то код, который вызывает
AddAddress () не проверяет, чтобы увидеть, если он уже существует. AddAddresss ()
функция net.cpp будет делать это, и если адрес уже существует, далее
обработка выполняется, чтобы обновить запись адреса. Если рекламируемые услуги
адреса изменились, что обновляется и сохраняется.
Если адрес был замечен в течение последних 24 часов, и временные метки
В настоящее время более 60 минут назад, затем она обновляется до 60 минут назад.
Если адрес не был замечен в течение последних 24 часов, и временные метки
В настоящее время более 24 часов назад, затем она обновляется до 24 часов назад.

-- Адрес реле -

После того, как адреса добавляются из "адр" сообщение (смотри выше), тогда они
могут быть переданы на другие узлы. Во-первых, следующие критерии
должно быть установлено [9]:
    1. Адрес временная метка, после обработки, находится в пределах 60 минут
    текущего времени
    2. "адр" сообщение содержит 10 адресов или менее
    3. И fGetAddr не установлен на узле. fGetAddr начинается ложь,
    устанавливается в верно, когда мы спрашиваем адреса от узла, и это
    очищается, когда мы получаем меньше, чем 1000 адресов от узла.
    4. Адрес должен быть маршрутизируемым.
Когда они соответствуют указанным выше критериям, узел хэш все подходящему
IP-адрес узла, а также текущий день в виде целого числа,
и два узла с наименьшим значением хэш-функции выбраны так, чтобы иметь
адрес ретранслируется им.

-- Самостоятельная трансляция -

Каждые 24 часа, узел рекламирует свой собственный адрес для всех подключенных узлов.
Он также очищает список адресов мы считаем, что удаленный узел имеет, который
вызовет обновление от того, отправляет к узлам. Этот код находится в SendMessages ()
в main.cpp.

-- Старый адрес Cleanup -

В SendMessages () в main.cpp, есть код, чтобы удалить старые адреса.
Это делается через каждые десять минут, пока есть 3 активных соединений.
Узел стирает сообщения, которые не были использованы в течение 14 дней
пока есть по крайней мере, 1000 адресов на карте, и до тех пор,
поскольку процесс стирания не принял более 20 секунд.



7. Адреса, сохраненные в базе данных
-----------------------------------
Адреса, хранятся в базе данных при AddAddress () называется.

Адреса считываются при запуске, когда AppInit2 () вызывает LoadAddresses (),
который расположен в db.cpp.

В настоящее время, по-видимому все адреса сохраняются все сразу, когда
любой адрес хранится или обновлен [10]. Действительно, AddAddress видно
принимать более 0,01 секунд в различных испытаниях и, как правило, называют
десятков тысяч раз в первых 12 часов работы
клиент.



8. Командная строка Предоставленные Адреса
-----------------------------------

Пользователь может указать узлы для подключения к с -addnode
Аргумент командной строки. Несколько узлов могут быть определены.

Адреса, предоставляемые в командной строке сначала дают ноль
метка времени, поэтому они не рекламируются в ответ на "getaddr"
запрос.

Пользователь может также указать адрес для подключения к с -connect
Аргумент командной строки. Несколько узлов могут быть определены.
-connect аргумент отличается от -addnode в том, что -connect адреса
не добавляются в базу данных адресов и когда -connect указано,

используются только те адреса.



9. Предоставленные текстовых файлов Адреса
-----------------------------------
Клиент автоматически считывает файл с именем "addr.txt" в
Bitcoin каталога данных и добавит любые адреса, которые он находит там
в качестве адресов узлов. Эти узлы не дают никаких особых предпочтений в течение
другие адреса. Они просто добавляются в пул.

Адреса, загруженные из текстового файла сначала дают нулевую отметку времени,
поэтому они не рекламируются в ответ на "getaddr" запрос.




Примечания:
-----------------------------------
 1. См: CAddress addrConnect ("92.243.23.21", 6667); // irc.lfnet.org
    в ThreadIRCSeed2 () в irc.cpp.
 2. См: GetIPFromIRC () в irc.cpp.
 3. См: // Реклама наш адрес
    в ProcessMessage () в main.cpp, где strCommand == "версия"
 4. См DNSAddressSeed () в net.cpp.
 5. См "статический Const символ * strDNSSeed [] = {" в net.cpp
 6. См pnSeed в net.cpp
 7. См:
        если (mapAddresses.empty () && (GetTime () - nStart > 60 || Фтор) && ! FTestNet)
    в ThreadOpenConnections2 () в net.cpp.
 8. См:
            если (fSeedUsed && mapAddresses.size () > ARRAYLEN (pnSeed) + 100)
            {   
                // Отключить семенные узлы
    в ThreadOpenConnections2 () в net.cpp.
 9. См: если (addr.nTime > nТак как && ! pfrom->fGetAddr && vAddr.size () <= 10 && addr.IsRoutable ())
    в ProcessMessage () в main.cpp, где strCommand == "адр"
10. См


--
Поиск по "Satoshi Операция клиента" для большего количества статей в этой серии.
bitrick сейчас офлайн Пожаловаться на bitrick   Ответить с цитированием Мультицитирование сообщения от bitrick Быстрый ответ на сообщение bitrick


Как заработать Биткоины?
Без вложений. Не майнинг.


27 декабря 2011, 6:41:56 AM   # 2
 
 
Сообщения: 742
Цитировать по имени
цитировать ответ
по умолчанию Re: Satoshi работы клиента: Node Discovery

Получил 1806 Биткоинов
Реальная история.





Это похоже на то, что должно быть на вики
Red Emerald сейчас офлайн Пожаловаться на Red Emerald   Ответить с цитированием Мультицитирование сообщения от Red Emerald Быстрый ответ на сообщение Red Emerald

27 декабря 2011, 2:32:03 PM   # 3
 
 
Сообщения: 447
Цитировать по имени
цитировать ответ
по умолчанию Re: Satoshi работы клиента: Node Discovery

Это похоже на то, что должно быть на вики

Это на вики в https://en.bitcoin.it/wiki/Satoshi_Client_Node_Discovery
mndrix сейчас офлайн Пожаловаться на mndrix   Ответить с цитированием Мультицитирование сообщения от mndrix Быстрый ответ на сообщение mndrix



Как заработать Биткоины?

Bitcoin Wallet * Portefeuille Bitcoin * Monedero Bitcoin * Carteira Bitcoin * Portafoglio Bitcoin * Bitcoin Cüzdan * 比特币钱包

bitcoin-zarabotat.ru
Почта для связи: bitcoin-zarabotat.ru@yandex.ru

3HmAQ9FkRFk6HZGuwExYxL62y7C1B9MwPW