ronin-support 0.5.1 → 1.0.0.beta1
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.
- checksums.yaml +7 -0
- data/.editorconfig +11 -0
- data/.github/workflows/ruby.yml +27 -0
- data/.gitignore +7 -6
- data/.mailmap +1 -0
- data/.ruby-version +1 -0
- data/.yardopts +1 -2
- data/ChangeLog.md +533 -137
- data/Gemfile +20 -20
- data/README.md +137 -61
- data/Rakefile +29 -10
- data/data/text/homoglyphs/ascii.txt +8 -0
- data/data/text/homoglyphs/cyrillic.txt +33 -0
- data/data/text/homoglyphs/full_width.txt +81 -0
- data/data/text/homoglyphs/greek.txt +21 -0
- data/data/text/homoglyphs/latin_numbers.txt +14 -0
- data/data/text/homoglyphs/punctuation.txt +7 -0
- data/data/text/patterns/network/public_suffix.rb.erb +44 -0
- data/examples/ssl_proxy.rb +38 -0
- data/examples/tcp_proxy.rb +41 -0
- data/gemspec.yml +25 -15
- data/lib/ronin/support/archive/core_ext/file.rb +118 -0
- data/lib/ronin/{formatting/sql.rb → support/archive/core_ext.rb} +6 -7
- data/lib/ronin/support/archive/mixin.rb +213 -0
- data/lib/ronin/support/archive/tar/reader.rb +135 -0
- data/lib/ronin/support/archive/tar/writer.rb +197 -0
- data/lib/ronin/support/archive/tar.rb +155 -0
- data/lib/ronin/support/archive/zip/reader/entry.rb +134 -0
- data/lib/ronin/support/archive/zip/reader/statistics.rb +76 -0
- data/lib/ronin/support/archive/zip/reader.rb +273 -0
- data/lib/ronin/support/archive/zip/writer.rb +175 -0
- data/lib/ronin/support/archive/zip.rb +105 -0
- data/lib/ronin/support/archive.rb +211 -0
- data/lib/ronin/support/binary/array.rb +255 -0
- data/lib/ronin/support/binary/bit_flip.rb +147 -0
- data/lib/ronin/support/binary/buffer.rb +2027 -0
- data/lib/ronin/support/binary/byte_slice.rb +324 -0
- data/lib/ronin/support/binary/core_ext/array.rb +75 -0
- data/lib/ronin/support/binary/core_ext/float.rb +80 -0
- data/lib/ronin/support/binary/core_ext/integer.rb +305 -0
- data/lib/ronin/support/binary/core_ext/io.rb +38 -0
- data/lib/ronin/support/binary/core_ext/string.rb +115 -0
- data/lib/ronin/{formatting/extensions/text.rb → support/binary/core_ext.rb} +9 -9
- data/lib/ronin/support/binary/cstring.rb +259 -0
- data/lib/ronin/support/binary/ctypes/aggregate_type.rb +98 -0
- data/lib/ronin/support/binary/ctypes/arch/arm/big_endian.rb +77 -0
- data/lib/ronin/support/binary/ctypes/arch/arm.rb +75 -0
- data/lib/ronin/support/binary/ctypes/arch/arm64/big_endian.rb +77 -0
- data/lib/ronin/support/binary/ctypes/arch/arm64.rb +75 -0
- data/lib/ronin/support/binary/ctypes/arch/mips/little_endian.rb +77 -0
- data/lib/ronin/support/binary/ctypes/arch/mips.rb +75 -0
- data/lib/ronin/support/binary/ctypes/arch/mips64/little_endian.rb +77 -0
- data/lib/ronin/support/binary/ctypes/arch/mips64.rb +75 -0
- data/lib/ronin/support/binary/ctypes/arch/ppc.rb +75 -0
- data/lib/ronin/support/binary/ctypes/arch/ppc64.rb +75 -0
- data/lib/ronin/support/binary/ctypes/arch/x86.rb +75 -0
- data/lib/ronin/support/binary/ctypes/arch/x86_64.rb +75 -0
- data/lib/ronin/support/binary/ctypes/arch.rb +30 -0
- data/lib/ronin/support/binary/ctypes/array_object_type.rb +164 -0
- data/lib/ronin/support/binary/ctypes/array_type.rb +232 -0
- data/lib/ronin/support/binary/ctypes/big_endian.rb +195 -0
- data/lib/ronin/support/binary/ctypes/char_type.rb +59 -0
- data/lib/ronin/support/binary/ctypes/char_types.rb +39 -0
- data/lib/ronin/support/binary/ctypes/enum_type.rb +181 -0
- data/lib/ronin/support/binary/ctypes/float32_type.rb +50 -0
- data/lib/ronin/support/binary/ctypes/float64_type.rb +50 -0
- data/lib/ronin/support/binary/ctypes/float_type.rb +62 -0
- data/lib/ronin/support/binary/ctypes/int16_type.rb +50 -0
- data/lib/ronin/support/binary/ctypes/int32_type.rb +50 -0
- data/lib/ronin/support/binary/ctypes/int64_type.rb +50 -0
- data/lib/ronin/support/binary/ctypes/int8_type.rb +41 -0
- data/lib/ronin/support/binary/ctypes/int_type.rb +62 -0
- data/lib/ronin/support/binary/ctypes/little_endian.rb +195 -0
- data/lib/ronin/support/binary/ctypes/mixin.rb +135 -0
- data/lib/ronin/support/binary/ctypes/native.rb +205 -0
- data/lib/ronin/support/binary/ctypes/network.rb +29 -0
- data/lib/ronin/support/binary/ctypes/object_type.rb +55 -0
- data/lib/ronin/support/binary/ctypes/os/bsd.rb +65 -0
- data/lib/ronin/support/binary/ctypes/os/freebsd.rb +215 -0
- data/lib/ronin/support/binary/ctypes/os/linux.rb +193 -0
- data/lib/ronin/support/binary/ctypes/os/macos.rb +151 -0
- data/lib/ronin/support/binary/ctypes/os/netbsd.rb +147 -0
- data/lib/ronin/support/binary/ctypes/os/openbsd.rb +168 -0
- data/lib/ronin/support/binary/ctypes/os/unix.rb +78 -0
- data/lib/ronin/support/binary/ctypes/os/windows.rb +125 -0
- data/lib/ronin/support/binary/ctypes/os.rb +125 -0
- data/lib/ronin/support/binary/ctypes/scalar_type.rb +200 -0
- data/lib/ronin/support/binary/ctypes/string_type.rb +143 -0
- data/lib/ronin/support/binary/ctypes/struct_object_type.rb +173 -0
- data/lib/ronin/support/binary/ctypes/struct_type.rb +359 -0
- data/lib/ronin/support/binary/ctypes/type.rb +193 -0
- data/lib/ronin/support/binary/ctypes/type_resolver.rb +206 -0
- data/lib/ronin/support/binary/ctypes/uint16_type.rb +50 -0
- data/lib/ronin/support/binary/ctypes/uint32_type.rb +50 -0
- data/lib/ronin/support/binary/ctypes/uint64_type.rb +50 -0
- data/lib/ronin/support/binary/ctypes/uint8_type.rb +41 -0
- data/lib/ronin/support/binary/ctypes/uint_type.rb +59 -0
- data/lib/ronin/support/binary/ctypes/unbounded_array_type.rb +258 -0
- data/lib/ronin/support/binary/ctypes/union_object_type.rb +173 -0
- data/lib/ronin/support/binary/ctypes/union_type.rb +261 -0
- data/lib/ronin/support/binary/ctypes.rb +462 -0
- data/lib/ronin/support/binary/hexdump/core_ext/file.rb +118 -0
- data/lib/ronin/support/binary/hexdump/core_ext/string.rb +115 -0
- data/lib/ronin/support/binary/hexdump/core_ext.rb +20 -0
- data/lib/ronin/support/binary/hexdump/parser.rb +492 -0
- data/lib/ronin/support/binary/hexdump.rb +20 -0
- data/lib/ronin/support/binary/memory.rb +268 -0
- data/lib/ronin/support/binary/packet.rb +33 -0
- data/lib/ronin/support/binary/stack.rb +256 -0
- data/lib/ronin/support/binary/stream/methods.rb +1755 -0
- data/lib/ronin/support/binary/stream.rb +151 -0
- data/lib/ronin/support/binary/struct/member.rb +86 -0
- data/lib/ronin/support/binary/struct.rb +830 -0
- data/lib/ronin/support/binary/template.rb +284 -0
- data/lib/ronin/support/binary/union.rb +162 -0
- data/lib/ronin/support/binary.rb +26 -0
- data/lib/ronin/support/cli/ansi.rb +330 -0
- data/lib/ronin/support/cli/io_shell/core_ext/io.rb +67 -0
- data/lib/ronin/{fuzzing/extensions.rb → support/cli/io_shell/core_ext.rb} +6 -7
- data/lib/ronin/support/cli/io_shell.rb +161 -0
- data/lib/ronin/support/cli/printing.rb +216 -0
- data/lib/ronin/support/cli.rb +20 -0
- data/lib/ronin/support/compression/core_ext/file.rb +70 -0
- data/lib/ronin/support/compression/core_ext/string.rb +101 -0
- data/lib/ronin/{formatting/html.rb → support/compression/core_ext.rb} +6 -7
- data/lib/ronin/support/compression/gzip/reader.rb +70 -0
- data/lib/ronin/support/compression/gzip/writer.rb +74 -0
- data/lib/ronin/support/compression/gzip.rb +105 -0
- data/lib/ronin/support/compression/mixin.rb +180 -0
- data/lib/ronin/{network/extensions/esmtp/net.rb → support/compression/zlib.rb} +9 -10
- data/lib/ronin/support/compression.rb +174 -0
- data/lib/ronin/{extensions → support/core_ext}/enumerable.rb +5 -6
- data/lib/ronin/{extensions → support/core_ext}/file.rb +11 -34
- data/lib/ronin/support/core_ext/integer.rb +37 -0
- data/lib/ronin/support/core_ext/ipaddr.rb +65 -0
- data/lib/ronin/{extensions → support/core_ext}/kernel.rb +10 -9
- data/lib/ronin/{extensions → support/core_ext}/resolv.rb +5 -28
- data/lib/ronin/{extensions → support/core_ext}/string.rb +117 -57
- data/lib/ronin/support/core_ext.rb +33 -0
- data/lib/ronin/support/crypto/cert.rb +522 -0
- data/lib/ronin/support/crypto/cert_chain.rb +204 -0
- data/lib/ronin/support/crypto/cipher/aes.rb +71 -0
- data/lib/ronin/support/crypto/cipher/aes128.rb +54 -0
- data/lib/ronin/support/crypto/cipher/aes256.rb +54 -0
- data/lib/ronin/support/crypto/cipher.rb +194 -0
- data/lib/ronin/support/crypto/core_ext/file.rb +660 -0
- data/lib/ronin/support/crypto/core_ext/string.rb +548 -0
- data/lib/ronin/{binary.rb → support/crypto/core_ext.rb} +7 -8
- data/lib/ronin/support/crypto/hmac.rb +48 -0
- data/lib/ronin/support/crypto/key/dh.rb +122 -0
- data/lib/ronin/support/crypto/key/dsa.rb +103 -0
- data/lib/ronin/support/crypto/key/ec.rb +99 -0
- data/lib/ronin/support/crypto/key/methods.rb +163 -0
- data/lib/ronin/support/crypto/key/rsa.rb +169 -0
- data/lib/ronin/support/crypto/key.rb +105 -0
- data/lib/ronin/support/crypto/mixin.rb +620 -0
- data/lib/ronin/{network/extensions/http/net.rb → support/crypto/openssl.rb} +9 -10
- data/lib/ronin/support/crypto.rb +779 -0
- data/lib/ronin/support/encoding/base16/core_ext/string.rb +63 -0
- data/lib/ronin/support/encoding/base16/core_ext.rb +19 -0
- data/lib/ronin/support/encoding/base16.rb +82 -0
- data/lib/ronin/support/encoding/base32/core_ext/string.rb +63 -0
- data/lib/ronin/support/encoding/base32/core_ext.rb +19 -0
- data/lib/ronin/support/encoding/base32.rb +164 -0
- data/lib/ronin/support/encoding/base64/core_ext/string.rb +76 -0
- data/lib/ronin/support/encoding/base64/core_ext.rb +19 -0
- data/lib/ronin/support/encoding/base64.rb +78 -0
- data/lib/ronin/support/encoding/c/core_ext/integer.rb +82 -0
- data/lib/ronin/support/encoding/c/core_ext/string.rb +125 -0
- data/lib/ronin/support/encoding/c/core_ext.rb +20 -0
- data/lib/ronin/support/encoding/c.rb +277 -0
- data/lib/ronin/support/encoding/core_ext/string.rb +107 -0
- data/lib/ronin/support/encoding/core_ext.rb +33 -0
- data/lib/ronin/support/encoding/hex/core_ext/integer.rb +82 -0
- data/lib/ronin/support/encoding/hex/core_ext/string.rb +133 -0
- data/lib/ronin/support/encoding/hex/core_ext.rb +22 -0
- data/lib/ronin/support/encoding/hex.rb +248 -0
- data/lib/ronin/support/encoding/html/core_ext/integer.rb +106 -0
- data/lib/ronin/support/encoding/html/core_ext/string.rb +130 -0
- data/lib/ronin/support/encoding/html/core_ext.rb +20 -0
- data/lib/ronin/support/encoding/html.rb +233 -0
- data/lib/ronin/support/encoding/http/core_ext/integer.rb +95 -0
- data/lib/ronin/support/encoding/http/core_ext/string.rb +129 -0
- data/lib/ronin/support/encoding/http/core_ext.rb +20 -0
- data/lib/ronin/support/encoding/http.rb +241 -0
- data/lib/ronin/support/encoding/js/core_ext/integer.rb +67 -0
- data/lib/ronin/support/encoding/js/core_ext/string.rb +125 -0
- data/lib/ronin/support/encoding/js/core_ext.rb +20 -0
- data/lib/ronin/support/encoding/js.rb +279 -0
- data/lib/ronin/support/encoding/powershell/core_ext/integer.rb +87 -0
- data/lib/ronin/support/encoding/powershell/core_ext/string.rb +145 -0
- data/lib/ronin/support/encoding/powershell/core_ext.rb +20 -0
- data/lib/ronin/support/encoding/powershell.rb +297 -0
- data/lib/ronin/support/encoding/punycode/core_ext/string.rb +63 -0
- data/lib/ronin/support/encoding/punycode/core_ext.rb +19 -0
- data/lib/ronin/support/encoding/punycode.rb +76 -0
- data/lib/ronin/support/encoding/quoted_printable/core_ext/string.rb +75 -0
- data/lib/ronin/support/encoding/quoted_printable/core_ext.rb +19 -0
- data/lib/ronin/support/encoding/quoted_printable.rb +102 -0
- data/lib/ronin/support/encoding/ruby/core_ext/string.rb +129 -0
- data/lib/ronin/{formatting/binary.rb → support/encoding/ruby/core_ext.rb} +6 -7
- data/lib/ronin/support/encoding/ruby.rb +235 -0
- data/lib/ronin/support/encoding/shell/core_ext/integer.rb +89 -0
- data/lib/ronin/support/encoding/shell/core_ext/string.rb +134 -0
- data/lib/ronin/support/encoding/shell/core_ext.rb +20 -0
- data/lib/ronin/support/encoding/shell.rb +293 -0
- data/lib/ronin/{network/extensions → support/encoding}/smtp.rb +7 -7
- data/lib/ronin/support/encoding/sql/core_ext/string.rb +114 -0
- data/lib/ronin/{formatting/http.rb → support/encoding/sql/core_ext.rb} +6 -7
- data/lib/ronin/support/encoding/sql.rb +124 -0
- data/lib/ronin/support/encoding/uri/core_ext/integer.rb +149 -0
- data/lib/ronin/support/encoding/uri/core_ext/string.rb +195 -0
- data/lib/ronin/support/encoding/uri/core_ext.rb +20 -0
- data/lib/ronin/support/encoding/uri.rb +424 -0
- data/lib/ronin/support/encoding/uuencoding/core_ext/string.rb +73 -0
- data/lib/ronin/support/encoding/uuencoding/core_ext.rb +19 -0
- data/lib/ronin/support/encoding/uuencoding.rb +70 -0
- data/lib/ronin/support/encoding/xml/core_ext/integer.rb +100 -0
- data/lib/ronin/support/encoding/xml/core_ext/string.rb +124 -0
- data/lib/ronin/support/encoding/xml/core_ext.rb +20 -0
- data/lib/ronin/support/encoding/xml.rb +328 -0
- data/lib/ronin/support/encoding.rb +46 -0
- data/lib/ronin/support/home.rb +88 -0
- data/lib/ronin/support/mixin.rb +42 -0
- data/lib/ronin/support/network/asn/dns_record.rb +112 -0
- data/lib/ronin/support/network/asn/list.rb +269 -0
- data/lib/ronin/support/network/asn/record.rb +164 -0
- data/lib/ronin/support/network/asn/record_set.rb +226 -0
- data/lib/ronin/support/network/asn.rb +88 -0
- data/lib/ronin/{binary/hexdump.rb → support/network/core_ext.rb} +6 -7
- data/lib/ronin/support/network/dns/idn.rb +38 -0
- data/lib/ronin/support/network/dns/mixin.rb +941 -0
- data/lib/ronin/support/network/dns/resolver.rb +707 -0
- data/lib/ronin/support/network/dns.rb +1109 -0
- data/lib/ronin/support/network/domain.rb +70 -0
- data/lib/ronin/support/network/email_address.rb +574 -0
- data/lib/ronin/support/network/esmtp/mixin.rb +115 -0
- data/lib/ronin/support/network/exceptions.rb +43 -0
- data/lib/ronin/support/network/ftp/mixin.rb +106 -0
- data/lib/ronin/support/network/host.rb +1473 -0
- data/lib/ronin/support/network/http/cookie.rb +245 -0
- data/lib/ronin/support/network/http/core_ext/uri/http.rb +63 -0
- data/lib/ronin/support/network/http/core_ext.rb +19 -0
- data/lib/ronin/support/network/http/mixin.rb +890 -0
- data/lib/ronin/support/network/http/request.rb +215 -0
- data/lib/ronin/support/network/http/set_cookie.rb +210 -0
- data/lib/ronin/support/network/http/user_agents.rb +115 -0
- data/lib/ronin/support/network/http.rb +2582 -0
- data/lib/ronin/support/network/imap/mixin.rb +133 -0
- data/lib/ronin/support/network/ip/mixin.rb +114 -0
- data/lib/ronin/support/network/ip.rb +540 -0
- data/lib/ronin/support/network/ip_range/cidr.rb +252 -0
- data/lib/ronin/support/network/ip_range/glob.rb +309 -0
- data/lib/ronin/support/network/ip_range/range.rb +249 -0
- data/lib/ronin/support/network/ip_range.rb +284 -0
- data/lib/ronin/support/network/mixin.rb +58 -0
- data/lib/ronin/support/network/packet.rb +27 -0
- data/lib/ronin/support/network/pop3/mixin.rb +113 -0
- data/lib/ronin/support/network/proxy.rb +602 -0
- data/lib/ronin/support/network/public_suffix/list.rb +339 -0
- data/lib/ronin/support/network/public_suffix/suffix.rb +118 -0
- data/lib/ronin/support/network/public_suffix/suffix_set.rb +150 -0
- data/lib/ronin/support/network/public_suffix.rb +41 -0
- data/lib/ronin/support/network/smtp/email.rb +190 -0
- data/lib/ronin/support/network/smtp/mixin.rb +290 -0
- data/lib/ronin/{extensions/meta.rb → support/network/smtp.rb} +6 -7
- data/lib/ronin/support/network/ssl/local_cert.rb +114 -0
- data/lib/ronin/support/network/ssl/local_key.rb +84 -0
- data/lib/ronin/support/network/ssl/mixin.rb +740 -0
- data/lib/ronin/{network/extensions/imap/net.rb → support/network/ssl/openssl.rb} +9 -10
- data/lib/ronin/support/network/ssl/proxy.rb +296 -0
- data/lib/ronin/support/network/ssl.rb +173 -0
- data/lib/ronin/support/network/tcp/mixin.rb +400 -0
- data/lib/ronin/support/network/tcp/proxy.rb +435 -0
- data/lib/ronin/support/network/tcp.rb +443 -0
- data/lib/ronin/support/network/telnet/mixin.rb +150 -0
- data/lib/ronin/support/network/telnet.rb +90 -0
- data/lib/ronin/support/network/tld/list.rb +266 -0
- data/lib/ronin/support/network/tld.rb +41 -0
- data/lib/ronin/support/network/tls/mixin.rb +670 -0
- data/lib/ronin/support/network/tls/proxy.rb +135 -0
- data/lib/ronin/support/network/tls.rb +53 -0
- data/lib/ronin/support/network/udp/mixin.rb +389 -0
- data/lib/ronin/support/network/udp/proxy.rb +192 -0
- data/lib/ronin/support/network/udp.rb +435 -0
- data/lib/ronin/support/network/unix/mixin.rb +273 -0
- data/lib/ronin/support/network.rb +37 -0
- data/lib/ronin/support/path.rb +136 -0
- data/lib/ronin/{network/extensions/dns/net.rb → support/text/core_ext/regexp.rb} +8 -9
- data/lib/ronin/support/text/core_ext/string.rb +46 -0
- data/lib/ronin/support/text/core_ext.rb +23 -0
- data/lib/ronin/support/text/entropy/core_ext/string.rb +45 -0
- data/lib/ronin/support/text/entropy/core_ext.rb +19 -0
- data/lib/ronin/support/text/entropy.rb +66 -0
- data/lib/ronin/support/text/erb/mixin.rb +44 -0
- data/lib/ronin/support/text/erb.rb +19 -0
- data/lib/ronin/support/text/homoglyph/core_ext/string.rb +108 -0
- data/lib/ronin/{formatting/digest.rb → support/text/homoglyph/core_ext.rb} +6 -7
- data/lib/ronin/{network/http/exceptions/unknown_request.rb → support/text/homoglyph/exceptions.rb} +10 -9
- data/lib/ronin/support/text/homoglyph/table.rb +228 -0
- data/lib/ronin/support/text/homoglyph.rb +142 -0
- data/lib/ronin/support/text/mixin.rb +31 -0
- data/lib/ronin/support/text/patterns/credentials.rb +75 -0
- data/lib/ronin/support/text/patterns/crypto.rb +67 -0
- data/lib/ronin/support/text/patterns/file_system.rb +93 -0
- data/lib/ronin/support/text/patterns/language.rb +37 -0
- data/lib/ronin/support/text/patterns/network/public_suffix.rb +44 -0
- data/lib/ronin/support/text/patterns/network.rb +140 -0
- data/lib/ronin/support/text/patterns/numeric.rb +52 -0
- data/lib/ronin/support/text/patterns/pii.rb +105 -0
- data/lib/ronin/support/text/patterns/source_code.rb +148 -0
- data/lib/ronin/support/text/patterns.rb +25 -0
- data/lib/ronin/support/text/random/mixin.rb +437 -0
- data/lib/ronin/support/text/random.rb +419 -0
- data/lib/ronin/support/text/typo/core_ext/string.rb +123 -0
- data/lib/ronin/support/text/typo/core_ext.rb +19 -0
- data/lib/ronin/support/text/typo/exceptions.rb +28 -0
- data/lib/ronin/support/text/typo/generator.rb +161 -0
- data/lib/ronin/support/text/typo.rb +260 -0
- data/lib/ronin/support/text.rb +26 -0
- data/lib/ronin/support/version.rb +6 -7
- data/lib/ronin/support.rb +20 -15
- data/ronin-support.gemspec +3 -1
- metadata +462 -369
- data/.gemtest +0 -0
- data/lib/ronin/binary/hexdump/parser.rb +0 -403
- data/lib/ronin/binary/struct.rb +0 -567
- data/lib/ronin/binary/template.rb +0 -454
- data/lib/ronin/extensions/ip_addr.rb +0 -217
- data/lib/ronin/extensions/meta/object.rb +0 -24
- data/lib/ronin/extensions/regexp.rb +0 -157
- data/lib/ronin/extensions.rb +0 -29
- data/lib/ronin/formatting/extensions/binary/array.rb +0 -61
- data/lib/ronin/formatting/extensions/binary/base64.rb +0 -106
- data/lib/ronin/formatting/extensions/binary/file.rb +0 -77
- data/lib/ronin/formatting/extensions/binary/float.rb +0 -65
- data/lib/ronin/formatting/extensions/binary/integer.rb +0 -180
- data/lib/ronin/formatting/extensions/binary/string.rb +0 -345
- data/lib/ronin/formatting/extensions/binary.rb +0 -26
- data/lib/ronin/formatting/extensions/digest/file.rb +0 -129
- data/lib/ronin/formatting/extensions/digest/string.rb +0 -86
- data/lib/ronin/formatting/extensions/digest.rb +0 -21
- data/lib/ronin/formatting/extensions/html/integer.rb +0 -142
- data/lib/ronin/formatting/extensions/html/string.rb +0 -194
- data/lib/ronin/formatting/extensions/html.rb +0 -21
- data/lib/ronin/formatting/extensions/http/integer.rb +0 -69
- data/lib/ronin/formatting/extensions/http/string.rb +0 -110
- data/lib/ronin/formatting/extensions/http.rb +0 -21
- data/lib/ronin/formatting/extensions/sql/string.rb +0 -128
- data/lib/ronin/formatting/extensions/sql.rb +0 -20
- data/lib/ronin/formatting/extensions/text/array.rb +0 -137
- data/lib/ronin/formatting/extensions/text/string.rb +0 -297
- data/lib/ronin/formatting/extensions.rb +0 -24
- data/lib/ronin/formatting/text.rb +0 -20
- data/lib/ronin/formatting.rb +0 -25
- data/lib/ronin/fuzzing/extensions/string.rb +0 -209
- data/lib/ronin/fuzzing/fuzzer.rb +0 -110
- data/lib/ronin/fuzzing/fuzzing.rb +0 -360
- data/lib/ronin/fuzzing/mutator.rb +0 -161
- data/lib/ronin/fuzzing/repeater.rb +0 -81
- data/lib/ronin/fuzzing/template.rb +0 -133
- data/lib/ronin/fuzzing.rb +0 -21
- data/lib/ronin/mixin.rb +0 -89
- data/lib/ronin/network/dns.rb +0 -201
- data/lib/ronin/network/esmtp.rb +0 -113
- data/lib/ronin/network/extensions/dns.rb +0 -20
- data/lib/ronin/network/extensions/esmtp.rb +0 -20
- data/lib/ronin/network/extensions/http/uri/http.rb +0 -228
- data/lib/ronin/network/extensions/http.rb +0 -21
- data/lib/ronin/network/extensions/imap.rb +0 -20
- data/lib/ronin/network/extensions/pop3/net.rb +0 -24
- data/lib/ronin/network/extensions/pop3.rb +0 -20
- data/lib/ronin/network/extensions/smtp/net.rb +0 -24
- data/lib/ronin/network/extensions/ssl/net.rb +0 -24
- data/lib/ronin/network/extensions/ssl.rb +0 -20
- data/lib/ronin/network/extensions/tcp/net.rb +0 -24
- data/lib/ronin/network/extensions/tcp.rb +0 -20
- data/lib/ronin/network/extensions/telnet/net.rb +0 -24
- data/lib/ronin/network/extensions/telnet.rb +0 -20
- data/lib/ronin/network/extensions/udp/net.rb +0 -24
- data/lib/ronin/network/extensions/udp.rb +0 -20
- data/lib/ronin/network/extensions.rb +0 -29
- data/lib/ronin/network/ftp.rb +0 -149
- data/lib/ronin/network/http/exceptions.rb +0 -20
- data/lib/ronin/network/http/http.rb +0 -1127
- data/lib/ronin/network/http/proxy.rb +0 -330
- data/lib/ronin/network/http.rb +0 -22
- data/lib/ronin/network/imap.rb +0 -158
- data/lib/ronin/network/mixins/dns.rb +0 -55
- data/lib/ronin/network/mixins/esmtp.rb +0 -164
- data/lib/ronin/network/mixins/ftp.rb +0 -155
- data/lib/ronin/network/mixins/http.rb +0 -227
- data/lib/ronin/network/mixins/imap.rb +0 -156
- data/lib/ronin/network/mixins/mixin.rb +0 -58
- data/lib/ronin/network/mixins/pop3.rb +0 -149
- data/lib/ronin/network/mixins/smtp.rb +0 -159
- data/lib/ronin/network/mixins/ssl.rb +0 -148
- data/lib/ronin/network/mixins/tcp.rb +0 -368
- data/lib/ronin/network/mixins/telnet.rb +0 -208
- data/lib/ronin/network/mixins/udp.rb +0 -381
- data/lib/ronin/network/mixins/unix.rb +0 -279
- data/lib/ronin/network/mixins.rb +0 -29
- data/lib/ronin/network/network.rb +0 -45
- data/lib/ronin/network/pop3.rb +0 -124
- data/lib/ronin/network/proxy.rb +0 -578
- data/lib/ronin/network/smtp/email.rb +0 -174
- data/lib/ronin/network/smtp/smtp.rb +0 -230
- data/lib/ronin/network/smtp.rb +0 -22
- data/lib/ronin/network/ssl.rb +0 -186
- data/lib/ronin/network/tcp/proxy.rb +0 -417
- data/lib/ronin/network/tcp/tcp.rb +0 -443
- data/lib/ronin/network/tcp.rb +0 -21
- data/lib/ronin/network/telnet.rb +0 -264
- data/lib/ronin/network/udp/proxy.rb +0 -191
- data/lib/ronin/network/udp/udp.rb +0 -450
- data/lib/ronin/network/udp.rb +0 -21
- data/lib/ronin/network/unix.rb +0 -286
- data/lib/ronin/network.rb +0 -31
- data/lib/ronin/path.rb +0 -137
- data/lib/ronin/spec/ui/output.rb +0 -22
- data/lib/ronin/support/inflector.rb +0 -92
- data/lib/ronin/support/support.rb +0 -42
- data/lib/ronin/templates/erb.rb +0 -78
- data/lib/ronin/templates/template.rb +0 -169
- data/lib/ronin/templates.rb +0 -21
- data/lib/ronin/ui/output/helpers.rb +0 -296
- data/lib/ronin/ui/output/output.rb +0 -146
- data/lib/ronin/ui/output/terminal/color.rb +0 -124
- data/lib/ronin/ui/output/terminal/raw.rb +0 -103
- data/lib/ronin/ui/output/terminal.rb +0 -21
- data/lib/ronin/ui/output.rb +0 -21
- data/lib/ronin/ui/shell.rb +0 -286
- data/lib/ronin/wordlist.rb +0 -287
- data/spec/binary/hexdump/helpers/hexdumps/ascii.bin +0 -0
- data/spec/binary/hexdump/helpers/hexdumps/hexdump_decimal_shorts.txt +0 -17
- data/spec/binary/hexdump/helpers/hexdumps/hexdump_hex_bytes.txt +0 -17
- data/spec/binary/hexdump/helpers/hexdumps/hexdump_hex_shorts.txt +0 -17
- data/spec/binary/hexdump/helpers/hexdumps/hexdump_octal_bytes.txt +0 -17
- data/spec/binary/hexdump/helpers/hexdumps/hexdump_octal_shorts.txt +0 -17
- data/spec/binary/hexdump/helpers/hexdumps/hexdump_repeated.txt +0 -6
- data/spec/binary/hexdump/helpers/hexdumps/od_decimal_bytes.txt +0 -17
- data/spec/binary/hexdump/helpers/hexdumps/od_decimal_ints.txt +0 -17
- data/spec/binary/hexdump/helpers/hexdumps/od_decimal_quads.txt +0 -17
- data/spec/binary/hexdump/helpers/hexdumps/od_decimal_shorts.txt +0 -17
- data/spec/binary/hexdump/helpers/hexdumps/od_doubles.txt +0 -17
- data/spec/binary/hexdump/helpers/hexdumps/od_floats.txt +0 -17
- data/spec/binary/hexdump/helpers/hexdumps/od_hex_bytes.txt +0 -17
- data/spec/binary/hexdump/helpers/hexdumps/od_hex_ints.txt +0 -17
- data/spec/binary/hexdump/helpers/hexdumps/od_hex_quads.txt +0 -17
- data/spec/binary/hexdump/helpers/hexdumps/od_hex_shorts.txt +0 -17
- data/spec/binary/hexdump/helpers/hexdumps/od_named_chars.txt +0 -17
- data/spec/binary/hexdump/helpers/hexdumps/od_octal_bytes.txt +0 -17
- data/spec/binary/hexdump/helpers/hexdumps/od_octal_ints.txt +0 -17
- data/spec/binary/hexdump/helpers/hexdumps/od_octal_quads.txt +0 -17
- data/spec/binary/hexdump/helpers/hexdumps/od_octal_shorts.txt +0 -17
- data/spec/binary/hexdump/helpers/hexdumps/od_repeated.txt +0 -6
- data/spec/binary/hexdump/helpers/hexdumps/repeated.bin +0 -1
- data/spec/binary/hexdump/helpers/hexdumps.rb +0 -13
- data/spec/binary/hexdump/parser_spec.rb +0 -302
- data/spec/binary/struct_spec.rb +0 -496
- data/spec/binary/template_spec.rb +0 -414
- data/spec/extensions/enumerable_spec.rb +0 -24
- data/spec/extensions/file_spec.rb +0 -63
- data/spec/extensions/ip_addr_spec.rb +0 -203
- data/spec/extensions/kernel_spec.rb +0 -30
- data/spec/extensions/regexp_spec.rb +0 -482
- data/spec/extensions/resolv_spec.rb +0 -18
- data/spec/extensions/string_spec.rb +0 -179
- data/spec/formatting/binary/array_spec.rb +0 -26
- data/spec/formatting/binary/base64_spec.rb +0 -50
- data/spec/formatting/binary/float_spec.rb +0 -34
- data/spec/formatting/binary/integer_spec.rb +0 -166
- data/spec/formatting/binary/string_spec.rb +0 -197
- data/spec/formatting/digest/string_spec.rb +0 -82
- data/spec/formatting/html/integer_spec.rb +0 -66
- data/spec/formatting/html/string_spec.rb +0 -103
- data/spec/formatting/http/integer_spec.rb +0 -42
- data/spec/formatting/http/string_spec.rb +0 -76
- data/spec/formatting/sql/string_spec.rb +0 -75
- data/spec/formatting/text/array_spec.rb +0 -105
- data/spec/formatting/text/string_spec.rb +0 -162
- data/spec/fuzzing/extensions/string_spec.rb +0 -87
- data/spec/fuzzing/fuzzer_spec.rb +0 -109
- data/spec/fuzzing/fuzzing_spec.rb +0 -24
- data/spec/fuzzing/mutator_spec.rb +0 -112
- data/spec/fuzzing/repeater_spec.rb +0 -57
- data/spec/fuzzing/template_spec.rb +0 -54
- data/spec/mixin_spec.rb +0 -53
- data/spec/network/dns_spec.rb +0 -201
- data/spec/network/ftp_spec.rb +0 -81
- data/spec/network/http/http_spec.rb +0 -466
- data/spec/network/http/proxy_spec.rb +0 -148
- data/spec/network/network_spec.rb +0 -8
- data/spec/network/proxy_spec.rb +0 -121
- data/spec/network/shared/unix_server.rb +0 -31
- data/spec/network/smtp/email_spec.rb +0 -100
- data/spec/network/ssl_spec.rb +0 -70
- data/spec/network/tcp/proxy_spec.rb +0 -116
- data/spec/network/tcp/tcp_spec.rb +0 -273
- data/spec/network/telnet_spec.rb +0 -67
- data/spec/network/udp/udp_spec.rb +0 -271
- data/spec/network/unix_spec.rb +0 -183
- data/spec/path_spec.rb +0 -86
- data/spec/spec_helper.rb +0 -9
- data/spec/support/inflector_spec.rb +0 -22
- data/spec/support_spec.rb +0 -8
- data/spec/templates/classes/example_erb.rb +0 -11
- data/spec/templates/classes/example_template.rb +0 -35
- data/spec/templates/erb_spec.rb +0 -21
- data/spec/templates/helpers/data/includes/_relative.erb +0 -1
- data/spec/templates/helpers/data/templates/example.erb +0 -1
- data/spec/templates/helpers/data.rb +0 -9
- data/spec/templates/template_spec.rb +0 -54
- data/spec/ui/classes/test_shell.rb +0 -22
- data/spec/ui/output_spec.rb +0 -32
- data/spec/ui/shell_spec.rb +0 -83
- data/spec/wordlist_spec.rb +0 -151
|
@@ -0,0 +1,707 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
#
|
|
3
|
+
# Copyright (c) 2006-2022 Hal Brodigan (postmodern.mod3 at gmail.com)
|
|
4
|
+
#
|
|
5
|
+
# ronin-support is free software: you can redistribute it and/or modify
|
|
6
|
+
# it under the terms of the GNU Lesser General Public License as published
|
|
7
|
+
# by the Free Software Foundation, either version 3 of the License, or
|
|
8
|
+
# (at your option) any later version.
|
|
9
|
+
#
|
|
10
|
+
# ronin-support is distributed in the hope that it will be useful,
|
|
11
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13
|
+
# GNU Lesser General Public License for more details.
|
|
14
|
+
#
|
|
15
|
+
# You should have received a copy of the GNU Lesser General Public License
|
|
16
|
+
# along with ronin-support. If not, see <https://www.gnu.org/licenses/>.
|
|
17
|
+
#
|
|
18
|
+
|
|
19
|
+
require 'ronin/support/network/dns/idn'
|
|
20
|
+
|
|
21
|
+
require 'resolv'
|
|
22
|
+
|
|
23
|
+
module Ronin
|
|
24
|
+
module Support
|
|
25
|
+
module Network
|
|
26
|
+
module DNS
|
|
27
|
+
#
|
|
28
|
+
# Wraps around [Resolv::DNS].
|
|
29
|
+
#
|
|
30
|
+
# [Resolv::DNS]: https://rubydoc.info/stdlib/resolv/Resolv/DNS
|
|
31
|
+
#
|
|
32
|
+
# @api semipublic
|
|
33
|
+
#
|
|
34
|
+
# @since 1.0.0
|
|
35
|
+
#
|
|
36
|
+
class Resolver
|
|
37
|
+
|
|
38
|
+
# The nameserver(s) to query.
|
|
39
|
+
#
|
|
40
|
+
# @return [Array<String>]
|
|
41
|
+
attr_reader :nameservers
|
|
42
|
+
|
|
43
|
+
#
|
|
44
|
+
# Initializes the resolver.
|
|
45
|
+
#
|
|
46
|
+
# @param [Array<String>] nameservers
|
|
47
|
+
# The nameserver(s) to query.
|
|
48
|
+
#
|
|
49
|
+
# @param [String, nil] nameserver
|
|
50
|
+
# The optional singular nameserver to query.
|
|
51
|
+
#
|
|
52
|
+
# @example Creating a DNS resolver with a single nameserver:
|
|
53
|
+
# resolver = Resolver.new(nameserver: '1.1.1.1')
|
|
54
|
+
#
|
|
55
|
+
# @example Creating a DNS resolver with multiple nameservers:
|
|
56
|
+
# resolver = Resolver.new(nameservers: ['1.1.1.1', '8.8.8.8'])
|
|
57
|
+
#
|
|
58
|
+
def initialize(nameservers: self.class.default_nameservers,
|
|
59
|
+
nameserver: nil)
|
|
60
|
+
@nameservers = if nameserver then [nameserver]
|
|
61
|
+
else nameservers
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
@resolver = Resolv::DNS.new(nameserver: @nameservers)
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
#
|
|
68
|
+
# The system's nameserver(s) to use by default.
|
|
69
|
+
#
|
|
70
|
+
# @return [Array<String>]
|
|
71
|
+
# The nameserver(s) IP addresses.
|
|
72
|
+
#
|
|
73
|
+
def self.default_nameservers
|
|
74
|
+
@default_nameservers ||= Resolv::DNS::Config.default_config_hash[:nameserver]
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
#
|
|
78
|
+
# Queries the first IP address for the given host name.
|
|
79
|
+
#
|
|
80
|
+
# @param [String] host
|
|
81
|
+
# The host name to query.
|
|
82
|
+
#
|
|
83
|
+
# @return [String, nil]
|
|
84
|
+
# The first IP address for the host name or `nil` if the host name
|
|
85
|
+
# has no IP addresses.
|
|
86
|
+
#
|
|
87
|
+
def get_address(host)
|
|
88
|
+
host = IDN.to_ascii(host)
|
|
89
|
+
|
|
90
|
+
begin
|
|
91
|
+
@resolver.getaddress(host).to_s
|
|
92
|
+
rescue Resolv::ResolvError
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
#
|
|
97
|
+
# Queries all IP addresses for the given host name.
|
|
98
|
+
#
|
|
99
|
+
# @param [String] host
|
|
100
|
+
# The host name to query.
|
|
101
|
+
#
|
|
102
|
+
# @return [Array<String>]
|
|
103
|
+
# The IP addresses for the host name.
|
|
104
|
+
#
|
|
105
|
+
def get_addresses(host)
|
|
106
|
+
host = IDN.to_ascii(host)
|
|
107
|
+
|
|
108
|
+
addresses = @resolver.getaddresses(host)
|
|
109
|
+
addresses.map!(&:to_s)
|
|
110
|
+
return addresses
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
#
|
|
114
|
+
# Reverse-queries the first host name for the given IP address.
|
|
115
|
+
#
|
|
116
|
+
# @param [String] ip
|
|
117
|
+
# The IP address to reverse lookup.
|
|
118
|
+
#
|
|
119
|
+
# @return [String, nil]
|
|
120
|
+
# The first host name associated with the given IP address or `nil`
|
|
121
|
+
# if no host names could be found for the IP address.
|
|
122
|
+
#
|
|
123
|
+
def get_name(ip)
|
|
124
|
+
@resolver.getname(ip).to_s
|
|
125
|
+
rescue Resolv::ResolvError
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
#
|
|
129
|
+
# Reverse-queries all host names for the given IP address.
|
|
130
|
+
#
|
|
131
|
+
# @param [String] ip
|
|
132
|
+
# The IP address to reverse lookup.
|
|
133
|
+
#
|
|
134
|
+
# @return [Array<String>]
|
|
135
|
+
# The host names associated with the given IP address.
|
|
136
|
+
#
|
|
137
|
+
def get_names(ip)
|
|
138
|
+
names = @resolver.getnames(ip)
|
|
139
|
+
names.map!(&:to_s)
|
|
140
|
+
names
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
# Mapping of record type names to the `Resolv::DNS::Resource::IN`
|
|
144
|
+
# classes.
|
|
145
|
+
#
|
|
146
|
+
# @api private
|
|
147
|
+
RECORD_TYPES = {
|
|
148
|
+
a: Resolv::DNS::Resource::IN::A,
|
|
149
|
+
aaaa: Resolv::DNS::Resource::IN::AAAA,
|
|
150
|
+
any: Resolv::DNS::Resource::IN::ANY,
|
|
151
|
+
cname: Resolv::DNS::Resource::IN::CNAME,
|
|
152
|
+
hinfo: Resolv::DNS::Resource::IN::HINFO,
|
|
153
|
+
loc: Resolv::DNS::Resource::IN::LOC,
|
|
154
|
+
minfo: Resolv::DNS::Resource::IN::MINFO,
|
|
155
|
+
mx: Resolv::DNS::Resource::IN::MX,
|
|
156
|
+
ns: Resolv::DNS::Resource::IN::NS,
|
|
157
|
+
ptr: Resolv::DNS::Resource::IN::PTR,
|
|
158
|
+
soa: Resolv::DNS::Resource::IN::SOA,
|
|
159
|
+
srv: Resolv::DNS::Resource::IN::SRV,
|
|
160
|
+
txt: Resolv::DNS::Resource::IN::TXT,
|
|
161
|
+
wks: Resolv::DNS::Resource::IN::WKS
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
#
|
|
165
|
+
# Queries a single matching DNS record for the host name.
|
|
166
|
+
#
|
|
167
|
+
# @param [String] name
|
|
168
|
+
# The host name to query.
|
|
169
|
+
#
|
|
170
|
+
# @param [:a, :aaaa, :any, :cname, :hinfo, :loc, :minfo, :mx, :ns, :ptr, :soa, :srv, :txt, :wks] record_type
|
|
171
|
+
# The record type.
|
|
172
|
+
#
|
|
173
|
+
# @return [Resolv::DNS::Resource, nil]
|
|
174
|
+
# The matching DNS records or `nil` if no matching DNS records
|
|
175
|
+
# could be found.
|
|
176
|
+
#
|
|
177
|
+
# @raise [ArgumentError]
|
|
178
|
+
# An unlnown record type was given.
|
|
179
|
+
#
|
|
180
|
+
# @see https://rubydoc.info/stdlib/resolv/Resolv/DNS/Resource
|
|
181
|
+
#
|
|
182
|
+
def get_record(name,record_type)
|
|
183
|
+
name = IDN.to_ascii(name)
|
|
184
|
+
|
|
185
|
+
record_class = RECORD_TYPES.fetch(record_type) do
|
|
186
|
+
raise(ArgumentError,"record type (#{record_type.inspect}) must be #{RECORD_TYPES.keys.map(&:inspect).join(', ')}")
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
begin
|
|
190
|
+
@resolver.getresource(name,record_class)
|
|
191
|
+
rescue Resolv::ResolvError
|
|
192
|
+
end
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
#
|
|
196
|
+
# Queries all matching DNS records for the host name.
|
|
197
|
+
#
|
|
198
|
+
# @param [String] name
|
|
199
|
+
# The host name to query.
|
|
200
|
+
#
|
|
201
|
+
# @param [:a, :aaaa, :any, :cname, :hinfo, :loc, :minfo, :mx, :ns, :ptr, :soa, :srv, :txt, :wks] record_type
|
|
202
|
+
# The record type.
|
|
203
|
+
#
|
|
204
|
+
# @return [Array<Resolv::DNS::Resource>]
|
|
205
|
+
# All matching DNS records.
|
|
206
|
+
#
|
|
207
|
+
# @raise [ArgumentError]
|
|
208
|
+
# An unlnown record type was given.
|
|
209
|
+
#
|
|
210
|
+
# @see https://rubydoc.info/stdlib/resolv/Resolv/DNS/Resource
|
|
211
|
+
#
|
|
212
|
+
def get_records(name,record_type)
|
|
213
|
+
name = IDN.to_ascii(name)
|
|
214
|
+
|
|
215
|
+
record_class = RECORD_TYPES.fetch(record_type) do
|
|
216
|
+
raise(ArgumentError,"record type (#{record_type.inspect}) must be #{RECORD_TYPES.keys.map(&:inspect).join(', ')}")
|
|
217
|
+
end
|
|
218
|
+
|
|
219
|
+
@resolver.getresources(name,record_class)
|
|
220
|
+
end
|
|
221
|
+
|
|
222
|
+
#
|
|
223
|
+
# Queries all records of the host name using the `ANY` DNS query.
|
|
224
|
+
#
|
|
225
|
+
# @param [String] name
|
|
226
|
+
# The host name to query.
|
|
227
|
+
#
|
|
228
|
+
# @return [Array<Resolv::DNS::Resource>]
|
|
229
|
+
# All of the DNS records belonging to the host name.
|
|
230
|
+
#
|
|
231
|
+
# @see https://rubydoc.info/stdlib/resolv/Resolv/DNS/Resource/ANY
|
|
232
|
+
#
|
|
233
|
+
def get_any_records(name)
|
|
234
|
+
get_records(name,:any)
|
|
235
|
+
end
|
|
236
|
+
|
|
237
|
+
#
|
|
238
|
+
# Queries the `CNAME` record for the host name.
|
|
239
|
+
#
|
|
240
|
+
# @param [String] name
|
|
241
|
+
# The host name to query.
|
|
242
|
+
#
|
|
243
|
+
# @return [Resolv::DNS::Resource::IN::CNAME, nil]
|
|
244
|
+
# The `CNAME` record or `nil` if the host name has no `CNAME`
|
|
245
|
+
# record.
|
|
246
|
+
#
|
|
247
|
+
# @see https://rubydoc.info/stdlib/resolv/Resolv/DNS/Resource/CNAME
|
|
248
|
+
#
|
|
249
|
+
def get_cname_record(name)
|
|
250
|
+
get_record(name,:cname)
|
|
251
|
+
end
|
|
252
|
+
|
|
253
|
+
#
|
|
254
|
+
# Queries the canonical name for the host name.
|
|
255
|
+
#
|
|
256
|
+
# @param [String] name
|
|
257
|
+
# The host name to query.
|
|
258
|
+
#
|
|
259
|
+
# @return [String, nil]
|
|
260
|
+
# The canonical name for the host or `nil` if the host has no
|
|
261
|
+
# `CNAME` record.
|
|
262
|
+
#
|
|
263
|
+
def get_cname(name)
|
|
264
|
+
if (cname = get_cname_record(name))
|
|
265
|
+
cname.name.to_s
|
|
266
|
+
end
|
|
267
|
+
end
|
|
268
|
+
|
|
269
|
+
#
|
|
270
|
+
# Queries the `HINFO` record for the host name.
|
|
271
|
+
#
|
|
272
|
+
# @param [String] name
|
|
273
|
+
# The host name to query.
|
|
274
|
+
#
|
|
275
|
+
# @return [Resolv::DNS::Resource::IN::HINFO, nil]
|
|
276
|
+
# The `HINFO` DNS record or `nil` if the host name has no `HINFO`
|
|
277
|
+
# record.
|
|
278
|
+
#
|
|
279
|
+
# @see https://rubydoc.info/stdlib/resolv/Resolv/DNS/Resource/HINFO
|
|
280
|
+
#
|
|
281
|
+
def get_hinfo_record(name)
|
|
282
|
+
get_record(name,:hinfo)
|
|
283
|
+
end
|
|
284
|
+
|
|
285
|
+
#
|
|
286
|
+
# Queries the first `A` record belonging to the host name.
|
|
287
|
+
#
|
|
288
|
+
# @param [String] name
|
|
289
|
+
# The host name to query.
|
|
290
|
+
#
|
|
291
|
+
# @return [Resolv::DNS::Resource::IN::A, nil]
|
|
292
|
+
# The first `A` DNS record or `nil` if the host name has no `A`
|
|
293
|
+
# records.
|
|
294
|
+
#
|
|
295
|
+
# @see https://rubydoc.info/stdlib/resolv/Resolv/DNS/Resource/IN/A
|
|
296
|
+
#
|
|
297
|
+
def get_a_record(name)
|
|
298
|
+
get_record(name,:a)
|
|
299
|
+
end
|
|
300
|
+
|
|
301
|
+
#
|
|
302
|
+
# Queries the first IPv4 address belonging to the host name.
|
|
303
|
+
#
|
|
304
|
+
# @param [String] name
|
|
305
|
+
# The host name to query.
|
|
306
|
+
#
|
|
307
|
+
# @return [String, nil]
|
|
308
|
+
# The first IPv4 address belonging to the host name.
|
|
309
|
+
#
|
|
310
|
+
def get_a_address(name)
|
|
311
|
+
if (a = get_a_record(name))
|
|
312
|
+
a.address.to_s
|
|
313
|
+
end
|
|
314
|
+
end
|
|
315
|
+
|
|
316
|
+
alias get_ipv4_address get_a_address
|
|
317
|
+
|
|
318
|
+
#
|
|
319
|
+
# Queries all `A` records belonging to the host name.
|
|
320
|
+
#
|
|
321
|
+
# @param [String] name
|
|
322
|
+
# The host name to query.
|
|
323
|
+
#
|
|
324
|
+
# @return [Array<Resolv::DNS::Resource::IN::A>]
|
|
325
|
+
# All of the `A` DNS records belonging to the host name.
|
|
326
|
+
#
|
|
327
|
+
# @see https://rubydoc.info/stdlib/resolv/Resolv/DNS/Resource/IN/A
|
|
328
|
+
#
|
|
329
|
+
def get_a_records(name)
|
|
330
|
+
get_records(name,:a)
|
|
331
|
+
end
|
|
332
|
+
|
|
333
|
+
#
|
|
334
|
+
# Queries all IPv4 addresses belonging to the host name.
|
|
335
|
+
#
|
|
336
|
+
# @param [String] name
|
|
337
|
+
# The host name to query.
|
|
338
|
+
#
|
|
339
|
+
# @return [Array<String>]
|
|
340
|
+
# All of the IPv4 addresses belonging to the host name.
|
|
341
|
+
#
|
|
342
|
+
def get_a_addresses(name)
|
|
343
|
+
records = get_a_records(name)
|
|
344
|
+
records.map! { |a| a.address.to_s }
|
|
345
|
+
records
|
|
346
|
+
end
|
|
347
|
+
|
|
348
|
+
alias get_ipv4_addresses get_a_addresses
|
|
349
|
+
|
|
350
|
+
#
|
|
351
|
+
# Queries the first `AAAA` DNS records belonging to the host name.
|
|
352
|
+
#
|
|
353
|
+
# @param [String] name
|
|
354
|
+
# The host name to query.
|
|
355
|
+
#
|
|
356
|
+
# @return [Resolv::DNS::Resource::IN::AAAA, nil]
|
|
357
|
+
# The first `AAAA` DNS record or `nil` if the host name has no
|
|
358
|
+
# `AAAA` records.
|
|
359
|
+
#
|
|
360
|
+
# @see https://rubydoc.info/stdlib/resolv/Resolv/DNS/Resource/IN/AAAA
|
|
361
|
+
#
|
|
362
|
+
def get_aaaa_record(name)
|
|
363
|
+
get_record(name,:aaaa)
|
|
364
|
+
end
|
|
365
|
+
|
|
366
|
+
#
|
|
367
|
+
# Queries the first IPv6 address belonging to the host name.
|
|
368
|
+
#
|
|
369
|
+
# @param [String] name
|
|
370
|
+
# The host name to query.
|
|
371
|
+
#
|
|
372
|
+
# @return [String, nil]
|
|
373
|
+
# The first IPv6 address or `nil` if the host name has no IPv6
|
|
374
|
+
# addresses.
|
|
375
|
+
#
|
|
376
|
+
def get_aaaa_address(name)
|
|
377
|
+
if (aaaa = get_aaaa_record(name))
|
|
378
|
+
aaaa.address.to_s
|
|
379
|
+
end
|
|
380
|
+
end
|
|
381
|
+
|
|
382
|
+
alias get_ipv6_address get_aaaa_address
|
|
383
|
+
|
|
384
|
+
#
|
|
385
|
+
# Queries all `AAAA` DNS records belonging to the host name.
|
|
386
|
+
#
|
|
387
|
+
# @param [String] name
|
|
388
|
+
# The host name to query.
|
|
389
|
+
#
|
|
390
|
+
# @return [Array<Resolv::DNS::Resource::IN::AAAA>]
|
|
391
|
+
# All of the `AAAA` DNS records belonging to the host name.
|
|
392
|
+
#
|
|
393
|
+
# @see https://rubydoc.info/stdlib/resolv/Resolv/DNS/Resource/IN/AAAA
|
|
394
|
+
#
|
|
395
|
+
def get_aaaa_records(name)
|
|
396
|
+
get_records(name,:aaaa)
|
|
397
|
+
end
|
|
398
|
+
|
|
399
|
+
#
|
|
400
|
+
# Queries all IPv6 addresses belonging to the host name.
|
|
401
|
+
#
|
|
402
|
+
# @param [String] name
|
|
403
|
+
# The host name to query.
|
|
404
|
+
#
|
|
405
|
+
# @return [Array<String>]
|
|
406
|
+
# All IPv6 addresses belonging to the host name.
|
|
407
|
+
#
|
|
408
|
+
def get_aaaa_addresses(name)
|
|
409
|
+
records = get_aaaa_records(name)
|
|
410
|
+
records.map! { |aaaa| aaaa.address.to_s }
|
|
411
|
+
records
|
|
412
|
+
end
|
|
413
|
+
|
|
414
|
+
alias get_ipv6_addresses get_aaaa_addresses
|
|
415
|
+
|
|
416
|
+
#
|
|
417
|
+
# Queries the first IPv4 or IPv6 address belonging to the host name.
|
|
418
|
+
#
|
|
419
|
+
# @param [String] name
|
|
420
|
+
# The host name to query.
|
|
421
|
+
#
|
|
422
|
+
# @return [String, nil]
|
|
423
|
+
# The first IPv4 or IPv6 address or `nil` if the host name has no
|
|
424
|
+
# IPv4 or IPv6 addresses.
|
|
425
|
+
#
|
|
426
|
+
def get_ip_address(name)
|
|
427
|
+
get_ipv4_address(name) || get_ipv6_address(name)
|
|
428
|
+
end
|
|
429
|
+
|
|
430
|
+
#
|
|
431
|
+
# Queries all IPv4 and IPv6 addresses belonging to the host name.
|
|
432
|
+
#
|
|
433
|
+
# @param [String] name
|
|
434
|
+
# The host name to query.
|
|
435
|
+
#
|
|
436
|
+
# @return [Array<String>]
|
|
437
|
+
# All IPv4 and IPv6 addresses belonging to the host name.
|
|
438
|
+
#
|
|
439
|
+
def get_ip_addresses(name)
|
|
440
|
+
get_ipv4_addresses(name).concat(get_ipv6_addresses(name))
|
|
441
|
+
end
|
|
442
|
+
|
|
443
|
+
#
|
|
444
|
+
# Queries all `SRV` DNS records belonging to the host name.
|
|
445
|
+
#
|
|
446
|
+
# @param [String] name
|
|
447
|
+
# The host name to query.
|
|
448
|
+
#
|
|
449
|
+
# @return [Array<Resolv::DNS::Resource::IN::SRV>]
|
|
450
|
+
# All `SRV` DNS records belonging to the host name.
|
|
451
|
+
#
|
|
452
|
+
# @see https://rubydoc.info/stdlib/resolv/Resolv/DNS/Resource/IN/SRV
|
|
453
|
+
#
|
|
454
|
+
def get_srv_records(name)
|
|
455
|
+
get_records(name,:srv)
|
|
456
|
+
end
|
|
457
|
+
|
|
458
|
+
#
|
|
459
|
+
# Queries all `WKS` (Well-Known-Service) DNS records belonging to the
|
|
460
|
+
# host name.
|
|
461
|
+
#
|
|
462
|
+
# @param [String] name
|
|
463
|
+
# The host name to query.
|
|
464
|
+
#
|
|
465
|
+
# @return [Array<Resolv::DNS::Resource::IN::WKS>]
|
|
466
|
+
# All `WKS` DNS records belonging to the host name.
|
|
467
|
+
#
|
|
468
|
+
# @see https://rubydoc.info/stdlib/resolv/Resolv/DNS/Resource/IN/WKS
|
|
469
|
+
#
|
|
470
|
+
def get_wks_records(name)
|
|
471
|
+
get_records(name,:wks)
|
|
472
|
+
end
|
|
473
|
+
|
|
474
|
+
#
|
|
475
|
+
# Queries the `LOC` (Location) DNS record of the host name.
|
|
476
|
+
#
|
|
477
|
+
# @param [String] name
|
|
478
|
+
# The host name to query.
|
|
479
|
+
#
|
|
480
|
+
# @return [Resolv::DNS::Resource::LOC, nil]
|
|
481
|
+
# The `LOC` DNS record of the host name or `nil` if the host name
|
|
482
|
+
# has no `LOC` record.
|
|
483
|
+
#
|
|
484
|
+
# @see https://rubydoc.info/stdlib/resolv/Resolv/DNS/Resource/LOC
|
|
485
|
+
#
|
|
486
|
+
def get_loc_record(name)
|
|
487
|
+
get_record(name,:loc)
|
|
488
|
+
end
|
|
489
|
+
|
|
490
|
+
#
|
|
491
|
+
# Queries the `MINFO` (Machine-Info) DNS record of the host name.
|
|
492
|
+
#
|
|
493
|
+
# @param [String] name
|
|
494
|
+
# The host name to query.
|
|
495
|
+
#
|
|
496
|
+
# @return [Resolv::DNS::Resource::MINFO, nil]
|
|
497
|
+
# The `MINFO` DNS record of the host name or `nil` if the host name
|
|
498
|
+
# has no `MINFO` record.
|
|
499
|
+
#
|
|
500
|
+
# @see https://rubydoc.info/stdlib/resolv/Resolv/DNS/Resource/MINFO
|
|
501
|
+
#
|
|
502
|
+
def get_minfo_record(name)
|
|
503
|
+
get_record(name,:minfo)
|
|
504
|
+
end
|
|
505
|
+
|
|
506
|
+
#
|
|
507
|
+
# Queries all `MX` DNS records belonging to the host name.
|
|
508
|
+
#
|
|
509
|
+
# @param [String] name
|
|
510
|
+
# The host name to query.
|
|
511
|
+
#
|
|
512
|
+
# @return [Array<Resolv::DNS::Resource::MX>]
|
|
513
|
+
# All `MX` DNS records belonging to the host name.
|
|
514
|
+
#
|
|
515
|
+
# @see https://rubydoc.info/stdlib/resolv/Resolv/DNS/Resource/MX
|
|
516
|
+
#
|
|
517
|
+
def get_mx_records(name)
|
|
518
|
+
get_records(name,:mx)
|
|
519
|
+
end
|
|
520
|
+
|
|
521
|
+
#
|
|
522
|
+
# Queries the mailservers for the host name.
|
|
523
|
+
#
|
|
524
|
+
# @param [String] name
|
|
525
|
+
# The host name to query.
|
|
526
|
+
#
|
|
527
|
+
# @return [Array<String>]
|
|
528
|
+
# The host names of the mailservers serving the given host name.
|
|
529
|
+
#
|
|
530
|
+
def get_mailservers(name)
|
|
531
|
+
records = get_mx_records(name)
|
|
532
|
+
records.map! { |mx| mx.exchange.to_s }
|
|
533
|
+
records
|
|
534
|
+
end
|
|
535
|
+
|
|
536
|
+
#
|
|
537
|
+
# Queries all `NS` DNS records belonging to the host name.
|
|
538
|
+
#
|
|
539
|
+
# @param [String] name
|
|
540
|
+
# The host name to query.
|
|
541
|
+
#
|
|
542
|
+
# @return [Array<Resolv::DNS::Resource::NS>]
|
|
543
|
+
# All `NS` DNS records belonging to the host name.
|
|
544
|
+
#
|
|
545
|
+
# @see https://rubydoc.info/stdlib/resolv/Resolv/DNS/Resource/NS
|
|
546
|
+
#
|
|
547
|
+
def get_ns_records(name)
|
|
548
|
+
get_records(name,:ns)
|
|
549
|
+
end
|
|
550
|
+
|
|
551
|
+
#
|
|
552
|
+
# Queries the nameservers for the host name.
|
|
553
|
+
#
|
|
554
|
+
# @param [String] name
|
|
555
|
+
# The host name to query.
|
|
556
|
+
#
|
|
557
|
+
# @return [Array<String>]
|
|
558
|
+
# The host names of the nameservers serving the given host name.
|
|
559
|
+
#
|
|
560
|
+
def get_nameservers(name)
|
|
561
|
+
records = get_ns_records(name)
|
|
562
|
+
records.map! { |ns| ns.name.to_s }
|
|
563
|
+
records
|
|
564
|
+
end
|
|
565
|
+
|
|
566
|
+
#
|
|
567
|
+
# Queries the first `PTR` DNS record for the IP address.
|
|
568
|
+
#
|
|
569
|
+
# @param [String] ip
|
|
570
|
+
# The IP address to query.
|
|
571
|
+
#
|
|
572
|
+
# @return [Resolv::DNS::Resource::PTR, nil]
|
|
573
|
+
# The first `PTR` DNS record of the host name or `nil` if the host
|
|
574
|
+
# name has no `PTR` records.
|
|
575
|
+
#
|
|
576
|
+
# @see https://rubydoc.info/stdlib/resolv/Resolv/DNS/Resource/PTR
|
|
577
|
+
#
|
|
578
|
+
def get_ptr_record(ip)
|
|
579
|
+
get_record(ip,:ptr)
|
|
580
|
+
end
|
|
581
|
+
|
|
582
|
+
#
|
|
583
|
+
# Queries the `PTR` host name for the IP address.
|
|
584
|
+
#
|
|
585
|
+
# @param [String] ip
|
|
586
|
+
# The IP address to query.
|
|
587
|
+
#
|
|
588
|
+
# @return [String, nil]
|
|
589
|
+
# The host name that points to the given IP.
|
|
590
|
+
#
|
|
591
|
+
def get_ptr_name(ip)
|
|
592
|
+
if (ptr = get_ptr_record(ip))
|
|
593
|
+
ptr.name.to_s
|
|
594
|
+
end
|
|
595
|
+
end
|
|
596
|
+
|
|
597
|
+
#
|
|
598
|
+
# Queries all `PTR` DNS records for the IP address.
|
|
599
|
+
#
|
|
600
|
+
# @param [String] ip
|
|
601
|
+
# The IP address to query.
|
|
602
|
+
#
|
|
603
|
+
# @return [Array<Resolv::DNS::Resource::PTR>]
|
|
604
|
+
# All `PTR` DNS records for the given IP.
|
|
605
|
+
#
|
|
606
|
+
# @see https://rubydoc.info/stdlib/resolv/Resolv/DNS/Resource/PTR
|
|
607
|
+
#
|
|
608
|
+
def get_ptr_records(ip)
|
|
609
|
+
get_records(ip,:ptr)
|
|
610
|
+
end
|
|
611
|
+
|
|
612
|
+
#
|
|
613
|
+
# Queries all `PTR` names for the IP address.
|
|
614
|
+
#
|
|
615
|
+
# @param [String] ip
|
|
616
|
+
# The IP address to query.
|
|
617
|
+
#
|
|
618
|
+
# @return [Array<String>]
|
|
619
|
+
# The `PTR` names for the given IP.
|
|
620
|
+
#
|
|
621
|
+
def get_ptr_names(ip)
|
|
622
|
+
records = get_ptr_records(ip)
|
|
623
|
+
records.map! { |ptr| ptr.name.to_s }
|
|
624
|
+
records
|
|
625
|
+
end
|
|
626
|
+
|
|
627
|
+
#
|
|
628
|
+
# Queries the first `SOA` DNS record belonging to the host name.
|
|
629
|
+
#
|
|
630
|
+
# @param [String] name
|
|
631
|
+
# The host name to query.
|
|
632
|
+
#
|
|
633
|
+
# @return [Resolv::DNS::Resource::SOA, nil]
|
|
634
|
+
# The first `SOA` DNS record for the host name or `nil` if the host
|
|
635
|
+
# name has no `SOA` records.
|
|
636
|
+
#
|
|
637
|
+
# @see https://rubydoc.info/stdlib/resolv/Resolv/DNS/Resource/SOA
|
|
638
|
+
#
|
|
639
|
+
def get_soa_record(name)
|
|
640
|
+
get_record(name,:soa)
|
|
641
|
+
end
|
|
642
|
+
|
|
643
|
+
#
|
|
644
|
+
# Queiries the first `TXT` DNS record belonging to the host name.
|
|
645
|
+
#
|
|
646
|
+
# @param [String] name
|
|
647
|
+
# The host name to query.
|
|
648
|
+
#
|
|
649
|
+
# @return [Resolv::DNS::Resource::TXT, nil]
|
|
650
|
+
# The first `TXT` DNS record for the host name or `nil` if the host
|
|
651
|
+
# name has no `TXT` records.
|
|
652
|
+
#
|
|
653
|
+
# @see https://rubydoc.info/stdlib/resolv/Resolv/DNS/Resource/TXT
|
|
654
|
+
#
|
|
655
|
+
def get_txt_record(name)
|
|
656
|
+
get_record(name,:txt)
|
|
657
|
+
end
|
|
658
|
+
|
|
659
|
+
#
|
|
660
|
+
# Queries the first `TXT` string belonging to the host name.
|
|
661
|
+
#
|
|
662
|
+
# @param [String] name
|
|
663
|
+
# The host name to query.
|
|
664
|
+
#
|
|
665
|
+
# @return [String, nil]
|
|
666
|
+
# The first `TXT` string belonging to the host name or `nil` if the
|
|
667
|
+
# host name has no `TXT` records.
|
|
668
|
+
#
|
|
669
|
+
def get_txt_string(name)
|
|
670
|
+
if (txt = get_txt_record(name))
|
|
671
|
+
txt.strings.join
|
|
672
|
+
end
|
|
673
|
+
end
|
|
674
|
+
|
|
675
|
+
#
|
|
676
|
+
# Queries all `TXT` DNS records belonging to the host name.
|
|
677
|
+
#
|
|
678
|
+
# @param [String] name
|
|
679
|
+
# The host name to query.
|
|
680
|
+
#
|
|
681
|
+
# @return [Array<Resolv::DNS::Resource::TXT>]
|
|
682
|
+
# All of the `TXT` DNS records belonging to the host name.
|
|
683
|
+
#
|
|
684
|
+
# @see https://rubydoc.info/stdlib/resolv/Resolv/DNS/Resource/TXT
|
|
685
|
+
#
|
|
686
|
+
def get_txt_records(name)
|
|
687
|
+
get_records(name,:txt)
|
|
688
|
+
end
|
|
689
|
+
|
|
690
|
+
#
|
|
691
|
+
# Queries all of the `TXT` string values of the host name.
|
|
692
|
+
#
|
|
693
|
+
# @param [String] name
|
|
694
|
+
# The host name to query.
|
|
695
|
+
#
|
|
696
|
+
# @return [Array<String>]
|
|
697
|
+
# All `TXT` string values belonging of the host name.
|
|
698
|
+
#
|
|
699
|
+
def get_txt_strings(name)
|
|
700
|
+
get_txt_records(name).map(&:strings).flatten
|
|
701
|
+
end
|
|
702
|
+
|
|
703
|
+
end
|
|
704
|
+
end
|
|
705
|
+
end
|
|
706
|
+
end
|
|
707
|
+
end
|