ronin-support 0.4.1 → 0.5.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (224) hide show
  1. checksums.yaml +7 -0
  2. data/.editorconfig +11 -0
  3. data/.github/workflows/ruby.yml +28 -0
  4. data/.ruby-version +1 -0
  5. data/.yardopts +1 -1
  6. data/ChangeLog.md +121 -33
  7. data/Gemfile +17 -18
  8. data/README.md +57 -33
  9. data/Rakefile +10 -3
  10. data/gemspec.yml +16 -7
  11. data/lib/ronin/binary.rb +21 -0
  12. data/lib/ronin/binary/hexdump.rb +20 -0
  13. data/lib/ronin/binary/hexdump/parser.rb +403 -0
  14. data/lib/ronin/binary/struct.rb +567 -0
  15. data/lib/ronin/binary/template.rb +454 -0
  16. data/lib/ronin/extensions.rb +5 -5
  17. data/lib/ronin/extensions/enumerable.rb +5 -5
  18. data/lib/ronin/extensions/file.rb +39 -33
  19. data/lib/ronin/extensions/ip_addr.rb +29 -31
  20. data/lib/ronin/extensions/kernel.rb +5 -5
  21. data/lib/ronin/extensions/meta.rb +5 -5
  22. data/lib/ronin/extensions/regexp.rb +50 -5
  23. data/lib/ronin/extensions/resolv.rb +7 -9
  24. data/lib/ronin/extensions/string.rb +10 -10
  25. data/lib/ronin/formatting.rb +5 -5
  26. data/lib/ronin/formatting/binary.rb +5 -5
  27. data/lib/ronin/formatting/digest.rb +5 -5
  28. data/lib/ronin/formatting/extensions.rb +5 -5
  29. data/lib/ronin/formatting/extensions/binary.rb +7 -5
  30. data/lib/ronin/formatting/extensions/binary/array.rb +61 -0
  31. data/lib/ronin/formatting/extensions/binary/base64.rb +106 -0
  32. data/lib/ronin/formatting/extensions/binary/file.rb +44 -11
  33. data/lib/ronin/formatting/extensions/binary/float.rb +65 -0
  34. data/lib/ronin/formatting/extensions/binary/integer.rb +66 -50
  35. data/lib/ronin/formatting/extensions/binary/string.rb +81 -205
  36. data/lib/ronin/formatting/extensions/digest.rb +5 -5
  37. data/lib/ronin/formatting/extensions/digest/file.rb +5 -5
  38. data/lib/ronin/formatting/extensions/digest/string.rb +5 -5
  39. data/lib/ronin/formatting/extensions/html.rb +5 -5
  40. data/lib/ronin/formatting/extensions/html/integer.rb +9 -13
  41. data/lib/ronin/formatting/extensions/html/string.rb +31 -39
  42. data/lib/ronin/formatting/extensions/http.rb +5 -5
  43. data/lib/ronin/formatting/extensions/http/integer.rb +6 -6
  44. data/lib/ronin/formatting/extensions/http/string.rb +7 -7
  45. data/lib/ronin/formatting/extensions/sql.rb +5 -5
  46. data/lib/ronin/formatting/extensions/sql/string.rb +22 -24
  47. data/lib/ronin/formatting/extensions/text.rb +5 -5
  48. data/lib/ronin/formatting/extensions/text/array.rb +13 -11
  49. data/lib/ronin/formatting/extensions/text/string.rb +70 -13
  50. data/lib/ronin/formatting/html.rb +5 -5
  51. data/lib/ronin/formatting/http.rb +5 -5
  52. data/lib/ronin/formatting/sql.rb +5 -5
  53. data/lib/ronin/formatting/text.rb +5 -5
  54. data/lib/ronin/fuzzing.rb +5 -5
  55. data/lib/ronin/fuzzing/extensions.rb +5 -5
  56. data/lib/ronin/fuzzing/extensions/string.rb +42 -213
  57. data/lib/ronin/fuzzing/fuzzer.rb +110 -0
  58. data/lib/ronin/fuzzing/fuzzing.rb +33 -26
  59. data/lib/ronin/fuzzing/mutator.rb +161 -0
  60. data/lib/ronin/fuzzing/repeater.rb +81 -0
  61. data/lib/ronin/fuzzing/template.rb +133 -0
  62. data/lib/ronin/mixin.rb +2 -2
  63. data/lib/ronin/network.rb +7 -5
  64. data/lib/ronin/network/dns.rb +64 -24
  65. data/lib/ronin/network/esmtp.rb +5 -5
  66. data/lib/ronin/network/extensions.rb +5 -5
  67. data/lib/ronin/network/extensions/dns.rb +5 -5
  68. data/lib/ronin/network/extensions/dns/net.rb +5 -5
  69. data/lib/ronin/network/extensions/esmtp.rb +5 -5
  70. data/lib/ronin/network/extensions/esmtp/net.rb +5 -5
  71. data/lib/ronin/network/extensions/http.rb +5 -5
  72. data/lib/ronin/network/extensions/http/net.rb +5 -5
  73. data/lib/ronin/network/extensions/http/uri/http.rb +5 -5
  74. data/lib/ronin/network/extensions/imap.rb +5 -5
  75. data/lib/ronin/network/extensions/imap/net.rb +5 -5
  76. data/lib/ronin/network/extensions/pop3.rb +5 -5
  77. data/lib/ronin/network/extensions/pop3/net.rb +5 -5
  78. data/lib/ronin/network/extensions/smtp.rb +5 -5
  79. data/lib/ronin/network/extensions/smtp/net.rb +5 -5
  80. data/lib/ronin/network/extensions/ssl.rb +5 -5
  81. data/lib/ronin/network/extensions/ssl/net.rb +5 -5
  82. data/lib/ronin/network/extensions/tcp.rb +5 -5
  83. data/lib/ronin/network/extensions/tcp/net.rb +5 -5
  84. data/lib/ronin/network/extensions/telnet.rb +5 -5
  85. data/lib/ronin/network/extensions/telnet/net.rb +5 -5
  86. data/lib/ronin/network/extensions/udp.rb +5 -5
  87. data/lib/ronin/network/extensions/udp/net.rb +5 -5
  88. data/lib/ronin/network/ftp.rb +149 -0
  89. data/lib/ronin/network/http.rb +5 -5
  90. data/lib/ronin/network/http/exceptions.rb +5 -5
  91. data/lib/ronin/network/http/exceptions/unknown_request.rb +5 -5
  92. data/lib/ronin/network/http/http.rb +65 -70
  93. data/lib/ronin/network/http/proxy.rb +5 -5
  94. data/lib/ronin/network/imap.rb +16 -15
  95. data/lib/ronin/network/mixins.rb +6 -5
  96. data/lib/ronin/network/mixins/dns.rb +5 -5
  97. data/lib/ronin/network/mixins/esmtp.rb +5 -5
  98. data/lib/ronin/network/mixins/ftp.rb +155 -0
  99. data/lib/ronin/network/mixins/http.rb +58 -587
  100. data/lib/ronin/network/mixins/imap.rb +5 -5
  101. data/lib/ronin/network/mixins/mixin.rb +5 -5
  102. data/lib/ronin/network/mixins/pop3.rb +5 -5
  103. data/lib/ronin/network/mixins/smtp.rb +5 -5
  104. data/lib/ronin/network/mixins/ssl.rb +5 -5
  105. data/lib/ronin/network/mixins/tcp.rb +43 -10
  106. data/lib/ronin/network/mixins/telnet.rb +5 -5
  107. data/lib/ronin/network/mixins/udp.rb +126 -6
  108. data/lib/ronin/network/mixins/unix.rb +279 -0
  109. data/lib/ronin/network/network.rb +5 -5
  110. data/lib/ronin/network/pop3.rb +10 -10
  111. data/lib/ronin/network/proxy.rb +578 -0
  112. data/lib/ronin/network/smtp.rb +5 -5
  113. data/lib/ronin/network/smtp/email.rb +6 -6
  114. data/lib/ronin/network/smtp/smtp.rb +12 -13
  115. data/lib/ronin/network/ssl.rb +16 -17
  116. data/lib/ronin/network/tcp.rb +7 -310
  117. data/lib/ronin/network/tcp/proxy.rb +417 -0
  118. data/lib/ronin/network/tcp/tcp.rb +452 -0
  119. data/lib/ronin/network/telnet.rb +34 -28
  120. data/lib/ronin/network/udp.rb +7 -271
  121. data/lib/ronin/network/udp/proxy.rb +191 -0
  122. data/lib/ronin/network/udp/udp.rb +452 -0
  123. data/lib/ronin/network/unix.rb +286 -0
  124. data/lib/ronin/path.rb +35 -39
  125. data/lib/ronin/spec/ui/output.rb +6 -12
  126. data/lib/ronin/support.rb +6 -5
  127. data/lib/ronin/support/inflector.rb +8 -12
  128. data/lib/ronin/support/support.rb +7 -5
  129. data/lib/ronin/support/version.rb +6 -6
  130. data/lib/ronin/templates.rb +5 -5
  131. data/lib/ronin/templates/erb.rb +5 -5
  132. data/lib/ronin/templates/template.rb +5 -5
  133. data/lib/ronin/ui/output.rb +5 -5
  134. data/lib/ronin/ui/output/helpers.rb +42 -28
  135. data/lib/ronin/ui/output/output.rb +17 -21
  136. data/lib/ronin/ui/output/terminal.rb +5 -5
  137. data/lib/ronin/ui/output/terminal/color.rb +15 -9
  138. data/lib/ronin/ui/output/terminal/raw.rb +5 -5
  139. data/lib/ronin/ui/shell.rb +8 -11
  140. data/lib/ronin/wordlist.rb +110 -30
  141. data/ronin-support.gemspec +39 -109
  142. data/spec/binary/hexdump/helpers/hexdumps.rb +13 -0
  143. data/spec/{formatting/binary → binary/hexdump}/helpers/hexdumps/ascii.bin +0 -0
  144. data/spec/{formatting/binary → binary/hexdump}/helpers/hexdumps/hexdump_decimal_shorts.txt +0 -0
  145. data/spec/{formatting/binary → binary/hexdump}/helpers/hexdumps/hexdump_hex_bytes.txt +0 -0
  146. data/spec/{formatting/binary → binary/hexdump}/helpers/hexdumps/hexdump_hex_shorts.txt +0 -0
  147. data/spec/{formatting/binary → binary/hexdump}/helpers/hexdumps/hexdump_octal_bytes.txt +0 -0
  148. data/spec/{formatting/binary → binary/hexdump}/helpers/hexdumps/hexdump_octal_shorts.txt +0 -0
  149. data/spec/{formatting/binary → binary/hexdump}/helpers/hexdumps/hexdump_repeated.txt +0 -0
  150. data/spec/{formatting/binary → binary/hexdump}/helpers/hexdumps/od_decimal_bytes.txt +0 -0
  151. data/spec/{formatting/binary → binary/hexdump}/helpers/hexdumps/od_decimal_ints.txt +0 -0
  152. data/spec/{formatting/binary → binary/hexdump}/helpers/hexdumps/od_decimal_quads.txt +0 -0
  153. data/spec/{formatting/binary → binary/hexdump}/helpers/hexdumps/od_decimal_shorts.txt +0 -0
  154. data/spec/binary/hexdump/helpers/hexdumps/od_doubles.txt +17 -0
  155. data/spec/binary/hexdump/helpers/hexdumps/od_floats.txt +17 -0
  156. data/spec/{formatting/binary → binary/hexdump}/helpers/hexdumps/od_hex_bytes.txt +0 -0
  157. data/spec/{formatting/binary → binary/hexdump}/helpers/hexdumps/od_hex_ints.txt +0 -0
  158. data/spec/{formatting/binary → binary/hexdump}/helpers/hexdumps/od_hex_quads.txt +0 -0
  159. data/spec/{formatting/binary → binary/hexdump}/helpers/hexdumps/od_hex_shorts.txt +0 -0
  160. data/spec/binary/hexdump/helpers/hexdumps/od_named_chars.txt +17 -0
  161. data/spec/{formatting/binary → binary/hexdump}/helpers/hexdumps/od_octal_bytes.txt +0 -0
  162. data/spec/{formatting/binary → binary/hexdump}/helpers/hexdumps/od_octal_ints.txt +0 -0
  163. data/spec/{formatting/binary → binary/hexdump}/helpers/hexdumps/od_octal_quads.txt +0 -0
  164. data/spec/{formatting/binary → binary/hexdump}/helpers/hexdumps/od_octal_shorts.txt +0 -0
  165. data/spec/{formatting/binary → binary/hexdump}/helpers/hexdumps/od_repeated.txt +0 -0
  166. data/spec/{formatting/binary → binary/hexdump}/helpers/hexdumps/repeated.bin +0 -0
  167. data/spec/binary/hexdump/parser_spec.rb +302 -0
  168. data/spec/binary/struct_spec.rb +496 -0
  169. data/spec/binary/template_spec.rb +416 -0
  170. data/spec/extensions/enumerable_spec.rb +4 -4
  171. data/spec/extensions/file_spec.rb +12 -14
  172. data/spec/extensions/ip_addr_spec.rb +76 -50
  173. data/spec/extensions/kernel_spec.rb +7 -7
  174. data/spec/extensions/regexp_spec.rb +119 -59
  175. data/spec/extensions/resolv_spec.rb +2 -2
  176. data/spec/extensions/string_spec.rb +31 -30
  177. data/spec/formatting/binary/array_spec.rb +26 -0
  178. data/spec/formatting/binary/base64_spec.rb +50 -0
  179. data/spec/formatting/binary/float_spec.rb +36 -0
  180. data/spec/formatting/binary/integer_spec.rb +76 -50
  181. data/spec/formatting/binary/string_spec.rb +91 -198
  182. data/spec/formatting/digest/string_spec.rb +5 -5
  183. data/spec/formatting/html/integer_spec.rb +6 -6
  184. data/spec/formatting/html/string_spec.rb +10 -10
  185. data/spec/formatting/http/integer_spec.rb +3 -3
  186. data/spec/formatting/http/string_spec.rb +5 -5
  187. data/spec/formatting/sql/string_spec.rb +21 -19
  188. data/spec/formatting/text/array_spec.rb +15 -15
  189. data/spec/formatting/text/string_spec.rb +58 -28
  190. data/spec/fuzzing/extensions/string_spec.rb +87 -0
  191. data/spec/fuzzing/fuzzer_spec.rb +109 -0
  192. data/spec/fuzzing/fuzzing_spec.rb +24 -0
  193. data/spec/fuzzing/mutator_spec.rb +112 -0
  194. data/spec/fuzzing/repeater_spec.rb +57 -0
  195. data/spec/fuzzing/template_spec.rb +54 -0
  196. data/spec/mixin_spec.rb +10 -12
  197. data/spec/network/dns_spec.rb +89 -23
  198. data/spec/network/ftp_spec.rb +81 -0
  199. data/spec/network/http/http_spec.rb +237 -144
  200. data/spec/network/http/proxy_spec.rb +37 -37
  201. data/spec/network/network_spec.rb +2 -2
  202. data/spec/network/proxy_spec.rb +121 -0
  203. data/spec/network/shared/unix_server.rb +31 -0
  204. data/spec/network/smtp/email_spec.rb +14 -14
  205. data/spec/network/ssl_spec.rb +53 -3
  206. data/spec/network/tcp/proxy_spec.rb +118 -0
  207. data/spec/network/tcp/tcp_spec.rb +316 -0
  208. data/spec/network/telnet_spec.rb +67 -0
  209. data/spec/network/udp/udp_spec.rb +298 -0
  210. data/spec/network/unix_spec.rb +182 -0
  211. data/spec/path_spec.rb +43 -18
  212. data/spec/spec_helper.rb +2 -3
  213. data/spec/support/inflector_spec.rb +4 -4
  214. data/spec/support_spec.rb +1 -1
  215. data/spec/templates/erb_spec.rb +3 -3
  216. data/spec/templates/template_spec.rb +10 -10
  217. data/spec/ui/shell_spec.rb +15 -15
  218. data/spec/wordlist_spec.rb +80 -19
  219. metadata +176 -121
  220. data/.gemtest +0 -0
  221. data/spec/formatting/binary/helpers/hexdumps.rb +0 -16
  222. data/spec/fuzzing/string_spec.rb +0 -158
  223. data/spec/network/tcp_spec.rb +0 -247
  224. data/spec/network/udp_spec.rb +0 -248
