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,113 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
#
|
|
3
|
+
# Copyright (c) 2006-2022 Hal Brodigan (postmodern.mod3 at gmail.com)
|
|
4
|
+
#
|
|
5
|
+
# ronin-support is free software: you can redistribute it and/or modify
|
|
6
|
+
# it under the terms of the GNU Lesser General Public License as published
|
|
7
|
+
# by the Free Software Foundation, either version 3 of the License, or
|
|
8
|
+
# (at your option) any later version.
|
|
9
|
+
#
|
|
10
|
+
# ronin-support is distributed in the hope that it will be useful,
|
|
11
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13
|
+
# GNU Lesser General Public License for more details.
|
|
14
|
+
#
|
|
15
|
+
# You should have received a copy of the GNU Lesser General Public License
|
|
16
|
+
# along with ronin-support. If not, see <https://www.gnu.org/licenses/>.
|
|
17
|
+
#
|
|
18
|
+
|
|
19
|
+
require 'ronin/support/network/dns/idn'
|
|
20
|
+
|
|
21
|
+
begin
|
|
22
|
+
require 'net/pop'
|
|
23
|
+
rescue LoadError => error
|
|
24
|
+
warn "ronin/network/pop3 requires the net-pop gem be listed in the Gemfile."
|
|
25
|
+
raise(error)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
module Ronin
|
|
29
|
+
module Support
|
|
30
|
+
module Network
|
|
31
|
+
module POP3
|
|
32
|
+
#
|
|
33
|
+
# Provides helper methods for communicating with POP3 services.
|
|
34
|
+
#
|
|
35
|
+
module Mixin
|
|
36
|
+
# Default POP3 port
|
|
37
|
+
DEFAULT_PORT = 110
|
|
38
|
+
|
|
39
|
+
#
|
|
40
|
+
# Creates a connection to the POP3 server.
|
|
41
|
+
#
|
|
42
|
+
# @param [String] host
|
|
43
|
+
# The host to connect to.
|
|
44
|
+
#
|
|
45
|
+
# @param [Integer] port
|
|
46
|
+
# The port the POP3 server is running on.
|
|
47
|
+
#
|
|
48
|
+
# @param [Boolean, Hash] ssl
|
|
49
|
+
# Additional SSL options.
|
|
50
|
+
#
|
|
51
|
+
# @option ssl [Boolean] :verify
|
|
52
|
+
# Specifies that the SSL certificate should be verified.
|
|
53
|
+
#
|
|
54
|
+
# @option ssl [String] :certs
|
|
55
|
+
# The path to the file containing CA certs of the server.
|
|
56
|
+
#
|
|
57
|
+
# @param [String] user
|
|
58
|
+
# The user to authenticate with when connecting to the POP3 server.
|
|
59
|
+
#
|
|
60
|
+
# @param [String] password
|
|
61
|
+
# The password to authenticate with when connecting to the POP3
|
|
62
|
+
# server.
|
|
63
|
+
#
|
|
64
|
+
# @yield [pop3]
|
|
65
|
+
# If a block is given, it will be passed the newly created POP3
|
|
66
|
+
# session. Once the block returns the POP3 session will be closed.
|
|
67
|
+
#
|
|
68
|
+
# @yieldparam [Net::POP3] pop3
|
|
69
|
+
# The newly created POP3 session.
|
|
70
|
+
#
|
|
71
|
+
# @return [Net::POP3, nil]
|
|
72
|
+
# The newly created POP3 session. If a block is given, `nil` will be
|
|
73
|
+
# returned.
|
|
74
|
+
#
|
|
75
|
+
# @api public
|
|
76
|
+
#
|
|
77
|
+
def pop3_connect(host, port: DEFAULT_PORT,
|
|
78
|
+
ssl: nil,
|
|
79
|
+
user: ,
|
|
80
|
+
password: )
|
|
81
|
+
host = DNS::IDN.to_ascii(host)
|
|
82
|
+
|
|
83
|
+
case ssl
|
|
84
|
+
when Hash
|
|
85
|
+
ssl = true
|
|
86
|
+
ssl_certs = ssl[:certs]
|
|
87
|
+
ssl_verify = SSL::VERIFY[ssl[:verify]]
|
|
88
|
+
when TrueClass
|
|
89
|
+
ssl = true
|
|
90
|
+
ssl_certs = nil
|
|
91
|
+
ssl_verify = nil
|
|
92
|
+
else
|
|
93
|
+
ssl = false
|
|
94
|
+
ssl_certs = nil
|
|
95
|
+
ssl_verify = false
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
pop3 = Net::POP3.new(host,port)
|
|
99
|
+
pop3.enable_ssl(ssl_verify,ssl_certs) if ssl
|
|
100
|
+
pop3.start(user,password)
|
|
101
|
+
|
|
102
|
+
if block_given?
|
|
103
|
+
yield pop3
|
|
104
|
+
pop3.finish
|
|
105
|
+
else
|
|
106
|
+
return pop3
|
|
107
|
+
end
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
end
|
|
@@ -0,0 +1,602 @@
|
|
|
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
|
+
module Ronin
|
|
20
|
+
module Support
|
|
21
|
+
module Network
|
|
22
|
+
#
|
|
23
|
+
# Base class for {TCP::Proxy TCP} and {UDP::Proxy UDP} Proxies.
|
|
24
|
+
#
|
|
25
|
+
# ## Callbacks
|
|
26
|
+
#
|
|
27
|
+
# The Proxy base class supports several callbacks for proxy events.
|
|
28
|
+
#
|
|
29
|
+
# ### client_data
|
|
30
|
+
#
|
|
31
|
+
# When a client sends data to the proxy.
|
|
32
|
+
#
|
|
33
|
+
# on_client_data do |client,server,data|
|
|
34
|
+
# data.gsub!(/foo/,'bar')
|
|
35
|
+
# end
|
|
36
|
+
#
|
|
37
|
+
# ### server_data
|
|
38
|
+
#
|
|
39
|
+
# When the server sends data to the proxy.
|
|
40
|
+
#
|
|
41
|
+
# on_server_data do |client,server,data|
|
|
42
|
+
# data.gsub!(/foo/,'bar')
|
|
43
|
+
# end
|
|
44
|
+
#
|
|
45
|
+
# ### data
|
|
46
|
+
#
|
|
47
|
+
# Alias for {#on_client_data} and {#on_server_data}.
|
|
48
|
+
#
|
|
49
|
+
# ## Actions
|
|
50
|
+
#
|
|
51
|
+
# The Proxy base class also provides methods to change how events are
|
|
52
|
+
# handled.
|
|
53
|
+
#
|
|
54
|
+
# * {#ignore!}
|
|
55
|
+
# * {#close!}
|
|
56
|
+
# * {#reset!}
|
|
57
|
+
#
|
|
58
|
+
# @since 0.5.0
|
|
59
|
+
#
|
|
60
|
+
class Proxy
|
|
61
|
+
|
|
62
|
+
# Default host to bind to
|
|
63
|
+
DEFAULT_HOST = '0.0.0.0'
|
|
64
|
+
|
|
65
|
+
DEFAULT_BUFFER_SIZE = 4096
|
|
66
|
+
|
|
67
|
+
# The host the proxy will listen on
|
|
68
|
+
#
|
|
69
|
+
# @return [String]
|
|
70
|
+
attr_reader :host
|
|
71
|
+
|
|
72
|
+
# The port the proxy will listen on
|
|
73
|
+
#
|
|
74
|
+
# @return [Integer]
|
|
75
|
+
attr_reader :port
|
|
76
|
+
|
|
77
|
+
# The remote port the proxy will relay data to
|
|
78
|
+
#
|
|
79
|
+
# @return [String]
|
|
80
|
+
attr_reader :server_host
|
|
81
|
+
|
|
82
|
+
# The remote host the proxy will relay data to
|
|
83
|
+
#
|
|
84
|
+
# @return [Integer]
|
|
85
|
+
attr_reader :server_port
|
|
86
|
+
|
|
87
|
+
# The size of read buffer
|
|
88
|
+
#
|
|
89
|
+
# @return [Integer]
|
|
90
|
+
attr_accessor :buffer_size
|
|
91
|
+
|
|
92
|
+
# The connections maintained by the proxy
|
|
93
|
+
#
|
|
94
|
+
# @return [Hash{Socket => Socket}]
|
|
95
|
+
attr_reader :connections
|
|
96
|
+
|
|
97
|
+
#
|
|
98
|
+
# Creates a new Proxy.
|
|
99
|
+
#
|
|
100
|
+
# @param [String] host
|
|
101
|
+
# The host to listen on.
|
|
102
|
+
#
|
|
103
|
+
# @param [Integer] port
|
|
104
|
+
# The port to listen on.
|
|
105
|
+
#
|
|
106
|
+
# @param [String, (host, port)] server
|
|
107
|
+
# The server to forward connections to.
|
|
108
|
+
#
|
|
109
|
+
# @param [Integer] buffer_size
|
|
110
|
+
# The maximum amount of data to read in.
|
|
111
|
+
#
|
|
112
|
+
# @yield [proxy]
|
|
113
|
+
# If a block is given, it will be passed the new Proxy, before it
|
|
114
|
+
# has been configured.
|
|
115
|
+
#
|
|
116
|
+
# @yieldparam [Proxy] proxy
|
|
117
|
+
# The new Proxy object.
|
|
118
|
+
#
|
|
119
|
+
# @example Proxies `0.0.0.0:1337` to `victim.com:80`:
|
|
120
|
+
# Proxy.new(port: 1337, server: ['victim.com', 80])
|
|
121
|
+
#
|
|
122
|
+
# @example Proxies `localhost:25` to `victim.com:25`:
|
|
123
|
+
# Proxy.new(port: 25, host: 'localhost', server: 'victim.com')
|
|
124
|
+
#
|
|
125
|
+
def initialize(host: DEFAULT_HOST,
|
|
126
|
+
port: ,
|
|
127
|
+
server: ,
|
|
128
|
+
buffer_size: DEFAULT_BUFFER_SIZE)
|
|
129
|
+
@host = host
|
|
130
|
+
@port = port
|
|
131
|
+
|
|
132
|
+
@server_host, @server_port = server
|
|
133
|
+
@server_port ||= @port
|
|
134
|
+
|
|
135
|
+
@callbacks = {client_data: [], server_data: []}
|
|
136
|
+
|
|
137
|
+
@buffer_size = buffer_size
|
|
138
|
+
@connections = {}
|
|
139
|
+
|
|
140
|
+
yield self if block_given?
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
#
|
|
144
|
+
# Creates a new Proxy and begins relaying data.
|
|
145
|
+
#
|
|
146
|
+
# @param [Hash{Symbol => Object}] kwargs
|
|
147
|
+
# Additional keyword arguments for {#initialize}.
|
|
148
|
+
#
|
|
149
|
+
# @see #initialize
|
|
150
|
+
#
|
|
151
|
+
# @api public
|
|
152
|
+
#
|
|
153
|
+
def self.start(**kwargs,&block)
|
|
154
|
+
new(**kwargs,&block).start
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
#
|
|
158
|
+
# Starts the proxy and begins relaying data.
|
|
159
|
+
#
|
|
160
|
+
# @return [Proxy]
|
|
161
|
+
# The proxy object.
|
|
162
|
+
#
|
|
163
|
+
# @api public
|
|
164
|
+
#
|
|
165
|
+
def start
|
|
166
|
+
open
|
|
167
|
+
listen
|
|
168
|
+
close
|
|
169
|
+
return self
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
#
|
|
173
|
+
# Opens the proxy.
|
|
174
|
+
#
|
|
175
|
+
# @api public
|
|
176
|
+
#
|
|
177
|
+
# @abstract
|
|
178
|
+
#
|
|
179
|
+
def open
|
|
180
|
+
end
|
|
181
|
+
|
|
182
|
+
#
|
|
183
|
+
# Polls the connections for data or errors.
|
|
184
|
+
#
|
|
185
|
+
# @api public
|
|
186
|
+
#
|
|
187
|
+
# @abstract
|
|
188
|
+
#
|
|
189
|
+
def poll
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
#
|
|
193
|
+
# Polls the connections for data.
|
|
194
|
+
#
|
|
195
|
+
# @api public
|
|
196
|
+
#
|
|
197
|
+
def listen
|
|
198
|
+
@listening = true
|
|
199
|
+
|
|
200
|
+
while @listening
|
|
201
|
+
begin
|
|
202
|
+
poll
|
|
203
|
+
rescue Interrupt
|
|
204
|
+
@listening = false
|
|
205
|
+
break
|
|
206
|
+
end
|
|
207
|
+
end
|
|
208
|
+
end
|
|
209
|
+
|
|
210
|
+
#
|
|
211
|
+
# Sends data to a connection.
|
|
212
|
+
#
|
|
213
|
+
# @param [Socket] connection
|
|
214
|
+
# The connection.
|
|
215
|
+
#
|
|
216
|
+
# @param [String] data
|
|
217
|
+
# The data to send.
|
|
218
|
+
#
|
|
219
|
+
# @api public
|
|
220
|
+
#
|
|
221
|
+
# @abstract
|
|
222
|
+
#
|
|
223
|
+
def send(connection,data)
|
|
224
|
+
end
|
|
225
|
+
|
|
226
|
+
#
|
|
227
|
+
# Receives data from a connection.
|
|
228
|
+
#
|
|
229
|
+
# @param [Socket] connection
|
|
230
|
+
# The connection.
|
|
231
|
+
#
|
|
232
|
+
# @api public
|
|
233
|
+
#
|
|
234
|
+
# @abstract
|
|
235
|
+
#
|
|
236
|
+
def recv(connection)
|
|
237
|
+
end
|
|
238
|
+
|
|
239
|
+
#
|
|
240
|
+
# Closes the proxy.
|
|
241
|
+
#
|
|
242
|
+
# @api public
|
|
243
|
+
#
|
|
244
|
+
def close
|
|
245
|
+
close_connections
|
|
246
|
+
close_proxy
|
|
247
|
+
end
|
|
248
|
+
|
|
249
|
+
#
|
|
250
|
+
# Stops the proxy from listening.
|
|
251
|
+
#
|
|
252
|
+
# @api public
|
|
253
|
+
#
|
|
254
|
+
def stop
|
|
255
|
+
@listening = false
|
|
256
|
+
return self
|
|
257
|
+
end
|
|
258
|
+
|
|
259
|
+
#
|
|
260
|
+
# Registers a callback for when a client sends data.
|
|
261
|
+
#
|
|
262
|
+
# @yield [client, server, data]
|
|
263
|
+
# The given block will be passed the client connection, the server
|
|
264
|
+
# connection, and the received data.
|
|
265
|
+
#
|
|
266
|
+
# @yieldparam [Socket] client
|
|
267
|
+
# The connection to the client.
|
|
268
|
+
#
|
|
269
|
+
# @yieldparam [Socket] server
|
|
270
|
+
# The connection to the server.
|
|
271
|
+
#
|
|
272
|
+
# @yieldparam [String] data
|
|
273
|
+
# The recieved data.
|
|
274
|
+
#
|
|
275
|
+
# @api public
|
|
276
|
+
#
|
|
277
|
+
def on_client_data(&block)
|
|
278
|
+
@callbacks[:client_data] << block
|
|
279
|
+
end
|
|
280
|
+
|
|
281
|
+
#
|
|
282
|
+
# Registers a callback for when a server sends data.
|
|
283
|
+
#
|
|
284
|
+
# @yield [client, server, data]
|
|
285
|
+
# The given block will be passed the client connection, the server
|
|
286
|
+
# connection, and the received data.
|
|
287
|
+
#
|
|
288
|
+
# @yieldparam [Socket] client
|
|
289
|
+
# The connection to the client.
|
|
290
|
+
#
|
|
291
|
+
# @yieldparam [Socket] server
|
|
292
|
+
# The connection to the server.
|
|
293
|
+
#
|
|
294
|
+
# @yieldparam [String] data
|
|
295
|
+
# The recieved data.
|
|
296
|
+
#
|
|
297
|
+
# @api public
|
|
298
|
+
#
|
|
299
|
+
def on_server_data(&block)
|
|
300
|
+
@callbacks[:server_data] << block
|
|
301
|
+
end
|
|
302
|
+
|
|
303
|
+
#
|
|
304
|
+
# Registers a callback for when either the client or the server sends
|
|
305
|
+
# data.
|
|
306
|
+
#
|
|
307
|
+
# @yield [client, server, data]
|
|
308
|
+
# The given block will be passed the client connection, the server
|
|
309
|
+
# connection, and the received data.
|
|
310
|
+
#
|
|
311
|
+
# @yieldparam [Socket] client
|
|
312
|
+
# The connection to the client.
|
|
313
|
+
#
|
|
314
|
+
# @yieldparam [Socket] server
|
|
315
|
+
# The connection to the server.
|
|
316
|
+
#
|
|
317
|
+
# @yieldparam [String] data
|
|
318
|
+
# The recieved data.
|
|
319
|
+
#
|
|
320
|
+
# @api public
|
|
321
|
+
#
|
|
322
|
+
def on_data(&block)
|
|
323
|
+
on_client_data(&block)
|
|
324
|
+
on_server_data(&block)
|
|
325
|
+
end
|
|
326
|
+
|
|
327
|
+
#
|
|
328
|
+
# Causes the proxy to ignore a message.
|
|
329
|
+
#
|
|
330
|
+
# @api public
|
|
331
|
+
#
|
|
332
|
+
def ignore!
|
|
333
|
+
throw(:action,:ignore)
|
|
334
|
+
end
|
|
335
|
+
|
|
336
|
+
#
|
|
337
|
+
# Causes the proxy to close a connection.
|
|
338
|
+
#
|
|
339
|
+
# @api public
|
|
340
|
+
#
|
|
341
|
+
def close!
|
|
342
|
+
throw(:action,:close)
|
|
343
|
+
end
|
|
344
|
+
|
|
345
|
+
#
|
|
346
|
+
# Causes the proxy to restart a connection.
|
|
347
|
+
#
|
|
348
|
+
# @api public
|
|
349
|
+
#
|
|
350
|
+
def reset!
|
|
351
|
+
throw(:action,:reset)
|
|
352
|
+
end
|
|
353
|
+
|
|
354
|
+
#
|
|
355
|
+
# Causes the proxy to stop processing data entirely.
|
|
356
|
+
#
|
|
357
|
+
# @api public
|
|
358
|
+
#
|
|
359
|
+
def stop!
|
|
360
|
+
throw(:action,:stop)
|
|
361
|
+
end
|
|
362
|
+
|
|
363
|
+
#
|
|
364
|
+
# Connections from clients.
|
|
365
|
+
#
|
|
366
|
+
# @return [Array<Socket>]
|
|
367
|
+
# Client connections.
|
|
368
|
+
#
|
|
369
|
+
def client_connections
|
|
370
|
+
@connections.keys
|
|
371
|
+
end
|
|
372
|
+
|
|
373
|
+
#
|
|
374
|
+
# Connections to the server.
|
|
375
|
+
#
|
|
376
|
+
# @return [Array<Socket>]
|
|
377
|
+
# Server connections.
|
|
378
|
+
#
|
|
379
|
+
def server_connections
|
|
380
|
+
@connections.values
|
|
381
|
+
end
|
|
382
|
+
|
|
383
|
+
#
|
|
384
|
+
# Finds the connection to the server, associated with the client.
|
|
385
|
+
#
|
|
386
|
+
# @param [Socket] client_connection
|
|
387
|
+
# The connection from the client.
|
|
388
|
+
#
|
|
389
|
+
# @return [Socket]
|
|
390
|
+
# The connection to the server.
|
|
391
|
+
#
|
|
392
|
+
def server_connection_for(client_connection)
|
|
393
|
+
@connections[client_connection]
|
|
394
|
+
end
|
|
395
|
+
|
|
396
|
+
#
|
|
397
|
+
# Finds the connection from the client, associated with the server
|
|
398
|
+
# connection.
|
|
399
|
+
#
|
|
400
|
+
# @param [Socket] server_connection
|
|
401
|
+
# The connection to the server.
|
|
402
|
+
#
|
|
403
|
+
# @return [Socket]
|
|
404
|
+
# The connection from the client.
|
|
405
|
+
#
|
|
406
|
+
def client_connection_for(server_connection)
|
|
407
|
+
@connections.key(server_connection)
|
|
408
|
+
end
|
|
409
|
+
|
|
410
|
+
#
|
|
411
|
+
# Converts the proxy to a String.
|
|
412
|
+
#
|
|
413
|
+
# @return [String]
|
|
414
|
+
# The String form of the proxy.
|
|
415
|
+
#
|
|
416
|
+
def to_s
|
|
417
|
+
"#{@host}:#{@port} <-> #{@server_host}:#{@server_port}"
|
|
418
|
+
end
|
|
419
|
+
|
|
420
|
+
#
|
|
421
|
+
# Inspects the proxy.
|
|
422
|
+
#
|
|
423
|
+
# @return [String]
|
|
424
|
+
# The inspected proxy.
|
|
425
|
+
#
|
|
426
|
+
def inspect
|
|
427
|
+
"#<#{self.class}:#{self.object_id}: #{self}>"
|
|
428
|
+
end
|
|
429
|
+
|
|
430
|
+
protected
|
|
431
|
+
|
|
432
|
+
#
|
|
433
|
+
# Creates a new connection to the server.
|
|
434
|
+
#
|
|
435
|
+
# @return [Socket]
|
|
436
|
+
# The new connection.
|
|
437
|
+
#
|
|
438
|
+
# @abstract
|
|
439
|
+
#
|
|
440
|
+
def open_server_connection
|
|
441
|
+
end
|
|
442
|
+
|
|
443
|
+
#
|
|
444
|
+
# Closes a client connection to the proxy.
|
|
445
|
+
#
|
|
446
|
+
# @param [Socket] connection
|
|
447
|
+
# The client connection.
|
|
448
|
+
#
|
|
449
|
+
# @abstract
|
|
450
|
+
#
|
|
451
|
+
def close_client_connection(connection)
|
|
452
|
+
end
|
|
453
|
+
|
|
454
|
+
#
|
|
455
|
+
# Closes a connection to the server.
|
|
456
|
+
#
|
|
457
|
+
# @param [Socket] connection
|
|
458
|
+
# The server connection.
|
|
459
|
+
#
|
|
460
|
+
# @abstract
|
|
461
|
+
#
|
|
462
|
+
def close_server_connection(connection)
|
|
463
|
+
end
|
|
464
|
+
|
|
465
|
+
#
|
|
466
|
+
# Closes the proxy.
|
|
467
|
+
#
|
|
468
|
+
# @abstract
|
|
469
|
+
#
|
|
470
|
+
def close_proxy
|
|
471
|
+
end
|
|
472
|
+
|
|
473
|
+
#
|
|
474
|
+
# Resets a server connection.
|
|
475
|
+
#
|
|
476
|
+
# @param [Socket] client_connection
|
|
477
|
+
# The connection from the client to the proxy.
|
|
478
|
+
#
|
|
479
|
+
# @param [Socket] server_connection
|
|
480
|
+
# The connection from the proxy to the server.
|
|
481
|
+
#
|
|
482
|
+
def reset_connection(client_connection,server_connection)
|
|
483
|
+
close_server_connection(server_connection) if server_connection
|
|
484
|
+
|
|
485
|
+
@connections[client_connection] = open_server_connection
|
|
486
|
+
end
|
|
487
|
+
|
|
488
|
+
#
|
|
489
|
+
# Closes both the client and server connections.
|
|
490
|
+
#
|
|
491
|
+
# @param [Socket] client_connection
|
|
492
|
+
# The connection from the client to the proxy.
|
|
493
|
+
#
|
|
494
|
+
# @param [Socket] server_connection
|
|
495
|
+
# The connection from the proxy to the server.
|
|
496
|
+
#
|
|
497
|
+
def close_connection(client_connection,server_connection=nil)
|
|
498
|
+
close_server_connection(server_connection) if server_connection
|
|
499
|
+
close_client_connection(client_connection)
|
|
500
|
+
|
|
501
|
+
@connections.delete(client_connection)
|
|
502
|
+
end
|
|
503
|
+
|
|
504
|
+
#
|
|
505
|
+
# Closes all active connections.
|
|
506
|
+
#
|
|
507
|
+
def close_connections
|
|
508
|
+
@connections.each do |client_connection,server_connection|
|
|
509
|
+
close_server_connection(server_connection)
|
|
510
|
+
close_client_connection(client_connection)
|
|
511
|
+
end
|
|
512
|
+
|
|
513
|
+
@connections.clear
|
|
514
|
+
end
|
|
515
|
+
|
|
516
|
+
#
|
|
517
|
+
# Triggers the callbacks registered for an event.
|
|
518
|
+
#
|
|
519
|
+
# @param [Symbol] event
|
|
520
|
+
# The event being triggered.
|
|
521
|
+
#
|
|
522
|
+
# @param [Socket] client_connection
|
|
523
|
+
# The connection from the client to the proxy.
|
|
524
|
+
#
|
|
525
|
+
# @param [Socket] server_connection
|
|
526
|
+
# The connection from the proxy to the server.
|
|
527
|
+
#
|
|
528
|
+
# @param [String] data
|
|
529
|
+
# The data being sent.
|
|
530
|
+
#
|
|
531
|
+
# @yield []
|
|
532
|
+
# If none of the callbacks interrupted the event, the given block
|
|
533
|
+
# will be called.
|
|
534
|
+
#
|
|
535
|
+
def callback(event,client_connection,server_connection=nil,data=nil)
|
|
536
|
+
action = catch(:action) do
|
|
537
|
+
@callbacks[event].each do |block|
|
|
538
|
+
case block.arity
|
|
539
|
+
when 1
|
|
540
|
+
block.call(client_connection)
|
|
541
|
+
when 2
|
|
542
|
+
block.call(client_connection,server_connection)
|
|
543
|
+
when 3, -1
|
|
544
|
+
block.call(client_connection,server_connection,data)
|
|
545
|
+
end
|
|
546
|
+
end
|
|
547
|
+
end
|
|
548
|
+
|
|
549
|
+
case action
|
|
550
|
+
when :ignore
|
|
551
|
+
# no-op
|
|
552
|
+
when :reset
|
|
553
|
+
reset_connection(client_connection,server_connection)
|
|
554
|
+
when :close
|
|
555
|
+
close_connection(client_connection,server_connection)
|
|
556
|
+
when :stop
|
|
557
|
+
stop
|
|
558
|
+
else
|
|
559
|
+
yield if block_given?
|
|
560
|
+
end
|
|
561
|
+
end
|
|
562
|
+
|
|
563
|
+
#
|
|
564
|
+
# Triggers the `client_data` event.
|
|
565
|
+
#
|
|
566
|
+
# @param [Socket] client_connection
|
|
567
|
+
# The connection from a client to the proxy.
|
|
568
|
+
#
|
|
569
|
+
# @param [Socket] server_connection
|
|
570
|
+
# The connection from the proxy to the server.
|
|
571
|
+
#
|
|
572
|
+
# @param [String] data
|
|
573
|
+
# The data sent by the client.
|
|
574
|
+
#
|
|
575
|
+
def client_data(client_connection,server_connection,data)
|
|
576
|
+
callback(:client_data,client_connection,server_connection,data) do
|
|
577
|
+
send(server_connection,data)
|
|
578
|
+
end
|
|
579
|
+
end
|
|
580
|
+
|
|
581
|
+
#
|
|
582
|
+
# Triggers the `server_data` event.
|
|
583
|
+
#
|
|
584
|
+
# @param [Socket] client_connection
|
|
585
|
+
# The connection from a client to the proxy.
|
|
586
|
+
#
|
|
587
|
+
# @param [Socket] server_connection
|
|
588
|
+
# The connection from the proxy to the server.
|
|
589
|
+
#
|
|
590
|
+
# @param [String] data
|
|
591
|
+
# The data sent from the server.
|
|
592
|
+
#
|
|
593
|
+
def server_data(client_connection,server_connection,data)
|
|
594
|
+
callback(:server_data,client_connection,server_connection,data) do
|
|
595
|
+
send(client_connection,data)
|
|
596
|
+
end
|
|
597
|
+
end
|
|
598
|
+
|
|
599
|
+
end
|
|
600
|
+
end
|
|
601
|
+
end
|
|
602
|
+
end
|