Compare commits
7 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
bd4741a0a0 | ||
|
|
9a9dc2594d | ||
|
|
02547e9475 | ||
|
|
9749db9235 | ||
|
|
e35ddc4d53 | ||
|
|
99b06e813e | ||
|
|
7164349944 |
@ -1,4 +1,7 @@
|
|||||||
proxy更新日志
|
proxy更新日志
|
||||||
|
v4.1
|
||||||
|
1.优化了http(s),socks5代理中的域名智能判断,如果是内网IP,直接走本地网络,提升浏览体验.
|
||||||
|
|
||||||
v4.0
|
v4.0
|
||||||
1.内网穿透三端重构了一个multiplexing版本,使用github.com/xtaci/smux实现了tcp链接的多路复用,
|
1.内网穿透三端重构了一个multiplexing版本,使用github.com/xtaci/smux实现了tcp链接的多路复用,
|
||||||
鼎鼎大名的kcp-go底层就是使用的这个库,基于kcp-go的双边加速工具kcptun的广泛使用已经很好
|
鼎鼎大名的kcp-go底层就是使用的这个库,基于kcp-go的双边加速工具kcptun的广泛使用已经很好
|
||||||
|
|||||||
80
README.md
80
README.md
@ -1,5 +1,5 @@
|
|||||||
<img src="https://github.com/snail007/goproxy/blob/master/docs/images/logo.jpg?raw=true" width="200"/>
|
<img src="https://github.com/snail007/goproxy/blob/master/docs/images/logo.jpg?raw=true" width="200"/>
|
||||||
Proxy是golang实现的高性能http,https,websocket,tcp,udp,socks5代理服务器,支持正向代理、内网穿透、SSH中转。
|
Proxy是golang实现的高性能http,https,websocket,tcp,udp,socks5代理服务器,支持正向代理、内网穿透、TCP/UDP端口转发、SSH中转。
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@ -12,6 +12,7 @@ Proxy是golang实现的高性能http,https,websocket,tcp,udp,socks5代理服务
|
|||||||
- 域名黑白名单,更加自由的控制网站的访问方式。
|
- 域名黑白名单,更加自由的控制网站的访问方式。
|
||||||
- 跨平台性,无论你是widows,linux,还是mac,甚至是树莓派,都可以很好的运行proxy.
|
- 跨平台性,无论你是widows,linux,还是mac,甚至是树莓派,都可以很好的运行proxy.
|
||||||
- 多协议支持,支持HTTP(S),TCP,UDP,Websocket,SOCKS5代理.
|
- 多协议支持,支持HTTP(S),TCP,UDP,Websocket,SOCKS5代理.
|
||||||
|
- TCP/UDP端口转发.
|
||||||
- 支持内网穿透,协议支持TCP和UDP.
|
- 支持内网穿透,协议支持TCP和UDP.
|
||||||
- SSH中转,HTTP(S),SOCKS5代理支持SSH中转,上级Linux服务器不需要任何服务端,本地一个proxy即可开心上网.
|
- SSH中转,HTTP(S),SOCKS5代理支持SSH中转,上级Linux服务器不需要任何服务端,本地一个proxy即可开心上网.
|
||||||
- [KCP](https://github.com/xtaci/kcp-go)协议支持,HTTP(S),SOCKS5代理支持KCP协议传输数据,降低延迟,提升浏览体验.
|
- [KCP](https://github.com/xtaci/kcp-go)协议支持,HTTP(S),SOCKS5代理支持KCP协议传输数据,降低延迟,提升浏览体验.
|
||||||
@ -77,11 +78,11 @@ Proxy是golang实现的高性能http,https,websocket,tcp,udp,socks5代理服务
|
|||||||
- [2.5 加密三级TCP代理](#25加密三级tcp代理)
|
- [2.5 加密三级TCP代理](#25加密三级tcp代理)
|
||||||
- [2.6 查看帮助](#26查看帮助)
|
- [2.6 查看帮助](#26查看帮助)
|
||||||
- [3. UDP代理](#3udp代理)
|
- [3. UDP代理](#3udp代理)
|
||||||
- [3.1 普通一级TCP代理](#31普通一级udp代理)
|
- [3.1 普通一级UDP代理](#31普通一级udp代理)
|
||||||
- [3.2 普通二级TCP代理](#32普通二级udp代理)
|
- [3.2 普通二级UDP代理](#32普通二级udp代理)
|
||||||
- [3.3 普通三级TCP代理](#33普通三级udp代理)
|
- [3.3 普通三级UDP代理](#33普通三级udp代理)
|
||||||
- [3.4 加密二级TCP代理](#34加密二级udp代理)
|
- [3.4 加密二级UDP代理](#34加密二级udp代理)
|
||||||
- [3.5 加密三级TCP代理](#35加密三级udp代理)
|
- [3.5 加密三级UDP代理](#35加密三级udp代理)
|
||||||
- [3.6 查看帮助](#36查看帮助)
|
- [3.6 查看帮助](#36查看帮助)
|
||||||
- [4. 内网穿透](#4内网穿透)
|
- [4. 内网穿透](#4内网穿透)
|
||||||
- [4.1 原理说明](#41原理说明)
|
- [4.1 原理说明](#41原理说明)
|
||||||
@ -90,7 +91,7 @@ Proxy是golang实现的高性能http,https,websocket,tcp,udp,socks5代理服务
|
|||||||
- [4.4 UDP普通用法](#44udp普通用法)
|
- [4.4 UDP普通用法](#44udp普通用法)
|
||||||
- [4.5 高级用法一](#45高级用法一)
|
- [4.5 高级用法一](#45高级用法一)
|
||||||
- [4.6 高级用法一](#46高级用法二)
|
- [4.6 高级用法一](#46高级用法二)
|
||||||
- [4.7 tserver的-r参数](#47tserver的-r参数)
|
- [4.7 server的-r参数](#47server的-r参数)
|
||||||
- [4.8 查看帮助](#48查看帮助)
|
- [4.8 查看帮助](#48查看帮助)
|
||||||
- [5. SOCKS5代理](#5socks5代理)
|
- [5. SOCKS5代理](#5socks5代理)
|
||||||
- [5.1 普通SOCKS5代理](#51普通socks5代理)
|
- [5.1 普通SOCKS5代理](#51普通socks5代理)
|
||||||
@ -292,16 +293,16 @@ VPS(IP:22.22.22.33)执行:
|
|||||||
|
|
||||||
#### **2.4.加密二级TCP代理**
|
#### **2.4.加密二级TCP代理**
|
||||||
VPS(IP:22.22.22.33)执行:
|
VPS(IP:22.22.22.33)执行:
|
||||||
`./proxy tcp --tls -p ":33080" -T tcp -P "127.0.0.1:8080" -L 0 -C proxy.crt -K proxy.key`
|
`./proxy tcp -t tls -p ":33080" -T tcp -P "127.0.0.1:8080" -L 0 -C proxy.crt -K proxy.key`
|
||||||
本地执行:
|
本地执行:
|
||||||
`./proxy tcp -p ":23080" -T tls -P "22.22.22.33:33080" -C proxy.crt -K proxy.key`
|
`./proxy tcp -p ":23080" -T tls -P "22.22.22.33:33080" -C proxy.crt -K proxy.key`
|
||||||
那么访问本地23080端口就是通过加密TCP隧道访问22.22.22.33的8080端口.
|
那么访问本地23080端口就是通过加密TCP隧道访问22.22.22.33的8080端口.
|
||||||
|
|
||||||
#### **2.5.加密三级TCP代理**
|
#### **2.5.加密三级TCP代理**
|
||||||
一级TCP代理VPS_01,IP:22.22.22.22
|
一级TCP代理VPS_01,IP:22.22.22.22
|
||||||
`./proxy tcp --tls -p ":38080" -T tcp -P "66.66.66.66:8080" -C proxy.crt -K proxy.key`
|
`./proxy tcp -t tls -p ":38080" -T tcp -P "66.66.66.66:8080" -C proxy.crt -K proxy.key`
|
||||||
二级TCP代理VPS_02,IP:33.33.33.33
|
二级TCP代理VPS_02,IP:33.33.33.33
|
||||||
`./proxy tcp --tls -p ":28080" -T tls -P "22.22.22.22:38080" -C proxy.crt -K proxy.key`
|
`./proxy tcp -t tls -p ":28080" -T tls -P "22.22.22.22:38080" -C proxy.crt -K proxy.key`
|
||||||
三级TCP代理(本地)
|
三级TCP代理(本地)
|
||||||
`./proxy tcp -p ":8080" -T tls -P "33.33.33.33:28080" -C proxy.crt -K proxy.key`
|
`./proxy tcp -p ":8080" -T tls -P "33.33.33.33:28080" -C proxy.crt -K proxy.key`
|
||||||
那么访问本地8080端口就是通过加密TCP隧道访问66.66.66.66的8080端口.
|
那么访问本地8080端口就是通过加密TCP隧道访问66.66.66.66的8080端口.
|
||||||
@ -334,16 +335,16 @@ VPS(IP:22.22.22.33)执行:
|
|||||||
|
|
||||||
#### **3.4.加密二级UDP代理**
|
#### **3.4.加密二级UDP代理**
|
||||||
VPS(IP:22.22.22.33)执行:
|
VPS(IP:22.22.22.33)执行:
|
||||||
`./proxy tcp --tls -p ":33080" -T udp -P "8.8.8.8:53" -C proxy.crt -K proxy.key`
|
`./proxy tcp -t tls -p ":33080" -T udp -P "8.8.8.8:53" -C proxy.crt -K proxy.key`
|
||||||
本地执行:
|
本地执行:
|
||||||
`./proxy udp -p ":5353" -T tls -P "22.22.22.33:33080" -C proxy.crt -K proxy.key`
|
`./proxy udp -p ":5353" -T tls -P "22.22.22.33:33080" -C proxy.crt -K proxy.key`
|
||||||
那么访问本地UDP:5353端口就是通过加密TCP隧道,通过VPS访问8.8.8.8的UDP:53端口.
|
那么访问本地UDP:5353端口就是通过加密TCP隧道,通过VPS访问8.8.8.8的UDP:53端口.
|
||||||
|
|
||||||
#### **3.5.加密三级UDP代理**
|
#### **3.5.加密三级UDP代理**
|
||||||
一级TCP代理VPS_01,IP:22.22.22.22
|
一级TCP代理VPS_01,IP:22.22.22.22
|
||||||
`./proxy tcp --tls -p ":38080" -T udp -P "8.8.8.8:53" -C proxy.crt -K proxy.key`
|
`./proxy tcp -t tls -p ":38080" -T udp -P "8.8.8.8:53" -C proxy.crt -K proxy.key`
|
||||||
二级TCP代理VPS_02,IP:33.33.33.33
|
二级TCP代理VPS_02,IP:33.33.33.33
|
||||||
`./proxy tcp --tls -p ":28080" -T tls -P "22.22.22.22:38080" -C proxy.crt -K proxy.key`
|
`./proxy tcp -t tls -p ":28080" -T tls -P "22.22.22.22:38080" -C proxy.crt -K proxy.key`
|
||||||
三级TCP代理(本地)
|
三级TCP代理(本地)
|
||||||
`./proxy udp -p ":5353" -T tls -P "33.33.33.33:28080" -C proxy.crt -K proxy.key`
|
`./proxy udp -p ":5353" -T tls -P "33.33.33.33:28080" -C proxy.crt -K proxy.key`
|
||||||
那么访问本地5353端口就是通过加密TCP隧道,通过VPS_01访问8.8.8.8的53端口.
|
那么访问本地5353端口就是通过加密TCP隧道,通过VPS_01访问8.8.8.8的53端口.
|
||||||
@ -360,13 +361,13 @@ VPS(IP:22.22.22.33)执行:
|
|||||||
1. **多路复用版本的server,client可以开启压缩传输,参数是--c。**
|
1. **多路复用版本的server,client可以开启压缩传输,参数是--c。**
|
||||||
1. **server,client要么都开启压缩,要么都不开启,不能只开一个。**
|
1. **server,client要么都开启压缩,要么都不开启,不能只开一个。**
|
||||||
|
|
||||||
下面的教程以“多链接版本”为例子,说明使用方法。
|
下面的教程以“多路复用版本”为例子,说明使用方法。
|
||||||
内网穿透由三部分组成:tclient端,tserver端,tbridge端;tclient和tserver主动连接tbridge端进行桥接.
|
内网穿透由三部分组成:client端,server端,bridge端;client和server主动连接bridge端进行桥接.
|
||||||
当用户访问tserver端,流程是:
|
当用户访问server端,流程是:
|
||||||
1. tserver主动和tbridge端建立连接;
|
1. server主动和bridge端建立连接;
|
||||||
1. 然后tbridge端通知tclient端连接tbridge端,并连接内网目标端口;
|
1. 然后bridge端通知client端连接bridge端,并连接内网目标端口;
|
||||||
1. 然后绑定tclient端到tbridge端和tclient端到内网端口的连接;
|
1. 然后绑定client端到bridge端和client端到内网端口的连接;
|
||||||
1. 然后tbridge端把tclient过来的连接与tserver端过来的连接绑定;
|
1. 然后bridge端把client过来的连接与server端过来的连接绑定;
|
||||||
1. 整个通道建立完成;
|
1. 整个通道建立完成;
|
||||||
|
|
||||||
#### **4.2、TCP普通用法**
|
#### **4.2、TCP普通用法**
|
||||||
@ -379,11 +380,11 @@ VPS(IP:22.22.22.33)执行:
|
|||||||
|
|
||||||
步骤:
|
步骤:
|
||||||
1. 在vps上执行
|
1. 在vps上执行
|
||||||
`./proxy tbridge -p ":33080" -C proxy.crt -K proxy.key`
|
`./proxy bridge -p ":33080" -C proxy.crt -K proxy.key`
|
||||||
`./proxy tserver -r ":28080@:80" -P "127.0.0.1:33080" -C proxy.crt -K proxy.key`
|
`./proxy server -r ":28080@:80" -P "127.0.0.1:33080" -C proxy.crt -K proxy.key`
|
||||||
|
|
||||||
1. 在公司机器A上面执行
|
1. 在公司机器A上面执行
|
||||||
`./proxy tclient -P "22.22.22.22:33080" -C proxy.crt -K proxy.key`
|
`./proxy client -P "22.22.22.22:33080" -C proxy.crt -K proxy.key`
|
||||||
|
|
||||||
1. 完成
|
1. 完成
|
||||||
|
|
||||||
@ -401,11 +402,11 @@ VPS(IP:22.22.22.33)执行:
|
|||||||
|
|
||||||
步骤:
|
步骤:
|
||||||
1. 在vps上执行,确保vps的80端口没被其它程序占用.
|
1. 在vps上执行,确保vps的80端口没被其它程序占用.
|
||||||
`./proxy tbridge -p ":33080" -C proxy.crt -K proxy.key`
|
`./proxy bridge -p ":33080" -C proxy.crt -K proxy.key`
|
||||||
`./proxy tserver -r ":80@:80" -P "22.22.22.22:33080" -C proxy.crt -K proxy.key`
|
`./proxy server -r ":80@:80" -P "22.22.22.22:33080" -C proxy.crt -K proxy.key`
|
||||||
|
|
||||||
1. 在自己笔记本上面执行
|
1. 在自己笔记本上面执行
|
||||||
`./proxy tclient -P "22.22.22.22:33080" -C proxy.crt -K proxy.key`
|
`./proxy client -P "22.22.22.22:33080" -C proxy.crt -K proxy.key`
|
||||||
|
|
||||||
1. 完成
|
1. 完成
|
||||||
|
|
||||||
@ -419,11 +420,11 @@ VPS(IP:22.22.22.33)执行:
|
|||||||
|
|
||||||
步骤:
|
步骤:
|
||||||
1. 在vps上执行
|
1. 在vps上执行
|
||||||
`./proxy tbridge -p ":33080" -C proxy.crt -K proxy.key`
|
`./proxy bridge -p ":33080" -C proxy.crt -K proxy.key`
|
||||||
`./proxy tserver --udp -r ":53@:53" -P "127.0.0.1:33080" -C proxy.crt -K proxy.key`
|
`./proxy server --udp -r ":53@:53" -P "127.0.0.1:33080" -C proxy.crt -K proxy.key`
|
||||||
|
|
||||||
1. 在公司机器A上面执行
|
1. 在公司机器A上面执行
|
||||||
`./proxy tclient -P "22.22.22.22:33080" -C proxy.crt -K proxy.key`
|
`./proxy client -P "22.22.22.22:33080" -C proxy.crt -K proxy.key`
|
||||||
|
|
||||||
1. 完成
|
1. 完成
|
||||||
|
|
||||||
@ -438,13 +439,13 @@ VPS(IP:22.22.22.33)执行:
|
|||||||
|
|
||||||
步骤:
|
步骤:
|
||||||
1. 在vps上执行
|
1. 在vps上执行
|
||||||
`./proxy tbridge -p ":33080" -C proxy.crt -K proxy.key`
|
`./proxy bridge -p ":33080" -C proxy.crt -K proxy.key`
|
||||||
|
|
||||||
1. 在公司机器A上面执行
|
1. 在公司机器A上面执行
|
||||||
`./proxy tclient -P "22.22.22.22:33080" -C proxy.crt -K proxy.key`
|
`./proxy client -P "22.22.22.22:33080" -C proxy.crt -K proxy.key`
|
||||||
|
|
||||||
1. 在家里电脑上执行
|
1. 在家里电脑上执行
|
||||||
`./proxy tserver -r ":28080@:80" -P "22.22.22.22:33080" -C proxy.crt -K proxy.key`
|
`./proxy server -r ":28080@:80" -P "22.22.22.22:33080" -C proxy.crt -K proxy.key`
|
||||||
|
|
||||||
1. 完成
|
1. 完成
|
||||||
|
|
||||||
@ -465,15 +466,15 @@ server连接到bridge的时候,如果同时有多个client连接到同一个brid
|
|||||||
|
|
||||||
步骤:
|
步骤:
|
||||||
1. 在vps上执行
|
1. 在vps上执行
|
||||||
`./proxy tbridge -p ":33080" -C proxy.crt -K proxy.key`
|
`./proxy bridge -p ":33080" -C proxy.crt -K proxy.key`
|
||||||
`./proxy tserver -r ":28080@:80" -r ":29090@:21" --k test -P "127.0.0.1:33080" -C proxy.crt -K proxy.key`
|
`./proxy server -r ":28080@:80" -r ":29090@:21" --k test -P "127.0.0.1:33080" -C proxy.crt -K proxy.key`
|
||||||
|
|
||||||
1. 在公司机器A上面执行
|
1. 在公司机器A上面执行
|
||||||
`./proxy tclient --k test -P "22.22.22.22:33080" -C proxy.crt -K proxy.key`
|
`./proxy client --k test -P "22.22.22.22:33080" -C proxy.crt -K proxy.key`
|
||||||
|
|
||||||
1. 完成
|
1. 完成
|
||||||
|
|
||||||
#### **4.7.tserver的-r参数**
|
#### **4.7.server的-r参数**
|
||||||
-r完整格式是:`PROTOCOL://LOCAL_IP:LOCAL_PORT@[CLIENT_KEY]CLIENT_LOCAL_HOST:CLIENT_LOCAL_PORT`
|
-r完整格式是:`PROTOCOL://LOCAL_IP:LOCAL_PORT@[CLIENT_KEY]CLIENT_LOCAL_HOST:CLIENT_LOCAL_PORT`
|
||||||
|
|
||||||
4.7.1.协议PROTOCOL:tcp或者udp.
|
4.7.1.协议PROTOCOL:tcp或者udp.
|
||||||
@ -489,9 +490,9 @@ server连接到bridge的时候,如果同时有多个client连接到同一个brid
|
|||||||
4.7.3.LOCAL_IP为空默认是:`0.0.0.0`,CLIENT_LOCAL_HOST为空默认是:`127.0.0.1`;
|
4.7.3.LOCAL_IP为空默认是:`0.0.0.0`,CLIENT_LOCAL_HOST为空默认是:`127.0.0.1`;
|
||||||
|
|
||||||
#### **4.8.查看帮助**
|
#### **4.8.查看帮助**
|
||||||
`./proxy help tbridge`
|
`./proxy help bridge`
|
||||||
`./proxy help tserver`
|
`./proxy help server`
|
||||||
`./proxy help tserver`
|
`./proxy help server`
|
||||||
|
|
||||||
### **5.SOCKS5代理**
|
### **5.SOCKS5代理**
|
||||||
提示:SOCKS5代理,支持CONNECT,UDP协议,不支持BIND,支持用户名密码认证.
|
提示:SOCKS5代理,支持CONNECT,UDP协议,不支持BIND,支持用户名密码认证.
|
||||||
@ -580,6 +581,7 @@ KCP协议需要-B参数设置一个密码用于加密解密数据
|
|||||||
|
|
||||||
### TODO
|
### TODO
|
||||||
- http,socks代理多个上级负载均衡?
|
- http,socks代理多个上级负载均衡?
|
||||||
|
- http(s)代理增加pac支持?
|
||||||
- 欢迎加群反馈...
|
- 欢迎加群反馈...
|
||||||
|
|
||||||
### 如何使用源码?
|
### 如何使用源码?
|
||||||
|
|||||||
85
release.sh
85
release.sh
@ -9,60 +9,59 @@ cd .cert
|
|||||||
cd ..
|
cd ..
|
||||||
rm -rf ${RELEASE}
|
rm -rf ${RELEASE}
|
||||||
mkdir ${RELEASE}
|
mkdir ${RELEASE}
|
||||||
export CGO_ENABLED=0
|
|
||||||
#linux
|
#linux
|
||||||
GOOS=linux GOARCH=386 go build && tar zcfv "${RELEASE}/proxy-linux-386.tar.gz" proxy direct blocked
|
CGO_ENABLED=0 GOOS=linux GOARCH=386 go build && tar zcfv "${RELEASE}/proxy-linux-386.tar.gz" proxy direct blocked
|
||||||
GOOS=linux GOARCH=amd64 go build && tar zcfv "${RELEASE}/proxy-linux-amd64.tar.gz" proxy direct blocked
|
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build && tar zcfv "${RELEASE}/proxy-linux-amd64.tar.gz" proxy direct blocked
|
||||||
GOOS=linux GOARCH=arm GOARM=6 go build && tar zcfv "${RELEASE}/proxy-linux-arm-v6.tar.gz" proxy direct blocked
|
CGO_ENABLED=0 GOOS=linux GOARCH=arm GOARM=6 go build && tar zcfv "${RELEASE}/proxy-linux-arm-v6.tar.gz" proxy direct blocked
|
||||||
GOOS=linux GOARCH=arm64 GOARM=6 go build && tar zcfv "${RELEASE}/proxy-linux-arm64-v6.tar.gz" proxy direct blocked
|
CGO_ENABLED=0 GOOS=linux GOARCH=arm64 GOARM=6 go build && tar zcfv "${RELEASE}/proxy-linux-arm64-v6.tar.gz" proxy direct blocked
|
||||||
GOOS=linux GOARCH=arm GOARM=7 go build && tar zcfv "${RELEASE}/proxy-linux-arm-v7.tar.gz" proxy direct blocked
|
CGO_ENABLED=0 GOOS=linux GOARCH=arm GOARM=7 go build && tar zcfv "${RELEASE}/proxy-linux-arm-v7.tar.gz" proxy direct blocked
|
||||||
GOOS=linux GOARCH=arm64 GOARM=7 go build && tar zcfv "${RELEASE}/proxy-linux-arm64-v7.tar.gz" proxy direct blocked
|
CGO_ENABLED=0 GOOS=linux GOARCH=arm64 GOARM=7 go build && tar zcfv "${RELEASE}/proxy-linux-arm64-v7.tar.gz" proxy direct blocked
|
||||||
GOOS=linux GOARCH=arm GOARM=8 go build && tar zcfv "${RELEASE}/proxy-linux-arm-v8.tar.gz" proxy direct blocked
|
CGO_ENABLED=0 GOOS=linux GOARCH=arm GOARM=8 go build && tar zcfv "${RELEASE}/proxy-linux-arm-v8.tar.gz" proxy direct blocked
|
||||||
GOOS=linux GOARCH=arm64 GOARM=8 go build && tar zcfv "${RELEASE}/proxy-linux-arm64-v8.tar.gz" proxy direct blocked
|
CGO_ENABLED=0 GOOS=linux GOARCH=arm64 GOARM=8 go build && tar zcfv "${RELEASE}/proxy-linux-arm64-v8.tar.gz" proxy direct blocked
|
||||||
GOOS=linux GOARCH=mips go build && tar zcfv "${RELEASE}/proxy-linux-mips.tar.gz" proxy direct blocked
|
CGO_ENABLED=0 GOOS=linux GOARCH=mips go build && tar zcfv "${RELEASE}/proxy-linux-mips.tar.gz" proxy direct blocked
|
||||||
GOOS=linux GOARCH=mips64 go build && tar zcfv "${RELEASE}/proxy-linux-mips64.tar.gz" proxy direct blocked
|
CGO_ENABLED=0 GOOS=linux GOARCH=mips64 go build && tar zcfv "${RELEASE}/proxy-linux-mips64.tar.gz" proxy direct blocked
|
||||||
GOOS=linux GOARCH=mips64le go build && tar zcfv "${RELEASE}/proxy-linux-mips64le.tar.gz" proxy direct blocked
|
CGO_ENABLED=0 GOOS=linux GOARCH=mips64le go build && tar zcfv "${RELEASE}/proxy-linux-mips64le.tar.gz" proxy direct blocked
|
||||||
GOOS=linux GOARCH=mipsle go build && tar zcfv "${RELEASE}/proxy-linux-mipsle.tar.gz" proxy direct blocked
|
CGO_ENABLED=0 GOOS=linux GOARCH=mipsle go build && tar zcfv "${RELEASE}/proxy-linux-mipsle.tar.gz" proxy direct blocked
|
||||||
GOOS=linux GOARCH=ppc64 go build && tar zcfv "${RELEASE}/proxy-linux-ppc64.tar.gz" proxy direct blocked
|
CGO_ENABLED=0 GOOS=linux GOARCH=ppc64 go build && tar zcfv "${RELEASE}/proxy-linux-ppc64.tar.gz" proxy direct blocked
|
||||||
GOOS=linux GOARCH=ppc64le go build && tar zcfv "${RELEASE}/proxy-linux-ppc64le.tar.gz" proxy direct blocked
|
CGO_ENABLED=0 GOOS=linux GOARCH=ppc64le go build && tar zcfv "${RELEASE}/proxy-linux-ppc64le.tar.gz" proxy direct blocked
|
||||||
GOOS=linux GOARCH=s390x go build && tar zcfv "${RELEASE}/proxy-linux-s390x.tar.gz" proxy direct blocked
|
CGO_ENABLED=0 GOOS=linux GOARCH=s390x go build && tar zcfv "${RELEASE}/proxy-linux-s390x.tar.gz" proxy direct blocked
|
||||||
#android
|
#android
|
||||||
GOOS=android GOARCH=386 go build && tar zcfv "${RELEASE}/proxy-android-386.tar.gz" proxy direct blocked
|
CGO_ENABLED=0 GOOS=android GOARCH=386 go build && tar zcfv "${RELEASE}/proxy-android-386.tar.gz" proxy direct blocked
|
||||||
GOOS=android GOARCH=amd64 go build && tar zcfv "${RELEASE}/proxy-android-amd64.tar.gz" proxy direct blocked
|
CGO_ENABLED=0 GOOS=android GOARCH=amd64 go build && tar zcfv "${RELEASE}/proxy-android-amd64.tar.gz" proxy direct blocked
|
||||||
GOOS=android GOARCH=arm go build && tar zcfv "${RELEASE}/proxy-android-arm.tar.gz" proxy direct blocked
|
CGO_ENABLED=0 GOOS=android GOARCH=arm go build && tar zcfv "${RELEASE}/proxy-android-arm.tar.gz" proxy direct blocked
|
||||||
GOOS=android GOARCH=arm64 go build && tar zcfv "${RELEASE}/proxy-android-arm64.tar.gz" proxy direct blocked
|
CGO_ENABLED=0 GOOS=android GOARCH=arm64 go build && tar zcfv "${RELEASE}/proxy-android-arm64.tar.gz" proxy direct blocked
|
||||||
#darwin
|
#darwin
|
||||||
GOOS=darwin GOARCH=386 go build go build && tar zcfv "${RELEASE}/proxy-darwin-386.tar.gz" proxy direct blocked
|
CGO_ENABLED=0 GOOS=darwin GOARCH=386 go build go build && tar zcfv "${RELEASE}/proxy-darwin-386.tar.gz" proxy direct blocked
|
||||||
GOOS=darwin GOARCH=amd64 go build && tar zcfv "${RELEASE}/proxy-darwin-amd64.tar.gz" proxy direct blocked
|
CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build && tar zcfv "${RELEASE}/proxy-darwin-amd64.tar.gz" proxy direct blocked
|
||||||
GOOS=darwin GOARCH=arm go build && tar zcfv "${RELEASE}/proxy-darwin-arm.tar.gz" proxy direct blocked
|
CGO_ENABLED=0 GOOS=darwin GOARCH=arm go build && tar zcfv "${RELEASE}/proxy-darwin-arm.tar.gz" proxy direct blocked
|
||||||
GOOS=darwin GOARCH=arm64 go build && tar zcfv "${RELEASE}/proxy-darwin-arm64.tar.gz" proxy direct blocked
|
CGO_ENABLED=0 GOOS=darwin GOARCH=arm64 go build && tar zcfv "${RELEASE}/proxy-darwin-arm64.tar.gz" proxy direct blocked
|
||||||
#dragonfly
|
#dragonfly
|
||||||
GOOS=dragonfly GOARCH=amd64 go build && tar zcfv "${RELEASE}/proxy-dragonfly-amd64.tar.gz" proxy direct blocked
|
CGO_ENABLED=0 GOOS=dragonfly GOARCH=amd64 go build && tar zcfv "${RELEASE}/proxy-dragonfly-amd64.tar.gz" proxy direct blocked
|
||||||
#freebsd
|
#freebsd
|
||||||
GOOS=freebsd GOARCH=386 go build && tar zcfv "${RELEASE}/proxy-freebsd-386.tar.gz" proxy direct blocked
|
CGO_ENABLED=0 GOOS=freebsd GOARCH=386 go build && tar zcfv "${RELEASE}/proxy-freebsd-386.tar.gz" proxy direct blocked
|
||||||
GOOS=freebsd GOARCH=amd64 go build && tar zcfv "${RELEASE}/proxy-freebsd-amd64.tar.gz" proxy direct blocked
|
CGO_ENABLED=0 GOOS=freebsd GOARCH=amd64 go build && tar zcfv "${RELEASE}/proxy-freebsd-amd64.tar.gz" proxy direct blocked
|
||||||
GOOS=freebsd GOARCH=arm go build && tar zcfv "${RELEASE}/proxy-freebsd-arm.tar.gz" proxy direct blocked
|
CGO_ENABLED=0 GOOS=freebsd GOARCH=arm go build && tar zcfv "${RELEASE}/proxy-freebsd-arm.tar.gz" proxy direct blocked
|
||||||
#nacl
|
#nacl
|
||||||
GOOS=nacl GOARCH=386 go build && tar zcfv "${RELEASE}/proxy-nacl-386.tar.gz" proxy direct blocked
|
CGO_ENABLED=0 GOOS=nacl GOARCH=386 go build && tar zcfv "${RELEASE}/proxy-nacl-386.tar.gz" proxy direct blocked
|
||||||
GOOS=nacl GOARCH=amd64p32 go build && tar zcfv "${RELEASE}/proxy-nacl-amd64p32.tar.gz" proxy direct blocked
|
CGO_ENABLED=0 GOOS=nacl GOARCH=amd64p32 go build && tar zcfv "${RELEASE}/proxy-nacl-amd64p32.tar.gz" proxy direct blocked
|
||||||
GOOS=nacl GOARCH=arm go build && tar zcfv "${RELEASE}/proxy-nacl-arm.tar.gz" proxy direct blocked
|
CGO_ENABLED=0 GOOS=nacl GOARCH=arm go build && tar zcfv "${RELEASE}/proxy-nacl-arm.tar.gz" proxy direct blocked
|
||||||
#netbsd
|
#netbsd
|
||||||
GOOS=netbsd GOARCH=386 go build && tar zcfv "${RELEASE}/proxy-netbsd-386.tar.gz" proxy direct blocked
|
CGO_ENABLED=0 GOOS=netbsd GOARCH=386 go build && tar zcfv "${RELEASE}/proxy-netbsd-386.tar.gz" proxy direct blocked
|
||||||
GOOS=netbsd GOARCH=amd64 go build && tar zcfv "${RELEASE}/proxy-netbsd-amd64.tar.gz" proxy direct blocked
|
CGO_ENABLED=0 GOOS=netbsd GOARCH=amd64 go build && tar zcfv "${RELEASE}/proxy-netbsd-amd64.tar.gz" proxy direct blocked
|
||||||
GOOS=netbsd GOARCH=arm go build && tar zcfv "${RELEASE}/proxy-netbsd-arm.tar.gz" proxy direct blocked
|
CGO_ENABLED=0 GOOS=netbsd GOARCH=arm go build && tar zcfv "${RELEASE}/proxy-netbsd-arm.tar.gz" proxy direct blocked
|
||||||
#openbsd
|
#openbsd
|
||||||
GOOS=openbsd GOARCH=386 go build && tar zcfv "${RELEASE}/proxy-openbsd-386.tar.gz" proxy direct blocked
|
CGO_ENABLED=0 GOOS=openbsd GOARCH=386 go build && tar zcfv "${RELEASE}/proxy-openbsd-386.tar.gz" proxy direct blocked
|
||||||
GOOS=openbsd GOARCH=amd64 go build && tar zcfv "${RELEASE}/proxy-openbsd-amd64.tar.gz" proxy direct blocked
|
CGO_ENABLED=0 GOOS=openbsd GOARCH=amd64 go build && tar zcfv "${RELEASE}/proxy-openbsd-amd64.tar.gz" proxy direct blocked
|
||||||
GOOS=openbsd GOARCH=arm go build && tar zcfv "${RELEASE}/proxy-openbsd-arm.tar.gz" proxy direct blocked
|
CGO_ENABLED=0 GOOS=openbsd GOARCH=arm go build && tar zcfv "${RELEASE}/proxy-openbsd-arm.tar.gz" proxy direct blocked
|
||||||
#plan9
|
#plan9
|
||||||
GOOS=plan9 GOARCH=386 go build && tar zcfv "${RELEASE}/proxy-plan9-386.tar.gz" proxy direct blocked
|
CGO_ENABLED=0 GOOS=plan9 GOARCH=386 go build && tar zcfv "${RELEASE}/proxy-plan9-386.tar.gz" proxy direct blocked
|
||||||
GOOS=plan9 GOARCH=amd64 go build && tar zcfv "${RELEASE}/proxy-plan9-amd64.tar.gz" proxy direct blocked
|
CGO_ENABLED=0 GOOS=plan9 GOARCH=amd64 go build && tar zcfv "${RELEASE}/proxy-plan9-amd64.tar.gz" proxy direct blocked
|
||||||
GOOS=plan9 GOARCH=arm go build && tar zcfv "${RELEASE}/proxy-plan9-arm.tar.gz" proxy direct blocked
|
CGO_ENABLED=0 GOOS=plan9 GOARCH=arm go build && tar zcfv "${RELEASE}/proxy-plan9-arm.tar.gz" proxy direct blocked
|
||||||
#solaris
|
#solaris
|
||||||
GOOS=solaris GOARCH=amd64 go build && tar zcfv "${RELEASE}/proxy-solaris-amd64.tar.gz" proxy direct blocked
|
CGO_ENABLED=0 GOOS=solaris GOARCH=amd64 go build && tar zcfv "${RELEASE}/proxy-solaris-amd64.tar.gz" proxy direct blocked
|
||||||
#windows
|
#windows
|
||||||
GOOS=windows GOARCH=386 go build && tar zcfv "${RELEASE}/proxy-windows-386.tar.gz" proxy.exe direct blocked .cert/proxy.crt .cert/proxy.key
|
CGO_ENABLED=0 GOOS=windows GOARCH=386 go build && tar zcfv "${RELEASE}/proxy-windows-386.tar.gz" proxy.exe direct blocked .cert/proxy.crt .cert/proxy.key
|
||||||
GOOS=windows GOARCH=amd64 go build && tar zcfv "${RELEASE}/proxy-windows-amd64.tar.gz" proxy.exe direct blocked .cert/proxy.crt .cert/proxy.key
|
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build && tar zcfv "${RELEASE}/proxy-windows-amd64.tar.gz" proxy.exe direct blocked .cert/proxy.crt .cert/proxy.key
|
||||||
|
|
||||||
rm -rf proxy proxy.exe .cert
|
rm -rf proxy proxy.exe .cert
|
||||||
|
|
||||||
|
|||||||
@ -152,22 +152,26 @@ func (s *HTTP) callback(inConn net.Conn) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
address := req.Host
|
address := req.Host
|
||||||
|
host, _, _ := net.SplitHostPort(address)
|
||||||
useProxy := true
|
useProxy := false
|
||||||
if *s.cfg.Parent == "" {
|
if !utils.IsIternalIP(host) {
|
||||||
useProxy = false
|
|
||||||
} else if *s.cfg.Always {
|
|
||||||
useProxy = true
|
useProxy = true
|
||||||
} else {
|
if *s.cfg.Parent == "" {
|
||||||
if req.IsHTTPS() {
|
useProxy = false
|
||||||
s.checker.Add(address, true, req.Method, "", nil)
|
} else if *s.cfg.Always {
|
||||||
|
useProxy = true
|
||||||
} else {
|
} else {
|
||||||
s.checker.Add(address, false, req.Method, req.URL, req.HeadBuf)
|
if req.IsHTTPS() {
|
||||||
|
s.checker.Add(address, true, req.Method, "", nil)
|
||||||
|
} else {
|
||||||
|
s.checker.Add(address, false, req.Method, req.URL, req.HeadBuf)
|
||||||
|
}
|
||||||
|
//var n, m uint
|
||||||
|
useProxy, _, _ = s.checker.IsBlocked(req.Host)
|
||||||
|
//log.Printf("blocked ? : %v, %s , fail:%d ,success:%d", useProxy, address, n, m)
|
||||||
}
|
}
|
||||||
//var n, m uint
|
|
||||||
useProxy, _, _ = s.checker.IsBlocked(req.Host)
|
|
||||||
//log.Printf("blocked ? : %v, %s , fail:%d ,success:%d", useProxy, address, n, m)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
log.Printf("use proxy : %v, %s", useProxy, address)
|
log.Printf("use proxy : %v, %s", useProxy, address)
|
||||||
|
|
||||||
err = s.OutToTCP(useProxy, address, &inConn, &req)
|
err = s.OutToTCP(useProxy, address, &inConn, &req)
|
||||||
|
|||||||
@ -416,8 +416,14 @@ func (s *Socks) proxyTCP(inConn *net.Conn, methodReq socks.MethodsRequest, reque
|
|||||||
outConn, err = s.getOutConn(methodReq.Bytes(), request.Bytes(), request.Addr())
|
outConn, err = s.getOutConn(methodReq.Bytes(), request.Bytes(), request.Addr())
|
||||||
} else {
|
} else {
|
||||||
if *s.cfg.Parent != "" {
|
if *s.cfg.Parent != "" {
|
||||||
s.checker.Add(request.Addr(), true, "", "", nil)
|
host, _, _ := net.SplitHostPort(request.Addr())
|
||||||
useProxy, _, _ = s.checker.IsBlocked(request.Addr())
|
useProxy := false
|
||||||
|
if utils.IsIternalIP(host) {
|
||||||
|
useProxy = false
|
||||||
|
} else {
|
||||||
|
s.checker.Add(request.Addr(), true, "", "", nil)
|
||||||
|
useProxy, _, _ = s.checker.IsBlocked(request.Addr())
|
||||||
|
}
|
||||||
if useProxy {
|
if useProxy {
|
||||||
outConn, err = s.getOutConn(methodReq.Bytes(), request.Bytes(), request.Addr())
|
outConn, err = s.getOutConn(methodReq.Bytes(), request.Bytes(), request.Addr())
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@ -454,6 +454,29 @@ func HttpGet(URL string, timeout int) (body []byte, code int, err error) {
|
|||||||
body, err = ioutil.ReadAll(resp.Body)
|
body, err = ioutil.ReadAll(resp.Body)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
func IsIternalIP(domainOrIP string) bool {
|
||||||
|
var outIPs []net.IP
|
||||||
|
outIPs, err := net.LookupIP(domainOrIP)
|
||||||
|
if err != nil {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
for _, ip := range outIPs {
|
||||||
|
if ip.IsLoopback() {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
if ip.To4().Mask(net.IPv4Mask(255, 0, 0, 0)).String() == "10.0.0.0" {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
if ip.To4().Mask(net.IPv4Mask(255, 0, 0, 0)).String() == "192.168.0.0" {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
if ip.To4().Mask(net.IPv4Mask(255, 0, 0, 0)).String() == "172.0.0.0" {
|
||||||
|
i, _ := strconv.Atoi(strings.Split(ip.To4().String(), ".")[1])
|
||||||
|
return i >= 16 && i <= 31
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
// type sockaddr struct {
|
// type sockaddr struct {
|
||||||
// family uint16
|
// family uint16
|
||||||
|
|||||||
Reference in New Issue
Block a user