From 08b73aa7a9b2dbc8bbe418ad965f2ea88a4e7903 Mon Sep 17 00:00:00 2001 From: Alexey Kasyanchuk Date: Sat, 17 Feb 2018 23:22:59 +0300 Subject: [PATCH] feat(p2p): ignore your address --- package.json | 1 + src/background/spider.js | 19 ++++++++++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index e46ffaa..2f82bb1 100644 --- a/package.json +++ b/package.json @@ -96,6 +96,7 @@ "react-input-range": "^1.3.0", "react-markdown": "^3.1.5", "react-tap-event-plugin": "^3.0.2", + "stun": "^1.1.0", "webtorrent": "github:DEgITx/webtorrent" }, "devDependencies": { diff --git a/src/background/spider.js b/src/background/spider.js index d207ca4..992bde6 100644 --- a/src/background/spider.js +++ b/src/background/spider.js @@ -6,7 +6,7 @@ const getPeersStatisticUDP = require('./bt/udp-tracker-request') const net = require('net') const JsonSocket = require('json-socket') const crypto = require('crypto') - +const stun = require('stun') //var express = require('express'); //var app = express(); //var server = require('http').Server(app); @@ -1047,6 +1047,7 @@ client.on('complete', function (metadata, infohash, rinfo) { const p2p = { peers: [], + ignoreAddresses: [], add(address) { const { peers } = this @@ -1056,6 +1057,9 @@ const p2p = { if(address.port <= 1 || address.port > 65535) return; + if(this.ignoreAddresses.includes(address.address)) + return; + for(let peer of peers) { if(peer.address === address.address) { @@ -1117,6 +1121,19 @@ const p2p = { } } } + +const { STUN_BINDING_REQUEST, STUN_ATTR_XOR_MAPPED_ADDRESS } = stun.constants +const stunServer = stun.createServer() +const stunRequest = stun.createMessage(STUN_BINDING_REQUEST) +stunServer.once('bindingResponse', stunMsg => { + const {address, port} = stunMsg.getAttribute(STUN_ATTR_XOR_MAPPED_ADDRESS).value + stunServer.close() + + console.log('p2p ignore my address', address) + p2p.ignoreAddresses.push(address) +}) +stunServer.send(stunRequest, 19302, 'stun.l.google.com') + spider.on('peer', (IPs) => { const { peers } = p2p;