@@ -0,0 +1,81 @@
1
+ #
2
+ # Copyright (c) 2006-2021 Hal Brodigan (postmodern.mod3 at gmail.com)
3
+ #
4
+ # This file is part of ronin-support.
5
+ #
6
+ # ronin-support is free software: you can redistribute it and/or modify
7
+ # it under the terms of the GNU Lesser General Public License as published
8
+ # by the Free Software Foundation, either version 3 of the License, or
9
+ # (at your option) any later version.
10
+ #
11
+ # ronin-support 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 Lesser General Public License for more details.
15
+ #
16
+ # You should have received a copy of the GNU Lesser General Public License
17
+ # along with ronin-support. If not, see <https://www.gnu.org/licenses/>.
18
+ #
19
+
20
+ module Ronin
21
+ module Fuzzing
22
+ #
23
+ # Fuzzing class that generates repeated data.
24
+ #
25
+ # @api semipublic
26
+ #
27
+ # @since 0.5.0
28
+ #
29
+ class Repeater
30
+
31
+ # The lengths to repeat the data by
32
+ attr_reader :lengths
33
+
34
+ #
35
+ # Initializes a new Repeater.
36
+ #
37
+ # @param [Enumerable, Integer] lengths
38
+ # The lengths to repeat the data by.
39
+ #
40
+ # @raise [TypeError]
41
+ # `lengths` must either be Enumerable or an Integer.
42
+ #
43
+ def initialize(lengths)
44
+ @lengths = case lengths
45
+ when Integer
46
+ [lengths]
47
+ when Enumerable
48
+ lengths
49
+ else
50
+ raise(TypeError,"argument must be Enumerable or an Integer")
51
+ end
52
+ end
53
+
54
+ #
55
+ # Enumerates through each length of repeated data.
56
+ #
57
+ # @param [#*] repeatable
58
+ # The repeatable data.
59
+ #
60
+ # @yield [repeated]
61
+ # The given block will be passed every repeated String.
62
+ #
63
+ # @yieldparam [String] repeated
64
+ # A repeated version of the String.
65
+ #
66
+ # @return [Enumerator]
67
+ # If no block is given, an Enumerator will be returned.
68
+ #
69
+ def each(repeatable)
70
+ return enum_for(__method__,repeatable) unless block_given?
71
+
72
+ @lengths.each do |length|
73
+ yield(repeatable * length)
74
+ end
75
+
76
+ return nil
77
+ end
78
+
79
+ end
80
+ end
81
+ end
@@ -0,0 +1,133 @@
1
+ #
2
+ # Copyright (c) 2006-2021 Hal Brodigan (postmodern.mod3 at gmail.com)
3
+ #
4
+ # This file is part of ronin-support.
5
+ #
6
+ # ronin-support is free software: you can redistribute it and/or modify
7
+ # it under the terms of the GNU Lesser General Public License as published
8
+ # by the Free Software Foundation, either version 3 of the License, or
9
+ # (at your option) any later version.
10
+ #
11
+ # ronin-support 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 Lesser General Public License for more details.
15
+ #
16
+ # You should have received a copy of the GNU Lesser General Public License
17
+ # along with ronin-support. If not, see <https://www.gnu.org/licenses/>.
18
+ #
19
+
20
+ require 'chars'
21
+ require 'combinatorics/generator'
22
+ require 'combinatorics/list_comprehension'
23
+
24
+ module Ronin
25
+ module Fuzzing
26
+ #
27
+ # Fuzzing class that generates Strings based on a template.
28
+ #
29
+ # @api semipublic
30
+ #
31
+ # @since 0.5.0
32
+ #
33
+ class Template
34
+
35
+ include Enumerable
36
+
37
+ #
38
+ # Initializes a new Fuzzing template.
39
+ #
40
+ # @param [Array(<String,Symbol,Enumerable>, <Integer,Array,Range>)] fields
41
+ # The fields which defines the string or character sets which will
42
+ # make up parts of the String.
43
+ #
44
+ # @raise [ArgumentError]
45
+ # A given character set name was unknown.
46
+ #
47
+ # @raise [TypeError]
48
+ # A given string set was not a String, Symbol or Enumerable.
49
+ # A given string set length was not an Integer or Enumerable.
50
+ #
51
+ def initialize(fields)
52
+ @enumerators = []
53
+
54
+ fields.each do |(set,length)|
55
+ enum = case set
56
+ when String
57
+ [set].each
58
+ when Enumerable
59
+ set.each
60
+ when Symbol
61
+ name = set.to_s.upcase
62
+
63
+ unless Chars.const_defined?(name)
64
+ raise(ArgumentError,"unknown charset #{set.inspect}")
65
+ end
66
+
67
+ Chars.const_get(name).each_char
68
+ else
69
+ raise(TypeError,"set must be a String, Symbol or Enumerable")
70
+ end
71
+
72
+ case length
73
+ when Integer
74
+ length.times { @enumerators << enum.dup }
75
+ when Array, Range
76
+ @enumerators << Combinatorics::Generator.new do |g|
77
+ length.each do |sublength|
78
+ superset = Array.new(sublength) { enum.dup }
79
+
80
+ superset.comprehension { |strings| g.yield strings.join }
81
+ end
82
+ end
83
+ when nil
84
+ @enumerators << enum
85
+ else
86
+ raise(TypeError,"length must be an Integer, Range or Array")
87
+ end
88
+ end
89
+ end
90
+
91
+ #
92
+ # @see #initialize
93
+ #
94
+ def self.[](*fields)
95
+ new(fields)
96
+ end
97
+
98
+ #
99
+ # Generate permutations of Strings from a format template.
100
+ #
101
+ # @yield [string]
102
+ # The given block will be passed each unique String.
103
+ #
104
+ # @yieldparam [String] string
105
+ # A newly generated String.
106
+ #
107
+ # @return [Enumerator]
108
+ # If no block is given, an Enumerator will be returned.
109
+ #
110
+ def each
111
+ return enum_for(__method__) unless block_given?
112
+
113
+ @enumerators.comprehension do |fields|
114
+ string = ''
115
+
116
+ fields.each do |field|
117
+ string << case field
118
+ when Integer
119
+ field.chr
120
+ else
121
+ field.to_s
122
+ end
123
+ end
124
+
125
+ yield string
126
+ end
127
+
128
+ return nil
129
+ end
130
+
131
+ end
132
+ end
133
+ end
data/lib/ronin/mixin.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  #
2
- # Copyright (c) 2006-2012 Hal Brodigan (postmodern.mod3 at gmail.com)
2
+ # Copyright (c) 2006-2021 Hal Brodigan (postmodern.mod3 at gmail.com)
3
3
  #
