gpt4 book ai didi

ruby - 执行 HoneyC 时出错 - `require' : cannot load such file

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:31:49 25 4
gpt4 key购买 nike

我正在尝试执行 HoneyC,此链接上的代码:HoneyC Source Code .我遵循了“自述文件”文档说明,其中说明必须先运行 UnitTest。

它说:“将 HoneyC 分发包解压到一个目录中,cd 到该目录中,然后执行‘ruby UnitTester.rb’。这将开始执行一些基本模块测试的单元测试。(请注意,您需要具有网络连接并在端口 80 上直接传出访问以使单元测试成功。)”

我使用的是 Ruby 版本 2.3.1p112 (2016-04-26) [x86_64-linux-gnu]

*我以前从未使用 Ruby 编程过。

端口 80 似乎没问题...如果我运行命令 netstat 我得到:

:~$ netstat -tulnap (Not all processes could be identified, non-owned process info will not be shown, you would have to be root to see it all.) Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN - tcp 0 0 127.0.0.1:30800 0.0.0.0:*
LISTEN - tcp 0 0 0.0.0.0:80
0.0.0.0:* LISTEN - tcp 0 0 127.0.0.1:30900 0.0.0.0:* LISTEN -
tcp 0 0 127.0.1.1:53 0.0.0.0:*
LISTEN

但是,当我尝试运行单元测试时出现以下错误:

:~/honeypot/honeyc-master$ ruby UnitTester.rb
/usr/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require': cannot load such file -- HoneyCConfiguration (LoadError)
from /usr/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
from UnitTester.rb:39:in `block in suite'
from /usr/lib/ruby/2.3.0/find.rb:49:in `block (2 levels) in find'
from /usr/lib/ruby/2.3.0/find.rb:48:in `catch'
from /usr/lib/ruby/2.3.0/find.rb:48:in `block in find'
from /usr/lib/ruby/2.3.0/find.rb:43:in `each'
from /usr/lib/ruby/2.3.0/find.rb:43:in `find'
from UnitTester.rb:29:in `suite'
from /usr/lib/ruby/vendor_ruby/test/unit/ui/testrunner.rb:12:in `initialize'
from /usr/lib/ruby/vendor_ruby/test/unit/ui/console/testrunner.rb:38:in `initialize'
from /usr/lib/ruby/vendor_ruby/test/unit/ui/testrunnerutilities.rb:24:in `new'
from /usr/lib/ruby/vendor_ruby/test/unit/ui/testrunnerutilities.rb:24:in `run'
from UnitTester.rb:54:in `<main>'

单元测试的ruby代码是:

 require 'test/unit/testsuite'
require 'test/unit/ui/console/testrunner'
require 'find'

module Kernel
def get_class_for_name(name, objects = [Object])
#STDERR.puts name.to_s
return nil if objects.size == 0
object = objects.shift
object.constants.each do |constant_name|
real_object = object.const_get(constant_name)
case real_object
when Class
return real_object if constant_name == name
when Module
objects << real_object
end
end
return get_class_for_name(name, objects)
end
end

class UnitTester
def self.suite
exceptions = ["HoneyC","UnitTester"]
suite = Test::Unit::TestSuite.new("HoneyC Unit Tests")

#find all rb files
Find.find(".") do |full_file_name|
if /.rb/ =~ full_file_name and !(/.svn/ =~ full_file_name)
/.*\// =~ full_file_name
path = $&[2..$&.length]
classname = full_file_name[$&.length..-4]

if !exceptions.index(classname)
#assume test is under classname + "Test"
#run unit test on them except on the exceptions

require path + classname
classname.sub!(/\.tab/,"") #silly replacement for the snortruleparser, since this is an automatically generated class.
unit_test = get_class_for_name(classname + "Test")
if(unit_test==nil)
STDERR.puts "No unit test defined for class " + classname + "."
else
suite << unit_test.suite
end
end
end
end

return suite
end
end
Test::Unit::UI::Console::TestRunner.run(UnitTester)

我应该怎么做才能让这个蜜 jar 运行起来?

最佳答案

此代码库的最新提交是从 2007 年开始的(并将其转移到 git,我不确定原始颠覆提交是否更早)。从那时起,Ruby 已经取得了长足的进步,您正在运行的 UnitTester 依赖于多年来发生变化的一些元编程行为。它试图查看源代码树中的所有 ruby​​ 文件以加载它们以查找测试,但它的工作方式在现代 ruby​​ 中不起作用。至少有两处错误:

  1. 从 2009 年发布的 ruby​​ 1.9 开始,当前目录不再(默认情况下)在加载路径中,因此当您尝试require 中定义的模块/类时当前目录将失败。他们需要切换到 require_relative ( Why does Ruby 1.9.2 remove "." from LOAD_PATH, and what's the alternative? )

  2. 代码库在爬行对象树以尝试找出已定义的类/模块 (https://github.com/honeynet/honeyc/blob/master/UnitTester.rb#L10) 方面做了一些非常奇怪的事情(但也许曾经是必要的)。这在现代 ruby 中无法正常工作。

您可以使用 ruby​​ 1.8.7 运行单元测试,但请注意,自 2017 年 4 月 1 日起不再支持该版本的 ruby​​。单元测试大部分都通过了,除了一些正在查询不再存在的 Web 服务。

我认为如果不对代码库进行大量升级工作,您就无法真正使用它,这可能是题外话。

关于ruby - 执行 HoneyC 时出错 - `require' : cannot load such file,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57059398/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com