ronin-support 0.1.0.pre1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.document +4 -0
- data/.rspec +1 -0
- data/.yardopts +1 -0
- data/COPYING.txt +504 -0
- data/ChangeLog.md +4 -0
- data/Gemfile +23 -0
- data/README.md +98 -0
- data/Rakefile +29 -0
- data/gemspec.yml +20 -0
- data/lib/ronin/extensions.rb +28 -0
- data/lib/ronin/extensions/file.rb +63 -0
- data/lib/ronin/extensions/ip_addr.rb +220 -0
- data/lib/ronin/extensions/kernel.rb +45 -0
- data/lib/ronin/extensions/meta.rb +22 -0
- data/lib/ronin/extensions/meta/object.rb +24 -0
- data/lib/ronin/extensions/string.rb +200 -0
- data/lib/ronin/formatting.rb +26 -0
- data/lib/ronin/formatting/binary.rb +22 -0
- data/lib/ronin/formatting/digest.rb +22 -0
- data/lib/ronin/formatting/extensions.rb +25 -0
- data/lib/ronin/formatting/extensions/binary.rb +24 -0
- data/lib/ronin/formatting/extensions/binary/file.rb +35 -0
- data/lib/ronin/formatting/extensions/binary/integer.rb +147 -0
- data/lib/ronin/formatting/extensions/binary/string.rb +363 -0
- data/lib/ronin/formatting/extensions/digest.rb +23 -0
- data/lib/ronin/formatting/extensions/digest/file.rb +117 -0
- data/lib/ronin/formatting/extensions/digest/string.rb +80 -0
- data/lib/ronin/formatting/extensions/http.rb +23 -0
- data/lib/ronin/formatting/extensions/http/integer.rb +57 -0
- data/lib/ronin/formatting/extensions/http/string.rb +102 -0
- data/lib/ronin/formatting/extensions/text.rb +23 -0
- data/lib/ronin/formatting/extensions/text/array.rb +125 -0
- data/lib/ronin/formatting/extensions/text/string.rb +206 -0
- data/lib/ronin/formatting/http.rb +22 -0
- data/lib/ronin/formatting/text.rb +22 -0
- data/lib/ronin/network.rb +29 -0
- data/lib/ronin/network/esmtp.rb +22 -0
- data/lib/ronin/network/extensions.rb +29 -0
- data/lib/ronin/network/extensions/esmtp.rb +22 -0
- data/lib/ronin/network/extensions/esmtp/net.rb +100 -0
- data/lib/ronin/network/extensions/http.rb +22 -0
- data/lib/ronin/network/extensions/http/net.rb +661 -0
- data/lib/ronin/network/extensions/imap.rb +22 -0
- data/lib/ronin/network/extensions/imap/net.rb +124 -0
- data/lib/ronin/network/extensions/pop3.rb +22 -0
- data/lib/ronin/network/extensions/pop3/net.rb +92 -0
- data/lib/ronin/network/extensions/smtp.rb +22 -0
- data/lib/ronin/network/extensions/smtp/net.rb +110 -0
- data/lib/ronin/network/extensions/ssl.rb +22 -0
- data/lib/ronin/network/extensions/ssl/net.rb +147 -0
- data/lib/ronin/network/extensions/tcp.rb +22 -0
- data/lib/ronin/network/extensions/tcp/net.rb +304 -0
- data/lib/ronin/network/extensions/telnet.rb +22 -0
- data/lib/ronin/network/extensions/telnet/net.rb +156 -0
- data/lib/ronin/network/extensions/udp.rb +22 -0
- data/lib/ronin/network/extensions/udp/net.rb +226 -0
- data/lib/ronin/network/http.rb +24 -0
- data/lib/ronin/network/http/exceptions.rb +22 -0
- data/lib/ronin/network/http/exceptions/unknown_request.rb +29 -0
- data/lib/ronin/network/http/http.rb +290 -0
- data/lib/ronin/network/http/proxy.rb +307 -0
- data/lib/ronin/network/imap.rb +49 -0
- data/lib/ronin/network/network.rb +41 -0
- data/lib/ronin/network/pop3.rb +49 -0
- data/lib/ronin/network/smtp.rb +24 -0
- data/lib/ronin/network/smtp/email.rb +143 -0
- data/lib/ronin/network/smtp/smtp.rb +68 -0
- data/lib/ronin/network/ssl.rb +47 -0
- data/lib/ronin/network/tcp.rb +22 -0
- data/lib/ronin/network/telnet.rb +109 -0
- data/lib/ronin/network/udp.rb +22 -0
- data/lib/ronin/path.rb +132 -0
- data/lib/ronin/support.rb +28 -0
- data/lib/ronin/support/inflector.rb +40 -0
- data/lib/ronin/support/version.rb +27 -0
- data/lib/ronin/templates.rb +23 -0
- data/lib/ronin/templates/erb.rb +75 -0
- data/lib/ronin/templates/template.rb +161 -0
- data/ronin-support.gemspec +10 -0
- data/spec/extensions/file_spec.rb +24 -0
- data/spec/extensions/ip_addr_spec.rb +171 -0
- data/spec/extensions/kernel_spec.rb +30 -0
- data/spec/extensions/string_spec.rb +177 -0
- data/spec/formatting/binary/helpers/hexdumps.rb +16 -0
- data/spec/formatting/binary/helpers/hexdumps/ascii.bin +0 -0
- data/spec/formatting/binary/helpers/hexdumps/hexdump_decimal_shorts.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/hexdump_hex_bytes.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/hexdump_hex_shorts.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/hexdump_octal_bytes.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/hexdump_octal_shorts.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/hexdump_repeated.txt +6 -0
- data/spec/formatting/binary/helpers/hexdumps/od_decimal_bytes.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/od_decimal_ints.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/od_decimal_quads.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/od_decimal_shorts.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/od_hex_bytes.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/od_hex_ints.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/od_hex_quads.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/od_hex_shorts.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/od_octal_bytes.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/od_octal_ints.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/od_octal_quads.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/od_octal_shorts.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/od_repeated.txt +6 -0
- data/spec/formatting/binary/helpers/hexdumps/repeated.bin +1 -0
- data/spec/formatting/binary/integer_spec.rb +140 -0
- data/spec/formatting/binary/string_spec.rb +306 -0
- data/spec/formatting/digest/string_spec.rb +82 -0
- data/spec/formatting/http/integer_spec.rb +42 -0
- data/spec/formatting/http/string_spec.rb +76 -0
- data/spec/formatting/text/array_spec.rb +105 -0
- data/spec/formatting/text/string_spec.rb +180 -0
- data/spec/network/http/http_spec.rb +280 -0
- data/spec/network/http/proxy_spec.rb +150 -0
- data/spec/network/network_spec.rb +8 -0
- data/spec/network/ssl_spec.rb +14 -0
- data/spec/path_spec.rb +84 -0
- data/spec/spec_helper.rb +4 -0
- data/spec/support_spec.rb +8 -0
- data/spec/templates/classes/example_erb.rb +11 -0
- data/spec/templates/classes/example_template.rb +35 -0
- data/spec/templates/erb_spec.rb +21 -0
- data/spec/templates/helpers/data.rb +9 -0
- data/spec/templates/helpers/data/includes/_relative.erb +1 -0
- data/spec/templates/helpers/data/templates/example.erb +1 -0
- data/spec/templates/template_spec.rb +54 -0
- metadata +286 -0
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Ronin Support - A support library for Ronin.
|
|
3
|
+
#
|
|
4
|
+
# Copyright (c) 2010 Hal Brodigan (postmodern.mod3 at gmail.com)
|
|
5
|
+
#
|
|
6
|
+
# This library is free software; you can redistribute it and/or
|
|
7
|
+
# modify it under the terms of the GNU Lesser General Public
|
|
8
|
+
# License as published by the Free Software Foundation; either
|
|
9
|
+
# version 2.1 of the License, or (at your option) any later version.
|
|
10
|
+
#
|
|
11
|
+
# This library is distributed in the hope that it will be useful,
|
|
12
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
14
|
+
# Lesser General Public License for more details.
|
|
15
|
+
#
|
|
16
|
+
# You should have received a copy of the GNU Lesser General Public
|
|
17
|
+
# License along with this library; if not, write to the Free Software
|
|
18
|
+
# Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
19
|
+
# Boston, MA 02110-1301 USA
|
|
20
|
+
#
|
|
21
|
+
|
|
22
|
+
require 'ronin/extensions'
|
|
23
|
+
require 'ronin/formatting'
|
|
24
|
+
require 'ronin/network'
|
|
25
|
+
require 'ronin/path'
|
|
26
|
+
require 'ronin/templates'
|
|
27
|
+
require 'ronin/support/inflector'
|
|
28
|
+
require 'ronin/support/version'
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Ronin Support - A support library for Ronin.
|
|
3
|
+
#
|
|
4
|
+
# Copyright (c) 2010 Hal Brodigan (postmodern.mod3 at gmail.com)
|
|
5
|
+
#
|
|
6
|
+
# This program is free software; you can redistribute it and/or modify
|
|
7
|
+
# it under the terms of the GNU General Public License as published by
|
|
8
|
+
# the Free Software Foundation; either version 2 of the License, or
|
|
9
|
+
# (at your option) any later version.
|
|
10
|
+
#
|
|
11
|
+
# This program is distributed in the hope that it will be useful,
|
|
12
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
14
|
+
# GNU General Public License for more details.
|
|
15
|
+
#
|
|
16
|
+
# You should have received a copy of the GNU General Public License
|
|
17
|
+
# along with this program; if not, write to the Free Software
|
|
18
|
+
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
19
|
+
#
|
|
20
|
+
|
|
21
|
+
begin
|
|
22
|
+
require 'active_support/inflector'
|
|
23
|
+
rescue LoadError
|
|
24
|
+
begin
|
|
25
|
+
require 'extlib/inflection'
|
|
26
|
+
rescue LoadError
|
|
27
|
+
raise(LoadError,"unable to load 'active_support/inflector' or 'extlib/inflection'",caller)
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
module Ronin
|
|
32
|
+
module Support
|
|
33
|
+
# The inflector that Ronin will use.
|
|
34
|
+
Inflector = if Object.const_defined?(:ActiveSupport)
|
|
35
|
+
ActiveSupport::Inflector
|
|
36
|
+
else
|
|
37
|
+
Extlib::Inflection
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Ronin Support - A support library for Ronin.
|
|
3
|
+
#
|
|
4
|
+
# Copyright (c) 2010 Hal Brodigan (postmodern.mod3 at gmail.com)
|
|
5
|
+
#
|
|
6
|
+
# This library is free software; you can redistribute it and/or
|
|
7
|
+
# modify it under the terms of the GNU Lesser General Public
|
|
8
|
+
# License as published by the Free Software Foundation; either
|
|
9
|
+
# version 2.1 of the License, or (at your option) any later version.
|
|
10
|
+
#
|
|
11
|
+
# This library is distributed in the hope that it will be useful,
|
|
12
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
14
|
+
# Lesser General Public License for more details.
|
|
15
|
+
#
|
|
16
|
+
# You should have received a copy of the GNU Lesser General Public
|
|
17
|
+
# License along with this library; if not, write to the Free Software
|
|
18
|
+
# Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
19
|
+
# Boston, MA 02110-1301 USA
|
|
20
|
+
#
|
|
21
|
+
|
|
22
|
+
module Ronin
|
|
23
|
+
module Support
|
|
24
|
+
# ronin-support version
|
|
25
|
+
VERSION = '0.1.0.pre1'
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Ronin - A Ruby platform for exploit development and security research.
|
|
3
|
+
#
|
|
4
|
+
# Copyright (c) 2006-2010 Hal Brodigan (postmodern.mod3 at gmail.com)
|
|
5
|
+
#
|
|
6
|
+
# This library is free software; you can redistribute it and/or
|
|
7
|
+
# modify it under the terms of the GNU Lesser General Public
|
|
8
|
+
# License as published by the Free Software Foundation; either
|
|
9
|
+
# version 2.1 of the License, or (at your option) any later version.
|
|
10
|
+
#
|
|
11
|
+
# This library is distributed in the hope that it will be useful,
|
|
12
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
14
|
+
# Lesser General Public License for more details.
|
|
15
|
+
#
|
|
16
|
+
# You should have received a copy of the GNU Lesser General Public
|
|
17
|
+
# License along with this library; if not, write to the Free Software
|
|
18
|
+
# Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
19
|
+
# Boston, MA 02110-1301 USA
|
|
20
|
+
#
|
|
21
|
+
|
|
22
|
+
require 'ronin/templates/template'
|
|
23
|
+
require 'ronin/templates/erb'
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Ronin - A Ruby platform for exploit development and security research.
|
|
3
|
+
#
|
|
4
|
+
# Copyright (c) 2006-2010 Hal Brodigan (postmodern.mod3 at gmail.com)
|
|
5
|
+
#
|
|
6
|
+
# This library is free software; you can redistribute it and/or
|
|
7
|
+
# modify it under the terms of the GNU Lesser General Public
|
|
8
|
+
# License as published by the Free Software Foundation; either
|
|
9
|
+
# version 2.1 of the License, or (at your option) any later version.
|
|
10
|
+
#
|
|
11
|
+
# This library is distributed in the hope that it will be useful,
|
|
12
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
14
|
+
# Lesser General Public License for more details.
|
|
15
|
+
#
|
|
16
|
+
# You should have received a copy of the GNU Lesser General Public
|
|
17
|
+
# License along with this library; if not, write to the Free Software
|
|
18
|
+
# Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
19
|
+
# Boston, MA 02110-1301 USA
|
|
20
|
+
#
|
|
21
|
+
|
|
22
|
+
require 'ronin/templates/template'
|
|
23
|
+
|
|
24
|
+
require 'erb'
|
|
25
|
+
|
|
26
|
+
module Ronin
|
|
27
|
+
module Templates
|
|
28
|
+
#
|
|
29
|
+
# The {Erb} module uses the {Template} module to find and render
|
|
30
|
+
# Embedded Ruby (ERb) templates.
|
|
31
|
+
#
|
|
32
|
+
module Erb
|
|
33
|
+
include Template
|
|
34
|
+
#
|
|
35
|
+
# Renders the inline ERB template in the scope of the object.
|
|
36
|
+
#
|
|
37
|
+
# @param [String] template
|
|
38
|
+
# Source of the ERB template.
|
|
39
|
+
#
|
|
40
|
+
# @return [String]
|
|
41
|
+
# Result of the rendered template.
|
|
42
|
+
#
|
|
43
|
+
# @example
|
|
44
|
+
# @user = 'lolcats'
|
|
45
|
+
#
|
|
46
|
+
# erb %{
|
|
47
|
+
# USER: <%= @user %>
|
|
48
|
+
# PASSWORD: <%= @user.reverse %>
|
|
49
|
+
# }
|
|
50
|
+
# # => "\nUSER: lolcats\nPASSWORD: staclol\n"
|
|
51
|
+
#
|
|
52
|
+
def erb(template)
|
|
53
|
+
ERB.new(template).result(binding)
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
#
|
|
57
|
+
# Renders an ERB template file in the scope of the object.
|
|
58
|
+
#
|
|
59
|
+
# @param [String] template_path
|
|
60
|
+
# The relative path of the ERB template.
|
|
61
|
+
#
|
|
62
|
+
# @return [String]
|
|
63
|
+
# Result of the rendered template.
|
|
64
|
+
#
|
|
65
|
+
# @example
|
|
66
|
+
# erb_file 'path/to/template.erb'
|
|
67
|
+
#
|
|
68
|
+
def erb_file(template_path)
|
|
69
|
+
read_template(template_path) do |template|
|
|
70
|
+
erb(template)
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Ronin - A Ruby platform for exploit development and security research.
|
|
3
|
+
#
|
|
4
|
+
# Copyright (c) 2006-2010 Hal Brodigan (postmodern.mod3 at gmail.com)
|
|
5
|
+
#
|
|
6
|
+
# This library is free software; you can redistribute it and/or
|
|
7
|
+
# modify it under the terms of the GNU Lesser General Public
|
|
8
|
+
# License as published by the Free Software Foundation; either
|
|
9
|
+
# version 2.1 of the License, or (at your option) any later version.
|
|
10
|
+
#
|
|
11
|
+
# This library is distributed in the hope that it will be useful,
|
|
12
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
14
|
+
# Lesser General Public License for more details.
|
|
15
|
+
#
|
|
16
|
+
# You should have received a copy of the GNU Lesser General Public
|
|
17
|
+
# License along with this library; if not, write to the Free Software
|
|
18
|
+
# Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
19
|
+
# Boston, MA 02110-1301 USA
|
|
20
|
+
#
|
|
21
|
+
|
|
22
|
+
require 'data_paths/finders'
|
|
23
|
+
|
|
24
|
+
module Ronin
|
|
25
|
+
module Templates
|
|
26
|
+
#
|
|
27
|
+
# The {Template} module allows a class to find templates and manage
|
|
28
|
+
# multiple template directories. The {Template} module also can find
|
|
29
|
+
# templates within `data/` directories using `DataPaths::Finders`.
|
|
30
|
+
#
|
|
31
|
+
module Template
|
|
32
|
+
include DataPaths::Finders
|
|
33
|
+
|
|
34
|
+
protected
|
|
35
|
+
|
|
36
|
+
#
|
|
37
|
+
# A stack of directories to search for other templates within.
|
|
38
|
+
#
|
|
39
|
+
# @return [Array]
|
|
40
|
+
# The stack of directory paths.
|
|
41
|
+
#
|
|
42
|
+
def template_dirs
|
|
43
|
+
@template_dirs ||= []
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
#
|
|
47
|
+
# The first path in {#template_dirs}, that will be used to search for
|
|
48
|
+
# other templates in.
|
|
49
|
+
#
|
|
50
|
+
# @return [String, nil]
|
|
51
|
+
# Returns the first path in template_dirs, or `nil` if
|
|
52
|
+
# template_dirs is empty.
|
|
53
|
+
#
|
|
54
|
+
def template_dir
|
|
55
|
+
template_dirs.first
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
#
|
|
59
|
+
# Finds the template within the {#template_dir} or uses
|
|
60
|
+
# `DataPaths::Finders#find_data_file` to search through all
|
|
61
|
+
# `data/` directories for the template.
|
|
62
|
+
#
|
|
63
|
+
# @param [String] sub_path
|
|
64
|
+
# The relative path of the template to find.
|
|
65
|
+
#
|
|
66
|
+
# @return [String, nil]
|
|
67
|
+
# Returns the absolute path to the template, or `nil` if the
|
|
68
|
+
# template could not be found.
|
|
69
|
+
#
|
|
70
|
+
# @example
|
|
71
|
+
# find_template 'sub/path/template.erb'
|
|
72
|
+
#
|
|
73
|
+
def find_template(sub_path)
|
|
74
|
+
sub_path = sub_path.to_s
|
|
75
|
+
|
|
76
|
+
if template_dir
|
|
77
|
+
path = File.expand_path(File.join(template_dir,sub_path))
|
|
78
|
+
|
|
79
|
+
return path if File.file?(path)
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
return find_data_file(sub_path)
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
#
|
|
86
|
+
# Finds the template, pushing the directory that the template resides
|
|
87
|
+
# within to {#template_dirs}, calls the given block and then pops
|
|
88
|
+
# the directory off of {#template_dirs}.
|
|
89
|
+
#
|
|
90
|
+
# @param [String] sub_path
|
|
91
|
+
# The relative path of the template to find.
|
|
92
|
+
#
|
|
93
|
+
# @yield [path]
|
|
94
|
+
# The block to be called after the directory of the template has
|
|
95
|
+
# been pushed onto {#template_dirs}. After the block has returned,
|
|
96
|
+
# the directory will be popped off of {#template_dirs}.
|
|
97
|
+
#
|
|
98
|
+
# @yieldparam [String] path
|
|
99
|
+
# The absolute path of the template.
|
|
100
|
+
#
|
|
101
|
+
# @return [Object]
|
|
102
|
+
# Result of the given block.
|
|
103
|
+
#
|
|
104
|
+
# @raise [RuntimeError]
|
|
105
|
+
# The template was not found.
|
|
106
|
+
#
|
|
107
|
+
# @example
|
|
108
|
+
# enter_template('sub/path/template.erb') do |path|
|
|
109
|
+
# # do stuff with the full path
|
|
110
|
+
# end
|
|
111
|
+
#
|
|
112
|
+
def enter_template(sub_path)
|
|
113
|
+
sub_path = sub_path.to_s
|
|
114
|
+
|
|
115
|
+
unless (path = find_template(sub_path))
|
|
116
|
+
raise(RuntimeError,"could not find template #{sub_path.dump}")
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
template_dirs.unshift(File.dirname(path))
|
|
120
|
+
|
|
121
|
+
result = yield(path)
|
|
122
|
+
|
|
123
|
+
template_dirs.shift
|
|
124
|
+
return result
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
#
|
|
128
|
+
# Finds and reads the contents of a template.
|
|
129
|
+
#
|
|
130
|
+
# @param [String] template_path
|
|
131
|
+
# The relative path to the template.
|
|
132
|
+
#
|
|
133
|
+
# @yield [template]
|
|
134
|
+
# The given block will receive the contents of the template.
|
|
135
|
+
#
|
|
136
|
+
# @yieldparam [String] template
|
|
137
|
+
# The contents of the template.
|
|
138
|
+
#
|
|
139
|
+
# @example
|
|
140
|
+
# read_template 'path/to/_include.txt'
|
|
141
|
+
# # => "..."
|
|
142
|
+
#
|
|
143
|
+
# @example Calling read_template with a block
|
|
144
|
+
# read_template 'path/to/_include.txt' do |contents|
|
|
145
|
+
# # ...
|
|
146
|
+
# end
|
|
147
|
+
#
|
|
148
|
+
def read_template(template_path)
|
|
149
|
+
enter_template(template_path) do |path|
|
|
150
|
+
contents = File.read(path)
|
|
151
|
+
|
|
152
|
+
if block_given?
|
|
153
|
+
yield(contents)
|
|
154
|
+
else
|
|
155
|
+
contents
|
|
156
|
+
end
|
|
157
|
+
end
|
|
158
|
+
end
|
|
159
|
+
end
|
|
160
|
+
end
|
|
161
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'ronin/extensions/file'
|
|
3
|
+
|
|
4
|
+
describe File do
|
|
5
|
+
subject { File }
|
|
6
|
+
|
|
7
|
+
it "should provide File.escape_path" do
|
|
8
|
+
subject.should respond_to(:escape_path)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
describe "escape_path" do
|
|
12
|
+
it "should remove null-bytes" do
|
|
13
|
+
File.escape_path("hello\0world\0").should == "helloworld"
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
it "should escape home-dir expansions" do
|
|
17
|
+
File.escape_path("hello/~world").should == "hello/\\~world"
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
it "should remove '.' and '..' directories" do
|
|
21
|
+
File.escape_path("hello/./../world").should == "world"
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'ronin/extensions/ip_addr'
|
|
3
|
+
|
|
4
|
+
describe IPAddr do
|
|
5
|
+
describe "extract" do
|
|
6
|
+
context "ipv4" do
|
|
7
|
+
it "should extract a single IPv4 address" do
|
|
8
|
+
addr = '127.0.0.1'
|
|
9
|
+
|
|
10
|
+
IPAddr.extract(addr,:ipv4).should == [addr]
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
it "should extract multiple IPv4 addresses" do
|
|
14
|
+
addrs = %w[127.0.0.1 192.168.0.1]
|
|
15
|
+
text = "#{addrs[0]} #{addrs[1]}"
|
|
16
|
+
|
|
17
|
+
IPAddr.extract(text,:ipv4).should == addrs
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
it "should extract IPv4 addresses from text" do
|
|
21
|
+
addr = '127.0.0.1'
|
|
22
|
+
text = "ip (#{addr})"
|
|
23
|
+
|
|
24
|
+
IPAddr.extract(text,:ipv4).should == [addr]
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
it "should ignore leading periods" do
|
|
28
|
+
addr = '127.0.0.1'
|
|
29
|
+
text = ".#{addr}"
|
|
30
|
+
|
|
31
|
+
IPAddr.extract(text,:ipv4).should == [addr]
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
it "should ignore tailing periods" do
|
|
35
|
+
addr = '127.0.0.1'
|
|
36
|
+
text = "#{addr}."
|
|
37
|
+
|
|
38
|
+
IPAddr.extract(text,:ipv4).should == [addr]
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
it "should ignore less than 3 octet IPv4 addresses" do
|
|
42
|
+
text = '127.0.0. 1'
|
|
43
|
+
|
|
44
|
+
IPAddr.extract(text,:ipv4).should be_empty
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
it "should ignore IPv4 addresses with more than 3 diget octets" do
|
|
48
|
+
text = '127.1111.0.1'
|
|
49
|
+
|
|
50
|
+
IPAddr.extract(text,:ipv4).should be_empty
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
context "ipv6" do
|
|
55
|
+
it "should extract a single IPv6 address" do
|
|
56
|
+
addr = 'fe80:0000:0000:0000:0204:61ff:fe9d:f156'
|
|
57
|
+
|
|
58
|
+
IPAddr.extract(addr,:ipv6).should == [addr]
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
it "should extract multiple IPv6 addresses" do
|
|
62
|
+
addrs = %w[::1 fe80:0000:0000:0000:0204:61ff:fe9d:f156]
|
|
63
|
+
text = "#{addrs[0]} #{addrs[1]}"
|
|
64
|
+
|
|
65
|
+
IPAddr.extract(text,:ipv6).should == addrs
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
it "should extract collapsed IPv6 addresses" do
|
|
69
|
+
addr = 'fe80::0204:61ff:fe9d:f156'
|
|
70
|
+
text = ":: #{addr} ::"
|
|
71
|
+
|
|
72
|
+
IPAddr.extract(text,:ipv6).should == [addr]
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
it "should extract IPv6 addresses from text" do
|
|
76
|
+
addr = 'fe80:0000:0000:0000:0204:61ff:fe9d:f156'
|
|
77
|
+
text = "hello #{addr} world"
|
|
78
|
+
|
|
79
|
+
IPAddr.extract(text,:ipv6).should == [addr]
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
it "should extract trailing IPv4 suffixes" do
|
|
83
|
+
addr = 'fe80:0000:0000:0000:0204:61ff:fe9d:f156:222.1.1.1'
|
|
84
|
+
text = "#{addr} 1.1.1.1"
|
|
85
|
+
|
|
86
|
+
IPAddr.extract(text,:ipv6).should == [addr]
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
it "should extract short-hand IPv6 addresses" do
|
|
90
|
+
addr = '::f0:0d'
|
|
91
|
+
text = "ipv6: #{addr}"
|
|
92
|
+
|
|
93
|
+
IPAddr.extract(text,:ipv6).should == [addr]
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
it "should extract both IPv4 and IPv6 addresses" do
|
|
98
|
+
ipv4 = '127.0.0.1'
|
|
99
|
+
ipv6 = '::1'
|
|
100
|
+
text = "ipv4: #{ipv4}, ipv6: #{ipv6}"
|
|
101
|
+
|
|
102
|
+
IPAddr.extract(text).should == [ipv4, ipv6]
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
it "should ignore non-IP addresses" do
|
|
106
|
+
text = 'one :: two.three.'
|
|
107
|
+
|
|
108
|
+
IPAddr.extract(text).should be_empty
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
describe "CIDR addresses" do
|
|
113
|
+
let(:fixed_addr) { IPAddr.new('10.1.1.2') }
|
|
114
|
+
let(:class_c) { IPAddr.new('10.1.1.2/24') }
|
|
115
|
+
|
|
116
|
+
it "should only iterate over one IP address for an address" do
|
|
117
|
+
addresses = fixed_addr.map { |ip| IPAddr.new(ip) }
|
|
118
|
+
|
|
119
|
+
addresses.length.should == 1
|
|
120
|
+
fixed_addr.should include(addresses.first)
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
it "should iterate over all IP addresses contained within the IP range" do
|
|
124
|
+
class_c.each do |ip|
|
|
125
|
+
class_c.should include(IPAddr.new(ip))
|
|
126
|
+
end
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
it "should return an Enumerator when no block is given" do
|
|
130
|
+
class_c.each.all? { |ip|
|
|
131
|
+
class_c.include?(IPAddr.new(ip))
|
|
132
|
+
}.should == true
|
|
133
|
+
end
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
describe "globbed addresses" do
|
|
137
|
+
let(:ipv4_range) { '10.1.1-5.1' }
|
|
138
|
+
let(:ipv6_range) { '::ff::02-0a::c3' }
|
|
139
|
+
|
|
140
|
+
it "should iterate over all IP addresses in an IPv4 range" do
|
|
141
|
+
IPAddr.each(ipv4_range) do |ip|
|
|
142
|
+
ip.should =~ /^10\.1\.[1-5]\.1$/
|
|
143
|
+
end
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
it "should iterate over all IP addresses in an IPv6 range" do
|
|
147
|
+
IPAddr.each(ipv6_range) do |ip|
|
|
148
|
+
ip.should =~ /^::ff::0[2-9a]::c3$/
|
|
149
|
+
end
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
it "should return an Enumerator when no block is given" do
|
|
153
|
+
ips = IPAddr.each(ipv4_range)
|
|
154
|
+
|
|
155
|
+
ips.all? { |ip| ip =~ /^10\.1\.[1-5]\.1$/ }.should == true
|
|
156
|
+
end
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
let(:ip) { IPAddr.new(Resolv.getaddress('www.example.com')) }
|
|
160
|
+
let(:bad_ip) { IPAddr.new('0.0.0.0') }
|
|
161
|
+
|
|
162
|
+
describe "lookup" do
|
|
163
|
+
it "should lookup the host-name for an IP" do
|
|
164
|
+
ip.lookup.should == ['www.example.com']
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
it "should return an empty Array for unknown IP addresses" do
|
|
168
|
+
bad_ip.lookup.should be_empty
|
|
169
|
+
end
|
|
170
|
+
end
|
|
171
|
+
end
|