4
4
  # This file is part of Ronin.
5
5
  #
@@ -14,7 +14,7 @@
14
14
  # GNU General Public License for more details.
15
15
  #
16
16
  # You should have received a copy of the GNU General Public License
17
- # along with Ronin. If not, see <http://www.gnu.org/licenses/>.
17
+ # along with Ronin. If not, see <https://www.gnu.org/licenses/>.
18
18
  #
19
19
 
20
20
  module Ronin
data/lib/ronin/network.rb CHANGED
@@ -1,29 +1,31 @@
1
1
  #
2
- # Copyright (c) 2006-2012 Hal Brodigan (postmodern.mod3 at gmail.com)
2
+ # Copyright (c) 2006-2021 Hal Brodigan (postmodern.mod3 at gmail.com)
3
3
  #
4
- # This file is part of Ronin Support.
4
+ # This file is part of ronin-support.
5
5
  #
6
- # Ronin Support is free software: you can redistribute it and/or modify
6
+ # ronin-support is free software: you can redistribute it and/or modify
7
7
  # it under the terms of the GNU Lesser General Public License as published
8
8
  # by the Free Software Foundation, either version 3 of the License, or
9
9
  # (at your option) any later version.
10
10
  #
11
- # Ronin Support is distributed in the hope that it will be useful,
11
+ # ronin-support is distributed in the hope that it will be useful,
12
12
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
13
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
14
  # GNU Lesser General Public License for more details.
