魔改novnc ,指定别名、指定ip+端口都能访问远程vnc server

前提

 

前提1,selenium grid配置

我的是用的selenium grid集群作为远程的vnc server,所以,如下:

 

selenium grid 集群的docker镜像有,一些无关的我就马死了

 

 

 

 

集群管理界面:

 

 

 

 

 

如果不知道怎么配置selenium grid集群的,可以看我之前的: python爬虫 - 配置强有力的js绕过神器-selenium grid分布式集群

 

前提2,novnc正常使用

 

然后我novnc的token.conf文件如下:

 

node1: xxxx:35008
node2: xxxx:35009

 

好,我现在用浏览器访问  http://<novnc server host>:<novnc server port>/vnc.html?path=?token=node1  ,

 

输入密码secret之后正常打开:

 

 

 

 

这样我就访问了我的别名为node1实际为xxxx:35008的vnc server上了

 

此时如果你的不能正常访问,自行检查重新配置,怎么配置novnc就不多说了,网上教程一大堆

 

在网上有的教程的同时,大多都有把远程的vnc server的ip和端口取个别名,放在token.conf文件里面,这样的话访问起来确实比较方便,就不用再输入繁琐的ip和端口号了,万一ip输入错误还要检查半天是吧?

 

问题

 

但是在实际的开发工作中,我们可能会有如下的场景,我们不止以上两个vnc sever,可能会有多个,而且还可能连接别人配置好的vnc server,那我每次有新的vnc sever加入,是不是都得重新写入到token.conf文件,然后再次的重启novnc才行呢?而且在重启中途,有可能你同事连上某个节点的vncv server 正在操作中呢,你突然就重启了,这样肯定是不太合理的,而且这样是不是更繁琐,每有一个新的就要重写配置文件,重启服务,当然如果你实际的vnc sever 是固定的话,以上指定别名的方式绝对是够用了

 

而我说的这个场景的话,确实不太行,所以需要魔改,魔改过程就不多说了,直接改./noVNC/utils/websockify/websockify/token_plugins.py文件,你novnc装在哪就自己找了,进入noVNC目录到我给的这个路径,改token_plugins.py的这里:

 

解决问题

 

 

魔改代码

 

把41行的lookup方法:由以下

 

 

 

改成这样:

 

 

 

def lookup(self, token):
    if self._targets is None:
         self._load_targets()
    if token in self._targets:
         return self._targets[token]
    else:
        if re.search(r'\d{2,3}(\.\d{1,3}){3}:\d{2,5}', token):
            return token.split(':')
        else:
             return None

  

 

 

 

 

 

 

 

 


 

就完了,就这么点。

 

lookup方法的作用是啥,可以在同级目录创建一个测试文件调用试试:

 

 

也就是先获取token.conf文件里的所有配置,然后拿到url里指定的vnc server,比对,如果有,则返回实际ip和端口,也就是其实还是用的ip和端口访问

 

那我上面改的意思就是只要正则匹配是一个ip+端口的就直接切割后返回,保存重启

 

/usr/bin/python3 -m websockify -D --web ./noVNC --log-file=ws.log --token-plugin=TokenFile --token-source=token/token.conf --cert ./noVNC/utils/self.pem 6080

 

 

 

 

 

 

验证,token的值直接输入一个ip+端口,访问:确实可行,我这里用的35009,也就是上面的token.conf配置的node2

 

 

 

 

验证

 

为了确认我连的是不是就是node2而不是node1,我用代码控制打开一个网站看看:

 

 

 

 

 

node2的反应:

 

 

同时node1并没有任何反应;

 

 

 

那就说明,指定的ip和端口访问成功了,而且原有的别名指定的功能也同样存在

 

 

等会儿,还没完,注意一下,看下launch.sh这个启动脚本“:

 

 

 

 

 

 

 

大概意思就是说,启动脚本的时候,这个Q脚本会检测同级目录下有没有websockify文件相关,如果没有的话,就要去github拉取代码,这个是我们脚本第一次启动的时候会作的操作,之后就不会了,而我刚才魔改的哪个token_plugins.py文件就是拉取的websockify仓库里的,也就是说,你如果中途迁移了项目,或者丢失这个文件,或者你不小心把这个websockify名字改了,都会重新去拉取下代码,然后会把刚才改的支持ip+端口访问的覆盖掉,所以你得重新配置下,然后重启才行

 

posted @ 2021-06-29 16:40  Eeyhan  阅读(1189)  评论(0编辑  收藏  举报