ronin-support 1.0.0.beta3 → 1.0.1

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.
Files changed (134) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ruby.yml +14 -0
  3. data/.rubocop.yml +109 -0
  4. data/ChangeLog.md +12 -1
  5. data/Gemfile +8 -4
  6. data/README.md +1 -1
  7. data/Rakefile +2 -2
  8. data/examples/ssl_proxy.rb +2 -1
  9. data/examples/tcp_proxy.rb +6 -4
  10. data/lib/ronin/support/archive/tar/writer.rb +2 -2
  11. data/lib/ronin/support/archive/tar.rb +4 -4
  12. data/lib/ronin/support/archive/zip/reader.rb +2 -2
  13. data/lib/ronin/support/binary/array.rb +4 -7
  14. data/lib/ronin/support/binary/bit_flip.rb +7 -1
  15. data/lib/ronin/support/binary/buffer.rb +22 -22
  16. data/lib/ronin/support/binary/byte_slice.rb +17 -17
  17. data/lib/ronin/support/binary/cstring.rb +7 -4
  18. data/lib/ronin/support/binary/ctypes/arch/arm/big_endian.rb +4 -0
  19. data/lib/ronin/support/binary/ctypes/arch/arm.rb +3 -0
  20. data/lib/ronin/support/binary/ctypes/arch/arm64/big_endian.rb +4 -0
  21. data/lib/ronin/support/binary/ctypes/arch/arm64.rb +3 -0
  22. data/lib/ronin/support/binary/ctypes/arch/mips/little_endian.rb +4 -0
  23. data/lib/ronin/support/binary/ctypes/arch/mips.rb +3 -0
  24. data/lib/ronin/support/binary/ctypes/arch/mips64/little_endian.rb +4 -0
  25. data/lib/ronin/support/binary/ctypes/arch/mips64.rb +3 -0
  26. data/lib/ronin/support/binary/ctypes/arch/ppc.rb +3 -0
  27. data/lib/ronin/support/binary/ctypes/arch/ppc64.rb +3 -0
  28. data/lib/ronin/support/binary/ctypes/arch/x86.rb +3 -0
  29. data/lib/ronin/support/binary/ctypes/arch/x86_64.rb +3 -0
  30. data/lib/ronin/support/binary/ctypes/array_type.rb +1 -1
  31. data/lib/ronin/support/binary/ctypes/big_endian.rb +3 -0
  32. data/lib/ronin/support/binary/ctypes/enum_type.rb +2 -2
  33. data/lib/ronin/support/binary/ctypes/little_endian.rb +3 -0
  34. data/lib/ronin/support/binary/ctypes/native.rb +3 -0
  35. data/lib/ronin/support/binary/ctypes/scalar_type.rb +2 -2
  36. data/lib/ronin/support/binary/ctypes/struct_type.rb +3 -3
  37. data/lib/ronin/support/binary/ctypes/type_resolver.rb +7 -8
  38. data/lib/ronin/support/binary/ctypes/unbounded_array_type.rb +1 -1
  39. data/lib/ronin/support/binary/ctypes/union_type.rb +3 -3
  40. data/lib/ronin/support/binary/ctypes.rb +3 -3
  41. data/lib/ronin/support/binary/memory.rb +2 -2
  42. data/lib/ronin/support/binary/packet.rb +3 -0
  43. data/lib/ronin/support/binary/stack.rb +3 -4
  44. data/lib/ronin/support/binary/struct/member.rb +5 -3
  45. data/lib/ronin/support/binary/struct.rb +81 -79
  46. data/lib/ronin/support/binary/template.rb +1 -0
  47. data/lib/ronin/support/binary/unhexdump/parser.rb +11 -11
  48. data/lib/ronin/support/binary/union.rb +22 -22
  49. data/lib/ronin/support/cli/ansi.rb +0 -1
  50. data/lib/ronin/support/cli/io_shell/core_ext/io.rb +1 -1
  51. data/lib/ronin/support/cli/io_shell.rb +4 -4
  52. data/lib/ronin/support/cli/printing.rb +3 -3
  53. data/lib/ronin/support/compression/zlib.rb +1 -1
  54. data/lib/ronin/support/core_ext/enumerable.rb +0 -2
  55. data/lib/ronin/support/core_ext/file.rb +1 -1
  56. data/lib/ronin/support/core_ext/kernel.rb +6 -5
  57. data/lib/ronin/support/core_ext/string.rb +2 -2
  58. data/lib/ronin/support/crypto/cert.rb +11 -15
  59. data/lib/ronin/support/crypto/cert_chain.rb +1 -1
  60. data/lib/ronin/support/crypto/cipher/aes.rb +3 -0
  61. data/lib/ronin/support/crypto/cipher/aes128.rb +4 -1
  62. data/lib/ronin/support/crypto/cipher/aes256.rb +4 -1
  63. data/lib/ronin/support/crypto/cipher.rb +1 -1
  64. data/lib/ronin/support/crypto/core_ext/file.rb +1 -1
  65. data/lib/ronin/support/crypto/key/methods.rb +4 -1
  66. data/lib/ronin/support/crypto/key.rb +5 -2
  67. data/lib/ronin/support/crypto/openssl.rb +1 -1
  68. data/lib/ronin/support/crypto.rb +0 -1
  69. data/lib/ronin/support/encoding/base16.rb +1 -1
  70. data/lib/ronin/support/encoding/base32.rb +28 -17
  71. data/lib/ronin/support/encoding/c/core_ext/integer.rb +1 -1
  72. data/lib/ronin/support/encoding/c.rb +4 -4
  73. data/lib/ronin/support/encoding/hex.rb +2 -2
  74. data/lib/ronin/support/encoding/js/core_ext/integer.rb +1 -1
  75. data/lib/ronin/support/encoding/js.rb +4 -4
  76. data/lib/ronin/support/encoding/powershell/core_ext/integer.rb +2 -2
  77. data/lib/ronin/support/encoding/powershell.rb +4 -5
  78. data/lib/ronin/support/encoding/ruby.rb +4 -4
  79. data/lib/ronin/support/encoding/shell/core_ext/integer.rb +2 -2
  80. data/lib/ronin/support/encoding/shell.rb +3 -3
  81. data/lib/ronin/support/encoding/sql.rb +1 -1
  82. data/lib/ronin/support/encoding/xml.rb +2 -2
  83. data/lib/ronin/support/encoding.rb +95 -0
  84. data/lib/ronin/support/network/asn/list.rb +6 -1
  85. data/lib/ronin/support/network/asn/record.rb +3 -0
  86. data/lib/ronin/support/network/asn/record_set.rb +3 -0
  87. data/lib/ronin/support/network/asn.rb +167 -6
  88. data/lib/ronin/support/network/dns/resolver.rb +3 -0
  89. data/lib/ronin/support/network/domain.rb +21 -21
  90. data/lib/ronin/support/network/email_address.rb +1 -5
  91. data/lib/ronin/support/network/esmtp/mixin.rb +1 -0
  92. data/lib/ronin/support/network/ftp/mixin.rb +1 -1
  93. data/lib/ronin/support/network/host.rb +75 -47
  94. data/lib/ronin/support/network/http/core_ext.rb +1 -1
  95. data/lib/ronin/support/network/http.rb +317 -80
  96. data/lib/ronin/support/network/ip.rb +8 -10
  97. data/lib/ronin/support/network/ip_range/cidr.rb +1 -5
  98. data/lib/ronin/support/network/ip_range/glob.rb +1 -0
  99. data/lib/ronin/support/network/ip_range/range.rb +1 -1
  100. data/lib/ronin/support/network/ip_range.rb +1 -3
  101. data/lib/ronin/support/network/proxy.rb +4 -4
  102. data/lib/ronin/support/network/public_suffix/list.rb +10 -8
  103. data/lib/ronin/support/network/public_suffix/suffix_set.rb +3 -0
  104. data/lib/ronin/support/network/public_suffix.rb +9 -4
  105. data/lib/ronin/support/network/smtp/email.rb +0 -9
  106. data/lib/ronin/support/network/smtp/mixin.rb +2 -2
  107. data/lib/ronin/support/network/ssl/local_cert.rb +1 -3
  108. data/lib/ronin/support/network/ssl/mixin.rb +13 -13
  109. data/lib/ronin/support/network/ssl/openssl.rb +1 -1
  110. data/lib/ronin/support/network/ssl/proxy.rb +14 -16
  111. data/lib/ronin/support/network/ssl.rb +4 -2
  112. data/lib/ronin/support/network/tcp/proxy.rb +3 -3
  113. data/lib/ronin/support/network/tcp.rb +10 -12
  114. data/lib/ronin/support/network/telnet/mixin.rb +14 -14
  115. data/lib/ronin/support/network/tld/list.rb +2 -1
  116. data/lib/ronin/support/network/tld.rb +7 -4
  117. data/lib/ronin/support/network/tls/proxy.rb +1 -1
  118. data/lib/ronin/support/network/tls.rb +0 -2
  119. data/lib/ronin/support/network/udp/proxy.rb +5 -5
  120. data/lib/ronin/support/network/udp.rb +14 -16
  121. data/lib/ronin/support/path.rb +3 -3
  122. data/lib/ronin/support/text/erb/mixin.rb +3 -0
  123. data/lib/ronin/support/text/homoglyph/table.rb +3 -3
  124. data/lib/ronin/support/text/patterns/credentials.rb +2 -2
  125. data/lib/ronin/support/text/patterns/crypto.rb +1 -1
  126. data/lib/ronin/support/text/patterns/file_system.rb +3 -4
  127. data/lib/ronin/support/text/patterns/network.rb +10 -10
  128. data/lib/ronin/support/text/patterns/numeric.rb +1 -1
  129. data/lib/ronin/support/text/patterns/source_code.rb +2 -2
  130. data/lib/ronin/support/text/random.rb +2 -2
  131. data/lib/ronin/support/text/typo/generator.rb +2 -2
  132. data/lib/ronin/support/version.rb +1 -1
  133. data/ronin-support.gemspec +6 -5
  134. metadata +3 -2
