译Metasploit:为什么选择 Ruby?

2019-04-04 约 1273 字 预计阅读 3 分钟

声明:本文 【译Metasploit:为什么选择 Ruby?】 由作者 王一航 于 2018-06-05 15:27:31 首发 先知社区 曾经 浏览数 5896 次

感谢 王一航 的辛苦付出!


原文地址:https://github.com/rapid7/metasploit-framework/wiki/Why-Ruby%3F

译者:王一航 & Google 2018-05-14
校对:王一航 2018-05-14


以下写于大约 2005 年左右

在整个框架的开发过程中,Metasploit 员工不断被问到的一个反复出现的问题是为什么选择 Ruby 作为编程语言。为了不再单独为提问者回答这个问题,作者选择在本文中解释原因。

由于多种原因,Ruby 编程语言被选中而不是例如 Python,Perl 或者 C++。

Ruby 被选中的第一个(也是最主要的)原因是因为它是 Metasploit 员工喜欢写的一种语言。

花费时间分析其他语言并考虑过去的经验后,我们发现 Ruby 编程语言作为解释型语言它提供了一种简单而强大的方法。

Ruby 的面向对象的特性和内省机制 (译者注: 类似于 Java 的反射 ( Reflection ) 机制) 可以非常好的适应框架开发的需求。

框架对于代码重用自动化类构建的需求是是决策过程中的关键因素,并且,这也是 perl 为什么不是特别适合这个需求的原因之一。

除此之外,在提供相同级别的语言特性的条件下(例如: Perl 语言),Ruby 的语法简单的特性就显得更重要了。

Ruby 被选中的第二个原因是因为其独立于平台的线程支持。

尽管在该模型下框架的开发过程中遇到了一些限制,但 Metasploit 的工作人员已经观察到在 2.x 分支上有显着的性能和可用性改进的余地。

未来版本的Ruby(1.9系列)将使用针对操作系统的本地线程来支持现有的线程API,解释器将针对该操作系统编译,这将解决当前实现中存在的一些问题(例如允许使用阻塞操作)。

与此同时,现有的线程模型与传统的分支模型相比,已经要优越得多,特别是在缺乏原生 fork 实现的平台上(例如:Windows)。

另一个选择 Ruby 的原因是:

选择 Ruby 的另一个原因是因为 Windows 平台支持原生解释器。 虽然 Perl 有一个 Cygwin 版本和一个 ActiveState 版本,但都受到可用性问题的困扰。 Ruby 解释器可以在 Windows 上本地编译和执行大大提高了性能。 此外,解释器也非常小,可以在出现错误时轻松修改。

  • Python 编程语言也是一种语言候选。
    Metasploit 员工选择 Ruby 而不是 Python 的原因是由于几个不同的原因。 主要原因是对 Python 强制的某些语法上的烦恼感到普遍的厌恶,比如块缩进(译者注:block-indention)。虽然很多人会认为这种方法的好处,但 Metasploit 的一些工作人员认为这是一个不必要的限制。 Python 的其他问题在于:

    • 父类方法调用的限制
    • 解释器的向后兼容性。
  • C/C++ 编程语言也曾将被非常慎重地考虑
    但最终很明显,尝试以非解释型语言部署 便携式可用 框架并不合适。

此外:这种语言选择的开发时间线很可能会长得多。

尽管框架的 2.x 分支已经非常成功,但 Metasploit 的工作人员遇到了许多限制,并且对 perl 的面向对象编程模型感到烦恼,或者缺乏某些限制。 尽管 perl 解释器是许多发行版默认安装的一部分,但是这不是 Metasploit 工作人员认为选择 Perl 来走捷径的原因。

最后:这一切都归结为选择一种为框架贡献最大的人所享有的语言,而这个语言最终成为了 Ruby。

资源

关键词:[‘新手’, ‘入门资料’]


author

旭达网络

旭达网络技术博客,曾记录各种技术问题,一贴搞定.
本文采用知识共享署名 4.0 国际许可协议进行许可。

We notice you're using an adblocker. If you like our webite please keep us running by whitelisting this site in your ad blocker. We’re serving quality, related ads only. Thank you!

I've whitelisted your website.

Not now