通过web登录实现验证码登录
通过Tampermonkey脚本修改vpn登录web界面访问ECAgent的地址‘127.0.0.1’为docker的地址,实现web登录。脚本如下:
// @match https://vpn.xxx.com/* return "https://dockerip:{0}/ECAgent/";
分别为vpn公网登录地址和Docker的内网地址
`// ==UserScript== // @name EasyConnect // @homepageURL https://vpn.xxx.com // @version 0.1 // @description Hook修改ECAgent地址 // @author You // @match https://vpn.xxx.com/* // @run-at document-start // ==/UserScript==
(function() { 'use strict'; debugger; function Hook_SFConfig() { try{ if(SFConfig && typeof(SFConfig) == "object"){ Object.defineProperty(SFConfig, 'EC_URL_TEMPLATE', { get: function () { return "https://dockerip:{0}/ECAgent/"; } }); } }catch(e){ console.warn("wait SFConfig..."); setTimeout(Hook_SFConfig, 100); } } Hook_SFConfig();
})();`
由于ECAgent开启的Web服务默认监听的是‘127.0.0.1’地址,只能本地访问,不能外部访问,因此需要修改ECAgent的监听地址为‘0.0.0.0’,WinHex打开ECAgent搜索'127.0.0.1:%u',修改为'0.0.0.0:%u',下图为x64_7.6.7版本的ECAgent修改位置:

