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,249 @@
|
|
|
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/ip'
|
|
20
|
+
|
|
21
|
+
require 'ipaddr'
|
|
22
|
+
|
|
23
|
+
module Ronin
|
|
24
|
+
module Support
|
|
25
|
+
module Network
|
|
26
|
+
class IPRange
|
|
27
|
+
#
|
|
28
|
+
# Represents an arbitrary range of IP addresses.
|
|
29
|
+
#
|
|
30
|
+
# ## Examples
|
|
31
|
+
#
|
|
32
|
+
# range = Network::IPRange::Range.new('128.2.3.4','200.10.1.255')
|
|
33
|
+
# range.each { |ip| puts ip }
|
|
34
|
+
# # 128.2.3.4
|
|
35
|
+
# # 128.2.3.5
|
|
36
|
+
# # ...
|
|
37
|
+
# # 200.10.1.254
|
|
38
|
+
# # 200.10.1.255
|
|
39
|
+
#
|
|
40
|
+
# @since 1.0.0
|
|
41
|
+
#
|
|
42
|
+
# @api public
|
|
43
|
+
#
|
|
44
|
+
class Range
|
|
45
|
+
|
|
46
|
+
include Enumerable
|
|
47
|
+
|
|
48
|
+
# The first IP address of the ASN IP range.
|
|
49
|
+
#
|
|
50
|
+
# @return [IP]
|
|
51
|
+
attr_reader :begin
|
|
52
|
+
alias first begin
|
|
53
|
+
|
|
54
|
+
# The last IP address of the ASN IP range.
|
|
55
|
+
#
|
|
56
|
+
# @return [IP]
|
|
57
|
+
attr_reader :end
|
|
58
|
+
alias last end
|
|
59
|
+
|
|
60
|
+
# The common prefix shared by the first and last IP addresses in the
|
|
61
|
+
# ASN IP range.
|
|
62
|
+
#
|
|
63
|
+
# @return [String]
|
|
64
|
+
attr_reader :prefix
|
|
65
|
+
|
|
66
|
+
# The address family of the ASN IP range.
|
|
67
|
+
#
|
|
68
|
+
# @return [Socket::AF_INET, Socket::AF_INET6]
|
|
69
|
+
attr_reader :family
|
|
70
|
+
|
|
71
|
+
#
|
|
72
|
+
# Initializes the ASN IP range.
|
|
73
|
+
#
|
|
74
|
+
# @param [String] first
|
|
75
|
+
# The first IP address in the ASN IP range.
|
|
76
|
+
#
|
|
77
|
+
# @param [String] last
|
|
78
|
+
# The last IP address in the ASN IP range.
|
|
79
|
+
#
|
|
80
|
+
# @raise [ArgumentError]
|
|
81
|
+
# Both IP addresses must be either IPv4 addresses or IPv6 addresses.
|
|
82
|
+
#
|
|
83
|
+
# @api private
|
|
84
|
+
#
|
|
85
|
+
def initialize(first,last)
|
|
86
|
+
@begin = IP.new(first)
|
|
87
|
+
@end = IP.new(last)
|
|
88
|
+
|
|
89
|
+
if (@begin.ipv4? && !@end.ipv4?) ||
|
|
90
|
+
(@begin.ipv6? && !@end.ipv6?)
|
|
91
|
+
raise(ArgumentError,"must specify two IPv4 or IPv6 addresses: #{first.inspect} #{last.inspect}")
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
@prefix = self.class.prefix(first,last)
|
|
95
|
+
@family = @begin.family
|
|
96
|
+
|
|
97
|
+
@begin_uint = @begin.to_i
|
|
98
|
+
@end_uint = @end.to_i
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
#
|
|
102
|
+
# Finds the common prefix of two IP addresses.
|
|
103
|
+
#
|
|
104
|
+
# @param [String] first
|
|
105
|
+
# The first IP address of the ASN IP range.
|
|
106
|
+
#
|
|
107
|
+
# @param [String] last
|
|
108
|
+
# The last IP address of the ASN IP range.
|
|
109
|
+
#
|
|
110
|
+
# @return [String]
|
|
111
|
+
# The common prefix shared by both IPs.
|
|
112
|
+
#
|
|
113
|
+
# @api private
|
|
114
|
+
#
|
|
115
|
+
def self.prefix(first,last)
|
|
116
|
+
min_length = [first.length, last.length].min
|
|
117
|
+
|
|
118
|
+
min_length.times do |index|
|
|
119
|
+
if first[index] != last[index]
|
|
120
|
+
return first[0,index]
|
|
121
|
+
end
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
return first
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
#
|
|
128
|
+
# Determines whether the IP range is an IPv4 range.
|
|
129
|
+
#
|
|
130
|
+
# @return [Boolean]
|
|
131
|
+
#
|
|
132
|
+
def ipv4?
|
|
133
|
+
@begin.ipv4?
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
#
|
|
137
|
+
# Determines whether the IP range is an IPv6 range.
|
|
138
|
+
#
|
|
139
|
+
# @return [Boolean]
|
|
140
|
+
#
|
|
141
|
+
def ipv6?
|
|
142
|
+
@end.ipv6?
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
#
|
|
146
|
+
# Determines if the given IP belongs to the ASN IP range.
|
|
147
|
+
#
|
|
148
|
+
# @param [IPAddr, String] ip
|
|
149
|
+
# The IP to test.
|
|
150
|
+
#
|
|
151
|
+
# @return [Boolean]
|
|
152
|
+
# Specifies whether the IP is or is not within the ASN IP range.
|
|
153
|
+
#
|
|
154
|
+
def include?(ip)
|
|
155
|
+
ip = IPAddr.new(ip) unless ip.kind_of?(IPAddr)
|
|
156
|
+
ip_uint = ip.to_i
|
|
157
|
+
|
|
158
|
+
return (ip_uint >= @begin_uint) && (ip_uint <= @end_uint)
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
#
|
|
162
|
+
# Enumerates over every IP address in the ASN IP range.
|
|
163
|
+
#
|
|
164
|
+
# @yield [ip]
|
|
165
|
+
# If a block is given, it will be passed every IP within the ASN
|
|
166
|
+
# IP range.
|
|
167
|
+
#
|
|
168
|
+
# @yieldparam [IP] ip
|
|
169
|
+
# An IP within the ASN IP range.
|
|
170
|
+
#
|
|
171
|
+
# @return [Enumerator]
|
|
172
|
+
# If no block is given, an Enumerator will be returned.
|
|
173
|
+
#
|
|
174
|
+
# @note
|
|
175
|
+
# This method will skip IPv4 addresses ending in `.0` or `.255`.
|
|
176
|
+
#
|
|
177
|
+
# @example
|
|
178
|
+
# range = IPRange::Range.new('1.1.1.0','1.1.1.255')
|
|
179
|
+
# range.each { |ip| puts ip }
|
|
180
|
+
# # 1.1.1.1
|
|
181
|
+
# # 1.1.1.2
|
|
182
|
+
# # ...
|
|
183
|
+
# # 1.1.1.253
|
|
184
|
+
# # 1.1.1.254
|
|
185
|
+
#
|
|
186
|
+
# @example
|
|
187
|
+
# range IPRange::Range.new('1.1.1.100','1.1.3.200')
|
|
188
|
+
# range.each { |ip| puts ip }
|
|
189
|
+
# # 1.1.1.100
|
|
190
|
+
# # 1.1.1.101
|
|
191
|
+
# # ...
|
|
192
|
+
# # 1.1.3.199
|
|
193
|
+
# # 1.1.3.200
|
|
194
|
+
#
|
|
195
|
+
def each
|
|
196
|
+
return enum_for(__method__) unless block_given?
|
|
197
|
+
|
|
198
|
+
ipaddr = @begin.clone
|
|
199
|
+
|
|
200
|
+
(@begin_uint..@end_uint).each do |ip_uint|
|
|
201
|
+
# skip IPv4 addresses ending in .0 or .255
|
|
202
|
+
if (ipv4? && ((ip_uint & 0xff) == 0 || (ip_uint & 0xff) == 0xff))
|
|
203
|
+
next
|
|
204
|
+
end
|
|
205
|
+
|
|
206
|
+
ipaddr.send(:set,ip_uint)
|
|
207
|
+
yield ipaddr.to_s
|
|
208
|
+
end
|
|
209
|
+
|
|
210
|
+
return self
|
|
211
|
+
end
|
|
212
|
+
|
|
213
|
+
#
|
|
214
|
+
# Compares the IP range to another object.
|
|
215
|
+
#
|
|
216
|
+
# @param [Object] other
|
|
217
|
+
# The other object to compare to.
|
|
218
|
+
#
|
|
219
|
+
# @return [Boolean]
|
|
220
|
+
#
|
|
221
|
+
def ==(other)
|
|
222
|
+
self.class == other.class &&
|
|
223
|
+
self.begin == other.begin &&
|
|
224
|
+
self.end == other.end
|
|
225
|
+
end
|
|
226
|
+
|
|
227
|
+
#
|
|
228
|
+
# Converts the IP range to a String.
|
|
229
|
+
#
|
|
230
|
+
# @return [String]
|
|
231
|
+
#
|
|
232
|
+
def to_s
|
|
233
|
+
"#{@begin} - #{@end}"
|
|
234
|
+
end
|
|
235
|
+
|
|
236
|
+
#
|
|
237
|
+
# Inspects the IP range.
|
|
238
|
+
#
|
|
239
|
+
# @return [String]
|
|
240
|
+
#
|
|
241
|
+
def inspect
|
|
242
|
+
"#<#{self.class}: #{self}>"
|
|
243
|
+
end
|
|
244
|
+
|
|
245
|
+
end
|
|
246
|
+
end
|
|
247
|
+
end
|
|
248
|
+
end
|
|
249
|
+
end
|
|
@@ -0,0 +1,284 @@
|
|
|
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/ip_range/cidr'
|
|
20
|
+
require 'ronin/support/network/ip_range/glob'
|
|
21
|
+
require 'ronin/support/network/ip_range/range'
|
|
22
|
+
|
|
23
|
+
module Ronin
|
|
24
|
+
module Support
|
|
25
|
+
module Network
|
|
26
|
+
#
|
|
27
|
+
# Represents an IP range.
|
|
28
|
+
#
|
|
29
|
+
# ## Examples
|
|
30
|
+
#
|
|
31
|
+
# Enumerating over a CIDR range:
|
|
32
|
+
#
|
|
33
|
+
# IPRange.each('10.0.0.1/24') { |ip| puts ip }
|
|
34
|
+
# # 10.0.0.0
|
|
35
|
+
# # 10.0.0.1
|
|
36
|
+
# # 10.0.0.2
|
|
37
|
+
# # ...
|
|
38
|
+
# # 10.0.0.254
|
|
39
|
+
# # 10.0.0.255
|
|
40
|
+
#
|
|
41
|
+
# Enumerating over a IP-glob range:
|
|
42
|
+
#
|
|
43
|
+
# IPRange.each('10.0.1-3.*/24') { |ip| puts ip }
|
|
44
|
+
# # 10.0.1.1
|
|
45
|
+
# # 10.0.1.2
|
|
46
|
+
# # ...
|
|
47
|
+
# # 10.0.1.253
|
|
48
|
+
# # 10.0.1.254
|
|
49
|
+
# # ...
|
|
50
|
+
# # 10.0.2.1
|
|
51
|
+
# # 10.0.2.2
|
|
52
|
+
# # ...
|
|
53
|
+
# # 10.0.2.253
|
|
54
|
+
# # 10.0.2.254
|
|
55
|
+
# # ...
|
|
56
|
+
# # 10.0.3.1
|
|
57
|
+
# # 10.0.3.2
|
|
58
|
+
# # ...
|
|
59
|
+
# # 10.0.3.253
|
|
60
|
+
# # 10.0.3.254
|
|
61
|
+
#
|
|
62
|
+
# @api public
|
|
63
|
+
#
|
|
64
|
+
# @since 1.0.0
|
|
65
|
+
#
|
|
66
|
+
class IPRange
|
|
67
|
+
|
|
68
|
+
#
|
|
69
|
+
# Initializes the IP range.
|
|
70
|
+
#
|
|
71
|
+
# @param [String] string
|
|
72
|
+
# The IP range string.
|
|
73
|
+
#
|
|
74
|
+
# @example Initializing a CIDR IP range:
|
|
75
|
+
# ip_range = IPRange.new('10.0.0.1/24')
|
|
76
|
+
#
|
|
77
|
+
# @example Initializing an IP-glob range:
|
|
78
|
+
# ip_range = IPRange.new('10.0.1-3.*/24')
|
|
79
|
+
#
|
|
80
|
+
def initialize(string)
|
|
81
|
+
@range = if self.class.glob?(string) then Glob.new(string)
|
|
82
|
+
else CIDR.new(string)
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
#
|
|
87
|
+
# Alias for {#initialize new}.
|
|
88
|
+
#
|
|
89
|
+
# @param [String] string
|
|
90
|
+
# The IP range to parse.
|
|
91
|
+
#
|
|
92
|
+
# @return [IPRange]
|
|
93
|
+
# The parsed IP range.
|
|
94
|
+
#
|
|
95
|
+
# @see #initialize
|
|
96
|
+
#
|
|
97
|
+
def self.parse(string)
|
|
98
|
+
new(string)
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
#
|
|
102
|
+
# Enumerates over each IP address that is included in the addresses
|
|
103
|
+
# netmask. Supports both IPv4 and IPv6 addresses.
|
|
104
|
+
#
|
|
105
|
+
# @param [String] string
|
|
106
|
+
# The IP range string to parse and enumerate over.
|
|
107
|
+
#
|
|
108
|
+
# @yield [ip]
|
|
109
|
+
# The block which will be passed every IP address covered be the
|
|
110
|
+
# netmask of the IPAddr object.
|
|
111
|
+
#
|
|
112
|
+
# @yieldparam [String] ip
|
|
113
|
+
# An IP address.
|
|
114
|
+
#
|
|
115
|
+
# @return [Enumerator]
|
|
116
|
+
# If no block is given an Enumerator will be returned.
|
|
117
|
+
#
|
|
118
|
+
# @example Enumerating over a CIDR range:
|
|
119
|
+
# IPRange.each('10.0.0.1/24') { |ip| puts ip }
|
|
120
|
+
# # 10.0.0.0
|
|
121
|
+
# # 10.0.0.1
|
|
122
|
+
# # 10.0.0.2
|
|
123
|
+
# # ...
|
|
124
|
+
# # 10.0.0.254
|
|
125
|
+
# # 10.0.0.255
|
|
126
|
+
#
|
|
127
|
+
# @example Enumerating over a IP-glob range:
|
|
128
|
+
# IPRange.each('10.0.1-3.*/24') { |ip| puts ip }
|
|
129
|
+
# # 10.0.1.1
|
|
130
|
+
# # 10.0.1.2
|
|
131
|
+
# # ...
|
|
132
|
+
# # 10.0.1.253
|
|
133
|
+
# # 10.0.1.254
|
|
134
|
+
# # ...
|
|
135
|
+
# # 10.0.2.1
|
|
136
|
+
# # 10.0.2.2
|
|
137
|
+
# # ...
|
|
138
|
+
# # 10.0.2.253
|
|
139
|
+
# # 10.0.2.254
|
|
140
|
+
# # ...
|
|
141
|
+
# # 10.0.3.1
|
|
142
|
+
# # 10.0.3.2
|
|
143
|
+
# # ...
|
|
144
|
+
# # 10.0.3.253
|
|
145
|
+
# # 10.0.3.254
|
|
146
|
+
#
|
|
147
|
+
# @see #each
|
|
148
|
+
#
|
|
149
|
+
def self.each(string,&block)
|
|
150
|
+
new(string).each(&block)
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
#
|
|
154
|
+
# Determines if the IP range is a CIDR range.
|
|
155
|
+
#
|
|
156
|
+
# @param [String] string
|
|
157
|
+
# The IP range string to inspect.
|
|
158
|
+
#
|
|
159
|
+
# @return [Boolean]
|
|
160
|
+
# Indicates that the IP range is a CIDR range.
|
|
161
|
+
#
|
|
162
|
+
def self.cidr?(string)
|
|
163
|
+
!glob?(string)
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
#
|
|
167
|
+
# Determines if the IP range is a IP-glob range.
|
|
168
|
+
#
|
|
169
|
+
# @param [String] string
|
|
170
|
+
# The IP range string to inspect.
|
|
171
|
+
#
|
|
172
|
+
# @return [Boolean]
|
|
173
|
+
# Indicates that the IP range is a IP-glob range.
|
|
174
|
+
#
|
|
175
|
+
def self.glob?(string)
|
|
176
|
+
string.include?('*') ||
|
|
177
|
+
string.include?(',') ||
|
|
178
|
+
string.include?('-')
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
#
|
|
182
|
+
# The IP range string.
|
|
183
|
+
#
|
|
184
|
+
# @return [String]
|
|
185
|
+
#
|
|
186
|
+
def string
|
|
187
|
+
@range.string
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
#
|
|
191
|
+
# Determines if the IP range is IPv4.
|
|
192
|
+
#
|
|
193
|
+
# @return [Boolean]
|
|
194
|
+
#
|
|
195
|
+
def ipv4?
|
|
196
|
+
@range.ipv4?
|
|
197
|
+
end
|
|
198
|
+
|
|
199
|
+
#
|
|
200
|
+
# Determines if the IP range is IPv6.
|
|
201
|
+
#
|
|
202
|
+
# @return [Boolean]
|
|
203
|
+
#
|
|
204
|
+
def ipv6?
|
|
205
|
+
@range.ipv6?
|
|
206
|
+
end
|
|
207
|
+
|
|
208
|
+
#
|
|
209
|
+
# Enumerates over each IP address that is included in the addresses
|
|
210
|
+
# netmask. Supports both IPv4 and IPv6 addresses.
|
|
211
|
+
#
|
|
212
|
+
# @yield [ip]
|
|
213
|
+
# The block which will be passed every IP address covered be the
|
|
214
|
+
# netmask of the IPAddr object.
|
|
215
|
+
#
|
|
216
|
+
# @yieldparam [String] ip
|
|
217
|
+
# An IP address.
|
|
218
|
+
#
|
|
219
|
+
# @return [Enumerator]
|
|
220
|
+
# If no block is given an Enumerator will be returned.
|
|
221
|
+
#
|
|
222
|
+
# @example Enumerating over a CIDR range:
|
|
223
|
+
# ip_range = IPRange.new('10.0.0.1/24')
|
|
224
|
+
# ip_range.each { |ip| puts ip }
|
|
225
|
+
# # 10.0.0.0
|
|
226
|
+
# # 10.0.0.1
|
|
227
|
+
# # 10.0.0.2
|
|
228
|
+
# # ...
|
|
229
|
+
# # 10.0.0.254
|
|
230
|
+
# # 10.0.0.255
|
|
231
|
+
#
|
|
232
|
+
# @example Enumerating over a IP-glob range:
|
|
233
|
+
# ip_range = IPRange.new('10.0.1-3.*/24')
|
|
234
|
+
# ip_range.each { |ip| puts ip }
|
|
235
|
+
# # 10.0.1.1
|
|
236
|
+
# # 10.0.1.2
|
|
237
|
+
# # ...
|
|
238
|
+
# # 10.0.1.253
|
|
239
|
+
# # 10.0.1.254
|
|
240
|
+
# # ...
|
|
241
|
+
# # 10.0.2.1
|
|
242
|
+
# # 10.0.2.2
|
|
243
|
+
# # ...
|
|
244
|
+
# # 10.0.2.253
|
|
245
|
+
# # 10.0.2.254
|
|
246
|
+
# # ...
|
|
247
|
+
# # 10.0.3.1
|
|
248
|
+
# # 10.0.3.2
|
|
249
|
+
# # ...
|
|
250
|
+
# # 10.0.3.253
|
|
251
|
+
# # 10.0.3.254
|
|
252
|
+
#
|
|
253
|
+
# @see CIDR#each
|
|
254
|
+
# @see Glob#each
|
|
255
|
+
#
|
|
256
|
+
def each(&block)
|
|
257
|
+
@range.each(&block)
|
|
258
|
+
end
|
|
259
|
+
|
|
260
|
+
#
|
|
261
|
+
# Converts the IP range back to a String.
|
|
262
|
+
#
|
|
263
|
+
# @return [String]
|
|
264
|
+
#
|
|
265
|
+
# @see CIDR#to_s
|
|
266
|
+
# @see Glob#to_s
|
|
267
|
+
#
|
|
268
|
+
def to_s
|
|
269
|
+
@range.to_s
|
|
270
|
+
end
|
|
271
|
+
|
|
272
|
+
#
|
|
273
|
+
# Inspects the IP range.
|
|
274
|
+
#
|
|
275
|
+
# @return [String]
|
|
276
|
+
#
|
|
277
|
+
def inspect
|
|
278
|
+
"#<#{self.class}: #{@range.string}>"
|
|
279
|
+
end
|
|
280
|
+
|
|
281
|
+
end
|
|
282
|
+
end
|
|
283
|
+
end
|
|
284
|
+
end
|
|
@@ -0,0 +1,58 @@
|
|
|
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/ip/mixin'
|
|
20
|
+
require 'ronin/support/network/dns/mixin'
|
|
21
|
+
require 'ronin/support/network/tcp/mixin'
|
|
22
|
+
require 'ronin/support/network/udp/mixin'
|
|
23
|
+
require 'ronin/support/network/ssl/mixin'
|
|
24
|
+
require 'ronin/support/network/unix/mixin'
|
|
25
|
+
require 'ronin/support/network/http/mixin'
|
|
26
|
+
require 'ronin/support/network/ftp/mixin'
|
|
27
|
+
require 'ronin/support/network/smtp/mixin'
|
|
28
|
+
require 'ronin/support/network/esmtp/mixin'
|
|
29
|
+
require 'ronin/support/network/pop3/mixin'
|
|
30
|
+
require 'ronin/support/network/imap/mixin'
|
|
31
|
+
|
|
32
|
+
module Ronin
|
|
33
|
+
module Support
|
|
34
|
+
module Network
|
|
35
|
+
#
|
|
36
|
+
# Provides helper methods for networking functions.
|
|
37
|
+
#
|
|
38
|
+
# @api public
|
|
39
|
+
#
|
|
40
|
+
# @since 1.0.0
|
|
41
|
+
#
|
|
42
|
+
module Mixin
|
|
43
|
+
include IP::Mixin
|
|
44
|
+
include DNS::Mixin
|
|
45
|
+
include TCP::Mixin
|
|
46
|
+
include UDP::Mixin
|
|
47
|
+
include SSL::Mixin
|
|
48
|
+
include UNIX::Mixin
|
|
49
|
+
include HTTP::Mixin
|
|
50
|
+
include FTP::Mixin
|
|
51
|
+
include SMTP::Mixin
|
|
52
|
+
include ESMTP::Mixin
|
|
53
|
+
include POP3::Mixin
|
|
54
|
+
include IMAP::Mixin
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
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/binary/packet'
|
|
20
|
+
|
|
21
|
+
module Ronin
|
|
22
|
+
module Support
|
|
23
|
+
module Network
|
|
24
|
+
Packet = Binary::Packet
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|