小樱 发表于 2025/1/6 17:57

如何用C语言代码构建一个数据包查询DHT超级节点服务器,bencode解码

如何用C语言代码构建一个数据包查询DHT超级节点服务器,bencode解码

自己搭建DHT超级节点服务器
https://bbs.itzmx.com/thread-111310-1-1.html

如果是国内服务器 域名需要备案,否则会被云服务商拦截,直接用ip形式吧 获得数据后 解码的话用bencode解码
具体代码实现可以调用libtorrent库,能调用库实现的就别自己造轮子去写代码,也有很些bt客户端是开源的,不过是c++语言,直接找到位置拔了代码就好了
这就是去中心化的dht 如果没有回应代表没有其他下载者和你在同一个种子上
如果你想拿其他种子的人 得用tracker服务器
但是你学校作业是dht,此时已经完成了毕业设计,就不需要进一步去研究了

这才是正确的代码连接DHT结果
发送udp包
BitTorrent DHT Protocol
    Request arguments: Dictionary...
      Key: a
      Value: Dictionary...
            id: 05ac9e054f64f9a97cc943a5428df4d80e3903b5
                Key: id
                Value: 05ac9e054f64f9a97cc943a5428df4d80e3903b5
            target: 05ac9e054f64f9a97cc943a5428df4d80e3903b6
                Key: target
                Value: 05ac9e054f64f9a97cc943a5428df4d80e3903b6
            Terminator: e
    Request type: find_node
      Key: q
      Value: find_node
    Transaction ID: 19a7ed0de31316c2
      Key: t
      Value: 19a7ed0de31316c2
    Message type: Request
      Key: y
      Value: q
    Terminator: e

DHT超级节点服务器ip返回
BitTorrent DHT Protocol
    Response values: Dictionary...
      Key: r
      Value: Dictionary...
            id: 0453a561c6bf8b6f9a83b6c941b3fcb7707ddf8a
                Key: id
                Value: 0453a561c6bf8b6f9a83b6c941b3fcb7707ddf8a
            nodes: 8
                Key: nodes
                Value: 8 nodes
                  Node 1 (id: 0555e854ecfbbd57d9950961306d285891b54bf9, IPv4/Port: 31.45.56.6:35265)
                        ID: 0555e854ecfbbd57d9950961306d285891b54bf9
                        IP: 31.45.56.6
                        Port: 35265
                  Node 2 (id: 05df88f1f1bbe9ebb3a6db3c870c3e99245e0d90, IPv4/Port: 95.25.237.189:10829)
                        ID: 05df88f1f1bbe9ebb3a6db3c870c3e99245e0d90
                        IP: 95.25.237.189
                        Port: 10829
                  Node 3 (id: 05e5ff6bf3a86bc38562265e6f5800746ed0f1fd, IPv4/Port: 88.185.213.231:53325)
                        ID: 05e5ff6bf3a86bc38562265e6f5800746ed0f1fd
                        IP: 88.185.213.231
                        Port: 53325
                  Node 4 (id: 05f91be21f6711607a6213a009c0087079ce0178, IPv4/Port: 119.204.119.65:32685)
                        ID: 05f91be21f6711607a6213a009c0087079ce0178
                        IP: 119.204.119.65
                        Port: 32685
                  Node 5 (id: 0554d48797a08aabd814c865955dabbec171e34a, IPv4/Port: 207.96.156.25:39599)
                        ID: 0554d48797a08aabd814c865955dabbec171e34a
                        IP: 207.96.156.25
                        Port: 39599
                  Node 6 (id: 05bd4c29e2fd4c2b15f5ecf5038c49b7689aa939, IPv4/Port: 126.23.227.105:20342)
                        ID: 05bd4c29e2fd4c2b15f5ecf5038c49b7689aa939
                        IP: 126.23.227.105
                        Port: 20342
                  Node 7 (id: 05074bd58ae8931ef5abec3ff643da905085287c, IPv4/Port: 181.45.158.18:6882)
                        ID: 05074bd58ae8931ef5abec3ff643da905085287c
                        IP: 181.45.158.18
                        Port: 6882
                  Node 8 (id: 059ed5a653079994ddc6d9af9678db9b21b079e7, IPv4/Port: 66.181.181.137:19785)
                        ID: 059ed5a653079994ddc6d9af9678db9b21b079e7
                        IP: 66.181.181.137
                        Port: 19785
            Terminator: e
    Transaction ID: 19a7ed0de31316c2
      Key: t
      Value: 19a7ed0de31316c2
    Message type: Response
      Key: y
      Value: r
    Terminator: e
查看我上方的握手阶段响应输出信息

页: [1]
查看完整版本: 如何用C语言代码构建一个数据包查询DHT超级节点服务器,bencode解码