Ruby 代码看不懂

a648155829 · 2019年03月18日 · 最后由 a648155829 回复于 2019年03月19日 · 2382 次阅读

大佬们帮我看看这是返回的什么值

也不能发帖。水个经验吧,

他函数名已经把这段代码的含义说清楚了吧,定位 nmap 这程序的真实路径

jasl 回复

是的 但是总是定位不到 nmap 的真实路径,我用了 which nmap 是显示 /usr/bin/nmap 是有的 但是程序里面却没有

a648155829 回复

没用过这个 Rex,理论上不考虑跨平台,你直接 which nmap 就可以了

jasl 回复

像这样运行的代码

jasl 回复

跑起来 就弹出一个 Cannot locate nmap binary

jasl 回复

linux 里面好像是没有 exe 的 我感觉是不是这样上面出的问题 那如果不用 Rex 还能有其他的方法来寻找 nmap 路径吗 他好像只是为了验证是否找到 nmap 这个程序 因为这个只是我给 metasploit 的一个 nmap 插件。

a648155829 回复

你要不考虑 win 的话,直接

[1] pry(main)> `which ruby`
=> "/Users/jasl/.rvm/rubies/ruby-2.6.2/bin/ruby\n"
[2] pry(main)> path = `which ruby`.gsub("\n", "")
=> "/Users/jasl/.rvm/rubies/ruby-2.6.2/bin/ruby"
[3] pry(main)> path
=> "/Users/jasl/.rvm/rubies/ruby-2.6.2/bin/ruby"

用系统的 which 不就能获得真实路径了吗?

jasl 回复

这个函数是拿来验证 nmap 是否存在 然后我还会给 nmap 设置命令

a648155829 回复

你能 which 出结果就说明 nmap 存在了,然后你记录下返回值(就是真实路径)然后再去掉他的命令就行了吧

jasl 回复

::File.expand_path(ret) 这段代码前面有个空格我不是很理解是什么意思, 那个路径我我试过直接使用绝对路近赋值给 nmap_bin 但是 好像还是显示 Cannot locate 困扰了我很久 我就在想是否这个函数并不是返回绝对路径

a648155829 回复

我不是都给你一种可行做法了么。。。你用我的就行了吧。。。

如果你真的想抠你贴的代码,那也容易,一个是查文档,搞明白这里面调用的每个函数的用途和用法,然后,这段代码在控制台里一步步执行,观察他们的返回值

jasl 回复

那个控制台是指 rubymine 这样的吗 我 degug 用的太不好了

jasl 回复

您的方法我现在去试一下~

a648155829 回复

控制台就是 irb,你用 Rubymine 应该也是这个吧

你看我这样做的有没有错 我初始化赋值给了 nmap_bin 现在 p 它 但是还是 nil

a648155829 回复

你这里调的 test 是什么。。。你的贴图里一点跟他有关的都没

其次,你要想理解代码,如果不会用调试器,最简单的方式就是你把要研究的那个函数里的每行代码都贴进你的控制台,一行一行执行看返回值,返会 nil 哪步 nil 的?这一步在做什么?调用的库的函数的文档怎么解释的?一步步分析

  1. Google 搜索 rex fileutils
  2. 第一个结果看上去就是这个 module 的 rubydoc, 点过去
  3. 在页面里搜索 find_full_path, 可以找到这个方法的文档.
  4. rubydoc 的页面上可以直接 view source, 查看源码.

如果是我遇到一个陌生的项目的方法,应该就会这样去找它的 API 文档,然后就能理解是什么意思了。

a648155829 回复

::File.expand_path(ret) 这段代码前面有个空格我不是很理解是什么意思

遇到看不懂的 Ruby 语法可以这样查:

  1. 找到 Ruby 官网的 Documentation 页面:https://www.ruby-lang.org/en/documentation/
  2. 在这个页面上搜 Ruby Core Reference,点击这个链接
  3. 如果你对 Ruby 语法有初步了解的话,应该能明白 “大写字母开头,中间用 :: 连接的是 module / class”。这个页面开头的一段:

New to Ruby? You may find these links helpful: syntax, control expressions, assignment, methods, modules + classes, and operator precedence.

里面的 modules + classes 链接到的页面就有你想要的答案。

我试了在 irb nmap_bin 的值是存在的 我这个是 metasploit 的一个插件 在 msf 模块中 我定了一个模块 nmap 一个命令控制的 commanddispater 类 我觉得会不会是 nmap_binary 的值没有传到这个控制类里

#17 楼 @jasl 我不小心回复在下面了, test 就是那个命令控制类的一个命令 可以在 msf 控制台下运行。 命令就是 p nmap_bin

#18 楼 @5long 好详细 太感谢了,一名学生党还不够专业 感谢你们的帮忙

a648155829 关闭了讨论 03月20日 21:11
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册