15
15
  #
16
16
  # You should have received a copy of the GNU Lesser General Public License
17
- # along with Ronin Support. If not, see <http://www.gnu.org/licenses/>.
17
+ # along with ronin-support. If not, see <https://www.gnu.org/licenses/>.
18
18
  #
19
19
 
20
20
  require 'ronin/network/dns'
21
21
  require 'ronin/network/tcp'
22
22
  require 'ronin/network/udp'
23
23
  require 'ronin/network/ssl'
24
+ require 'ronin/network/unix'
24
25
  require 'ronin/network/smtp'
25
26
  require 'ronin/network/esmtp'
26
27
  require 'ronin/network/pop3'
27
28
  require 'ronin/network/imap'
28
29
  require 'ronin/network/telnet'
30
+ require 'ronin/network/ftp'
29
31
  require 'ronin/network/http'
@@ -1,20 +1,20 @@
1
1
  #
2
- # Copyright (c) 2006-2012 Hal Brodigan (postmodern.mod3 at gmail.com)
2
+ # Copyright (c) 2006-2021 Hal Brodigan (postmodern.mod3 at gmail.com)
3
3
  #
4
- # This file is part of Ronin Support.
4
+ # This file is part of ronin-support.
5
5
  #
6
- # Ronin Support is free software: you can redistribute it and/or modify
6
+ # ronin-support is free software: you can redistribute it and/or modify
7
7
  # it under the terms of the GNU Lesser General Public License as published
