feat(p2p): ignore your address
This commit is contained in:
@ -96,6 +96,7 @@
|
|||||||
"react-input-range": "^1.3.0",
|
"react-input-range": "^1.3.0",
|
||||||
"react-markdown": "^3.1.5",
|
"react-markdown": "^3.1.5",
|
||||||
"react-tap-event-plugin": "^3.0.2",
|
"react-tap-event-plugin": "^3.0.2",
|
||||||
|
"stun": "^1.1.0",
|
||||||
"webtorrent": "github:DEgITx/webtorrent"
|
"webtorrent": "github:DEgITx/webtorrent"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
@ -6,7 +6,7 @@ const getPeersStatisticUDP = require('./bt/udp-tracker-request')
|
|||||||
const net = require('net')
|
const net = require('net')
|
||||||
const JsonSocket = require('json-socket')
|
const JsonSocket = require('json-socket')
|
||||||
const crypto = require('crypto')
|
const crypto = require('crypto')
|
||||||
|
const stun = require('stun')
|
||||||
//var express = require('express');
|
//var express = require('express');
|
||||||
//var app = express();
|
//var app = express();
|
||||||
//var server = require('http').Server(app);
|
//var server = require('http').Server(app);
|
||||||
@ -1047,6 +1047,7 @@ client.on('complete', function (metadata, infohash, rinfo) {
|
|||||||
|
|
||||||
const p2p = {
|
const p2p = {
|
||||||
peers: [],
|
peers: [],
|
||||||
|
ignoreAddresses: [],
|
||||||
add(address) {
|
add(address) {
|
||||||
const { peers } = this
|
const { peers } = this
|
||||||
|
|
||||||
@ -1056,6 +1057,9 @@ const p2p = {
|
|||||||
if(address.port <= 1 || address.port > 65535)
|
if(address.port <= 1 || address.port > 65535)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if(this.ignoreAddresses.includes(address.address))
|
||||||
|
return;
|
||||||
|
|
||||||
for(let peer of peers)
|
for(let peer of peers)
|
||||||
{
|
{
|
||||||
if(peer.address === address.address) {
|
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) => {
|
spider.on('peer', (IPs) => {
|
||||||
const { peers } = p2p;
|
const { peers } = p2p;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user