Node.js MITM Proxy
npm install node-mitmproxy
node-mitmproxy是一个基于nodejs,支持http/https的中间人(MITM)代理,便于渗透测试和开发调试。
###### windows
```
npm install node-mitmproxy -g`
###### Mac`
sudo npm install node-mitmproxy -g
#### 关于配置文件
###### 简单配置:
simpleConfig.js
`正在访问:${rOptions.protocol}//${rOptions.hostname}:${rOptions.port}
module.exports = {
sslConnectInterceptor: (req, cltSocket, head) => true,
requestInterceptor: (rOptions, req, res, ssl, next) => {
console.log();
console.log('cookie:', rOptions.headers.cookie);
res.end('hello node-mitmproxy!');
next();
}
};
`
效果图: 
详细配置说明
更多例子
#### 启动方式
``
node-mitmproxy -c simpleConfig.js
#### PC下安装根证书方式
###### Mac
`
sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain ~/node-mitmproxy/node-mitmproxy.ca.crt
`
###### windows
注: 证书需要安装到 受信任的根证书目录 下
参考 issues#3
`
start %HOMEPATH%/node-mitmproxy/node-mitmproxy.ca.crt
`以nodejs模块的方式引用到代码中
`
var mitmproxy = require('node-mitmproxy');mitmproxy.createProxy({
sslConnectInterceptor: (req, cltSocket, head) => true,
requestInterceptor: (rOptions, req, res, ssl, next) => {
console.log(
正在访问:${rOptions.protocol}//${rOptions.hostname}:${rOptions.port});
console.log('cookie:', rOptions.headers.cookie);
res.end('Hello node-mitmproxy!');
next();
},
responseInterceptor: (req, res, proxyReq, proxyRes, ssl, next) => {
next();
}
});
`
4、配置详细说明
#### port
启动端口(默认:6789)
`
port: 6789
`#### sslConnectInterceptor
判断该connnect请求是否需要代理,传入参数参考http connnect 。
`
sslConnectInterceptor: (clientReq, clientSocket, head) => true,
`#### requestInterceptor
拦截客户端请求/响应
参数说明:
1、requestOptions:客户端请求参数
2、clientReq: 客户端请求,参考http.IncomingMessage
3、clientRes: 客户端响应,参考http.ServerResponse
4、ssl: 该请求是否为https
5、next: 回调函数,执行完拦截逻辑后调用该方法
`
requestInterceptor: (requestOptions, clientReq, clientRes, ssl, next) => {
next();
}
`
#### responseInterceptor
拦截服务端请求/响应
参数说明: 1、clientReq: 客户端请求,参考http.IncomingMessage
2、clientRes: 客户端响应,参考http.ServerResponse
3、proxyRes: 服务端请求,参考http.IncomingMessage
4、proxyRes: 服务端响应,参考http.ServerResponse
5、ssl: 该请求是否为https
6、next: 回调函数,执行完拦截逻辑后调用该方法
`
responseInterceptor: (clientReq, clientRes, proxyRes, proxyRes, ssl, next) => {
next();
}
`
#### caCertPath
CA根证书路径(ps: 无特殊情况无需配置)
默认:%HOMEPATH%/node-mitmproxy/node-mitmproxy.ca.crt
`
caCertPath: 'xxxx/xxxx.crt'
`#### caKeyPath
CA根证书密钥路径(ps: 无特殊情况无需配置)
默认:%HOMEPATH%/node-mitmproxy/node-mitmproxy.ca.key.pem
`
caKeyPath: 'xxxx/xxxx.pem'
``