如何在 IPFS/libp2p 中获取 WebRTC peer 的 IP 地址?

coo*_*101 1 ipfs libp2p js-ipfs

我正在使用此代码在浏览器中使用 IPFS。我想知道如何访问 webRTC 对等方的 IP 地址?甚至知道对等点实际上是 webRTC 还是 http 对等点?

<script src="https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js"></script>

<script>
    (async () => {
        window.node = await Ipfs.create({
          config: {
            Addresses: {
              Swarm: []
            },
            Bootstrap: []
          }
        })
        window.node.libp2p.on('peer:discovery', (peer) => console.log('peer:discovery', peer))
        window.node.libp2p.on('peer:connect', peerInfo => console.log('peer:connect', peerInfo))
        window.node.libp2p.on('peer:disconnect', peerInfo => console.log('peer:disconnect', peerInfo))
        window.node.libp2p.peerStore.on('peer', (peerId) => console.log('peer', peerId))
        window.node.libp2p.peerStore.on('change:multiaddrs', ({ peerId, multiaddrs}) => console.log('change:multiaddrs', {peerId, multiaddrs}))
        window.node.libp2p.peerStore.on('change:protocols', ({ peerId, protocols}) => console.log('change:protocols', {peerId, protocols}))
        window.node.libp2p.on('error', (err) => console.log('error', err))
        window.node.libp2p.connectionManager.on('peer:connect', (connection) => console.log('peer:connect', connection))
        window.node.libp2p.connectionManager.on('peer:disconnect', (connection) => console.log('peer:disconnect', connection))

        const data = 'Hello'
        const results = await window.node.add(data)
        console.log({results})
    })()

</script>
Run Code Online (Sandbox Code Playgroud)

node.swarm.peers() 给了我一个同行列表,但它似乎不包括 IP 地址。

小智 5

查看您的配置,您似乎没有配置任何群地址。必须为您的对等方配置一个群地址,才能从网络中的其他对等方禁用。

在某些情况下,在这种特定情况下,您正在处理浏览器环境。目前,浏览器不允许监听连接。限制之一实际上是浏览器不提供可用于访问它的“IP 地址”。它们以客户端-服务器模型设计,其中服务器 IP 地址已知,客户端将与其建立连接。

作为解决上述问题的方法之一,有libp2p-webrtc-star传输。它基本上使用一个服务器,负责代表浏览器节点侦听连接。您可以使用可用的服务器之一进行实验https://github.com/libp2p/js-libp2p-webrtc-star#hosted-rendezvous-server。基本上,您应该向您的群地址添加一个 multiaddr,例如/dns4/wrtc-star1.par.dwebops.pub/tcp/443/wss/p2p-webrtc-star. 一旦您的节点启动,您的浏览器节点将与服务器建立连接,服务器将通知所有其他对等节点加入的对等节点。这些同龄人可以通过这个明星服务器拨打您的同行和multiaddrs看起来像:/dns4/wrtc-star1.par.dwebops.pub/tcp/443/wss/p2p-webrtc-star/p2p/QmSoLPppuBtQSGwKDZT2M73ULpjvfd3aZ6ha4oFGL1KrGM

使用此设置,您应该能够打开多个浏览器,并且对等点可以相互发现和连接。如果你运行ipfs.swarm.peers你应该通过星型服务器看到其他节点的地址。

我希望这可以帮助您继续前进。我还强烈建议您检查以下示例:

作为补充,有一些新功能正在开发中,旨在改善这方面的浏览器体验。您可以在以下位置关注进展:https : //github.com/libp2p/js-libp2p/issues/703