8
8
  # by the Free Software Foundation, either version 3 of the License, or
9
9
  # (at your option) any later version.
10
10
  #
11
- # Ronin Support is distributed in the hope that it will be useful,
11
+ # ronin-support is distributed in the hope that it will be useful,
12
12
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
13
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
14
  # GNU Lesser General Public License for more details.
15
15
  #
16
16
  # You should have received a copy of the GNU Lesser General Public License
17
- # along with Ronin Support. If not, see <http://www.gnu.org/licenses/>.
17
+ # along with ronin-support. If not, see <https://www.gnu.org/licenses/>.
18
18
  #
19
19
 
20
20
  require 'resolv'
@@ -42,7 +42,7 @@ module Ronin
42
42
  #
43
43
  # Sets the DNS nameserver to be queried.
44
44
  #
45
- # @param [IPAddr, String, nil]
45
+ # @param [IPAddr, String, nil] address
46
46
  # The address of the nameserver.
47
47
  #
48
48
  # @return [String, nil]
@@ -68,10 +68,8 @@ module Ronin
68
68
  # @api public
69
69
  #
70
70
  def dns_resolver(nameserver=DNS.nameserver)
71
- if nameserver
72
- Resolv::DNS.new(:nameserver => nameserver)
73
- else
74
- Resolv
71
+ if nameserver then Resolv::DNS.new(:nameserver => nameserver)
72
+ else Resolv
75
73
  end
