SecureCRT调用python脚本ImportError

2020.2.22日更新

以前的版本只能自定义高亮没有空格的字符串,8.7可以高亮有空格的字符串,更新一下软件,这个功能期待已久

官方8.7自带python版本是2.7.17(为什么不用python3?)

但是官方更改了SecureCRT以前自带python27.dll文件名称为vpython27.dll,所以直接使用下面的方法来更换环境是不行的

但是没关系,将SecureCRT.exe文件的导入表中vpython27.dll改为python27.dll,再使用下面的方法就可以了

修改导入表方法:

  1. 使用十六进制编辑器打开SecureCRT.exe
  2. 搜索76 70 79 74 68 6F 6E 32 37 2E 64 6C 6C,即vpython27.dll字符串的十六进制表示
  3. 更改为70 79 74 68 6F 6E 32 37 2E 64 6C 6C 00,即python27.dll字符串的十六进制表示
  4. 保存覆盖原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。

如果是import自己写的模块,请参考:https://blog.csdn.net/MrRight17/article/details/82874479

发布了31 篇原创文章 · 获赞 11 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/MrRight17/article/details/82527407