以前的版本只能自定义高亮没有空格的字符串,8.7可以高亮有空格的字符串,更新一下软件,这个功能期待已久
官方8.7自带python版本是2.7.17(为什么不用python3?)
但是官方更改了SecureCRT以前自带python27.dll文件名称为vpython27.dll,所以直接使用下面的方法来更换环境是不行的
但是没关系,将SecureCRT.exe文件的导入表中vpython27.dll改为python27.dll,再使用下面的方法就可以了
修改导入表方法:
- 使用十六进制编辑器打开SecureCRT.exe
- 搜索76 70 79 74 68 6F 6E 32 37 2E 64 6C 6C,即vpython27.dll字符串的十六进制表示
- 更改为70 79 74 68 6F 6E 32 37 2E 64 6C 6C 00,即python27.dll字符串的十六进制表示
- 保存覆盖原SecureCRT.exe文件
-------------------------------------------一条分割线-------------------------------------------
环境:Win10 + SecureCRT 8.0 (x64 build 1063) ,该版本SecureCRT的内置python版本为64bit python 2.7.9。不同版本的SecureCRT所使用的python版本也不一样。
注:文章最后有解决方法。
之前一直写的都是VBS的CRT脚本,但是这个语言应用平台太窄了,最主要很多语法总是让我摸不着脑壳,也没啥文档给我参考,所以换了python写CRT脚本。
毕竟做网络工作,很多时候需要在交换机上查东西,做个自动查询接入交换机各个接口对应用户的MAC,IP及HostName还是极好的。当然查好了自动保存在excel文件中就更好了。
我能想到的包就需要socket(用来查询hostname),re(正则表达式提取IP和MAC),openpyxl(excel操作),sys,os。
经过一番奋斗,大体代码写好,看着逻辑也没啥问题,可惜了代码跑不起来...
为啥os,sys,re模块import都没问题?socket和openpyxl就有问题?
官网查了一波资料,没看出啥问题。只能调试一下了。
比较幸运,没有反调试,也没什么花(难怪注册机到处都是,我听别人说的),调试器打开CRT,忽略所有异常,一路F9,在CRT中开启脚本,到达上述脚本异常位置。然后别点确定
就用最简单的方法开搞吧,暴力搜索内存中所有模块中的字符串。搜索上述异常中的ImportError字符串。
通过前面的内存地址跳转至反汇编窗口。
看起来应该就是这里。再去内存里定位一下这是谁的代码。
python2.7。下内存访问断点。重新跑脚本。
再写个代码测试一下:
# $language = "python"
# $interface = "1.0"
#--------------------------------------------------------------------------------------
from platform import python_version
crt.Dialog.MessageBox(python_version(),"run")
# 显示2.7.9
由于之前我一直以为在CRT中跑python脚本需要先安装python环境,所以我之前有装3.6的环境,每次跑脚本也都以为调用的是这个环境,而且所有的代码,每个模块都是在3.6中测试的。
上图中的python27.dll模块在crt安装目录中就有,所以python的运行环境crt是自带的。
拆了3.6的环境,重建个2.7的环境(我用的是2.7.15),删除crt安装目录下的python27.dll和python27.zip,修改代码使其可以在2.7环境中通过测试。问题解决,且可以使用新环境中的pip安装需要的包。
注意:如果2.7的python环境没有建好(检查环境变量),就删掉了crt安装目录下的python27的两个文件,crt将无法启动。至于为啥要删掉安装目录下的python文件,而不是直接使用?难道你不用其他包?我尝试了给python27.zip目录添加制作好的.pyc文件,很可惜,是不行的(我猜测,可能是环境的版本问题,但如果有新的环境,还留着crt自带的干嘛?)
注意:不要装3.x的python环境,我测试过crt无法使用这个版本。如果有多个python环境共处,保持2.7.x的版本为默认环境。重新安装2.7版本时,crt如果是64bit,python也要装64bit。