挑战不可能!奔五C/C++零基础草根小白凭一己之力俩月写出国产化替代SecureCRT的SSH工具!VxTerm:我的2023,突破之年

一开始我也不相信我能写出来,直到2023年9月,经过了反复测试,确信没问题后,2023年9月6日,我发布了VxTerm的第1个C++版本。

直到今天,我相信,它已经足够优秀,功能足够丰富,已经能具备替代长期以来一直占据我们的网络工程师的桌面的外国的SSH工具软件。

在第一个C++版本的VxTerm发布后,我甚至只花了大概1个星期左右,就为它写成了一个内置的全新创造的计算机脚本语言解释核心,我把它命名为VxMatScript。通过它,我把它实现成了一个可以不需要任何第三方依赖和脚本语言环境的可以完成自动化运维功能的闭环环境。其中最简单的两个应用,一是可以用它来自由定制根据提示符实现telnet协议下的自动登录;一是可以用它来自由定制SSH隧道功能,实现双方网络的互相访问。未来还会有更多的功能可以通过它来发现和实现。甚至我能想象得到,我可以把这个脚本解释核心独立出来,造出来一个全新的计算机脚本语言的生态。

这一切是怎么做到的?

多年以来,我一直都是SecureCRT、MobaXTerm、XShell等这些软件的重度使用者,离开了它们,列表里那几十上百台设备,估计不单是我,没几个人能不用这些软件来管理那么多台设备。

没得选!再也不想到处在网上找各种功能受到限制的所谓的“免费版”、不合规授权的、不安全的那些软件来使用,于是,试着用.net来尝试写了一个,非常简单,功能很有限,根本也就都没想过要成功,只是想着能简单的实现一些最简单最平常的日常应用就可以了。

程序看起来应该是可以用的,但是,由于受到.net运行时的限制,让我非常的不爽,并且由于核心解析速度很慢,不得不试着想着:我能不能用C/C++语言来把它重新写出来?

可是,我却是一个完完全全的C零基础!连Hello World!都完全看不明白,一直以来,.net也都没有用过C#,因为我非常不习惯、不喜欢C语言的风格。

没有人知道我到底是怎么做到的,也没有人知道从7月到9月这两个月,我到底经历了什么!

我基本上把自己从这个世界中隔离了。。。

我应该算是成功了吧!2023年,在我跨入五十岁的时候,我给自己交了一份最满意的答卷:写了一个在我的技术范围内可以完全替代SecureCRT的VxTerm!

一、我是郑鹏飞:

我现在应该可以正式的向这个世界正式的介绍我自己:我叫郑鹏飞,七十年代初生人,九四年中专毕业,非计算机专业。

在学校四年,有幸跟陈光海老师学了一些计算机的基础知识,主要是以Basic为主,看着学了一些dBase II、foxbase(我不确定当时是不是真有这个了,年代太久远,记忆不太对了),当然也学了一下C语言,那时候叫做Turbo C,直到2023年,差不多30年过去了,期间未再真正接触过C语言,包括C#,我都看不懂。对于C语言的印象,也只能说是有一些简单的概念的印象,要让我写出来一个Hello World,我也已经是做不到的了,看都看不明白。任何一个计算机专业的学生,第一节C语言的课,所学到的内容,绝对比我所掌握的内容还要多。所以,我说我是完全的零基础,绝对是没错的。

整整30年,工作换了都不知道多少了,家庭、工作、生活,已经把我变成了一个妥妥的从外表上完全看不出来可以用”会计算机的样子“的大龄中年大叔了。

确实,这30年,所从事的工作,也基本上是跟IT环境有关,无非也就是根据工作的需要,这里学一点,那里学一点,多数时候,也都是在发呆、帮同事设定网络环境、打印机、修鼠标、修键盘、偶尔用用数据库来解决一些问题、写一些简单的接口、管一些网络设备、写一些设备策略脚本、服务器的运行环境建设运维等等这些可以被称为杂事的工作。

如果没有VxTerm的成功,我现在要说出去我是一个”程序员“,可能都不会有人相信,甚至可能连”程序员“三个字都不配被称呼吧。

二、国内的计算机基础环境真的很差?

在我写第一版的.net版本的VxTerm时,我就已经很明显的感受到了,我根本没有办法在国内的环境里找到任何的对于这个程序有真正帮助的模块的参考代码和相关的信息。

而我又不懂英文,英语水平,也就将将的初中毕业的水平吧,勉强可以通过翻译软件能把一些简单的英文信息看个大概的水平。再加上国内没有互联网,我一直以来都克制自己,不要用那些可以浏览外部网络的东西。

