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.
- checksums.yaml +7 -0
- data/.editorconfig +11 -0
- data/.github/workflows/ruby.yml +28 -0
- data/.ruby-version +1 -0
- data/.yardopts +1 -1
- data/ChangeLog.md +121 -33
- data/Gemfile +17 -18
- data/README.md +57 -33
- data/Rakefile +10 -3
- data/gemspec.yml +16 -7
- data/lib/ronin/binary.rb +21 -0
- data/lib/ronin/binary/hexdump.rb +20 -0
- data/lib/ronin/binary/hexdump/parser.rb +403 -0
- data/lib/ronin/binary/struct.rb +567 -0
- data/lib/ronin/binary/template.rb +454 -0
- data/lib/ronin/extensions.rb +5 -5
- data/lib/ronin/extensions/enumerable.rb +5 -5
- data/lib/ronin/extensions/file.rb +39 -33
- data/lib/ronin/extensions/ip_addr.rb +29 -31
- data/lib/ronin/extensions/kernel.rb +5 -5
- data/lib/ronin/extensions/meta.rb +5 -5
- data/lib/ronin/extensions/regexp.rb +50 -5
- data/lib/ronin/extensions/resolv.rb +7 -9
- data/lib/ronin/extensions/string.rb +10 -10
- data/lib/ronin/formatting.rb +5 -5
- data/lib/ronin/formatting/binary.rb +5 -5
- data/lib/ronin/formatting/digest.rb +5 -5
- data/lib/ronin/formatting/extensions.rb +5 -5
- data/lib/ronin/formatting/extensions/binary.rb +7 -5
- data/lib/ronin/formatting/extensions/binary/array.rb +61 -0
- data/lib/ronin/formatting/extensions/binary/base64.rb +106 -0
- data/lib/ronin/formatting/extensions/binary/file.rb +44 -11
- data/lib/ronin/formatting/extensions/binary/float.rb +65 -0
- data/lib/ronin/formatting/extensions/binary/integer.rb +66 -50
- data/lib/ronin/formatting/extensions/binary/string.rb +81 -205
- data/lib/ronin/formatting/extensions/digest.rb +5 -5
- data/lib/ronin/formatting/extensions/digest/file.rb +5 -5
- data/lib/ronin/formatting/extensions/digest/string.rb +5 -5
- data/lib/ronin/formatting/extensions/html.rb +5 -5
- data/lib/ronin/formatting/extensions/html/integer.rb +9 -13
- data/lib/ronin/formatting/extensions/html/string.rb +31 -39
- data/lib/ronin/formatting/extensions/http.rb +5 -5
- data/lib/ronin/formatting/extensions/http/integer.rb +6 -6
- data/lib/ronin/formatting/extensions/http/string.rb +7 -7
- data/lib/ronin/formatting/extensions/sql.rb +5 -5
- data/lib/ronin/formatting/extensions/sql/string.rb +22 -24
- data/lib/ronin/formatting/extensions/text.rb +5 -5
- data/lib/ronin/formatting/extensions/text/array.rb +13 -11
- data/lib/ronin/formatting/extensions/text/string.rb +70 -13
- data/lib/ronin/formatting/html.rb +5 -5
- data/lib/ronin/formatting/http.rb +5 -5
- data/lib/ronin/formatting/sql.rb +5 -5
- data/lib/ronin/formatting/text.rb +5 -5
- data/lib/ronin/fuzzing.rb +5 -5
- data/lib/ronin/fuzzing/extensions.rb +5 -5
- data/lib/ronin/fuzzing/extensions/string.rb +42 -213
- data/lib/ronin/fuzzing/fuzzer.rb +110 -0
- data/lib/ronin/fuzzing/fuzzing.rb +33 -26
- data/lib/ronin/fuzzing/mutator.rb +161 -0
- data/lib/ronin/fuzzing/repeater.rb +81 -0
- data/lib/ronin/fuzzing/template.rb +133 -0
- data/lib/ronin/mixin.rb +2 -2
- data/lib/ronin/network.rb +7 -5
- data/lib/ronin/network/dns.rb +64 -24
- data/lib/ronin/network/esmtp.rb +5 -5
- data/lib/ronin/network/extensions.rb +5 -5
- data/lib/ronin/network/extensions/dns.rb +5 -5
- data/lib/ronin/network/extensions/dns/net.rb +5 -5
- data/lib/ronin/network/extensions/esmtp.rb +5 -5
- data/lib/ronin/network/extensions/esmtp/net.rb +5 -5
- data/lib/ronin/network/extensions/http.rb +5 -5
- data/lib/ronin/network/extensions/http/net.rb +5 -5
- data/lib/ronin/network/extensions/http/uri/http.rb +5 -5
- data/lib/ronin/network/extensions/imap.rb +5 -5
- data/lib/ronin/network/extensions/imap/net.rb +5 -5
- data/lib/ronin/network/extensions/pop3.rb +5 -5
- data/lib/ronin/network/extensions/pop3/net.rb +5 -5
- data/lib/ronin/network/extensions/smtp.rb +5 -5
- data/lib/ronin/network/extensions/smtp/net.rb +5 -5
- data/lib/ronin/network/extensions/ssl.rb +5 -5
- data/lib/ronin/network/extensions/ssl/net.rb +5 -5
- data/lib/ronin/network/extensions/tcp.rb +5 -5
- data/lib/ronin/network/extensions/tcp/net.rb +5 -5
- data/lib/ronin/network/extensions/telnet.rb +5 -5
- data/lib/ronin/network/extensions/telnet/net.rb +5 -5
- data/lib/ronin/network/extensions/udp.rb +5 -5
- data/lib/ronin/network/extensions/udp/net.rb +5 -5
- data/lib/ronin/network/ftp.rb +149 -0
- data/lib/ronin/network/http.rb +5 -5
- data/lib/ronin/network/http/exceptions.rb +5 -5
- data/lib/ronin/network/http/exceptions/unknown_request.rb +5 -5
- data/lib/ronin/network/http/http.rb +65 -70
- data/lib/ronin/network/http/proxy.rb +5 -5
- data/lib/ronin/network/imap.rb +16 -15
- data/lib/ronin/network/mixins.rb +6 -5
- data/lib/ronin/network/mixins/dns.rb +5 -5
- data/lib/ronin/network/mixins/esmtp.rb +5 -5
- data/lib/ronin/network/mixins/ftp.rb +155 -0
- data/lib/ronin/network/mixins/http.rb +58 -587
- data/lib/ronin/network/mixins/imap.rb +5 -5
- data/lib/ronin/network/mixins/mixin.rb +5 -5
- data/lib/ronin/network/mixins/pop3.rb +5 -5
- data/lib/ronin/network/mixins/smtp.rb +5 -5
- data/lib/ronin/network/mixins/ssl.rb +5 -5
- data/lib/ronin/network/mixins/tcp.rb +43 -10
- data/lib/ronin/network/mixins/telnet.rb +5 -5
- data/lib/ronin/network/mixins/udp.rb +126 -6
- data/lib/ronin/network/mixins/unix.rb +279 -0
- data/lib/ronin/network/network.rb +5 -5
- data/lib/ronin/network/pop3.rb +10 -10
- data/lib/ronin/network/proxy.rb +578 -0
- data/lib/ronin/network/smtp.rb +5 -5
- data/lib/ronin/network/smtp/email.rb +6 -6
- data/lib/ronin/network/smtp/smtp.rb +12 -13
- data/lib/ronin/network/ssl.rb +16 -17
- data/lib/ronin/network/tcp.rb +7 -310
- data/lib/ronin/network/tcp/proxy.rb +417 -0
- data/lib/ronin/network/tcp/tcp.rb +452 -0
- data/lib/ronin/network/telnet.rb +34 -28
- data/lib/ronin/network/udp.rb +7 -271
- data/lib/ronin/network/udp/proxy.rb +191 -0
- data/lib/ronin/network/udp/udp.rb +452 -0
- data/lib/ronin/network/unix.rb +286 -0
- data/lib/ronin/path.rb +35 -39
- data/lib/ronin/spec/ui/output.rb +6 -12
- data/lib/ronin/support.rb +6 -5
- data/lib/ronin/support/inflector.rb +8 -12
- data/lib/ronin/support/support.rb +7 -5
- data/lib/ronin/support/version.rb +6 -6
- data/lib/ronin/templates.rb +5 -5
- data/lib/ronin/templates/erb.rb +5 -5
- data/lib/ronin/templates/template.rb +5 -5
- data/lib/ronin/ui/output.rb +5 -5
- data/lib/ronin/ui/output/helpers.rb +42 -28
- data/lib/ronin/ui/output/output.rb +17 -21
- data/lib/ronin/ui/output/terminal.rb +5 -5
- data/lib/ronin/ui/output/terminal/color.rb +15 -9
- data/lib/ronin/ui/output/terminal/raw.rb +5 -5
- data/lib/ronin/ui/shell.rb +8 -11
- data/lib/ronin/wordlist.rb +110 -30
- data/ronin-support.gemspec +39 -109
- data/spec/binary/hexdump/helpers/hexdumps.rb +13 -0
- data/spec/{formatting/binary → binary/hexdump}/helpers/hexdumps/ascii.bin +0 -0
- data/spec/{formatting/binary → binary/hexdump}/helpers/hexdumps/hexdump_decimal_shorts.txt +0 -0
- data/spec/{formatting/binary → binary/hexdump}/helpers/hexdumps/hexdump_hex_bytes.txt +0 -0
- data/spec/{formatting/binary → binary/hexdump}/helpers/hexdumps/hexdump_hex_shorts.txt +0 -0
- data/spec/{formatting/binary → binary/hexdump}/helpers/hexdumps/hexdump_octal_bytes.txt +0 -0
- data/spec/{formatting/binary → binary/hexdump}/helpers/hexdumps/hexdump_octal_shorts.txt +0 -0
- data/spec/{formatting/binary → binary/hexdump}/helpers/hexdumps/hexdump_repeated.txt +0 -0
- data/spec/{formatting/binary → binary/hexdump}/helpers/hexdumps/od_decimal_bytes.txt +0 -0
- data/spec/{formatting/binary → binary/hexdump}/helpers/hexdumps/od_decimal_ints.txt +0 -0
- data/spec/{formatting/binary → binary/hexdump}/helpers/hexdumps/od_decimal_quads.txt +0 -0
- data/spec/{formatting/binary → binary/hexdump}/helpers/hexdumps/od_decimal_shorts.txt +0 -0
- data/spec/binary/hexdump/helpers/hexdumps/od_doubles.txt +17 -0
- data/spec/binary/hexdump/helpers/hexdumps/od_floats.txt +17 -0
- data/spec/{formatting/binary → binary/hexdump}/helpers/hexdumps/od_hex_bytes.txt +0 -0
- data/spec/{formatting/binary → binary/hexdump}/helpers/hexdumps/od_hex_ints.txt +0 -0
- data/spec/{formatting/binary → binary/hexdump}/helpers/hexdumps/od_hex_quads.txt +0 -0
- data/spec/{formatting/binary → binary/hexdump}/helpers/hexdumps/od_hex_shorts.txt +0 -0
- data/spec/binary/hexdump/helpers/hexdumps/od_named_chars.txt +17 -0
- data/spec/{formatting/binary → binary/hexdump}/helpers/hexdumps/od_octal_bytes.txt +0 -0
- data/spec/{formatting/binary → binary/hexdump}/helpers/hexdumps/od_octal_ints.txt +0 -0
- data/spec/{formatting/binary → binary/hexdump}/helpers/hexdumps/od_octal_quads.txt +0 -0
- data/spec/{formatting/binary → binary/hexdump}/helpers/hexdumps/od_octal_shorts.txt +0 -0
- data/spec/{formatting/binary → binary/hexdump}/helpers/hexdumps/od_repeated.txt +0 -0
- data/spec/{formatting/binary → binary/hexdump}/helpers/hexdumps/repeated.bin +0 -0
- data/spec/binary/hexdump/parser_spec.rb +302 -0
- data/spec/binary/struct_spec.rb +496 -0
- data/spec/binary/template_spec.rb +416 -0
- data/spec/extensions/enumerable_spec.rb +4 -4
- data/spec/extensions/file_spec.rb +12 -14
- data/spec/extensions/ip_addr_spec.rb +76 -50
- data/spec/extensions/kernel_spec.rb +7 -7
- data/spec/extensions/regexp_spec.rb +119 -59
- data/spec/extensions/resolv_spec.rb +2 -2
- data/spec/extensions/string_spec.rb +31 -30
- data/spec/formatting/binary/array_spec.rb +26 -0
- data/spec/formatting/binary/base64_spec.rb +50 -0
- data/spec/formatting/binary/float_spec.rb +36 -0
- data/spec/formatting/binary/integer_spec.rb +76 -50
- data/spec/formatting/binary/string_spec.rb +91 -198
- data/spec/formatting/digest/string_spec.rb +5 -5
- data/spec/formatting/html/integer_spec.rb +6 -6
- data/spec/formatting/html/string_spec.rb +10 -10
- data/spec/formatting/http/integer_spec.rb +3 -3
- data/spec/formatting/http/string_spec.rb +5 -5
- data/spec/formatting/sql/string_spec.rb +21 -19
- data/spec/formatting/text/array_spec.rb +15 -15
- data/spec/formatting/text/string_spec.rb +58 -28
- data/spec/fuzzing/extensions/string_spec.rb +87 -0
- data/spec/fuzzing/fuzzer_spec.rb +109 -0
- data/spec/fuzzing/fuzzing_spec.rb +24 -0
- data/spec/fuzzing/mutator_spec.rb +112 -0
- data/spec/fuzzing/repeater_spec.rb +57 -0
- data/spec/fuzzing/template_spec.rb +54 -0
- data/spec/mixin_spec.rb +10 -12
- data/spec/network/dns_spec.rb +89 -23
- data/spec/network/ftp_spec.rb +81 -0
- data/spec/network/http/http_spec.rb +237 -144
- data/spec/network/http/proxy_spec.rb +37 -37
- data/spec/network/network_spec.rb +2 -2
- data/spec/network/proxy_spec.rb +121 -0
- data/spec/network/shared/unix_server.rb +31 -0
- data/spec/network/smtp/email_spec.rb +14 -14
- data/spec/network/ssl_spec.rb +53 -3
- data/spec/network/tcp/proxy_spec.rb +118 -0
- data/spec/network/tcp/tcp_spec.rb +316 -0
- data/spec/network/telnet_spec.rb +67 -0
- data/spec/network/udp/udp_spec.rb +298 -0
- data/spec/network/unix_spec.rb +182 -0
- data/spec/path_spec.rb +43 -18
- data/spec/spec_helper.rb +2 -3
- data/spec/support/inflector_spec.rb +4 -4
- data/spec/support_spec.rb +1 -1
- data/spec/templates/erb_spec.rb +3 -3
- data/spec/templates/template_spec.rb +10 -10
- data/spec/ui/shell_spec.rb +15 -15
- data/spec/wordlist_spec.rb +80 -19
- metadata +176 -121
- data/.gemtest +0 -0
- data/spec/formatting/binary/helpers/hexdumps.rb +0 -16
- data/spec/fuzzing/string_spec.rb +0 -158
- data/spec/network/tcp_spec.rb +0 -247
- data/spec/network/udp_spec.rb +0 -248
data/lib/ronin/extensions.rb
CHANGED
@@ -1,20 +1,20 @@
|
|
1
1
|
#
|
2
|
-
# Copyright (c) 2006-
|
2
|
+
# Copyright (c) 2006-2021 Hal Brodigan (postmodern.mod3 at gmail.com)
|
3
3
|
#
|
4
|
-
# This file is part of
|
4
|
+
# This file is part of ronin-support.
|
5
5
|
#
|
6
|
-
#
|
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
|
-
#
|
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
|
17
|
+
# along with ronin-support. If not, see <https://www.gnu.org/licenses/>.
|
18
18
|
#
|
19
19
|
|
20
20
|
require 'ronin/extensions/meta'
|
@@ -1,20 +1,20 @@
|
|
1
1
|
#
|
2
|
-
# Copyright (c) 2006-
|
2
|
+
# Copyright (c) 2006-2021 Hal Brodigan (postmodern.mod3 at gmail.com)
|
3
3
|
#
|
4
|
-
# This file is part of
|
4
|
+
# This file is part of ronin-support.
|
5
5
|
#
|
6
|
-
#
|
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
|
-
#
|
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
|
17
|
+
# along with ronin-support. If not, see <https://www.gnu.org/licenses/>.
|
18
18
|
#
|
19
19
|
|
20
20
|
module Enumerable
|
@@ -1,20 +1,20 @@
|
|
1
1
|
#
|
2
|
-
# Copyright (c) 2006-
|
2
|
+
# Copyright (c) 2006-2021 Hal Brodigan (postmodern.mod3 at gmail.com)
|
3
3
|
#
|
4
|
-
# This file is part of
|
4
|
+
# This file is part of ronin-support.
|
5
5
|
#
|
6
|
-
#
|
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
|
-
#
|
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
|
17
|
+
# along with ronin-support. If not, see <https://www.gnu.org/licenses/>.
|
18
18
|
#
|
19
19
|
|
20
20
|
class File
|
@@ -43,12 +43,10 @@ class File
|
|
43
43
|
#
|
44
44
|
# @api public
|
45
45
|
#
|
46
|
-
def
|
47
|
-
return enum_for(
|
46
|
+
def self.each_line(path)
|
47
|
+
return enum_for(__method__,path) unless block_given?
|
48
48
|
|
49
|
-
|
50
|
-
file.each_line { |line| yield line.chomp }
|
51
|
-
end
|
49
|
+
foreach(path) { |line| yield line.chomp }
|
52
50
|
end
|
53
51
|
|
54
52
|
#
|
@@ -78,30 +76,38 @@ class File
|
|
78
76
|
#
|
79
77
|
# @api public
|
80
78
|
#
|
81
|
-
def
|
82
|
-
return enum_for(
|
79
|
+
def self.each_row(path,separator=/\s+/)
|
80
|
+
return enum_for(__method__,path,separator) unless block_given?
|
83
81
|
|
84
|
-
|
82
|
+
each_line(path) { |line| yield line.split(separator) }
|
85
83
|
end
|
86
84
|
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
85
|
+
if RUBY_VERSION < '1.9.'
|
86
|
+
#
|
87
|
+
# Writes the given data to a specified path.
|
88
|
+
#
|
89
|
+
# @param [String] path
|
90
|
+
# The path of the file to write to.
|
91
|
+
#
|
92
|
+
# @param [String] data
|
93
|
+
# The data to write to the file.
|
94
|
+
#
|
95
|
+
# @param [Integer] offset
|
96
|
+
# Optional offset to write the data to.
|
97
|
+
#
|
98
|
+
# @return [nil]
|
99
|
+
#
|
100
|
+
# @example
|
101
|
+
# File.write('dump.txt',data)
|
102
|
+
#
|
103
|
+
# @api public
|
104
|
+
#
|
105
|
+
def self.write(path,data,offset=0)
|
106
|
+
open(path,'w') do |file|
|
107
|
+
file.seek(offset)
|
108
|
+
file.write(data)
|
109
|
+
end
|
110
|
+
end
|
105
111
|
end
|
106
112
|
|
107
113
|
#
|
@@ -115,7 +121,7 @@ class File
|
|
115
121
|
#
|
116
122
|
# @api public
|
117
123
|
#
|
118
|
-
def
|
124
|
+
def self.escape_path(path)
|
119
125
|
path = path.to_s
|
120
126
|
|
121
127
|
# remove any \0 characters first
|
@@ -124,7 +130,7 @@ class File
|
|
124
130
|
# remove any home-dir expansions
|
125
131
|
path.gsub!('~',"\\~")
|
126
132
|
|
127
|
-
path =
|
133
|
+
path = expand_path(File.join('/',path))
|
128
134
|
|
129
135
|
# remove the leading slash
|
130
136
|
return path[1..-1]
|
@@ -1,27 +1,26 @@
|
|
1
1
|
#
|
2
|
-
# Copyright (c) 2006-
|
2
|
+
# Copyright (c) 2006-2021 Hal Brodigan (postmodern.mod3 at gmail.com)
|
3
3
|
#
|
4
|
-
# This file is part of
|
4
|
+
# This file is part of ronin-support.
|
5
5
|
#
|
6
|
-
#
|
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
|
-
#
|
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
|
17
|
+
# along with ronin-support. If not, see <https://www.gnu.org/licenses/>.
|
18
18
|
#
|
19
19
|
|
20
20
|
require 'ronin/extensions/resolv'
|
21
21
|
require 'ronin/extensions/regexp'
|
22
22
|
|
23
23
|
require 'ipaddr'
|
24
|
-
require 'strscan'
|
25
24
|
require 'combinatorics/list_comprehension'
|
26
25
|
|
27
26
|
class IPAddr
|
@@ -56,7 +55,7 @@ class IPAddr
|
|
56
55
|
# IPAddr.extract("Host: 127.0.0.1\n\rHost: 10.1.1.1\n\r")
|
57
56
|
# # => ["127.0.0.1", "10.1.1.1"]
|
58
57
|
#
|
59
|
-
# @example Extract only IPv4 addresses from a large amount of text
|
58
|
+
# @example Extract only IPv4 addresses from a large amount of text:
|
60
59
|
# IPAddr.extract(text,:v4) do |ip|
|
61
60
|
# puts ip
|
62
61
|
# end
|
@@ -64,21 +63,16 @@ class IPAddr
|
|
64
63
|
# @api public
|
65
64
|
#
|
66
65
|
def IPAddr.extract(text,version=nil,&block)
|
67
|
-
return enum_for(
|
66
|
+
return enum_for(__method__,text,version).to_a unless block_given?
|
68
67
|
|
69
68
|
regexp = case version
|
70
|
-
when :ipv4, :v4, 4
|
71
|
-
|
72
|
-
|
73
|
-
Regexp::IPv6
|
74
|
-
else
|
75
|
-
Regexp::IP
|
69
|
+
when :ipv4, :v4, 4 then Regexp::IPv4
|
70
|
+
when :ipv6, :v6, 6 then Regexp::IPv6
|
71
|
+
else Regexp::IP
|
76
72
|
end
|
77
73
|
|
78
|
-
|
79
|
-
|
80
|
-
while scanner.skip_until(regexp)
|
81
|
-
yield scanner.matched
|
74
|
+
text.scan(regexp) do |match|
|
75
|
+
yield match
|
82
76
|
end
|
83
77
|
|
84
78
|
return nil
|
@@ -107,7 +101,7 @@ class IPAddr
|
|
107
101
|
# end
|
108
102
|
#
|
109
103
|
# @example Enumerate through a globbed IP range
|
110
|
-
# IPAddr.each('10.1.1-5.*') do |ip|
|
104
|
+
# IPAddr.each('10.1.1-5,10-20.*') do |ip|
|
111
105
|
# puts ip
|
112
106
|
# end
|
113
107
|
#
|
@@ -119,20 +113,20 @@ class IPAddr
|
|
119
113
|
# @api public
|
120
114
|
#
|
121
115
|
def IPAddr.each(cidr_or_glob,&block)
|
122
|
-
unless (cidr_or_glob.include?('*') ||
|
116
|
+
unless (cidr_or_glob.include?('*') ||
|
117
|
+
cidr_or_glob.include?(',') ||
|
118
|
+
cidr_or_glob.include?('-'))
|
123
119
|
return IPAddr.new(cidr_or_glob).each(&block)
|
124
120
|
end
|
125
121
|
|
126
|
-
return enum_for(
|
122
|
+
return enum_for(__method__,cidr_or_glob) unless block
|
127
123
|
|
128
124
|
if cidr_or_glob.include?('::')
|
129
125
|
separator = '::'
|
130
126
|
base = 16
|
131
127
|
|
132
|
-
prefix = if cidr_or_glob.start_with?('::')
|
133
|
-
|
134
|
-
else
|
135
|
-
''
|
128
|
+
prefix = if cidr_or_glob.start_with?('::') then '::'
|
129
|
+
else ''
|
136
130
|
end
|
137
131
|
|
138
132
|
format = lambda { |address|
|
@@ -154,12 +148,16 @@ class IPAddr
|
|
154
148
|
|
155
149
|
ranges << if segment == '*'
|
156
150
|
(1..254)
|
157
|
-
elsif segment.include?('-')
|
158
|
-
start, stop = segment.split('-',2)
|
159
|
-
|
160
|
-
(start.to_i(base)..stop.to_i(base))
|
161
151
|
else
|
162
|
-
segment.
|
152
|
+
segment.split(',').map { |octet|
|
153
|
+
if octet.include?('-')
|
154
|
+
start, stop = octet.split('-',2)
|
155
|
+
|
156
|
+
(start.to_i(base)..stop.to_i(base)).to_a
|
157
|
+
else
|
158
|
+
octet.to_i(base)
|
159
|
+
end
|
160
|
+
}.flatten
|
163
161
|
end
|
164
162
|
end
|
165
163
|
|
@@ -204,7 +202,7 @@ class IPAddr
|
|
204
202
|
# @api public
|
205
203
|
#
|
206
204
|
def each
|
207
|
-
return enum_for(
|
205
|
+
return enum_for(__method__) unless block_given?
|
208
206
|
|
209
207
|
family_mask = MASKS[@family]
|
210
208
|
|
@@ -1,20 +1,20 @@
|
|
1
1
|
#
|
2
|
-
# Copyright (c) 2006-
|
2
|
+
# Copyright (c) 2006-2021 Hal Brodigan (postmodern.mod3 at gmail.com)
|
3
3
|
#
|
4
|
-
# This file is part of
|
4
|
+
# This file is part of ronin-support.
|
5
5
|
#
|
6
|
-
#
|
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
|
-
#
|
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
|
17
|
+
# along with ronin-support. If not, see <https://www.gnu.org/licenses/>.
|
18
18
|
#
|
19
19
|
|
20
20
|
module Kernel
|
@@ -1,20 +1,20 @@
|
|
1
1
|
#
|
2
|
-
# Copyright (c) 2006-
|
2
|
+
# Copyright (c) 2006-2021 Hal Brodigan (postmodern.mod3 at gmail.com)
|
3
3
|
#
|
4
|
-
# This file is part of
|
4
|
+
# This file is part of ronin-support.
|
5
5
|
#
|
6
|
-
#
|
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
|
-
#
|
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
|
17
|
+
# along with ronin-support. If not, see <https://www.gnu.org/licenses/>.
|
18
18
|
#
|
19
19
|
|
20
20
|
require 'ronin/extensions/meta/object'
|
@@ -1,27 +1,37 @@
|
|
1
1
|
#
|
2
|
-
# Copyright (c) 2006-
|
2
|
+
# Copyright (c) 2006-2021 Hal Brodigan (postmodern.mod3 at gmail.com)
|
3
3
|
#
|
4
|
-
# This file is part of
|
4
|
+
# This file is part of ronin-support.
|
5
5
|
#
|
6
|
-
#
|
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
|
-
#
|
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
|
17
|
+
# along with ronin-support. If not, see <https://www.gnu.org/licenses/>.
|
18
18
|
#
|
19
19
|
|
20
20
|
require 'ronin/extensions/resolv'
|
21
21
|
|
22
|
+
#
|
23
|
+
# @since 0.3.0
|
24
|
+
#
|
22
25
|
class Regexp
|
23
26
|
|
27
|
+
# Regular expression for finding words
|
28
|
+
#
|
29
|
+
# @since 0.5.0
|
30
|
+
WORD = /[A-Za-z][A-Za-z'\-\.]*[A-Za-z]/
|
31
|
+
|
24
32
|
# Regular expression for finding a decimal octet (0 - 255)
|
33
|
+
#
|
34
|
+
# @since 0.4.0
|
25
35
|
OCTET = /25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9]/
|
26
36
|
|
27
37
|
# Regular expression for finding MAC addresses in text
|
@@ -64,49 +74,84 @@ class Regexp
|
|
64
74
|
# Regular expression to find email addresses in text
|
65
75
|
EMAIL_ADDR = /#{USER_NAME}\@#{HOST_NAME}/
|
66
76
|
|
77
|
+
# Regular expression to find phone numbers in text
|
78
|
+
#
|
79
|
+
# @since 0.5.0
|
80
|
+
PHONE_NUMBER = /(?:\d[ \-\.]?)?(?:\d{3}[ \-\.]?)?\d{3}[ \-\.]?\d{4}(?:x\d+)?/
|
81
|
+
|
67
82
|
# Regular expression to find deliminators in text
|
83
|
+
#
|
84
|
+
# @since 0.4.0
|
68
85
|
DELIM = /[;&\n\r]/
|
69
86
|
|
70
87
|
# Regular expression to find identifier in text
|
88
|
+
#
|
89
|
+
# @since 0.4.0
|
71
90
|
IDENTIFIER = /[_]*[a-zA-Z]+[a-zA-Z0-9_-]*/
|
72
91
|
|
73
92
|
# Regular expression to find File extensions in text
|
93
|
+
#
|
94
|
+
# @since 0.4.0
|
74
95
|
FILE_EXT = /(?:\.[A-Za-z0-9]+)+/
|
75
96
|
|
76
97
|
# Regular expression to find File names in text
|
98
|
+
#
|
99
|
+
# @since 0.4.0
|
77
100
|
FILE_NAME = /(?:[^\/\\\. ]|\\[\/\\ ])+/
|
78
101
|
|
79
102
|
# Regular expression to find Files in text
|
103
|
+
#
|
104
|
+
# @since 0.4.0
|
80
105
|
FILE = /#{FILE_NAME}(?:#{FILE_EXT})?/
|
81
106
|
|
82
107
|
# Regular expression to find Directory names in text
|
108
|
+
#
|
109
|
+
# @since 0.4.0
|
83
110
|
DIRECTORY = /(?:\.\.|\.|#{FILE})/
|
84
111
|
|
85
112
|
# Regular expression to find local UNIX Paths in text
|
113
|
+
#
|
114
|
+
# @since 0.4.0
|
86
115
|
RELATIVE_UNIX_PATH = /(?:#{DIRECTORY}\/)+#{DIRECTORY}\/?/
|
87
116
|
|
88
117
|
# Regular expression to find absolute UNIX Paths in text
|
118
|
+
#
|
119
|
+
# @since 0.4.0
|
89
120
|
ABSOLUTE_UNIX_PATH = /(?:\/#{FILE})+\/?/
|
90
121
|
|
91
122
|
# Regular expression to find UNIX Paths in text
|
123
|
+
#
|
124
|
+
# @since 0.4.0
|
92
125
|
UNIX_PATH = /#{ABSOLUTE_UNIX_PATH}|#{RELATIVE_UNIX_PATH}/
|
93
126
|
|
94
127
|
# Regular expression to find local Windows Paths in text
|
128
|
+
#
|
129
|
+
# @since 0.4.0
|
95
130
|
RELATIVE_WINDOWS_PATH = /(?:#{DIRECTORY}\\)+#{DIRECTORY}\\?/
|
96
131
|
|
97
132
|
# Regular expression to find absolute Windows Paths in text
|
133
|
+
#
|
134
|
+
# @since 0.4.0
|
98
135
|
ABSOLUTE_WINDOWS_PATH = /[A-Za-z]:(?:\\#{FILE})+\\?/
|
99
136
|
|
100
137
|
# Regular expression to find Windows Paths in text
|
138
|
+
#
|
139
|
+
# @since 0.4.0
|
101
140
|
WINDOWS_PATH = /#{ABSOLUTE_WINDOWS_PATH}|#{RELATIVE_WINDOWS_PATH}/
|
102
141
|
|
103
142
|
# Regular expression to find local Paths in text
|
143
|
+
#
|
144
|
+
# @since 0.4.0
|
104
145
|
RELATIVE_PATH = /#{RELATIVE_UNIX_PATH}|#{RELATIVE_WINDOWS_PATH}/
|
105
146
|
|
106
147
|
# Regular expression to find absolute Paths in text
|
148
|
+
#
|
149
|
+
# @since 0.4.0
|
107
150
|
ABSOLUTE_PATH = /#{ABSOLUTE_UNIX_PATH}|#{ABSOLUTE_WINDOWS_PATH}/
|
108
151
|
|
109
152
|
# Regular expression to find Paths in text
|
153
|
+
#
|
154
|
+
# @since 0.4.0
|
110
155
|
PATH = /#{UNIX_PATH}|#{WINDOWS_PATH}/
|
111
156
|
|
112
157
|
end
|