76
74
  end
77
75
 
@@ -84,18 +82,28 @@ module Ronin
84
82
  # @param [String, nil] nameserver
85
83
  # Optional DNS nameserver to query.
86
84
  #
85
+ # @yield [address]
86
+ # If a block is given and the hostname was resolved, the address will
87
+ # be passed to the block.
88
+ #
89
+ # @yieldparam [String] address
90
+ # The address of the hostname.
91
+ #
87
92
  # @return [String, nil]
88
93
  # The address of the hostname.
89
94
  #
90
95
  # @api public
91
96
  #
92
97
  def dns_lookup(hostname,nameserver=DNS.nameserver)
93
- resolv = dns_resolver(nameserver)
98
+ hostname = hostname.to_s
99
+ resolv = dns_resolver(nameserver)
100
+ address = begin
101
+ resolv.getaddress(hostname).to_s
102
+ rescue Resolv::ResolvError
103
+ end
94
104
 
95
- begin
96
- resolv.getaddress(hostname.to_s).to_s
97
- rescue Resolv::ResolvError
98
- end
105
+ yield(address) if (block_given? && address)
106
+ return address
99
107
  end
100
108
 
101
109
  #
@@ -107,13 +115,24 @@ module Ronin
107
115
  # @param [String, nil] nameserver
