socksinthemiddle
Advanced tools
Comparing version 1.2.1 to 1.3.0
74
index.js
@@ -5,4 +5,3 @@ const net = require('net'), | ||
https = require('https'), | ||
{Transform,Readable} = require('stream'), | ||
pump = require('pump'); | ||
{Transform,Readable} = require('stream'); | ||
const { | ||
@@ -13,4 +12,5 @@ createSocksServer, | ||
} = require('socks5server/src/socks.js'); | ||
const { pipeline } = require('stream'); | ||
const { request } = require('http2-client'); | ||
/** | ||
@@ -128,4 +128,4 @@ * for getting a full buffer from a stream and modifying it | ||
} | ||
dataModder(reqFromClient,resToClient,potocol){ | ||
reqFromClient.potocol=potocol; | ||
dataModder(reqFromClient,resToClient,protocol){ | ||
reqFromClient.protocol=protocol; | ||
this._requestModder(reqFromClient,resToClient,(reqToServer,resFromServer)=>{ | ||
@@ -136,4 +136,9 @@ this._responseModder(resToClient,resFromServer,reqFromClient,reqToServer); | ||
async _requestModder(reqFromClient,resToClient,cb){ | ||
let headers=Object.assign({},reqFromClient.headers),streamChain=[reqFromClient], | ||
overrideRequestOptions={protocol:reqFromClient.potocol=='http'?'http':'https'}; | ||
let rawheaders=Object.assign({},reqFromClient.headers),streamChain=[reqFromClient], | ||
overrideRequestOptions={protocol:reqFromClient.protocol=='http'?'http:':'https:'}; | ||
const headers={}; | ||
for(let n in rawheaders){ | ||
headers[n.replace(/^\:/,'')]=rawheaders[n]; | ||
} | ||
// console.log(headers); | ||
if(this.requestModder){ | ||
@@ -153,3 +158,3 @@ let streamModder=await this.requestModder(headers,reqFromClient,resToClient,overrideRequestOptions); | ||
let host=headers.host.split(':'); | ||
let options={ | ||
let options=Object.assign({ | ||
headers, | ||
@@ -160,28 +165,31 @@ method:reqFromClient.method, | ||
port:host[1], | ||
rejectUnauthorized:false | ||
}; | ||
const protocol=overrideRequestOptions.protocol; | ||
delete overrideRequestOptions.protocol; | ||
this.httpLog&&console.log('(proxy out)[ %s -> %s ] %s',reqFromClient.potocol+'://'+reqFromClient.headers.host,options.headers.host,options.path); | ||
let reqToServer=(protocol==='http'?http:https).request(Object.assign(options,overrideRequestOptions),resFromServer=>{ | ||
timeout:10000, | ||
rejectUnauthorized:true, | ||
},overrideRequestOptions); | ||
if(!options.port){ | ||
options.port=options.protocol==='https:'?443:80; | ||
} | ||
const relayUrl=`${options.protocol}//${options.hostname}:${options.port}${options.path}`; | ||
// const protocol=overrideRequestOptions.protocol; | ||
this.httpLog&&console.log('(relay out)[ %s -> %s ] %s',reqFromClient.protocol+'//'+reqFromClient.headers.host,`${options.headers.host}:${options.port}`,options.path); | ||
let reqToServer=request(options,resFromServer=>{ | ||
cb(reqToServer,resFromServer); | ||
}).on('error',e=>{ | ||
if(this.httpLog){ | ||
if(e.rawPacket)e.rawText=e.rawPacket.toString(); | ||
console.error('(proxy error)',reqFromClient.potocol+'://'+reqFromClient.headers.host,options.headers.host,options.path,e); | ||
}); | ||
streamChain.push(reqToServer); | ||
pipeline(streamChain,(err)=>{ | ||
if(err&&this.httpLog){ | ||
if(err.rawPacket)err.rawText=err.rawPacket.toString(); | ||
console.error('(relay request error) %s -> %s',reqFromClient.protocol+'//'+reqFromClient.headers.host,relayUrl); | ||
console.error(err); | ||
} | ||
setImmediate(()=>{ | ||
reqToServer.removeAllListeners(); | ||
reqToServer.destroy(); | ||
}); | ||
}); | ||
reqFromClient.once('close',()=>{ | ||
reqToServer.end(); | ||
}) | ||
reqToServer.setTimeout(10000); | ||
streamChain.push(reqToServer); | ||
pump(streamChain) | ||
} | ||
async _responseModder(resToClient,resFromServer,reqFromClient,reqToServer){ | ||
let headers=Object.assign({},resFromServer.headers),streamChain=[resFromServer]; | ||
let rawheaders=Object.assign({},resFromServer.headers),streamChain=[resFromServer]; | ||
const headers={}; | ||
for(let n in rawheaders){ | ||
headers[n.replace(/^\:/,'')]=rawheaders[n]; | ||
} | ||
if(this.responseModder){ | ||
@@ -206,3 +214,2 @@ let streamModder=await this.responseModder(headers,resFromServer,reqFromClient); | ||
} | ||
streamChain.push(resToClient); | ||
for(let header in headers){ | ||
@@ -212,3 +219,8 @@ resToClient.setHeader(header,headers[header]); | ||
resToClient.writeHead(resFromServer.statusCode,resFromServer.statusMessage); | ||
pump(streamChain); | ||
streamChain.push(resToClient); | ||
pipeline(streamChain,(err)=>{ | ||
if(err){ | ||
console.error('(relay response error)',err); | ||
} | ||
}); | ||
} | ||
@@ -215,0 +227,0 @@ /** |
{ | ||
"dependencies": { | ||
"pump": "^3.0.0", | ||
"socks5server": "^4.4.2" | ||
}, | ||
"name": "socksinthemiddle", | ||
"description": "use a socks server for web request modification", | ||
"version": "1.2.1", | ||
"version": "1.3.0", | ||
"main": "index.js", | ||
@@ -24,2 +20,6 @@ "scripts": { | ||
"license": "MIT", | ||
"dependencies": { | ||
"http2-client": "^1.3.5", | ||
"socks5server": "^4.4.2" | ||
}, | ||
"bugs": { | ||
@@ -26,0 +26,0 @@ "url": "https://github.com/JiaJiaJiang/node-socksInTheMiddle/issues" |
const {SocksInTheMiddle,BufferModder}=require('./index'), | ||
fs=require('fs'); | ||
let server=new SocksInTheMiddle({ | ||
socksPort:1090, | ||
socksPort:1099, | ||
httpPort:0, | ||
@@ -73,6 +73,6 @@ httpsPort:0, | ||
//change target address | ||
if(fromClient){ | ||
/* if(fromClient){ | ||
packet.address='127.0.0.1'; | ||
packet.port=12345; | ||
} | ||
} */ | ||
}); |
Network access
Supply chain riskThis module accesses the network.
Found 1 instance in 1 package
19504
390
4
+ Addedhttp2-client@^1.3.5
+ Addedhttp2-client@1.3.5(transitive)
- Removedpump@^3.0.0
- Removedend-of-stream@1.4.4(transitive)
- Removedonce@1.4.0(transitive)
- Removedpump@3.0.2(transitive)
- Removedwrappy@1.0.2(transitive)