问题描述:手机(或者其他设备)与开启抓包工具的机器不在同一个网关下,导致手机(或者其他设备)无法通过设置代理(局域网代理)来抓包。
Go编译环境
源码安装
- http://www.golangtc.com/download
- 将其解压到/usr/local目录下:
tar -C /usr/local -xzf go1.7.linux-amd64.tar.gz
- 设置环境变量
mkdir $HOME/go
echo 'export GOROOT=/usr/local/go'>> ~/.bashrc
echo 'export GOPATH=$HOME/go'>> ~/.bashrc
echo 'export PATH=$PATH:$GOROOT/bin'>> ~/.bashrc
source $HOME/.bashrc
包管理器安装
Go从1.5版本开始跨平台交叉编译变得简单,不再必须通过源码安装。
sudo apt-get install build-essential golang mercurial git subversion
准备Ngrok 1.x 的源码
git clone https://github.com/inconshreveable/ngrok.git ngrok
### 请使用下面的地址,修复了无法访问的包地址
git clone https://github.com/tutumcloud/ngrok.git ngrok
cd ngrok
域名
所用域名需要两条A记录,比如我们用域名tunnel.example.com
tunnel.example.com
->服务器IP
*.tunnel.example.com
->服务器IP
(泛解析)
生成自签名证书
export NGROK_DOMAIN="tunnel.example.com"
,生成自签名ssl证书
cd ngrok
openssl genrsa -out rootCA.key 2048
openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=$NGROK_DOMAIN" -days 5000 -out rootCA.pem
openssl genrsa -out device.key 2048
openssl req -new -key device.key -subj "/CN=$NGROK_DOMAIN" -out device.csr
openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000
cp rootCA.pem assets/client/tls/ngrokroot.crt
cp device.crt assets/server/tls/snakeoil.crt
cp device.key assets/server/tls/snakeoil.key
编译
生成服务端与客户端
make release-server release-client
GOOS=windows GOARCH=amd64 make release-server release-client
GOOS=darwin GOARCH=amd64 make release-server release-client
启动
服务端
将编译出来的ngrokd
和生成的证书device.key
、device.crt
上传至公网服务器。
./ngrokd -tlsKey=device.key -tlsCrt=device.crt -domain="tunnel.example.com" -tunnelAddr=":4443" -httpAddr=":9991" -httpsAddr=":9992"
- tunnelAddr:ngrok通信端口
- httpAddr:服务器上的http端口
- httpsAddr:服务器上的https端口
后台运行:nohup your_command &
客户端
在编译出来的ngrok
的同目录新建ngrok.cfg
文件。
server_addr: tunnel.example.com:4443
trust_host_root_certs: false
tunnels:
mitm: # 配置名称
remote_port: 9999 # 远程端口
proto:
tcp: 8888 # 本地端口以及对应协议
web:
remote_port: 8080
proto:
http: 80
说明:上面的示例配置文件,server_addr填写的是服务器域名以及ngrok通信端口,tunnel下面的是具体的端口转发配置,比如说要启动mitm这个配置,如下。
ngrok -config=ngrok.cfg start mitm
如此,如果要访问本地的8888
端口只需要访问tunnel.example.com
的9999
端口即可。
More
反向SSH
ssh -N -f -g -R 9999:localhost:8888root@remote-server-example.com
9999为远程端口,8888为本地端口。