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,443 @@
|
|
|
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/tcp/proxy'
|
|
20
|
+
require 'ronin/support/network/dns/idn'
|
|
21
|
+
|
|
22
|
+
require 'socket'
|
|
23
|
+
require 'timeout'
|
|
24
|
+
|
|
25
|
+
module Ronin
|
|
26
|
+
module Support
|
|
27
|
+
module Network
|
|
28
|
+
#
|
|
29
|
+
# @since 1.0.0
|
|
30
|
+
#
|
|
31
|
+
module TCP
|
|
32
|
+
#
|
|
33
|
+
# Tests whether a remote TCP port is open.
|
|
34
|
+
#
|
|
35
|
+
# @param [String] host
|
|
36
|
+
# The host to connect to.
|
|
37
|
+
#
|
|
38
|
+
# @param [Integer] port
|
|
39
|
+
# The port to connect to.
|
|
40
|
+
#
|
|
41
|
+
# @param [Integer] timeout (5)
|
|
42
|
+
# The maximum time to attempt connecting.
|
|
43
|
+
#
|
|
44
|
+
# @param [Hash{Symbol => Object}] kwargs
|
|
45
|
+
# Additional keyword arguments for {connect}.
|
|
46
|
+
#
|
|
47
|
+
# @option kwargs [String, nil] bind_host
|
|
48
|
+
# The local host to bind to.
|
|
49
|
+
#
|
|
50
|
+
# @option kwargs [Integer, nil] bind_port
|
|
51
|
+
# The local port to bind to.
|
|
52
|
+
#
|
|
53
|
+
# @return [Boolean, nil]
|
|
54
|
+
# Specifies whether the remote TCP port is open.
|
|
55
|
+
# If the connection was not accepted, `nil` will be returned.
|
|
56
|
+
#
|
|
57
|
+
# @example
|
|
58
|
+
# open?('example.com',80)
|
|
59
|
+
# # => true
|
|
60
|
+
#
|
|
61
|
+
# @example Using a timeout:
|
|
62
|
+
# TCP.open?('example.com',1111, timeout: 5)
|
|
63
|
+
# # => nil
|
|
64
|
+
#
|
|
65
|
+
# @api public
|
|
66
|
+
#
|
|
67
|
+
# @since 0.5.0
|
|
68
|
+
#
|
|
69
|
+
def self.open?(host,port, timeout: 5, **kwargs)
|
|
70
|
+
begin
|
|
71
|
+
Timeout.timeout(timeout) do
|
|
72
|
+
socket = connect(host,port,**kwargs)
|
|
73
|
+
socket.close
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
return true
|
|
77
|
+
rescue Timeout::Error
|
|
78
|
+
return nil
|
|
79
|
+
rescue SocketError, SystemCallError
|
|
80
|
+
return false
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
#
|
|
85
|
+
# Creates a new TCP socket connected to a given host and port.
|
|
86
|
+
#
|
|
87
|
+
# @param [String] host
|
|
88
|
+
# The host to connect to.
|
|
89
|
+
#
|
|
90
|
+
# @param [Integer] port
|
|
91
|
+
# The port to connect to.
|
|
92
|
+
#
|
|
93
|
+
# @param [String, nil] bind_host
|
|
94
|
+
# The local host to bind to.
|
|
95
|
+
#
|
|
96
|
+
# @param [Integer, nil] bind_port
|
|
97
|
+
# The local port to bind to.
|
|
98
|
+
#
|
|
99
|
+
# @yield [socket]
|
|
100
|
+
# If a block is given, it will be passed the newly created socket.
|
|
101
|
+
# Once the block returns the socket will be closed.
|
|
102
|
+
#
|
|
103
|
+
# @yieldparam [TCPsocket] socket
|
|
104
|
+
# The newly created TCP socket.
|
|
105
|
+
#
|
|
106
|
+
# @return [TCPSocket, nil]
|
|
107
|
+
# The newly created TCPSocket object. If a block is given a `nil`
|
|
108
|
+
# will be returned.
|
|
109
|
+
#
|
|
110
|
+
# @example
|
|
111
|
+
# TCP.connect('www.example.com',80)
|
|
112
|
+
# # => #<TCPSocket:fd 5, AF_INET, 192.168.122.165, 40364>
|
|
113
|
+
#
|
|
114
|
+
# @example
|
|
115
|
+
# TCP.connect('www.wired.com',80) do |socket|
|
|
116
|
+
# socket.write("GET /\n\n")
|
|
117
|
+
#
|
|
118
|
+
# puts socket.readlines
|
|
119
|
+
# end
|
|
120
|
+
#
|
|
121
|
+
# @see https://rubydoc.info/stdlib/socket/TCPSocket
|
|
122
|
+
#
|
|
123
|
+
# @api public
|
|
124
|
+
#
|
|
125
|
+
def self.connect(host,port, bind_host: nil, bind_port: nil)
|
|
126
|
+
host = DNS::IDN.to_ascii(host)
|
|
127
|
+
port = port.to_i
|
|
128
|
+
|
|
129
|
+
socket = if bind_host || bind_port
|
|
130
|
+
TCPSocket.new(host,port,bind_host.to_s,bind_port.to_i)
|
|
131
|
+
else
|
|
132
|
+
TCPSocket.new(host,port)
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
if block_given?
|
|
136
|
+
yield socket
|
|
137
|
+
socket.close
|
|
138
|
+
else
|
|
139
|
+
return socket
|
|
140
|
+
end
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
#
|
|
144
|
+
# Creates a new TCPSocket object, connected to a given host and port.
|
|
145
|
+
# The given data will then be written to the newly created TCPSocket.
|
|
146
|
+
#
|
|
147
|
+
# @param [String] data
|
|
148
|
+
# The data to send through the connection.
|
|
149
|
+
#
|
|
150
|
+
# @param [String] host
|
|
151
|
+
# The host to connect to.
|
|
152
|
+
#
|
|
153
|
+
# @param [Integer] port
|
|
154
|
+
# The port to connect to.
|
|
155
|
+
#
|
|
156
|
+
# @param [Hash{Symbol => Object}] kwargs
|
|
157
|
+
# Additional keyword arguments for {connect}.
|
|
158
|
+
#
|
|
159
|
+
# @option kwargs [String, nil] :bind_host
|
|
160
|
+
# The local host to bind to.
|
|
161
|
+
#
|
|
162
|
+
# @option kwargs [Integer, nil] :bind_port
|
|
163
|
+
# The local port to bind to.
|
|
164
|
+
#
|
|
165
|
+
# @yield [socket]
|
|
166
|
+
# If a block is given, it will be passed the newly created socket.
|
|
167
|
+
#
|
|
168
|
+
# @yieldparam [TCPSocket] socket
|
|
169
|
+
# The newly created TCPSocket object.
|
|
170
|
+
#
|
|
171
|
+
# @return [TCPSocket]
|
|
172
|
+
# The newly created TCPSocket object.
|
|
173
|
+
#
|
|
174
|
+
# @api public
|
|
175
|
+
#
|
|
176
|
+
def self.connect_and_send(data,host,port,**kwargs)
|
|
177
|
+
socket = connect(host,port,**kwargs)
|
|
178
|
+
socket.write(data)
|
|
179
|
+
|
|
180
|
+
yield socket if block_given?
|
|
181
|
+
return socket
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
#
|
|
185
|
+
# Reads the banner from the service running on the given host and
|
|
186
|
+
# port.
|
|
187
|
+
#
|
|
188
|
+
# @param [String] host
|
|
189
|
+
# The host to connect to.
|
|
190
|
+
#
|
|
191
|
+
# @param [Integer] port
|
|
192
|
+
# The port to connect to.
|
|
193
|
+
#
|
|
194
|
+
# @param [Hash{Symbol => Object}] kwargs
|
|
195
|
+
# Additional keyword arguments for {connect}.
|
|
196
|
+
#
|
|
197
|
+
# @option kwargs [String] :bind_host
|
|
198
|
+
# The local host to bind to.
|
|
199
|
+
#
|
|
200
|
+
# @option kwargs [Integer] :bind_port
|
|
201
|
+
# The local port to bind to.
|
|
202
|
+
#
|
|
203
|
+
# @yield [banner]
|
|
204
|
+
# If a block is given, it will be passed the grabbed banner.
|
|
205
|
+
#
|
|
206
|
+
# @yieldparam [String] banner
|
|
207
|
+
# The grabbed banner.
|
|
208
|
+
#
|
|
209
|
+
# @return [String]
|
|
210
|
+
# The grabbed banner.
|
|
211
|
+
#
|
|
212
|
+
# @example
|
|
213
|
+
# TCP.banner('pop.gmail.com',25)
|
|
214
|
+
# # => "220 mx.google.com ESMTP c20sm3096959rvf.1"
|
|
215
|
+
#
|
|
216
|
+
# @api public
|
|
217
|
+
#
|
|
218
|
+
def self.banner(host,port,**kwargs)
|
|
219
|
+
banner = nil
|
|
220
|
+
|
|
221
|
+
connect(host,port,**kwargs) do |socket|
|
|
222
|
+
banner = socket.readline.strip
|
|
223
|
+
end
|
|
224
|
+
|
|
225
|
+
yield banner if block_given?
|
|
226
|
+
return banner
|
|
227
|
+
end
|
|
228
|
+
|
|
229
|
+
#
|
|
230
|
+
# Connects to a specified host and port, sends the given data and then
|
|
231
|
+
# closes the connection.
|
|
232
|
+
#
|
|
233
|
+
# @param [String] data
|
|
234
|
+
# The data to send through the connection.
|
|
235
|
+
#
|
|
236
|
+
# @param [String] host
|
|
237
|
+
# The host to connect to.
|
|
238
|
+
#
|
|
239
|
+
# @param [Integer] port
|
|
240
|
+
# The port to connect to.
|
|
241
|
+
#
|
|
242
|
+
# @param [Hash{Symbol => Object}] kwargs
|
|
243
|
+
# Additional keyword arguments for {connect}.
|
|
244
|
+
#
|
|
245
|
+
# @option kwargs [String] :bind_host
|
|
246
|
+
# The local host to bind to.
|
|
247
|
+
#
|
|
248
|
+
# @option kwargs [Integer] :bind_port
|
|
249
|
+
# The local port to bind to.
|
|
250
|
+
#
|
|
251
|
+
# @return [true]
|
|
252
|
+
# The data was successfully sent.
|
|
253
|
+
#
|
|
254
|
+
# @example
|
|
255
|
+
# buffer = "GET /" + ('A' * 4096) + "\n\r"
|
|
256
|
+
# TCP.send(buffer,'victim.com',80)
|
|
257
|
+
# # => true
|
|
258
|
+
#
|
|
259
|
+
# @api public
|
|
260
|
+
#
|
|
261
|
+
def self.send(data,host,port,**kwargs)
|
|
262
|
+
connect(host,port,**kwargs) do |socket|
|
|
263
|
+
socket.write(data)
|
|
264
|
+
end
|
|
265
|
+
|
|
266
|
+
return true
|
|
267
|
+
end
|
|
268
|
+
|
|
269
|
+
#
|
|
270
|
+
# Creates a new TCPServer listening on a given host and port.
|
|
271
|
+
#
|
|
272
|
+
# @param [Integer, nil] port
|
|
273
|
+
# The local port to listen on.
|
|
274
|
+
#
|
|
275
|
+
# @param [String, nil] host
|
|
276
|
+
# The host to bind to.
|
|
277
|
+
#
|
|
278
|
+
# @param [Integer] backlog
|
|
279
|
+
# The maximum backlog of pending connections.
|
|
280
|
+
#
|
|
281
|
+
# @yield [server]
|
|
282
|
+
# The block which will be called after the server has been created.
|
|
283
|
+
#
|
|
284
|
+
# @yieldparam [TCPServer] server
|
|
285
|
+
# The newly created TCP server.
|
|
286
|
+
#
|
|
287
|
+
# @return [TCPServer]
|
|
288
|
+
# The new TCP server.
|
|
289
|
+
#
|
|
290
|
+
# @example
|
|
291
|
+
# server = TCP.server(port: 1337)
|
|
292
|
+
#
|
|
293
|
+
# @see https://rubydoc.info/stdlib/socket/TCPServer
|
|
294
|
+
#
|
|
295
|
+
# @api public
|
|
296
|
+
#
|
|
297
|
+
def self.server(port: 0, host: nil, backlog: 5)
|
|
298
|
+
server = if host
|
|
299
|
+
TCPServer.new(host.to_s,port.to_i)
|
|
300
|
+
else
|
|
301
|
+
TCPServer.new(port.to_i)
|
|
302
|
+
end
|
|
303
|
+
server.listen(backlog)
|
|
304
|
+
|
|
305
|
+
yield server if block_given?
|
|
306
|
+
return server
|
|
307
|
+
end
|
|
308
|
+
|
|
309
|
+
#
|
|
310
|
+
# Creates a new temporary TCPServer listening on a host and port.
|
|
311
|
+
#
|
|
312
|
+
# @param [Hash{Symbol => Object}] kwargs
|
|
313
|
+
# Additional keyword arguments for {server}.
|
|
314
|
+
#
|
|
315
|
+
# @option kwargs [Integer, nil] :port (0)
|
|
316
|
+
# The local port to bind to.
|
|
317
|
+
#
|
|
318
|
+
# @option kwargs [String, nil] :host
|
|
319
|
+
# The host to bind to.
|
|
320
|
+
#
|
|
321
|
+
# @option kwargs [Integer] :backlog (5)
|
|
322
|
+
# The maximum backlog of pending connections.
|
|
323
|
+
#
|
|
324
|
+
# @yield [server]
|
|
325
|
+
# The block which will be called after the server has been created.
|
|
326
|
+
# After the block has finished, the server will be closed.
|
|
327
|
+
#
|
|
328
|
+
# @yieldparam [TCPServer] server
|
|
329
|
+
# The newly created TCP server.
|
|
330
|
+
#
|
|
331
|
+
# @return [nil]
|
|
332
|
+
#
|
|
333
|
+
# @example
|
|
334
|
+
# TCP.server_session(port: 1337) do |server|
|
|
335
|
+
# client1 = server.accept
|
|
336
|
+
# client2 = server.accept
|
|
337
|
+
#
|
|
338
|
+
# client2.write(server.read_line)
|
|
339
|
+
#
|
|
340
|
+
# client1.close
|
|
341
|
+
# client2.close
|
|
342
|
+
# end
|
|
343
|
+
#
|
|
344
|
+
# @api public
|
|
345
|
+
#
|
|
346
|
+
def self.server_session(**kwargs,&block)
|
|
347
|
+
server = server(**kwargs,&block)
|
|
348
|
+
server.close()
|
|
349
|
+
return nil
|
|
350
|
+
end
|
|
351
|
+
|
|
352
|
+
#
|
|
353
|
+
# Creates a new TCPServer listening on a given host and port,
|
|
354
|
+
# accepting clients in a loop.
|
|
355
|
+
#
|
|
356
|
+
# @param [Hash{Symbol => Object}] kwargs
|
|
357
|
+
# Additional keyword arguments for {server}.
|
|
358
|
+
#
|
|
359
|
+
# @option kwargs [Integer, nil] :port (0)
|
|
360
|
+
# The local port to bind to.
|
|
361
|
+
#
|
|
362
|
+
# @option kwargs [String, nil] :host
|
|
363
|
+
# The host to bind to.
|
|
364
|
+
#
|
|
365
|
+
# @option kwargs [Integer] :backlog (5)
|
|
366
|
+
# The maximum backlog of pending connections.
|
|
367
|
+
#
|
|
368
|
+
# @yield [client]
|
|
369
|
+
# The given block will be passed the newly connected client.
|
|
370
|
+
# After the block has finished, the client will be closed.
|
|
371
|
+
#
|
|
372
|
+
# @yieldparam [TCPSocket] client
|
|
373
|
+
# A newly connected client.
|
|
374
|
+
#
|
|
375
|
+
# @return [nil]
|
|
376
|
+
#
|
|
377
|
+
# @example
|
|
378
|
+
# TCP.server_loop(port: 1337) do |client|
|
|
379
|
+
# client.puts 'lol'
|
|
380
|
+
# end
|
|
381
|
+
#
|
|
382
|
+
# @api public
|
|
383
|
+
#
|
|
384
|
+
# @since 0.5.0
|
|
385
|
+
#
|
|
386
|
+
def self.server_loop(**kwargs)
|
|
387
|
+
server_session(**kwargs) do |server|
|
|
388
|
+
loop do
|
|
389
|
+
client = server.accept
|
|
390
|
+
|
|
391
|
+
yield client if block_given?
|
|
392
|
+
client.close
|
|
393
|
+
end
|
|
394
|
+
end
|
|
395
|
+
end
|
|
396
|
+
|
|
397
|
+
#
|
|
398
|
+
# Creates a new TCPServer listening on a given host and port,
|
|
399
|
+
# accepts only one client and then stops listening.
|
|
400
|
+
#
|
|
401
|
+
# @param [Integer] backlog
|
|
402
|
+
# The maximum backlog of pending connections.
|
|
403
|
+
#
|
|
404
|
+
# @param [Hash{Symbol => Object}] kwargs
|
|
405
|
+
# Additional keyword arguments for {server}.
|
|
406
|
+
#
|
|
407
|
+
# @option kwargs [Integer, nil] :port
|
|
408
|
+
# The local port to bind to.
|
|
409
|
+
#
|
|
410
|
+
# @option kwargs [String, nil] :host
|
|
411
|
+
# The host to bind to.
|
|
412
|
+
#
|
|
413
|
+
# @yield [client]
|
|
414
|
+
# The given block will be passed the newly connected client.
|
|
415
|
+
# After the block has finished, both the client and the server
|
|
416
|
+
# will be closed.
|
|
417
|
+
#
|
|
418
|
+
# @yieldparam [TCPSocket] client
|
|
419
|
+
# The newly connected client.
|
|
420
|
+
#
|
|
421
|
+
# @return [nil]
|
|
422
|
+
#
|
|
423
|
+
# @example
|
|
424
|
+
# TCP.accept(port: 1337) do |client|
|
|
425
|
+
# client.puts 'lol'
|
|
426
|
+
# end
|
|
427
|
+
#
|
|
428
|
+
# @api public
|
|
429
|
+
#
|
|
430
|
+
# @since 0.5.0
|
|
431
|
+
#
|
|
432
|
+
def self.accept(backlog: 1, **kwargs)
|
|
433
|
+
server_session(backlog: backlog, **kwargs) do |server|
|
|
434
|
+
client = server.accept
|
|
435
|
+
|
|
436
|
+
yield client if block_given?
|
|
437
|
+
client.close
|
|
438
|
+
end
|
|
439
|
+
end
|
|
440
|
+
end
|
|
441
|
+
end
|
|
442
|
+
end
|
|
443
|
+
end
|
|
@@ -0,0 +1,150 @@
|
|
|
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/telnet'
|
|
20
|
+
require 'ronin/support/network/dns/idn'
|
|
21
|
+
|
|
22
|
+
module Ronin
|
|
23
|
+
module Support
|
|
24
|
+
module Network
|
|
25
|
+
#
|
|
26
|
+
# Provides helper methods for communicating with Telnet services.
|
|
27
|
+
#
|
|
28
|
+
# @deprecated Will be removed in 1.0.0.
|
|
29
|
+
#
|
|
30
|
+
module Telnet
|
|
31
|
+
#
|
|
32
|
+
# Provides helper methods for using the Telnet protocol.
|
|
33
|
+
#
|
|
34
|
+
module Mixin
|
|
35
|
+
#
|
|
36
|
+
# Creates a new Telnet connection.
|
|
37
|
+
#
|
|
38
|
+
# @param [String] host
|
|
39
|
+
# The host to connect to.
|
|
40
|
+
#
|
|
41
|
+
# @param [Integer] port
|
|
42
|
+
# The port to connect to.
|
|
43
|
+
#
|
|
44
|
+
# @param [Boolean] binmode
|
|
45
|
+
# Indicates that newline substitution shall not be performed.
|
|
46
|
+
#
|
|
47
|
+
# @param [String, nil] output_log
|
|
48
|
+
# The name of the file to write connection status messages and all
|
|
49
|
+
# received traffic to.
|
|
50
|
+
#
|
|
51
|
+
# @param [String, nil] dump_log
|
|
52
|
+
# Similar to the `:output_log` option, but connection output is also
|
|
53
|
+
# written in hexdump format.
|
|
54
|
+
#
|
|
55
|
+
# @param [Regexp] prompt
|
|
56
|
+
# A regular expression matching the host command-line prompt
|
|
57
|
+
# sequence, used to determine when a command has finished.
|
|
58
|
+
#
|
|
59
|
+
# @param [Boolean] telnet
|
|
60
|
+
# Indicates that the connection shall behave as a telnet connection.
|
|
61
|
+
#
|
|
62
|
+
# @param [Boolean] plain
|
|
63
|
+
# Indicates that the connection shall behave as a normal TCP
|
|
64
|
+
# connection.
|
|
65
|
+
#
|
|
66
|
+
# @param [Integer] timeout
|
|
67
|
+
# The number of seconds to wait before timing out both the initial
|
|
68
|
+
# attempt to connect to host, and all attempts to read data from the
|
|
69
|
+
# host.
|
|
70
|
+
#
|
|
71
|
+
# @param [Integer] wait_time
|
|
72
|
+
# The amount of time to wait after seeing what looks like a prompt.
|
|
73
|
+
#
|
|
74
|
+
# @param [Net::Telnet, IO, nil] proxy
|
|
75
|
+
# A proxy object to used instead of opening a direct connection to
|
|
76
|
+
# the host.
|
|
77
|
+
#
|
|
78
|
+
# @param [String, nil] user
|
|
79
|
+
# The user to login as.
|
|
80
|
+
#
|
|
81
|
+
# @param [String, nil] password
|
|
82
|
+
# The password to login with.
|
|
83
|
+
#
|
|
84
|
+
# @yield [telnet]
|
|
85
|
+
# If a block is given, it will be passed the newly created Telnet
|
|
86
|
+
# session.
|
|
87
|
+
#
|
|
88
|
+
# @yieldparam [Net::Telnet] telnet
|
|
89
|
+
# The newly created Telnet session.
|
|
90
|
+
#
|
|
91
|
+
# @return [Net::Telnet]
|
|
92
|
+
# The Telnet session
|
|
93
|
+
#
|
|
94
|
+
# @example
|
|
95
|
+
# telnet_connect('towel.blinkenlights.nl')
|
|
96
|
+
# # => #<Net::Telnet: ...>
|
|
97
|
+
#
|
|
98
|
+
# @example
|
|
99
|
+
# telnet_connect('towel.blinkenlights.nl') do |movie|
|
|
100
|
+
# movie.each_line { |line| puts line }
|
|
101
|
+
# end
|
|
102
|
+
#
|
|
103
|
+
# @api public
|
|
104
|
+
#
|
|
105
|
+
def telnet_connect(host, # connection options
|
|
106
|
+
proxy: Telnet.proxy,
|
|
107
|
+
port: Telnet::DEFAULT_PORT,
|
|
108
|
+
binmode: false,
|
|
109
|
+
wait_time: 0,
|
|
110
|
+
prompt: Telnet::DEFAULT_PROMPT,
|
|
111
|
+
timeout: Telnet.default_timeout,
|
|
112
|
+
telnet: nil,
|
|
113
|
+
plain: nil,
|
|
114
|
+
# authentication options
|
|
115
|
+
user: nil,
|
|
116
|
+
password: nil,
|
|
117
|
+
# log options
|
|
118
|
+
output_log: nil,
|
|
119
|
+
dump_log: nil)
|
|
120
|
+
host = DNS::IDN.to_ascii(host)
|
|
121
|
+
|
|
122
|
+
telnet_options = {
|
|
123
|
+
'Host' => host,
|
|
124
|
+
'Port' => port,
|
|
125
|
+
'Binmode' => binmode,
|
|
126
|
+
'Waittime' => wait_time,
|
|
127
|
+
'Prompt' => prompt,
|
|
128
|
+
'Timeout' => timeout
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
telnet_options['Telnetmode'] = true if (telnet && !plain)
|
|
132
|
+
telnet_options['Output_log'] = output_log if output_log
|
|
133
|
+
telnet_options['Dump_log'] = dump_log if dump_log
|
|
134
|
+
telnet_options['Proxy'] = proxy if proxy
|
|
135
|
+
|
|
136
|
+
telnet = Net::Telnet.new(telnet_options)
|
|
137
|
+
telnet.login(user,password) if user
|
|
138
|
+
|
|
139
|
+
if block_given?
|
|
140
|
+
yield telnet
|
|
141
|
+
telnet.close
|
|
142
|
+
else
|
|
143
|
+
return telnet
|
|
144
|
+
end
|
|
145
|
+
end
|
|
146
|
+
end
|
|
147
|
+
end
|
|
148
|
+
end
|
|
149
|
+
end
|
|
150
|
+
end
|
|
@@ -0,0 +1,90 @@
|
|
|
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
|
+
begin
|
|
20
|
+
require 'net/telnet'
|
|
21
|
+
rescue LoadError => error
|
|
22
|
+
warn "ronin/network/telnet requires the net-telnet gem be installed."
|
|
23
|
+
raise(error)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
module Ronin
|
|
27
|
+
module Support
|
|
28
|
+
module Network
|
|
29
|
+
#
|
|
30
|
+
# Provides helper methods for communicating with Telnet services.
|
|
31
|
+
#
|
|
32
|
+
# @deprecated Will be removed in 1.0.0.
|
|
33
|
+
#
|
|
34
|
+
module Telnet
|
|
35
|
+
# Default telnet port
|
|
36
|
+
DEFAULT_PORT = 23
|
|
37
|
+
|
|
38
|
+
# The default prompt regular expression
|
|
39
|
+
DEFAULT_PROMPT = /[$%#>] \z/n
|
|
40
|
+
|
|
41
|
+
# The default timeout
|
|
42
|
+
DEFAULT_TIMEOUT = 10
|
|
43
|
+
|
|
44
|
+
#
|
|
45
|
+
# @return [Integer]
|
|
46
|
+
# The default Ronin Telnet timeout.
|
|
47
|
+
#
|
|
48
|
+
# @api public
|
|
49
|
+
#
|
|
50
|
+
def self.default_timeout
|
|
51
|
+
@default_timeout ||= DEFAULT_TIMEOUT
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
#
|
|
55
|
+
# Sets the default Ronin Telnet timeout.
|
|
56
|
+
#
|
|
57
|
+
# @param [Integer] timeout
|
|
58
|
+
# The new default Ronin Telnet timeout.
|
|
59
|
+
#
|
|
60
|
+
# @api public
|
|
61
|
+
#
|
|
62
|
+
def self.default_timeout=(timeout)
|
|
63
|
+
@default_timeout = timeout
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
#
|
|
67
|
+
# @return [Telnet, IO, nil]
|
|
68
|
+
# The Ronin Telnet proxy.
|
|
69
|
+
#
|
|
70
|
+
# @api public
|
|
71
|
+
#
|
|
72
|
+
def self.proxy
|
|
73
|
+
@proxy ||= nil
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
#
|
|
77
|
+
# Sets the Ronin Telnet proxy.
|
|
78
|
+
#
|
|
79
|
+
# @param [Telnet, IO, nil] new_proxy
|
|
80
|
+
# The new Ronin Telnet proxy.
|
|
81
|
+
#
|
|
82
|
+
# @api public
|
|
83
|
+
#
|
|
84
|
+
def self.proxy=(new_proxy)
|
|
85
|
+
@proxy = new_proxy
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
end
|