docker-easyconnect icon indicating copy to clipboard operation
docker-easyconnect copied to clipboard

通过web登录实现验证码登录

Open elseif opened this issue 3 years ago • 13 comments

通过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修改位置:

QQ截图20220422084239 2

Docker内运行 ECAgent --resume 打开VPN的Web登录地址即可正常登录。

elseif avatar Apr 22 '22 00:04 elseif

或者可以通过在docker安装nginx反向代理vpn的web登录地址, subs_filter 127.0.0.1' 'docker' 修改ECAgent地址,即可在docker上实现web登录,同时支持验证码。

elseif avatar Apr 22 '22 01:04 elseif

另外,我是通过开启linux路由转发功能,在局域网路由器上配置策略路由,实现整个局域网无感知访问VPN资源的。

elseif avatar Apr 22 '22 01:04 elseif

原来还可以这样玩,长见识了! 这样的话要是能够把 ECAgent 的 HTTP API 摸清楚就好了,可能不用再受 EasyConnect 前端的气了

Hagb avatar Apr 22 '22 01:04 Hagb

客户端是用electron写的,ECAgent的API在app.asar里都有,重写没必要。直接调用vpn服务器的web最方便。 Web目录的jssdk就是http api接口

elseif avatar Apr 22 '22 01:04 elseif

用asar解压app.asar,改造移除electron相关代码,直接用nodejs运行app加载Web目录,可以实现本地web登录。工作量相对较小,但是不确定是否兼容所有的版本。

elseif avatar Apr 22 '22 02:04 elseif

有偏黑盒方式对 electron 应用做自动化操作的方案么?我看到 electronjs 官网提到 webdriverIO,playwright ,正在读文档学习中……

@elseif 有什么建议么?

最近针对 sangfor-cli 版本做证书登录各种尝试,都不成功,搞得灰头土脸 #48

wushuzh avatar Apr 24 '22 08:04 wushuzh

@wushuzh 没仔细研究客户端,因为我这边的用的VPN服务端器采用的是硬件绑定+短信验证,即使正常采用客户端登录,客户端加载的也是VPN服务器的Web页面。所以我就用Tampermonkey修改了下服务器Web页面里的ECAgent的地址就可以正常登录,然后通过在linux通过ospf动态发布路由就可以了。

elseif avatar Apr 25 '22 01:04 elseif

@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 avatar Apr 27 '22 03:04 elseif

@elseif 请问是哪个版本的docker支持您所讲的web登录?cli版本可以吗? 我在按windows(host)->VirtualBox:alpine(docker-host)->docker(docker-easyconnect:cli)这样的结构部署,目前遇到验证码问题。我想尝试一下您所说的nginx的方式将windows(host)的web登录请求代理到docker的环境里面。请问我应该运行docker-easyconnect:cli里哪个程序用于只监听web登录?

mimi3421 avatar May 11 '22 06:05 mimi3421

以下方式成功了一半,但网页验证的时候仍然提示版本过旧,也没办法测试后面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"

mimi3421 avatar May 13 '22 18:05 mimi3421

@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地址。

elseif avatar May 25 '22 02:05 elseif

最近在调试 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 摸索出来了,其他常用功能摸索得差不多之后会开源出来。

Hagb avatar Sep 12 '22 18:09 Hagb

@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 感谢提供的信息!我成功部署并注册(试用并认证)了 7.6.8R2 版本,但是 7.6.1 版本的镜像里的认证服务器和更新服务器似乎都已经失效了,无法注册。

Update: 重装了下 7.6.1 的虚拟机,居然又好了,可以连上认证服务器并申请试用了!

Hagb avatar Sep 13 '22 00:09 Hagb

最新提交的 master 分支加入了映射 web api 端口的支持(-p 127.0.0.1:54530:54530

Hagb avatar Jan 24 '23 14:01 Hagb

image 请问这个方法现在还生效吗?

qwIvan avatar Mar 22 '23 11:03 qwIvan

最新提交的 master 分支加入了映射 web api 端口的支持(-p 127.0.0.1:54530:54530

请问您是否方便出一个完整的操作流程?

Umenezumi avatar May 20 '23 17:05 Umenezumi