ronin-support 1.0.0.beta3 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
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