108
116
  # Optional DNS nameserver to query.
109
117
  #
118
+ # @yield [address]
119
+ # If a block is given, each resolved address will be passed to the
120
+ # block.
121
+ #
122
+ # @yieldparam [String] address
123
+ # A address of the hostname.
124
+ #
110
125
  # @return [Array<String>]
111
126
  # The addresses of the hostname.
112
127
  #
113
128
  # @api public
114
129
  #
115
- def dns_lookup_all(hostname,nameserver=DNS.nameserver)
116
- dns_resolver(nameserver).getaddresses(hostname.to_s).map(&:to_s)
130
+ def dns_lookup_all(hostname,nameserver=DNS.nameserver,&block)
131
+ hostname = hostname.to_s
132
+ addresses = dns_resolver(nameserver).getaddresses(hostname).map(&:to_s)
133
+
134
+ addresses.each(&block) if block
135
+ return addresses
117
136
  end
118
137
 
119
138
  #
@@ -125,18 +144,28 @@ module Ronin
125
144
  # @param [String, nil] nameserver
126
145
  # Optional DNS nameserver to query.
127
146
  #
147
+ # @yield [hostname]
148
+ # If a block is given and a hostname was found for the address,
149
+ # the resolved hostname will be passed to the block.
150
+ #
151
+ # @yieldparam [String] hostname
152
+ # The hostname of the address.
153
+ #
128
154
  # @return [String, nil]
