美文网首页
比特币P2P网络IP分布

比特币P2P网络IP分布

作者: Tao_Liang | 来源:发表于2018-08-13 10:16 被阅读0次

    最近看了几天的bitcoin的代码,主要从网络通信部分着手开始看的,对于一个三年多没有写过C++代码的人来说,看其中的消息序列化反序列化代码,只有一句卧艹感叹,遂拾起多年未写过的C++,来写点东西。

    既然是看到了比特币的P2P网络,何不把这个网络上的IP全部搞下来,看看这些IP都分布在哪里,于是查看了下比特币的网络通信协议:两个节点建立连接后,发起连接者发送version命令,接受者响应verack命令并发送version命令,发起者响应verack命令,如下图:

    20180512170431878.png

    如果把verackversion画在一起,就和TCP的三步握手一样了。交换完这几个协议命令之后,两个节点的连接就完全建立好了,可以发送其他的一些协议命令了。看了文档,没有主动获取对端相邻节点的协议命令,只有一个addr命令来主动告知对端与本节点相连的节点IP。

    先写个demo再说,很简单,从DNS seed获取IP节点,建立连接,处理完握手之后不发送任何信息,只接受消息,打印出接收到的命令,在一大串的命令之后,收到了期盼的addr命令,bingo!

    心里大致有了一个流程图,从DNS seed中获取IP地址放入IP种子集合中,创建一个kqueue(linux上是epoll),不断从IP种子集合中拿出一些IP,创建TCP连接,并开始监听读写事件,只要收到addr协议命令后,就从消息中取出IP地址放入IP种子集合中。

    真是说起来容易,做起来难,而且还三年多没写过C++了,最后总算是能够稳定的跑起来了。进过四天的连续执行,已经获取到了7.6W+个IP地址:


    WX20180813-095646@2x.png

    tornado写了个web服务,通过ip获取地理位置信息,并做了点可视化:

    2018-08-13 10-01-37屏幕截图.png

    我大天朝果然牛批!占比25%左右!

    还可以查看其它国家的具体分布,代码已经放在全球最大男性交友网站了,https://github.com/lt90s/BitcoinNetwork,求星星~~~

    相关文章

      网友评论

          本文标题:比特币P2P网络IP分布

          本文链接:https://www.haomeiwen.com/subject/svtxbftx.html