Docker内运行 ECAgent --resume 打开VPN的Web登录地址即可正常登录。
或者可以通过在docker安装nginx反向代理vpn的web登录地址, subs_filter 127.0.0.1' 'docker' 修改ECAgent地址,即可在docker上实现web登录,同时支持验证码。
另外,我是通过开启linux路由转发功能,在局域网路由器上配置策略路由,实现整个局域网无感知访问VPN资源的。
原来还可以这样玩,长见识了! 这样的话要是能够把 ECAgent 的 HTTP API 摸清楚就好了,可能不用再受 EasyConnect 前端的气了
客户端是用electron写的,ECAgent的API在app.asar里都有,重写没必要。直接调用vpn服务器的web最方便。 Web目录的jssdk就是http api接口
用asar解压app.asar,改造移除electron相关代码,直接用nodejs运行app加载Web目录,可以实现本地web登录。工作量相对较小,但是不确定是否兼容所有的版本。
有偏黑盒方式对 electron 应用做自动化操作的方案么?我看到 electronjs 官网提到 webdriverIO,playwright ,正在读文档学习中……
@elseif 有什么建议么?
最近针对 sangfor-cli 版本做证书登录各种尝试,都不成功,搞得灰头土脸 #48
@wushuzh 没仔细研究客户端,因为我这边的用的VPN服务端器采用的是硬件绑定+短信验证,即使正常采用客户端登录,客户端加载的也是VPN服务器的Web页面。所以我就用Tampermonkey修改了下服务器Web页面里的ECAgent的地址就可以正常登录,然后通过在linux通过ospf动态发布路由就可以了。
@wushuzh @Hagb 可以下载部署个虚拟版的VPN服务端用来调试。
https://community.sangfor.com/forum.php?mod=attachment&aid=NTc1NjN8NTBjNGE5MDN8MTY1MTAzMDczNnwwfDMxNTI%3D https://download.sangfor.com/Download/Product/SSL/vSSL7.6.1_for_VMware.ova http://download.sangfor.com.cn/download/product/sslvpn/SSLM7.6.8R2(20200224)_built-up_DLAN6.0.0(20191226).cssu https://community.sangfor.com/forum.php?mod=attachment&aid=NTc1NjN8NTBjNGE5MDN8MTY1MTAzMDczNnwwfDMxNTI%3D
the default user name and password is admin/ admin
cssu 是zip文件,密码是sangforupd~!@#$%
@elseif 请问是哪个版本的docker支持您所讲的web登录?cli版本可以吗? 我在按windows(host)->VirtualBox:alpine(docker-host)->docker(docker-easyconnect:cli)这样的结构部署,目前遇到验证码问题。我想尝试一下您所说的nginx的方式将windows(host)的web登录请求代理到docker的环境里面。请问我应该运行docker-easyconnect:cli里哪个程序用于只监听web登录?
以下方式成功了一半,但网页验证的时候仍然提示版本过旧,也没办法测试后面proxy运行情况:
按windows(host)->VirtualBox:alpine(docker-host)->docker(docker-easyconnect:cli)这样的结构部署,192.168.56.112是VirtualBox:alpine的IP,在windows(host)开浏览器认证
油猴,一楼的代码可能有跨域问题:
// ==UserScript==
// @name EasyConnect
// @homepageURL https://vpn.cn/
// @description Hook修改ECAgent地址
// @author You
// @match https://vpn.cn/*
// @run-at document-start
// ==/UserScript==
(function(document){
var j=document.createElement("script");
j.innerHTML="function Hook_SFConfig() {try{if(SFConfig && typeof(SFConfig) == 'object'){Object.defineProperty(SFConfig, 'EC_URL_TEMPLATE', {get: function () {return 'https://192.168.56.112:{0}/ECAgent/';}});}}catch(e){console.warn('wait SFConfig...');setTimeout(Hook_SFConfig, 100);}}Hook_SFConfig();";
j.type="text/javascript";
document.head.appendChild(j);
})(document)
ECAgent按 https://github.com/Hagb/docker-easyconnect/issues/143#issue-1211686878 说的修改成000.0.0.0的ECAgent2(修改成0.0.0.0会segmentation error)
Dockerfile,从网站从新下了deb安装,上面的ECAgent是从deb里提的:
FROM hagb/docker-easyconnect:cli
MAINTAINER sdjfklj@qwhha
COPY EasyConnect_x64_7_6_7_3.deb /root/
RUN dpkg -i /root/EasyConnect_x64_7_6_7_3.deb
RUN rm /root/EasyConnect_x64_7_6_7_3.deb
COPY ECAgent2 /usr/share/sangfor/EasyConnect/resources/bin/
RUN chmod 744 /usr/share/sangfor/EasyConnect/resources/bin/ECAgent2
CMD /bin/sh -c "_EC_CLI=1 start.sh"
运行:
docker build -t my-easyconnect-ecagent2 .
docker run -it --rm --device /dev/net/tun --cap-add NET_ADMIN --net=host my-easyconnect-ecagent2 /bin/sh -c "/usr/share/sangfor/EasyConnect/resources/bin/ECAgent2 --resume"
@elseif 请问是哪个版本的docker支持您所讲的web登录?cli版本可以吗? 我在按windows(host)->VirtualBox:alpine(docker-host)->docker(docker-easyconnect:cli)这样的结构部署,目前遇到验证码问题。我想尝试一下您所说的nginx的方式将windows(host)的web登录请求代理到docker的环境里面。请问我应该运行docker-easyconnect:cli里哪个程序用于只监听web登录? nginx反向代理试过了,https证书验证过不了。还是得用油猴修改ECAgent地址。
最近在调试 ECAgent 的 web api,有一种不需要的方法使用浏览器脚本或更改 ECAgent 的方法:
将容器的 54531 端口映射到宿主机的 54530 端口 -p 127.0.0.1:54530:54531,
在容器中运行 busybox nc -llp 54531 -e busybox nc 127.0.0.1 54530 将通向 54531 端口的流量转发给 ECAgent,顺便将源地址变为容器的 127.0.0.1 从而让 ECAgent 不会拒绝它。
现在已经把只需要进行密码登录的 web api 摸索出来了,其他常用功能摸索得差不多之后会开源出来。
@wushuzh @Hagb 可以下载部署个虚拟版的VPN服务端用来调试。
https://community.sangfor.com/forum.php?mod=attachment&aid=NTc1NjN8NTBjNGE5MDN8MTY1MTAzMDczNnwwfDMxNTI%3D https://download.sangfor.com/Download/Product/SSL/vSSL7.6.1_for_VMware.ova http://download.sangfor.com.cn/download/product/sslvpn/SSLM7.6.8R2(20200224)_built-up_DLAN6.0.0(20191226).cssu https://community.sangfor.com/forum.php?mod=attachment&aid=NTc1NjN8NTBjNGE5MDN8MTY1MTAzMDczNnwwfDMxNTI%3Dthe default user name and password is admin/ admin cssu 是zip文件,密码是sangforupd~!@#$%
@elseif 感谢提供的信息!我成功部署并注册(试用并认证)了 7.6.8R2 版本,但是 7.6.1 版本的镜像里的认证服务器和更新服务器似乎都已经失效了,无法注册。
Update: 重装了下 7.6.1 的虚拟机,居然又好了,可以连上认证服务器并申请试用了!
最新提交的 master 分支加入了映射 web api 端口的支持(-p 127.0.0.1:54530:54530)
请问这个方法现在还生效吗?
最新提交的 master 分支加入了映射 web api 端口的支持(
-p 127.0.0.1:54530:54530)
请问您是否方便出一个完整的操作流程?