129
155
  # The hostname of the address.
130
156
  #
131
157
  # @api public
132
158
  #
133
159
  def dns_reverse_lookup(address,nameserver=DNS.nameserver)
134
- resolv = dns_resolver(nameserver)
160
+ address = address.to_s
161
+ resolv = dns_resolver(nameserver)
162
+ hostname = begin
163
+ resolv.getname(address).to_s
164
+ rescue Resolv::ResolvError
165
+ end
135
166
 
136
- begin
137
- resolv.getname(address.to_s).to_s
138
- rescue Resolv::ResolvError
139
- end
167
+ yield(hostname) if (block_given? && hostname)
168
+ return hostname
140
169
  end
141
170
 
142
171
  #
@@ -148,13 +177,24 @@ module Ronin
148
177
  # @param [String, nil] nameserver
149
178
  # Optional DNS nameserver to query.
150
179
  #
180
+ # @yield [hostname]
181
+ # If a block is given and hostnames were found for the address,
182
+ # each hostname will be passed to the block.
183
+ #
184
+ # @yieldparam [String] hostname
185
+ # A hostname of the address.
186
+ #
151
187
  # @return [Array<String>]
152
188
  # The hostnames of the address.
153
189
  #
154
190
  # @api public
155
191
  #
156
- def dns_reverse_lookup_all(address,nameserver=DNS.nameserver)
157
- dns_resolver(nameserver).getnames(address.to_s).map(&:to_s)
192
+ def dns_reverse_lookup_all(address,nameserver=DNS.nameserver,&block)
193
+ address = address.to_s
194
+ hostnames = dns_resolver(nameserver).getnames(address).map(&:to_s)
195
+
196
+ hostnames.each(&block) if block
197
+ return hostnames
158
198
  end
159
199
  end
160
200
  end
@@ -1,20 +1,20 @@
1
1
  #
2
- # Copyright (c) 2006-2012 Hal Brodigan (postmodern.mod3 at gmail.com)
2
+ # Copyright (c) 2006-2021 Hal Brodigan (postmodern.mod3 at gmail.com)
3
3
  #
4
- # This file is part of Ronin Support.
4
+ # This file is part of ronin-support.
5
5
  #
6
- # Ronin Support is free software: you can redistribute it and/or modify
6
+ # ronin-support is free software: you can redistribute it and/or modify
7
7
  # it under the terms of the GNU Lesser General Public License as published
8
8
  # by the Free Software Foundation, either version 3 of the License, or
9
9
  # (at your option) any later version.
10
10
  #
11
- # Ronin Support is distributed in the hope that it will be useful,
11
+ # ronin-support is distributed in the hope that it will be useful,
12
12
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
13
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
14
  # GNU Lesser General Public License for more details.
15
15
  #
16
16
  # You should have received a copy of the GNU Lesser General Public License
17
- # along with Ronin Support. If not, see <http://www.gnu.org/licenses/>.
17
+ # along with ronin-support. If not, see <https://www.gnu.org/licenses/>.
18
18
  #
19
19
 
20
20
  require 'ronin/network/smtp'