Total Pageviews

Saturday 10 February 2018

一个基于go搭建的http代理服务器程序/socks代理服务器程序: goproxy-by-snail007

mkdir goproxy-by-snail007

cd goproxy-by-snail007

wget https://github.com/snail007/goproxy/releases/download/v11.0/proxy-linux-amd64.tar.gz

tar xvf proxy-linux-amd64.tar.gz

./proxy http -p 127.0.0.1:38080 & (这样就在vps本机的38080端口上,建立了一个http proxy)

./proxy socks -p 127.0.0.1:38081 &
(这样就在vps本机的38081端口上,建立了一个socks proxy)

项目地址:
https://github.com/snail007/goproxy/releases
(https://gitee.com/snail/proxy/)

https://snail007.github.io/goproxy/manual/zh/#/?id=_1http%e4%bb%a3%e7%90%86

https://snail007.github.io/goproxy/manual/zh/#/?id=_5socks5%e4%bb%a3%e7%90%86
--------------------------------
 
goproxy迎来 11.2版本。

新增特性:

1、--bind-ip 参数的 IP 部分,支持指定网卡名称通配符,还能指定多个,详细说明如下:

  • 指定网卡名称,比如:--bind-ip eth0:7777,那么客户端访问 7777 端口,出口 IP 就是 eth0 网卡的 IP。
  • 网卡名称支持通配符,比如:--bind-ip eth0.*:7777,那么客户端访问 7777 端口,出口 IP 就是 eth0. 开头网卡的 IP 中随机选择的一个。
  • IP 支持通配符,比如:--bind-ip 192.168.?.*:7777,那么客户端访问 7777 端口,出口 IP 就是机器所有 IP 中,匹配 192.168.?.* 的 IP 中随机选择的一个。
  • 还可以是网卡名称和 IP 的多个组合,多个使用半角逗号分割,比如:--bind-ip pppoe??,192.168.?.*:7777,那么客户端访问 7777 端口,出口 IP 就是机器网卡名称匹配 pppoe?? 和机器所有 IP 中匹配 192.168.?.* 的 IP 中随机选择的一个。
  • 通配符 * 代表 0 至任意多个字符,? 代表 1 个字符。
  • 如果网卡 IP 发生变化,也会实时生效。
  • 可以通过 --bind-refresh 参数,指定刷新本地网卡信息的间隔,默认 5,单位秒。

2、所有日志重构,使用 gmc 框架,日志输出更加规范,排查问题更准确。

手册新增典型用法,13,14,15。

手册地址: https://snail007.host900.com/goproxy/manual/zh/#/

13. 典型用法 - 拨号 VPS

为了方便说明,假设背景情况如下:

1、vps 有一个主网卡,名称是 eth0,ip 是 1.1.1.1,然后 vps 可以 pppoe 拨号,拨号建立的网卡名称前缀都是 pppoe_

实现的效果:

  • 提供动态 IP 代理服务,客户端访问 1.1.1.1 的代理端口 7777,可以使用拨号的 ip 随机选择一个作为出口,7777 端口支持代理认证。
  • 7777 端口同时支持 http/socks5 代理。

操作步骤:

  1. vps 执行 proxy sps -p :7777 --bind-ip pppoe_*:7777 -a user1:password1 -a user2:password2
  2. 命令中 -a 是设置代理认证用户,多个用户,可以重复 -a 参数,格式是:用户名:密码
  3. 更多认证方式可以参考手册 API认证认证部分。

14. 典型用法 - 多 IP 的 VPS

为了方便说明,假设背景情况如下:

1、vps 有一个主网卡,名称是 eth0,ip 是 1.1.1.1,然后 eth0 配置了 255 个子网卡并设置了 IP,比如:eth0:1,eth0:255,子网卡名称前缀都是:eth0:

实现的效果:

  • 提供动态 IP 代理服务,客户端访问 1.1.1.1 的代理端口 7777,可以使用配置的 255 个子网卡的 ip 中随机选择一个作为出口,7777 端口支持代理认证。
  • 7777 端口同时支持 http/socks5 代理。

操作步骤:

  1. vps 执行 proxy sps -p :7777 --bind-ip eth0::7777 -a user1:password1 -a user2:password2
  2. 命令中 -a 是设置代理认证用户,多个用户,可以重复 -a 参数,格式是:用户名:密码
  3. 更多认证方式可以参考手册 API认证认证部分。

15. 典型用法 - 拨号的 VPS 集群

为了方便说明,假设背景情况如下:

1、有一批 vps,它们每个都有一个主网卡配置了固定的 IP:x.x.x.x,然后 vps 可以 pppoe 拨号,拨号建立的网卡名称前缀都是 pppoe_

2、有一个 VPS 作为代理入口,它的 ip 是 2.2.2.2。

实现的效果:

  • 2.2.2.2 提供动态 IP 代理服务,客户端访问 2.2.2.2 的代理端口 8888,可以随机选择拨号 vps 集群中一个,然后使用拨号 vps 的拨号 ip 随机选择一个作为出口 ip,8888 端口支持代理认证。
  • 8888 端口同时支持 http/socks5 代理。

操作步骤:

拨号 VPS:

  1. 拨号的 vps 执行 proxy sps -p :7777 --bind-ip pppoe_:7777

入口 VPS:

  1. 2.2.2.2 的 vps 执行 proxy sps -p :8888 -a user1:password1 -a user2:password2 -P http://x.x.x.1:7777 -P http://x.x.x.2:7777
  2. 命令中 -a 是设置代理认证用户,多个用户,可以重复 -a 参数,格式是:用户名:密码
  3. x.x.x.1,x.x.x.2 是拨号 vps 的固定 IP,有多个,重复 -P 参数即可

更新: v10.7 及以后版本,执行:proxy update,即可完成快速更新到最新版。

特色功能

  • 链式代理,程序本身可以作为一级代理,如果设置了上级代理那么可以作为二级代理,乃至 N 级代理。
  • 通讯加密,如果程序不是一级代理,而且上级代理也是本程序,那么可以加密和上级代理之间的通讯,采用底层 tls 高强度加密,安全无特征。
  • 智能 HTTP 代理,HTTPS 代理,SOCKS5 代理,会自动判断访问的网站是否屏蔽,如果被屏蔽那么就会使用上级代理 (前提是配置了上级代理) 访问网站;如果访问的网站没有被屏蔽,为了加速访问,代理会直接访问网站,不使用上级代理。
  • 域名黑白名单,更加自由的控制网站的访问方式。
  • 跨平台性,无论你是 widows,linux,还是 mac,甚至是树莓派,都可以很好的运行 proxy。
  • 多协议支持,支持 HTTP (S),TCP,UDP,Websocket,SOCKS5 代理。
  • TCP/UDP 端口转发。
  • 游戏盾,游戏代理,高仿服务器。
  • 内网穿透,P2P 传输,协议支持 TCP 和 UDP,针对 HTTP 的优化穿透。
  • SSH 中转,HTTP (S),SOCKS5 代理支持 SSH 中转,上级 Linux 服务器不需要任何服务端,本地一个 proxy 即可开心上网。
  • KCP 协议支持,HTTP (S),SOCKS5 代理支持 KCP 协议传输数据,降低延迟,提升浏览体验。
  • 动态选择上级代理,通过外部 API,HTTP (S),SOCKS5,SPS 代理可以实现基于用户或者 IP 的限速,连接数限制,动态获取上级。
  • 灵活的上级分配,HTTP (S),SOCKS5,SPS 代理可以通过配置文件实现基于用户或者 IP 的限速,连接数限制,指定上级。
  • 反向代理,支持直接把域名解析到 proxy 监听的 ip,然后 proxy 就会帮你代理访问需要访问的 HTTP (S) 网站。
  • 透明 HTTP (S) 代理,配合 iptables,在网关直接把出去的 80,443 方向的流量转发到 proxy,就能实现无感知的智能路由器代理。
  • 协议转换,可以把已经存在的 HTTP (S) 或 SOCKS5 或 SS 代理转换为一个端口同时支持 HTTP (S) 和 SOCKS5 和 SS 代理,转换后的 SOCKS5 和 SS 代理如果上级是 SOCKS5 代理,那么支持 UDP 功能,同时支持强大的级联认证功能。
  • 自定义底层加密传输,http (s)\\sps\\socks 代理在 tcp 之上可以通过 tls 标准加密以及 kcp 协议加密 tcp 数据,除此之外还支持在 tls 和 kcp 之后进行自定义加密,也就是说自定义加密和 tls|kcp 是可以联合使用的,内部采用 AES256 加密,使用的时候只需要自己定义一个密码即可。
  • 底层压缩高效传输,http (s)\\sps\\socks 代理在 tcp 之上可以通过自定义加密和 tls 标准加密以及 kcp 协议加密 tcp 数据,在加密之后还可以对数据进行压缩,也就是说压缩功能和自定义加密和 tls|kcp 是可以联合使用的。
  • 安全的 DNS 代理,可以通过本地的 proxy 提供的 DNS 代理服务器与上级代理加密通讯实现安全防污染的 DNS 查询。
  • 负载均衡,高可用,HTTP (S)\\SOCKS5\\SPS 代理支持上级负载均衡和高可用,多个上级重复 - P 参数即可。
  • 指定出口 IP,HTTP (S)\\SOCKS5\\SPS\\TCP 代理支持客户端用入口 IP 连接过来的,就用入口 IP 作为出口 IP 访问目标网站的功能。如果入口 IP 是内网 IP,出口 IP 不会使用入口 IP
  • 支持限速,HTTP (S)\\SOCKS5\\SPS\\TCP 代理支持限速。
  • 支持限连接数,HTTP (S)\\SOCKS5\\SPS\\TCP 代理支持限连接数。

  • SOCKS5 代理支持级联认证。
  • 证书参数使用 base64 数据,默认情况下 - C,-K 参数是 crt 证书和 key 文件的路径,如果是 base64:// 开头,那么就认为后面的数据是 base64 编码的,会解码后使用。
  • 支持客户端 IP 黑白名单,更加安全的控制客户端对代理服务的访问,如果黑白名单同时设置,那么只有白名单生效。socks/http (s)/sps/tcp/udp/dns/ 内网穿透 bridge / 内网穿透 tbridge,都支持客户端 IP 黑白名单。
  • 端口范围批量监听,HTTP (S)\\SOCKS5\\SPS\\TCP 代理支持指定端口范围监听,避免启动过多进程,提高性能。

下载地址:

  • Gitee

  • https://github.com/snail007/goproxy

    (代理服务器-goproxy

    goproxy是国人开发的开源代理服务器, 代理协议包括:http,https,websocket,tcp,udp,socks5。支持正向代理、反向代理、透明代理、内网穿透、TCP/UDP端口映射、SSH中转,TLS加密传输,协议转换。软件基于golang编写,遵循GPL开源协议。

    软件特色:

        链式代理,程序本身可以作为一级代理,如果设置了上级代理那么可以作为二级代理,乃至N级代理.
        通讯加密,如果程序不是一级代理,而且上级代理也是本程序,那么可以加密和上级代理之间的通讯,采用底层tls高强度加密,安全无特征.
        智能HTTP,SOCKS5代理,会自动判断访问的网站是否屏蔽,如果被屏蔽那么就会使用上级代理(前提是配置了上级代理)访问网站;如果访问的网站没有被屏蔽,为了加速访问,代理会直接访问网站,不使用上级代理.
        域名黑白名单,更加自由的控制网站的访问方式。
        跨平台性,无论你是widows,linux,还是mac,甚至是树莓派,都可以很好的运行proxy.
        多协议支持,支持HTTP(S),TCP,UDP,Websocket,SOCKS5代理.
        TCP/UDP端口转发.
        支持内网穿透,协议支持TCP和UDP.
        SSH中转,HTTP(S),SOCKS5代理支持SSH中转,上级Linux服务器不需要任何服务端,本地一个proxy即可开心上网.
        KCP协议支持,HTTP(S),SOCKS5代理支持KCP协议传输数据,降低延迟,提升浏览体验.
        集成外部API,HTTP(S),SOCKS5代理认证功能可以与外部HTTP API集成,可以方便的通过外部系统控制代理用户.
        反向代理,支持直接把域名解析到proxy监听的ip,然后proxy就会帮你代理访问需要访问的HTTP(S)网站.
        透明HTTP(S)代理,配合iptables,在网关直接把出去的80,443方向的流量转发到proxy,就能实现无感知的智能路由器代理.
        协议转换,可以把已经存在的HTTP(S)或SOCKS5代理转换为一个端口同时支持HTTP(S)和SOCKS5代理,转换后的SOCKS5代理不支持UDP功能,同时支持强大的级联认证功能。

    使用场景:

        通过多个相连的proxy节点建立起一个安全的隧道访问服务.
        微信接口本地开发,方便调试.
        远程访问内网机器.
        和小伙伴一起玩局域网游戏.
        以前只能在局域网玩的,现在可以在任何地方玩.
        替代圣剑内网通,显IP内网通,花生壳之类的工具.

    [repo owner=”snail007″ name=”goproxy”] )

--------------------------------------------------------------

goproxy服务端部署脚本:

goproxy-shell

使用方法

wget --no-check-certificate https://github.com/sjz123321/goproxy-shell/releases/download/v0.1.1_fixed/install_fixed.sh && bash install_fixed.sh
之后使用在命令行中输入 run_goproxy.sh 即可

版本号及说明

v1.0.0
1.完成了http和socks代理的所有内容(包括多级代理)。
2.增加了一键部署默认配置功能。
3.增加了socks下的kcp传输协议,增加了卸载功能。
4.更新了主界面。
v0.2.0
更新:
1.在服务端部署成功后自动生成用户端需要输入的命令
2.更新了本机ip获取机制,避免反复获取浪费时间,对于无法自动获取ip的vps现在可以手动输入了。
v0.1.1
现有功能:
1.http代理包括 kcp tcp socks 含有或不含有tls加密的部署
2.tls证书生成
3.命令行杂项设置
4.tls证书回传
5.开机自启
尚未完成的功能:
1.多级代理
2.非http代理均未完成
下一步会逐步完善这些功能

界面展示

脚本主界面

1.1

tcp设置界面

1.2

kcp设置界面

1.3

socks设置界面

1.4

常见的问题

关于中文无法正常显示的问题

ssh端中文无法正常显示。请检查系统环境变量运行 env 查看 LANG=en_US.UTF-8 如果不为这个值。请运行 export LANG=en_US.UTF-8
如果仍然不正常请检查 (以debian ubuntu为例) dpkg-reconfigure locales 在第一个选项卡中选择 en_US.UTF-8 zh.CN.UTF-8
并在第二个选项卡中选择en_US.UTF-8作为默认语言。
关于运行export LANG=en_US.UTF-8 后中文显示正常,但重启之后又不正常的解决方案
在 /etc/profile 文件中增加一行 export LANG=en_US.UTF-8 使其变为系统环境变量即可。


相关帖子:
https://briteming.blogspot.com/2020/04/httpgoproxy-by-snail007.html
---------------------------------------------------------

a proxy with go,supports tcp,http,socks4/5

install
go get github.com/ejunjsh/goproxy

run with http:
$GOPATH/bin/goproxy -a :8090 -t http (这样,在8090端口,就搭建了一个http proxy server)

run with socks5:
$GOPATH/bin/goproxy -a :8092 -t socks5  (这样,在8092端口,就搭建了一个socks5 proxy server)

from https://github.com/ejunjsh/goproxy
--------------------------------

goproxy - 简单的代理小工具

简介

开发过程中,有些工具需要使用代理才能使用。本工具可以让大家快速创建一个代理服务。

注意:使用过程中你可能需要使用 qtunnel, ssh 等工具,具有一个不能本地的 vps。

功能

http(s) 代理
socks v5 代理
socks v5 转 http(s) 代理

编译

进入 goproxy 主目录:
make // or make install

查看命令帮助手册:
goproxy --help
goproxy http --help
goproxy socks --help

启动http代理:
goproxy http -l 127.0.0.1:9000

测试 HTTP 代理:
curl --proxy http://127.0.0.1:9000 http://httpbin.org/ip

启动socks v5 代理服务器:
goproxy socks -l 127.0.0.1:9000

测试 SOCKS 代理:
curl --socks5 127.0.0.1:9000 http://httpbin.org/ip

常用工具设置代理

参考:
http://stackoverflow.com/questions/783811/getting-git-to-work-with-a-proxy-server

如果 git repo 地址开头为 http 或 https , 如:
git clone https://github.com/ooclab/goproxy

配置全局设置:
git config --global http.proxy http://proxyuser:proxypwd@proxy.server.com:8080
git config --global https.proxy https://proxyuser:proxypwd@proxy.server.com:8080

取消代理设置:
git config --global --unset http.proxy
git config --global --unset https.proxy

参考:
http://www.emilsit.net/blog/archives/how-to-use-the-git-protocol-through-a-http-connect-proxy/

http 代理:
exec socat STDIO PROXY:$_proxy:$1:$2,proxyport=$_proxyport

socks 代理:
exec socat STDIO SOCKS4:$_proxy:$1:$2,socksport=$_proxyport

查看 git config 设置:
git config -l

from https://github.com/ooclab/goproxy