@@ -163,7 +163,7 @@ module Ronin
163
163
  if zero_pad then "&#x%.7x;" % byte
164
164
  else "&#x%.2x;" % byte
165
165
  end
166
- when
166
+ else
167
167
  raise(ArgumentError,"case (#{kwargs[:case].inspect}) keyword argument must be either :lower, :upper, or nil")
168
168
  end
169
169
  else
@@ -320,7 +320,7 @@ module Ronin
320
320
  ESCAPED_CHARS.fetch(named_char.downcase)
321
321
  elsif (decimal_char = scanner.scan(/&#\d+;/))
322
322
  decimal_char[2..-2].to_i.chr(Encoding::UTF_8)
323
- elsif (hex_char = scanner.scan(/&#x[a-f0-9]+;/i))
323
+ elsif (hex_char = scanner.scan(/&#x[a-f0-9]+;/i))
324
324
  hex_char[3..-2].to_i(16).chr(Encoding::UTF_8)
325
325
  else
326
326
  scanner.getch
@@ -38,6 +38,101 @@ module Ronin
38
38
  #
39
39
  # Contains additional encoding/decoding modules.
40
40
  #
41
+ # ## Core-Ext Methods
42
+ #
43
+ # * {Integer#c_encode}
44
+ # * {Integer#c_escape}
45
+ # * {Integer#hex_encode}
46
+ # * {Integer#hex_escape}
47
+ # * {Integer#hex_int}
48
+ # * {Integer#html_encode}
49
+ # * {Integer#html_escape}
50
+ # * {Integer#http_encode}
51
+ # * {Integer#http_escape}
52
+ # * {Integer#js_encode}
53
+ # * {Integer#js_escape}
54
+ # * {Integer#powershell_encode}
55
+ # * {Integer#powershell_escape}
56
+ # * {Integer#shell_encode}
57
+ # * {Integer#shell_escape}
58
+ # * {Integer#uri_encode}
59
+ # * {Integer#uri_escape}
60
+ # * {Integer#uri_form_encode}
61
+ # * {Integer#uri_form_escape}
62
+ # * {Integer#xml_encode}
63
+ # * {Integer#xml_escape}
64
+ # * {String#base16_decode}
65
+ # * {String#base16_encode}
66
+ # * {String#base32_decode}
67
+ # * {String#base32_encode}
68
+ # * {String#base64_decode}
69
+ # * {String#base64_encode}
70
+ # * {String#c_encode}
71
+ # * {String#c_escape}
72
+ # * {String#c_string}
73
+ # * {String#c_unescape}
74
+ # * {String#c_unquote}
75
+ # * {String#hex_decode}
76
+ # * {String#hex_encode}
77
+ # * {String#hex_escape}
78
+ # * {String#hex_string}
79
+ # * {String#hex_unescape}
80
+ # * {String#hex_unquote}
81
+ # * {String#html_decode}
82
+ # * {String#html_encode}
83
+ # * {String#html_escape}
84
+ # * {String#html_unescape}
85
+ # * {String#http_decode}
86
+ # * {String#http_encode}
87
+ # * {String#http_escape}
88
+ # * {String#http_unescape}
89
+ # * {String#js_decode}
90
+ # * {String#js_encode}
91
+ # * {String#js_escape}
92
+ # * {String#js_string}
93
+ # * {String#js_unescape}
94
+ # * {String#js_unquote}
95
+ # * {String#powershell_decode}
96
+ # * {String#powershell_encode}
97
+ # * {String#powershell_escape}
98
+ # * {String#powershell_string}
99
+ # * {String#powershell_unescape}
100
+ # * {String#powershell_unquote}
101
+ # * {String#punycode_decode}
102
+ # * {String#punycode_encode}
103
+ # * {String#quoted_printable_escape}
104
+ # * {String#quoted_printable_unescape}
105
+ # * {String#ruby_decode}
106
+ # * {String#ruby_encode}
107
+ # * {String#ruby_escape}
108
+ # * {String#ruby_string}
109
+ # * {String#ruby_unescape}
110
+ # * {String#ruby_unquote}
111
+ # * {String#shell_decode}
112
+ # * {String#shell_encode}
113
+ # * {String#shell_escape}
114
+ # * {String#shell_string}
115
+ # * {String#shell_unescape}
116
+ # * {String#shell_unquote}
117
+ # * {String#sql_decode}
118
+ # * {String#sql_encode}
119
+ # * {String#sql_escape}
120
+ # * {String#sql_unescape}
121
+ # * {String#uri_decode}
122
+ # * {String#uri_encode}
123
+ # * {String#uri_escape}
124
+ # * {String#uri_form_decode}
125
+ # * {String#uri_form_encode}
126
+ # * {String#uri_form_escape}
127
+ # * {String#uri_form_unescape}
128
+ # * {String#uri_unescape}
129
+ # * {String#uu_decode}
130
+ # * {String#uu_encode}
131
+ # * {String#xml_decode}
132
+ # * {String#xml_encode}
133
+ # * {String#xml_escape}
134
+ # * {String#xml_unescape}
135
+ #
41
136
  # @since 1.0.0
42
137
  #
43
138
  class Encoding < ::Encoding
@@ -145,6 +145,7 @@ module Ronin
145
145
  begin
146
146
  download(url: url, path: path)
147
147
  rescue
148
+ # ignore any network failures
148
149
  end
149
150
  end
150
151
  end
@@ -176,8 +177,10 @@ module Ronin
176
177
  line.chomp!
177
178
 
178
179
  first, last, number, country_code, name = line.split("\t",5)
180
+
179
181
  range = IPRange::Range.new(first,last)
180
182
  number = number.to_i
183
+
181
184
  country_code = nil if country_code == 'None'
182
185
  name = nil if name == 'Not routed'
183
186
 
@@ -219,7 +222,9 @@ module Ronin
219
222
  prefixes = if record.range.ipv6? then @ipv6_prefixes
220
223
  else @ipv4_prefixes
221
224
  end
222
- (prefixes[record.range.prefix] ||= []) << record
225
+
226
+ records = (prefixes[record.range.prefix] ||= [])
227
+ records << record
223
228
  return self
224
229
  end
225
230
 
@@ -20,6 +20,9 @@ module Ronin
20
20
  module Support
21
21
  module Network
22
22
  module ASN
23
+ #
24
+ # Represents an individual ASN record.
25
+ #
23
26
  class Record
24
27
 
25
28
  # The ASN number.
@@ -22,6 +22,9 @@ module Ronin
22
22
  module Support
23
23
  module Network
24
24
  module ASN
25
+ #
26
+ # A sub-set of ASN records.
27
+ #
25
28
  class RecordSet
26
29
 
27
30
  include Enumerable
@@ -27,6 +27,83 @@ module Ronin
27
27
  #
28
28
  # Handles Autonomous System Numbers (ASN).
29
29
  #
30
+ # ## Example
31
+ #
32
+ # Query the ASN record for a given IP address:
33
+ #
34
+ # Network::ASN.query('4.2.2.1')
35
+ # # =>
36
+ # # #<Ronin::Support::Network::ASN::DNSRecord:0x00007f34424f4ac0
37
+ # # @country_code="US",
38
+ # # @name=nil,
39
+ # # @number=3356,
40
+ # # @range=#<Ronin::Support::Network::IPRange::CIDR: 4.0.0.0/9>>
41
+ #
42
+ # Query all ASN records for the given ISP name:
43
+ #
44
+ # Network::ASN.list.name('LEVEL3').to_a
45
+ # # => [#<Ronin::Support::Network::ASN::Record:0x00007f344164ed18
46
+ # # @country_code="US",
47
+ # # @name="LEVEL3",
48
+ # # @number=3356,
49
+ # # @range=#<Ronin::Support::Network::IPRange::Range: 4.0.0.0 - 4.23.87.255>>,
50
+ # # #<Ronin::Support::Network::ASN::Record:0x00007f344164d828
51
+ # # @country_code="US",
52
+ # # @name="LEVEL3",
53
+ # # @number=3356,
54
+ # # @range=#<Ronin::Support::Network::IPRange::Range: 4.23.90.0 - 4.23.91.255>>,
55
+ # # ...]
56
+ #
57
+ # Query all IPv6 ASN records for a given company:
58
+ #
59
+ # Network::ASN.list.name('GOOGLE').ipv6
60
+ # # =>
61
+ # # [#<Ronin::Support::Network::ASN::Record:0x00007fc45b411500
62
+ # # @country_code="US",
63
+ # # @name="GOOGLE",
64
+ # # @number=15169,
65
+ # # @range=
66
+ # # #<Ronin::Support::Network::IPRange::Range: 2001:4860:: - 2001:4860:1024:ffff:ffff:ffff:ffff:ffff>>,
67
+ # # #<Ronin::Support::Network::ASN::Record:0x00007fc45b428d68
68
+ # # @country_code="US",
69
+ # # @name="GOOGLE",
70
+ # # @number=15169,
71
+ # # @range=
72
+ # # #<Ronin::Support::Network::IPRange::Range: 2001:4860:1026:: - 2001:4860:4804:ffff:ffff:ffff:ffff:ffff>>,
73
+ # # #<Ronin::Support::Network::ASN::Record:0x00007fc45b44be08
74
+ # # @country_code="US",
75
+ # # @name="GOOGLE",
76
+ # # @number=15169,
77
+ # # @range=
78
+ # # #<Ronin::Support::Network::IPRange::Range: 2001:4860:4806:: - 2001:4860:4864:ffff:ffff:ffff:ffff:ffff>>,
79
+ # # #<Ronin::Support::Network::ASN::Record:0x00007fc45b4562e0
80
+ # # @country_code="US",
81
+ # # @name="GOOGLE",
82
+ # # @number=15169,
83
+ # # @range=
84
+ # # #<Ronin::Support::Network::IPRange::Range: 2001:4860:4865:: - 2001:4860:ffff:ffff:ffff:ffff:ffff:ffff>>]
85
+ #
86
+ # Return all ASN numbers for a country:
87
+ #
88
+ # Network::ASN.list.country('NZ').numbers
89
+ # # => #<Set:
90
+ # # {45177,
91
+ # # 55759,
92
+ # # 55850,
93
+ # # 9500,
94
+ # # ...}>
95
+ #
96
+ # Return all ASN names for a country:
97
+ #
98
+ # Network::ASN.list.country_code('NZ').names
99
+ # # Network::ASN.list.country('NZ').names
100
+ # # =>
101
+ # # #<Set:
102
+ # # {"DEVOLI-AS-AP Devoli",
103
+ # # "MFAT-NET-NZ 195 Lambton Quay",
104
+ # # "MERCURYNZ-AS-AP Mercury NZ Limited",
105
+ # # ...}>
106
+ #
30
107
  # @api public
31
108
  #
32
109
  # @since 1.0.0
@@ -45,6 +122,15 @@ module Ronin
45
122
  # Performs rDNS queries using `*.nmap.asn.cymru.com` for IPv4
46
123
  # addresses and `*.nmap6.asn.cymru.com` for IPv6 addresses.
47
124
  #
125
+ # @example
126
+ # Network::ASN.query('4.2.2.1')
127
+ # # =>
128
+ # # #<Ronin::Support::Network::ASN::DNSRecord:0x00007f34424f4ac0
129
+ # # @country_code="US",
130
+ # # @name=nil,
131
+ # # @number=3356,
132
+ # # @range=#<Ronin::Support::Network::IPRange::CIDR: 4.0.0.0/9>>
133
+ #
48
134
  def self.query(ip)
49
135
  ip = IPAddr.new(ip) unless ip.kind_of?(IPAddr)
50
136
 
@@ -62,8 +148,9 @@ module Ronin
62
148
  return nil
63
149
  end
64
150
 
65
- asn, cidr_range, country_code, *rest = string.split(' | ',5)
66
- asn = asn.to_i
151
+ asn, cidr_range, country_code, *_rest = string.split(' | ',5)
152
+
153
+ asn = asn.to_i
67
154
  cidr_range = IPRange::CIDR.new(cidr_range)
68
155
 
69
156
  return DNSRecord.new(asn,cidr_range,country_code)
@@ -76,11 +163,85 @@ module Ronin
76
163
  # @return [List]
77
164
  # The loaded list file.
78
165
  #
166
+ # @note
167
+ # The first access of {list} will take a while, as the entire ASN
168
+ # list will need to be downloaded and parsed.
169
+ #
170
+ # @example Query the ASN record for the given IP address:
171
+ # Network::ASN.list.ip('4.2.2.1')
172
+ # # =>
173
+ # # #<Ronin::Support::Network::ASN::Record:0x00007fc46207f818
174
+ # # @country_code="US",
175
+ # # @name="LEVEL3",
176
+ # # @number=3356,
177
+ # # @range=#<Ronin::Support::Network::IPRange::Range: 4.0.0.0 - 4.23.87.255>>
178
+ #
179
+ # @example Query all ASN records for the given ISP name:
180
+ # Network::ASN.list.name('LEVEL3').to_a
181
+ # # => [#<Ronin::Support::Network::ASN::Record:0x00007f344164ed18
182
+ # # @country_code="US",
183
+ # # @name="LEVEL3",
184
+ # # @number=3356,
185
+ # # @range=#<Ronin::Support::Network::IPRange::Range: 4.0.0.0 - 4.23.87.255>>,
186
+ # # #<Ronin::Support::Network::ASN::Record:0x00007f344164d828
187
+ # # @country_code="US",
188
+ # # @name="LEVEL3",
189
+ # # @number=3356,
190
+ # # @range=#<Ronin::Support::Network::IPRange::Range: 4.23.90.0 - 4.23.91.255>>,
191
+ # # ...]
192
+ #
193
+ # @example Query all IPv6 ASN records for a given company:
194
+ # Network::ASN.list.name('GOOGLE').ipv6
195
+ # # =>
196
+ # # [#<Ronin::Support::Network::ASN::Record:0x00007fc45b411500
197
+ # # @country_code="US",
198
+ # # @name="GOOGLE",
199
+ # # @number=15169,
200
+ # # @range=
201
+ # # #<Ronin::Support::Network::IPRange::Range: 2001:4860:: - 2001:4860:1024:ffff:ffff:ffff:ffff:ffff>>,
202
+ # # #<Ronin::Support::Network::ASN::Record:0x00007fc45b428d68
203
+ # # @country_code="US",
204
+ # # @name="GOOGLE",
205
+ # # @number=15169,
206
+ # # @range=
207
+ # # #<Ronin::Support::Network::IPRange::Range: 2001:4860:1026:: - 2001:4860:4804:ffff:ffff:ffff:ffff:ffff>>,
208
+ # # #<Ronin::Support::Network::ASN::Record:0x00007fc45b44be08
209
+ # # @country_code="US",
210
+ # # @name="GOOGLE",
211
+ # # @number=15169,
212
+ # # @range=
213
+ # # #<Ronin::Support::Network::IPRange::Range: 2001:4860:4806:: - 2001:4860:4864:ffff:ffff:ffff:ffff:ffff>>,
214
+ # # #<Ronin::Support::Network::ASN::Record:0x00007fc45b4562e0
215
+ # # @country_code="US",
216
+ # # @name="GOOGLE",
217
+ # # @number=15169,
218
+ # # @range=
219
+ # # #<Ronin::Support::Network::IPRange::Range: 2001:4860:4865:: - 2001:4860:ffff:ffff:ffff:ffff:ffff:ffff>>]
220
+ #
221
+ # @example Return all ASN numbers for a country:
222
+ # Network::ASN.list.country('NZ').numbers
223
+ # # => #<Set:
224
+ # # {45177,
225
+ # # 55759,
226
+ # # 55850,
227
+ # # 9500,
228
+ # # ...}>
229
+ #
230
+ # @example Return all ASN names for a country:
231
+ # Network::ASN.list.country_code('NZ').names
232
+ # # Network::ASN.list.country('NZ').names
233
+ # # =>
234
+ # # #<Set:
235
+ # # {"DEVOLI-AS-AP Devoli",
236
+ # # "MFAT-NET-NZ 195 Lambton Quay",
237
+ # # "MERCURYNZ-AS-AP Mercury NZ Limited",
238
+ # # ...}>
239
+ #
79
240
  def self.list
80
- @list ||= (
81
- List.update
82
- List.load_file
83
- )
241
+ @list ||= begin
242
+ List.update
243
+ List.load_file
244
+ end
84
245
  end
85
246
  end
86
247
  end
@@ -90,6 +90,7 @@ module Ronin
90
90
  begin
91
91
  @resolver.getaddress(host).to_s
92
92
  rescue Resolv::ResolvError
93
+ # ignore any Resolv failures
93
94
  end
94
95
  end
95
96
 
@@ -123,6 +124,7 @@ module Ronin
123
124
  def get_name(ip)
124
125
  @resolver.getname(ip).to_s
125
126
  rescue Resolv::ResolvError
127
+ # ignore any Resolv failures
126
128
  end
127
129
 
128
130
  #
@@ -189,6 +191,7 @@ module Ronin
189
191
  begin
190
192
  @resolver.getresource(name,record_class)
191
193
  rescue Resolv::ResolvError
194
+ # ignore any Resolv failures
192
195
  end
193
196
  end
194
197
 
@@ -33,31 +33,31 @@ module Ronin
33
33
  # # => #<Ronin::Support::Network::IP: 192.30.255.113>
34
34
  # domain.mailservers
35
35
  # # => ["aspmx.l.google.com",
36
- # "alt3.aspmx.l.google.com",
37
- # "alt4.aspmx.l.google.com",
38
- # "alt1.aspmx.l.google.com",
39
- # "alt2.aspmx.l.google.com"]
36
+ # # "alt3.aspmx.l.google.com",
37
+ # # "alt4.aspmx.l.google.com",
38
+ # # "alt1.aspmx.l.google.com",
39
+ # # "alt2.aspmx.l.google.com"]
40
40
  # domain.nameservers
41
41
  # # => ["dns1.p08.nsone.net",
42
- # "dns2.p08.nsone.net",
43
- # "dns3.p08.nsone.net",
44
- # "dns4.p08.nsone.net",
45
- # "ns-1283.awsdns-32.org",
46
- # "ns-1707.awsdns-21.co.uk",
47
- # "ns-421.awsdns-52.com",
48
- # "ns-520.awsdns-01.net"]
42
+ # # "dns2.p08.nsone.net",
43
+ # # "dns3.p08.nsone.net",
44
+ # # "dns4.p08.nsone.net",
45
+ # # "ns-1283.awsdns-32.org",
46
+ # # "ns-1707.awsdns-21.co.uk",
47
+ # # "ns-421.awsdns-52.com",
48
+ # # "ns-520.awsdns-01.net"]
49
49
  # domain.txt_strings
50
50
  # # => ["v=spf1 ip4:192.30.252.0/22 include:_netblocks.google.com include:_netblocks2.google.com include:_netblocks3.google.com include:spf.protection.outlook.com include:mail.zendesk.com include:_spf.salesforce.com include:servers.mcsv.net ip4:166.78.69.169 ip4:1",
51
- # "66.78.69.170 ip4:166.78.71.131 ip4:167.89.101.2 ip4:167.89.101.192/28 ip4:192.254.112.60 ip4:192.254.112.98/31 ip4:192.254.113.10 ip4:192.254.113.101 ip4:192.254.114.176 ip4:62.253.227.114 ~all",
52
- # "MS=6BF03E6AF5CB689E315FB6199603BABF2C88D805",
53
- # "MS=ms44452932",
54
- # "atlassian-domain-verification=jjgw98AKv2aeoYFxiL/VFaoyPkn3undEssTRuMg6C/3Fp/iqhkV4HVV7WjYlVeF8",
55
- # "stripe-verification=f88ef17321660a01bab1660454192e014defa29ba7b8de9633c69d6b4912217f",
56
- # "google-site-verification=UTM-3akMgubp6tQtgEuAkYNYLyYAvpTnnSrDMWoDR3o",
57
- # "MS=ms58704441",
58
- # "docusign=087098e3-3d46-47b7-9b4e-8a23028154cd",
59
- # "adobe-idp-site-verification=b92c9e999aef825edc36e0a3d847d2dbad5b2fc0e05c79ddd7a16139b48ecf4b",
60
- # "apple-domain-verification=RyQhdzTl6Z6x8ZP4"]
51
+ # # "66.78.69.170 ip4:166.78.71.131 ip4:167.89.101.2 ip4:167.89.101.192/28 ip4:192.254.112.60 ip4:192.254.112.98/31 ip4:192.254.113.10 ip4:192.254.113.101 ip4:192.254.114.176 ip4:62.253.227.114 ~all",
52
+ # # "MS=6BF03E6AF5CB689E315FB6199603BABF2C88D805",
53
+ # # "MS=ms44452932",
54
+ # # "atlassian-domain-verification=jjgw98AKv2aeoYFxiL/VFaoyPkn3undEssTRuMg6C/3Fp/iqhkV4HVV7WjYlVeF8",
55
+ # # "stripe-verification=f88ef17321660a01bab1660454192e014defa29ba7b8de9633c69d6b4912217f",
56
+ # # "google-site-verification=UTM-3akMgubp6tQtgEuAkYNYLyYAvpTnnSrDMWoDR3o",
57
+ # # "MS=ms58704441",
58
+ # # "docusign=087098e3-3d46-47b7-9b4e-8a23028154cd",
59
+ # # "adobe-idp-site-verification=b92c9e999aef825edc36e0a3d847d2dbad5b2fc0e05c79ddd7a16139b48ecf4b",
60
+ # # "apple-domain-verification=RyQhdzTl6Z6x8ZP4"]
61
61
  #
62
62
  # @api public
63
63
  #
@@ -232,8 +232,6 @@ module Ronin
232
232
  return new(name: name, **parse_address(address))
233
233
  end
234
234
 
235
- private
236
-
237
235
  #
238
236
  # Parses the address portion of an email address.
239
237
  #
@@ -326,8 +324,6 @@ module Ronin
326
324
  return {domain: domain, address: address}
327
325
  end
328
326
 
329
- public
330
-
331
327
  # Email address de-obfuscation rules.
332
328
  DEOBFUSCATIONS = {
333
329
  /\s+@\s+/ => '@',
@@ -425,7 +421,7 @@ module Ronin
425
421
 
426
422
  # Email address obfuscation rules.
427
423
  OBFUSCATIONS = [
428
- [/\@/, {'@' => ' @ ' }],
424
+ [/\@/, {'@' => ' @ ' }],
429
425
  [/\@/, {'@' => ' AT ' }],
430
426
  [/\@/, {'@' => ' at ' }],
431
427
  [/\@/, {'@' => '[AT]' }],
@@ -104,6 +104,7 @@ module Ronin
104
104
  end
105
105
  else
106
106
  smtp = smtp_connect(host,**kwargs)
107
+
107
108
  smtp.esmtp = true
108
109
  return smtp
109
110
  end
@@ -86,8 +86,8 @@ module Ronin
86
86
  account: nil,
87
87
  passive: true)
88
88
  host = DNS::IDN.to_ascii(host)
89
+ ftp = Net::FTP.new
89
90
 
90
- ftp = Net::FTP.new
91
91
  ftp.connect(host,port)
92
92
  ftp.login(user,password,account)
93
93
  ftp.passive = passive