在我开始写C++版本的VxTerm的过程中,直到现在,我基本没有能够从任何的国内的站点和资料中找到哪怕有任何一点有效帮助的代码和信息。当然,一点点的帮助还是会有的,不能说没有,但也基本都是各种可以被我定义为乱贴乱爬的信息,就是我会到处根据自己能搜到的各种可能他们自己都弄不明白的乱贴的代码中,找到一点点的线索,然后再自己一点一点的能力组织起来一些知识点信息,不停的写测试模块进行测试,最终一个模块一个模块的自己把它完成了。这其实也是我直到现在不太敢把自己的代码公开的原因之一,因为大部分的我自己实现的模块,应该都是有成熟的方式去实现的,但我自己找不到,只好根据自己的能力和习惯,自己瞎写的,很多时候,相同的功能的模块,我都会今天写了明天忘,然后又重新以另一种方式去把它写出来。

也就从2023年10月份开始,由于第一个C++版本的成功编译发布后,我才开始有了一点点可以勉强看得懂一些putty的源代码的一些小模块的能力。在此之前,我也有想过去参考它的实现模块,无耐:真的完全看不懂!

所有我能从国内找到的各种基础的包括模块实现在内的参考资料,对VxTerm几乎都没有有效的帮助。

在此,我可以说一个可能是我单方面认知方面的信息:我甚至没有从任何的能被搜索出来的资料里找到真正的可以把SendMessage和PostMessage说明白的资料。

三、现在不都是可以AI写代码了吗?

直到今天:2024年1月14日,我都没有用过哪怕一次的AI来写过任何一个代码模块。

四、多线程、不安全、崩溃!差点让我崩溃,差点放弃!

C/C++,本身就是一个必须要从头到尾都要注意内存分配、销毁、多线程安全的。2023年12月份开始,我开始修改细节。崩溃,各种崩溃、各种莫名奇妙的崩溃,差点让我崩溃!子线程在后台接收数据和运算、展示终端窗口的数据,主线程却要响应鼠标、键盘的操作,多个窗口多个会话,不同的线程之间的活动、触发器、后台脚本还有不同的线程在跑。。。这太扯了,我都快语无伦次了,我差点就放弃了,因为我虽然看起来好像是所有功能模块都实现了,但如果我最终处理不好后台线程的包括内存分配、线程活动之间的关系,整个软件用着用着就崩,那就很难再继续下去了。

看起来,这个问题,也被我解决了。曾经我可以把它随时弄崩,但现在我想把它弄崩,都自己找不到办法了。

五、我成长了吗?

带着VxTerm,写下此文,我甚至都不知道自己算不算是一个真正的”程序员“。

得益于VS2022+疯狂的F1,我从”连怎么从自定义函数中返回字符串“都弄不明白,到弄明白头文件与.c和.cpp之间的关系,到弄明白整个工程代码中的文件之间的关系、编译的过程中怎么样的、各种编译参数、再到C++的类的基本结构、循环消息、HWND、CWND、SendMessage、PostMessage、Thread、容器、结构、对象、算法、编码、文件、加密、内存分配/销毁、跨平台等等等等...算是里里外外都折腾了一个遍!

直到现在,我才能开始懂得如何去看懂一些外国人写的代码,从而也能从别人写的代码实现模块里,吸收到一些可以用来优化我的代码模块的算法核心模块。

六、什么是C语言?什么是编程?

我可能是一个善于发现本质的人。

所以,我自己在大概10年前第一次通过三阶魔方配送的图文说明书上还原了一次三阶魔方后,我后来就自己研究出来了自己的方法,把所有的魔方都”破解“了,说是破解,是因为我没有参考参照任何网上的还原魔方的方法(直到现在我也看不懂那些魔方公式),脑袋里没有记忆任何所谓的定式的公式,可以把任何数阶的魔方都百分百还原,原因是我发现了一些非常简单的方法,以类似于两两替换任何两个点并且不影响其它的点的方式来还原任何数阶的魔方(有点夸张、描述不清楚,但差不多就这概念)。

所以,我可能是自己发现了一些关于C语言的本质性的东西,再得益于编程工具的帮助,让我得以快速的从一个零基础的小白,迅速的成为了一个拥有可以用C++来写成品的桌面程序的能力的人。

可能是多年以来的一些所谓的”经验“,让我可以在完全不熟悉C/C++语言的情况下,可以预先大胆的假设:这个模块应该是这样子可以实现的!然后根据自己脑袋里组织起来的一些关键字信息,到处去搜索相应的帮助信息,然后不停的写实例验证,最终的,就以类似于“东拼西凑”的方式,写成了一个可以让我用来替代SecureCRT的VxTerm!

这个,就是编程了吗?

七、2024年。

2023年,我完成了一个应该可以被定义为“不可能完成的挑战”。

2024年,及以后,我希望我能得到更多的突破,实现我更多的“人生目标”。

整个VxTerm的代码,我应该是不会打算开源的,但其中的VxMatScript,也许是会在我的VxTerm最终成功的让我不需要耗费更多的日常去更新修改它的BUG的时候,我可能才会有空把它给摘出来,写成一个独立的新的脚本语言,然后把它开源。这个是可以有的。

谢谢大家。

2024年1月14日。

你可能感兴趣的:(VxTerm,ssh,运维,c++)