技术科普:Yaklang 与 Yakit 的区别
在用户使用的过程中,我们经常会在问题讨论群里收到一些类似的报错反馈,如:
Error: Error invoking remote method 'DownloadOnlinePluginByUUID': Error: 12 UNIMPLEMENTED: unknown method DownloadOnlinePluginByUUID for service ypb.Yak
这些报错实际上都是一个原因,即用户的Yakit/Yaklang 版本过低导致的。用户要解决这种问题十分简单,即升级对应软件的版本。不过我们这期的科普小课堂可以稍微探讨一下:Yakit 和 Yaklang,为什么有两个"不同"的 Yak,以及它们之间的通信方式。
Yakit与YakLang
Yaklang_
Yaklang是一种专为网络安全领域设计的领域特定编程语言。其目标在于解决安全产品整合过程中所面临的技术挑战,例如不同产品之间的互操作性问题以及安全工具开发过程中的效率和一致性问题。作为一门编程语言,Yaklang能够独立完成多项复杂且高级的任务,包括启动中间人攻击、发送HTTP原始报文和编写复杂的POC等。
Yakit_
Yakit是官方的Yaklang图形化客户端,绝大多数用户通常接触的软件就是Yakit。实际上,Yakit可以被视为一个精致的“盒子”,其主要目的是为大部分用户提供便利,帮助他们更有效地使用Yaklang。
为什么有Yakit和Yaklang_
在最初,Yaklang最先出现,它作为一门专门为网络安全领域设计的领域特定编程语言,可以通过编程来完成许多复杂的任务,但是这也带来了一部分的门槛,即用户需要重新学习一门语言,哪怕这门语言的语法非常的直观,易于学习,对于大部分用户来说依然不够简便。
为了解决这个问题,Yakit出现了。Yakit是Yaklang的图形化客户端,其旨在降低用户的学习门槛,提高效率。Yakit通过直观的图形界面,使得用户能够通过简单的方式去执行复杂的功能模块,测试相关的网站/APP等。
Yakit与Yaklang的通信方式
Yakit与Yaklang是基于CS(Client/Server,客户端/服务器模式)架构的,而它们之间的通信则是通过gRPC进行的。
gRPC是由Google开发的一种高性能、开源且通用的远程过程调用(RPC)框架。该框架基于HTTP/2协议,并采用Protocol Buffers(protobuf)作为接口定义语言(IDL),从而实现不同编程语言之间的高效通信与交互。
在设计过程中,gRPC充分考虑了向后兼容性,尤其是在使用Protocol Buffers时,提供了良好的版本管理机制。良好的兼容性确保了不同版本之间添加字段或接口不会影响通信流程。这也是为何我们能够使用旧版的Yakit连接新版的Yaklang,或反之亦然的原因。
本地模式与远程模式_
在我们正常启动Yakit时,我们会自动进入最近使用的模式(一般是本地模式),如:
Yakit-本地模式
得益于Yakit与Yaklang的通信方式(基于CS架构),我们可以通过远程模式来连接Yaklang引擎,远程模式可以在项目管理界面的左下角切换:
或在连上项目后设置-切换连接模式-远程进行切换:
之后,我们可以使用命令:
yak grpc --host 0.0.0.0 --port 8888
来启动一个gRPC服务器,以便使用Yakit使用:
接下来,我们就可以在远程模式中轻松地进行连接:
总结
在了解Yakit与Yaklang的定义及其区别之后,用户再面对类似的UNIMPLEMENTED错误就知道如何解决了,即通过升级Yakit和Yaklang版本来解决此问题。为确保获得更佳的使用体验,建议同时更新这两者。
本文首发于 Yak Project 公众号,阅读原文。
