我正在尝试执行 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 (不是所有的进程都可以被识别,非拥有的进程信息不会显示,你必须是root才能看到它。) 活动的互联网连接(服务器和建立) Proto Recv-Q Send- Q 本地地址 外部地址 状态 PID/程序名称 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:* 监听 - tcp 0 0 127.0.0.1:30900 0.0.0.0:* 监听 -
tcp 0 0 127.0.1.1:53 0.0.0.0:*
监听
但是,当我尝试运行 UnitTest 时出现以下错误:
:~/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>'
单元测试的红宝石代码是:
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)
我应该怎么做才能让这个蜜罐运行?