http-mitm-proxy
Version:
HTTP Man In The Middle (MITM) Proxy
45 lines (35 loc) • 1.36 kB
JavaScript
;
var port = 8081;
var Proxy = require('../');
var proxy = Proxy();
proxy.onError(function(ctx, err, errorKind) {
// ctx may be null
var url = (ctx && ctx.clientToProxyRequest) ? ctx.clientToProxyRequest.url : '';
console.error(errorKind + ' on ' + url + ':', err);
});
proxy.onRequest(function(ctx, callback) {
//console.log('REQUEST: http://' + ctx.clientToProxyRequest.headers.host + ctx.clientToProxyRequest.url);
if (ctx.clientToProxyRequest.headers.host == 'www.google.com'
&& ctx.clientToProxyRequest.url.indexOf('/search') == 0) {
ctx.use(Proxy.gunzip);
ctx.onResponseData(function(ctx, chunk, callback) {
chunk = new Buffer(chunk.toString().replace(/<h3.*?<\/h3>/g, '<h3>Pwned!</h3>'));
return callback(null, chunk);
});
}
return callback();
});
proxy.onRequestData(function(ctx, chunk, callback) {
//console.log('request data length: ' + chunk.length);
return callback(null, chunk);
});
proxy.onResponse(function(ctx, callback) {
//console.log('RESPONSE: http://' + ctx.clientToProxyRequest.headers.host + ctx.clientToProxyRequest.url);
return callback(null);
});
proxy.onResponseData(function(ctx, chunk, callback) {
//console.log('response data length: ' + chunk.length);
return callback(null, chunk);
});
proxy.listen({ port: port });
console.log('listening on ' + port);