Bitcoin-Core

“CoinDance”究竟是如何確定目前公共比特幣節點的數量的?

  • December 10, 2020

在這個 URL 上:https ://coin.dance/nodes

它表示目前世界上有多少公共比特幣節點活躍,以及有多少比特幣核心節點。

雖然我可以從那個網頁上獲取這些數字很好,但我想知道他們是如何確定這一點的,如果它很簡單,我想自己計算,而不是依賴明天可能會消失的第三方或對我撒謊或有錯誤或任何事情。

這很容易確定嗎?他們可能採取了哪些步驟來計算這一點?它是否涉及重複掃描世界上的每個公共 IP 地址並檢查監聽比特幣埠?如果是這樣,我可能會把它留給他們,因為我不需要從家裡發出那種瘋狂的流量……更不用說它可能需要我使用大量的 IP 地址,以免我想被各種網路禁止,從而獲得不准確的統計數據。

或者比特幣核心本身是否包含這些資訊?作為協議的一部分,比特幣網路是否會發送一個整數來說明彼此之間有多少個節點,而我可以使用本地比特幣核心的 RPC API 來獲取此資訊?

作為協議的一部分,比特幣網路是否會發送一個整數來說明彼此之間有多少節點,

不。

見<https://en.bitcoin.it/wiki/Protocol_documentation>

據我所知,活動節點的總數不是任何消息的一部分,但有可能有用的消息,例如:

getaddr

getaddr 消息向節點發送請求,詢問有關已知活動對等點的資訊,以幫助查找網路中的潛在節點。

通過將此消息發送到所有已知但以前未聯繫的節點,可以發現更多以前未聯繫的節點,您可以將此消息發送到,直到響應僅包含以前聯繫的節點並且您知道的所有節點都是已聯繫的節點或未響應的節點。


我想知道他們是如何確定這一點的,

CoinDance不說。


正如Davidson Souza 後來的回答報告的那樣,至少有一個網站 ( Bitnodes ) 使用該getaddr消息來估計所有目前可訪問節點的數量。

每個爬蟲都可以使用自己的方法,bitnodes使用GETADDR它:

目前的方法涉及遞歸地發送 getaddr 消息以從一組種子節點開始查找網路中的所有可達節點。

Luke Dashjr 使用的網頁和爬蟲顯示了比其他更多的節點:https ://luke.dashjr.org/programs/bitcoin/files/charts/software.html

如果您在嘗試使用 Bitcoin Core 連接到比特幣網路時監控網路流量,您會注意到它在第一個請求中發送以下資訊,並從另一個節點獲得類似的響應:

User-Agent: //
Version: XXXXX
Lastblock: XXXXXX

我在Wireshark中過濾了結果,只顯示“比特幣”協議相關的請求和響應

截圖-Wireshark-BitcoinCore1

以下是我的節點從其他節點得到的響應:

截圖-Wireshark-BitcoinCore2

我沒有自己的程式碼或工具來監控網際網路流量並為比特幣節點過濾它,但是我嘗試使用Shodan進行搜尋,但它返回的結果很少:

Shodan-比特幣

一些爬蟲也可能使用過濾連接到網際網路的機器並獲取有關節點的資訊的方法。

引用自:https://bitcoin.stackexchange.com/questions/98646