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,740 @@
|
|
|
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 <http://www.gnu.org/licenses/>.
|
|
17
|
+
#
|
|
18
|
+
|
|
19
|
+
require 'ronin/support/network/ssl'
|
|
20
|
+
require 'ronin/support/network/tcp/mixin'
|
|
21
|
+
require 'ronin/support/crypto/cert'
|
|
22
|
+
|
|
23
|
+
module Ronin
|
|
24
|
+
module Support
|
|
25
|
+
module Network
|
|
26
|
+
module SSL
|
|
27
|
+
#
|
|
28
|
+
# Provides helper methods for communicating with SSL-enabled services.
|
|
29
|
+
#
|
|
30
|
+
module Mixin
|
|
31
|
+
include TCP::Mixin
|
|
32
|
+
|
|
33
|
+
#
|
|
34
|
+
# Creates a new SSL Context.
|
|
35
|
+
#
|
|
36
|
+
# @param [Hash{Symbol => Object}] kwargs
|
|
37
|
+
# Additional keyword arguments.
|
|
38
|
+
#
|
|
39
|
+
# @option kwargs [1, 1.1, 1.2, String, Symbol, nil] :version
|
|
40
|
+
# The SSL version to use.
|
|
41
|
+
#
|
|
42
|
+
# @option kwargs [Symbol, Boolean] :verify
|
|
43
|
+
# Specifies whether to verify the SSL certificate.
|
|
44
|
+
# May be one of the following:
|
|
45
|
+
#
|
|
46
|
+
# * `:none`
|
|
47
|
+
# * `:peer`
|
|
48
|
+
# * `:fail_if_no_peer_cert`
|
|
49
|
+
# * `:client_once`
|
|
50
|
+
#
|
|
51
|
+
# @option kwargs [Crypto::Key::RSA, OpenSSL::PKey::RSA, nil] :key
|
|
52
|
+
# The RSA key to use for the SSL context.
|
|
53
|
+
#
|
|
54
|
+
# @option kwargs [String] :key_file
|
|
55
|
+
# The path to the SSL `.key` file.
|
|
56
|
+
#
|
|
57
|
+
# @option kwargs [Crypto::Cert, OpenSSL::X509::Certificate, nil] :cert
|
|
58
|
+
# The X509 certificate to use for the SSL context.
|
|
59
|
+
#
|
|
60
|
+
# @option kwargs [String] :cert_file
|
|
61
|
+
# The path to the SSL `.crt` file.
|
|
62
|
+
#
|
|
63
|
+
# @option kwargs [String] :ca_bundle
|
|
64
|
+
# Path to the CA certificate file or directory.
|
|
65
|
+
#
|
|
66
|
+
# @return [OpenSSL::SSL::SSLContext]
|
|
67
|
+
# The newly created SSL Context.
|
|
68
|
+
#
|
|
69
|
+
# @api semipublic
|
|
70
|
+
#
|
|
71
|
+
# @since 0.6.0
|
|
72
|
+
#
|
|
73
|
+
def ssl_context(**kwargs)
|
|
74
|
+
Network::SSL.context(**kwargs)
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
#
|
|
78
|
+
# Initiates an SSL session with an existing TCP socket.
|
|
79
|
+
#
|
|
80
|
+
# @param [TCPSocket] socket
|
|
81
|
+
# The existing TCP socket.
|
|
82
|
+
#
|
|
83
|
+
# @param [Hash{Symbol => Object}] kwargs
|
|
84
|
+
# Additional keyword arguments for {#ssl_context}.
|
|
85
|
+
#
|
|
86
|
+
# @option kwargs [Symbol, Boolean] :verify
|
|
87
|
+
# Specifies whether to verify the SSL certificate.
|
|
88
|
+
# May be one of the following:
|
|
89
|
+
#
|
|
90
|
+
# * `:none`
|
|
91
|
+
# * `:peer`
|
|
92
|
+
# * `:fail_if_no_peer_cert`
|
|
93
|
+
# * `:client_once`
|
|
94
|
+
#
|
|
95
|
+
# @option kwargs [Crypto::Key::RSA, OpenSSL::PKey::RSA, nil] :key
|
|
96
|
+
# The RSA key to use for the SSL context.
|
|
97
|
+
#
|
|
98
|
+
# @option kwargs [String] :key_file
|
|
99
|
+
# The path to the SSL `.key` file.
|
|
100
|
+
#
|
|
101
|
+
# @option kwargs [Crypto::Cert, OpenSSL::X509::Certificate, nil] :cert
|
|
102
|
+
# The X509 certificate to use for the SSL context.
|
|
103
|
+
#
|
|
104
|
+
# @option kwargs [String] :cert_file
|
|
105
|
+
# The path to the SSL `.crt` file.
|
|
106
|
+
#
|
|
107
|
+
# @option kwargs [String] :ca_bundle
|
|
108
|
+
# Path to the CA certificate file or directory.
|
|
109
|
+
#
|
|
110
|
+
# @return [OpenSSL::SSL::SSLSocket]
|
|
111
|
+
# the new SSL Socket.
|
|
112
|
+
#
|
|
113
|
+
# @api public
|
|
114
|
+
#
|
|
115
|
+
# @since 0.6.0
|
|
116
|
+
#
|
|
117
|
+
def ssl_socket(socket,**kwargs)
|
|
118
|
+
ssl_socket = OpenSSL::SSL::SSLSocket.new(socket,ssl_context(**kwargs))
|
|
119
|
+
ssl_socket.sync_close = true
|
|
120
|
+
return ssl_socket
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
#
|
|
124
|
+
# Tests whether a remote SSLed TCP port is open.
|
|
125
|
+
#
|
|
126
|
+
# @param [String] host
|
|
127
|
+
# The host to connect to.
|
|
128
|
+
#
|
|
129
|
+
# @param [Integer] port
|
|
130
|
+
# The port to connect to.
|
|
131
|
+
#
|
|
132
|
+
# @param [String] bind_host
|
|
133
|
+
# The local host to bind to.
|
|
134
|
+
#
|
|
135
|
+
# @param [Integer] bind_port
|
|
136
|
+
# The local port to bind to.
|
|
137
|
+
#
|
|
138
|
+
# @param [Integer] timeout (5)
|
|
139
|
+
# The maximum time to attempt connecting.
|
|
140
|
+
#
|
|
141
|
+
# @param [Hash{Symbol => Object}] kwargs
|
|
142
|
+
# Additional keyword arguments for {#ssl_connect}.
|
|
143
|
+
#
|
|
144
|
+
# @option options [Symbol, Boolean] :verify
|
|
145
|
+
# Specifies whether to verify the SSL certificate.
|
|
146
|
+
# May be one of the following:
|
|
147
|
+
#
|
|
148
|
+
# * `:none`
|
|
149
|
+
# * `:peer`
|
|
150
|
+
# * `:fail_if_no_peer_cert`
|
|
151
|
+
# * `:client_once`
|
|
152
|
+
#
|
|
153
|
+
# @option kwargs [Crypto::Key::RSA, OpenSSL::PKey::RSA, nil] :key
|
|
154
|
+
# The RSA key to use for the SSL context.
|
|
155
|
+
#
|
|
156
|
+
# @option kwargs [String] :key_file
|
|
157
|
+
# The path to the SSL `.key` file.
|
|
158
|
+
#
|
|
159
|
+
# @option kwargs [Crypto::Cert, OpenSSL::X509::Certificate, nil] :cert
|
|
160
|
+
# The X509 certificate to use for the SSL context.
|
|
161
|
+
#
|
|
162
|
+
# @option kwargs [String] :cert_file
|
|
163
|
+
# The path to the SSL `.crt` file.
|
|
164
|
+
#
|
|
165
|
+
# @option kwargs [String] :ca_bundle
|
|
166
|
+
# Path to the CA certificate file or directory.
|
|
167
|
+
#
|
|
168
|
+
# @return [Boolean, nil]
|
|
169
|
+
# Specifies whether the remote SSLed TCP port is open.
|
|
170
|
+
# If the connection was not accepted, `nil` will be returned.
|
|
171
|
+
#
|
|
172
|
+
# @example
|
|
173
|
+
# ssl_open?('www.bankofamerica.com',443)
|
|
174
|
+
#
|
|
175
|
+
# @example Using a timeout:
|
|
176
|
+
# ssl_open?('example.com',80, timeout: 5)
|
|
177
|
+
# # => nil
|
|
178
|
+
#
|
|
179
|
+
# @api public
|
|
180
|
+
#
|
|
181
|
+
# @since 0.6.0
|
|
182
|
+
#
|
|
183
|
+
def ssl_open?(host,port, bind_host: nil, bind_port: nil, timeout: 5,
|
|
184
|
+
**kwargs)
|
|
185
|
+
begin
|
|
186
|
+
Timeout.timeout(timeout) do
|
|
187
|
+
ssl_connect(host,port, bind_host: bind_host,
|
|
188
|
+
bind_port: bind_port,
|
|
189
|
+
**kwargs)
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
return true
|
|
193
|
+
rescue Timeout::Error
|
|
194
|
+
return nil
|
|
195
|
+
rescue SocketError, SystemCallError
|
|
196
|
+
return false
|
|
197
|
+
end
|
|
198
|
+
end
|
|
199
|
+
|
|
200
|
+
#
|
|
201
|
+
# Establishes a SSL connection.
|
|
202
|
+
#
|
|
203
|
+
# @param [String] host
|
|
204
|
+
# The host to connect to.
|
|
205
|
+
#
|
|
206
|
+
# @param [Integer] port
|
|
207
|
+
# The port to connect to.
|
|
208
|
+
#
|
|
209
|
+
# @param [String] bind_host
|
|
210
|
+
# The local host to bind to.
|
|
211
|
+
#
|
|
212
|
+
# @param [Integer] bind_port
|
|
213
|
+
# The local port to bind to.
|
|
214
|
+
#
|
|
215
|
+
# @param [Hash{Symbol => Object}] kwargs
|
|
216
|
+
# Additional keyword arguments for {#ssl_socket}.
|
|
217
|
+
#
|
|
218
|
+
# @option kwargs [Symbol, Boolean] :verify
|
|
219
|
+
# Specifies whether to verify the SSL certificate.
|
|
220
|
+
# May be one of the following:
|
|
221
|
+
#
|
|
222
|
+
# * `:none`
|
|
223
|
+
# * `:peer`
|
|
224
|
+
# * `:fail_if_no_peer_cert`
|
|
225
|
+
# * `:client_once`
|
|
226
|
+
#
|
|
227
|
+
# @option kwargs [Crypto::Key::RSA, OpenSSL::PKey::RSA, nil] :key
|
|
228
|
+
# The RSA key to use for the SSL context.
|
|
229
|
+
#
|
|
230
|
+
# @option kwargs [String] :key_file
|
|
231
|
+
# The path to the SSL `.key` file.
|
|
232
|
+
#
|
|
233
|
+
# @option kwargs [Crypto::Cert, OpenSSL::X509::Certificate, nil] :cert
|
|
234
|
+
# The X509 certificate to use for the SSL context.
|
|
235
|
+
#
|
|
236
|
+
# @option kwargs [String] :cert_file
|
|
237
|
+
# The path to the SSL `.crt` file.
|
|
238
|
+
#
|
|
239
|
+
# @option kwargs [String] :ca_bundle
|
|
240
|
+
# Path to the CA certificate file or directory.
|
|
241
|
+
#
|
|
242
|
+
# @yield [ssl_socket]
|
|
243
|
+
# The given block will be passed the new SSL socket. Once the block
|
|
244
|
+
# returns the SSL socket will be closed.
|
|
245
|
+
#
|
|
246
|
+
# @yieldparam [OpenSSL::SSL::SSLSocket] ssl_socket
|
|
247
|
+
# The new SSL Socket.
|
|
248
|
+
#
|
|
249
|
+
# @return [OpenSSL::SSL::SSLSocket, nil]
|
|
250
|
+
# the new SSL Socket. If a block is given, then `nil` will be
|
|
251
|
+
# returned.
|
|
252
|
+
#
|
|
253
|
+
# @example
|
|
254
|
+
# socket = ssl_connect('twitter.com',443)
|
|
255
|
+
#
|
|
256
|
+
# @example
|
|
257
|
+
# ssl_connect('twitter.com',443) do |sock|
|
|
258
|
+
# sock.write("GET / HTTP/1.1\n\r\n\r")
|
|
259
|
+
#
|
|
260
|
+
# sock.each_line { |line| puts line }
|
|
261
|
+
# end
|
|
262
|
+
#
|
|
263
|
+
# @see http://rubydoc.info/stdlib/openssl/OpenSSL/SSL/SSLSocket
|
|
264
|
+
#
|
|
265
|
+
# @api public
|
|
266
|
+
#
|
|
267
|
+
def ssl_connect(host,port, bind_host: nil, bind_port: nil, **kwargs)
|
|
268
|
+
socket = tcp_connect(host,port,bind_host: bind_host,
|
|
269
|
+
bind_port: bind_port)
|
|
270
|
+
ssl_socket = ssl_socket(socket,**kwargs)
|
|
271
|
+
ssl_socket.connect
|
|
272
|
+
|
|
273
|
+
if block_given?
|
|
274
|
+
yield ssl_socket
|
|
275
|
+
ssl_socket.close
|
|
276
|
+
else
|
|
277
|
+
return ssl_socket
|
|
278
|
+
end
|
|
279
|
+
end
|
|
280
|
+
|
|
281
|
+
#
|
|
282
|
+
# Creates a new SSL connection and sends the given data.
|
|
283
|
+
#
|
|
284
|
+
# @param [String] data
|
|
285
|
+
# The data to send through the connection.
|
|
286
|
+
#
|
|
287
|
+
# @param [String] host
|
|
288
|
+
# The host to connect to.
|
|
289
|
+
#
|
|
290
|
+
# @param [Integer] port
|
|
291
|
+
# The port to connect to.
|
|
292
|
+
#
|
|
293
|
+
# @param [String] bind_host
|
|
294
|
+
# The local host to bind to.
|
|
295
|
+
#
|
|
296
|
+
# @param [Integer] bind_port
|
|
297
|
+
# The local port to bind to.
|
|
298
|
+
#
|
|
299
|
+
# @param [Hash{Symbol => Object}] kwargs
|
|
300
|
+
# Additional keyword arguments for {#ssl_connect}.
|
|
301
|
+
#
|
|
302
|
+
# @option kwargs [Symbol, Boolean] :verify
|
|
303
|
+
# Specifies whether to verify the SSL certificate.
|
|
304
|
+
# May be one of the following:
|
|
305
|
+
#
|
|
306
|
+
# * `:none`
|
|
307
|
+
# * `:peer`
|
|
308
|
+
# * `:fail_if_no_peer_cert`
|
|
309
|
+
# * `:client_once`
|
|
310
|
+
#
|
|
311
|
+
# @option kwargs [Crypto::Key::RSA, OpenSSL::PKey::RSA, nil] :key
|
|
312
|
+
# The RSA key to use for the SSL context.
|
|
313
|
+
#
|
|
314
|
+
# @option kwargs [String] :key_file
|
|
315
|
+
# The path to the SSL `.key` file.
|
|
316
|
+
#
|
|
317
|
+
# @option kwargs [Crypto::Cert, OpenSSL::X509::Certificate, nil] :cert
|
|
318
|
+
# The X509 certificate to use for the SSL context.
|
|
319
|
+
#
|
|
320
|
+
# @option kwargs [String] :cert_file
|
|
321
|
+
# The path to the SSL `.crt` file.
|
|
322
|
+
#
|
|
323
|
+
# @option kwargs [String] :ca_bundle
|
|
324
|
+
# Path to the CA certificate file or directory.
|
|
325
|
+
#
|
|
326
|
+
# @yield [ssl_socket]
|
|
327
|
+
# The given block will be passed the newly created SSL Socket.
|
|
328
|
+
#
|
|
329
|
+
# @yieldparam [OpenSSL::SSL::SSLSocket] ssl_socket
|
|
330
|
+
# The newly created SSL Socket.
|
|
331
|
+
#
|
|
332
|
+
# @api public
|
|
333
|
+
#
|
|
334
|
+
# @since 0.6.0
|
|
335
|
+
#
|
|
336
|
+
def ssl_connect_and_send(data,host,port, bind_host: nil,
|
|
337
|
+
bind_port: nil,
|
|
338
|
+
**kwargs)
|
|
339
|
+
socket = ssl_connect(host,port, bind_host: bind_host,
|
|
340
|
+
bind_port: bind_port,
|
|
341
|
+
**kwargs)
|
|
342
|
+
socket.write(data)
|
|
343
|
+
|
|
344
|
+
yield socket if block_given?
|
|
345
|
+
return socket
|
|
346
|
+
end
|
|
347
|
+
|
|
348
|
+
#
|
|
349
|
+
# Connects to the host and port and returns the server's certificate.
|
|
350
|
+
#
|
|
351
|
+
# @param [String] host
|
|
352
|
+
# The host to connect to.
|
|
353
|
+
#
|
|
354
|
+
# @param [Integer] port
|
|
355
|
+
# The port to connect to.
|
|
356
|
+
#
|
|
357
|
+
# @param [Hash{Symbol => Object}] kwargs
|
|
358
|
+
# Additional keyword arguments.
|
|
359
|
+
#
|
|
360
|
+
# @option kwargs [String] :bind_host
|
|
361
|
+
# The local host to bind to.
|
|
362
|
+
#
|
|
363
|
+
# @option kwargs [Integer] :bind_port
|
|
364
|
+
# The local port to bind to.
|
|
365
|
+
#
|
|
366
|
+
# @option kwargs [Symbol, Boolean] :verify
|
|
367
|
+
# Specifies whether to verify the SSL certificate.
|
|
368
|
+
# May be one of the following:
|
|
369
|
+
#
|
|
370
|
+
# * `:none`
|
|
371
|
+
# * `:peer`
|
|
372
|
+
# * `:fail_if_no_peer_cert`
|
|
373
|
+
# * `:client_once`
|
|
374
|
+
#
|
|
375
|
+
# @option kwargs [Crypto::Key::RSA, OpenSSL::PKey::RSA, nil] :key
|
|
376
|
+
# The RSA key to use for the SSL context.
|
|
377
|
+
#
|
|
378
|
+
# @option kwargs [String] :key_file
|
|
379
|
+
# The path to the SSL `.key` file.
|
|
380
|
+
#
|
|
381
|
+
# @option kwargs [Crypto::Cert, OpenSSL::X509::Certificate, nil] :cert
|
|
382
|
+
# The X509 certificate to use for the SSL context.
|
|
383
|
+
#
|
|
384
|
+
# @option kwargs [String] :cert_file
|
|
385
|
+
# The path to the SSL `.crt` file.
|
|
386
|
+
#
|
|
387
|
+
# @option kwargs [String] :ca_bundle
|
|
388
|
+
# Path to the CA certificate file or directory.
|
|
389
|
+
#
|
|
390
|
+
# @return [Crypto::Cert]
|
|
391
|
+
# The server's certificate.
|
|
392
|
+
#
|
|
393
|
+
def ssl_cert(host,port,**kwargs)
|
|
394
|
+
socket = ssl_connect(host,port,**kwargs)
|
|
395
|
+
cert = Crypto::Cert(socket.peer_cert)
|
|
396
|
+
socket.close
|
|
397
|
+
return cert
|
|
398
|
+
end
|
|
399
|
+
|
|
400
|
+
#
|
|
401
|
+
# Reads the banner from the service running on the given host and
|
|
402
|
+
# port.
|
|
403
|
+
#
|
|
404
|
+
# @param [String] host
|
|
405
|
+
# The host to connect to.
|
|
406
|
+
#
|
|
407
|
+
# @param [Integer] port
|
|
408
|
+
# The port to connect to.
|
|
409
|
+
#
|
|
410
|
+
# @param [String] bind_host
|
|
411
|
+
# The local host to bind to.
|
|
412
|
+
#
|
|
413
|
+
# @param [Integer] bind_port
|
|
414
|
+
# The local port to bind to.
|
|
415
|
+
#
|
|
416
|
+
# @param [Hash{Symbol => Object}] kwargs
|
|
417
|
+
# Additional keyword arguments for {#ssl_connect}.
|
|
418
|
+
#
|
|
419
|
+
# @option kwargs [Symbol, Boolean] :verify
|
|
420
|
+
# Specifies whether to verify the SSL certificate.
|
|
421
|
+
# May be one of the following:
|
|
422
|
+
#
|
|
423
|
+
# * `:none`
|
|
424
|
+
# * `:peer`
|
|
425
|
+
# * `:fail_if_no_peer_cert`
|
|
426
|
+
# * `:client_once`
|
|
427
|
+
#
|
|
428
|
+
# @option kwargs [Crypto::Key::RSA, OpenSSL::PKey::RSA, nil] :key
|
|
429
|
+
# The RSA key to use for the SSL context.
|
|
430
|
+
#
|
|
431
|
+
# @option kwargs [String] :key_file
|
|
432
|
+
# The path to the SSL `.key` file.
|
|
433
|
+
#
|
|
434
|
+
# @option kwargs [Crypto::Cert, OpenSSL::X509::Certificate, nil] :cert
|
|
435
|
+
# The X509 certificate to use for the SSL context.
|
|
436
|
+
#
|
|
437
|
+
# @option kwargs [String] :cert_file
|
|
438
|
+
# The path to the SSL `.crt` file.
|
|
439
|
+
#
|
|
440
|
+
# @option kwargs [String] :ca_bundle
|
|
441
|
+
# Path to the CA certificate file or directory.
|
|
442
|
+
#
|
|
443
|
+
# @yield [banner]
|
|
444
|
+
# If a block is given, it will be passed the grabbed banner.
|
|
445
|
+
#
|
|
446
|
+
# @yieldparam [String] banner
|
|
447
|
+
# The grabbed banner.
|
|
448
|
+
#
|
|
449
|
+
# @return [String]
|
|
450
|
+
# The grabbed banner.
|
|
451
|
+
#
|
|
452
|
+
# @example
|
|
453
|
+
# ssl_banner('smtp.gmail.com',465)
|
|
454
|
+
# # => "220 mx.google.com ESMTP c20sm3096959rvf.1"
|
|
455
|
+
#
|
|
456
|
+
# @api public
|
|
457
|
+
#
|
|
458
|
+
# @since 0.6.0
|
|
459
|
+
#
|
|
460
|
+
def ssl_banner(host,port, bind_host: nil, bind_port: nil, **kwargs)
|
|
461
|
+
banner = nil
|
|
462
|
+
|
|
463
|
+
ssl_connect(host,port, bind_host: bind_host,
|
|
464
|
+
bind_port: bind_port,
|
|
465
|
+
**kwargs) do |ssl_socket|
|
|
466
|
+
banner = ssl_socket.readline.strip
|
|
467
|
+
end
|
|
468
|
+
|
|
469
|
+
yield banner if block_given?
|
|
470
|
+
return banner
|
|
471
|
+
end
|
|
472
|
+
|
|
473
|
+
#
|
|
474
|
+
# Connects to a specified host and port, sends the given data and then
|
|
475
|
+
# closes the connection.
|
|
476
|
+
#
|
|
477
|
+
# @param [String] data
|
|
478
|
+
# The data to send through the connection.
|
|
479
|
+
#
|
|
480
|
+
# @param [String] host
|
|
481
|
+
# The host to connect to.
|
|
482
|
+
#
|
|
483
|
+
# @param [Integer] port
|
|
484
|
+
# The port to connect to.
|
|
485
|
+
#
|
|
486
|
+
# @param [String] bind_host
|
|
487
|
+
# The local host to bind to.
|
|
488
|
+
#
|
|
489
|
+
# @param [Integer] bind_port
|
|
490
|
+
# The local port to bind to.
|
|
491
|
+
#
|
|
492
|
+
# @param [Hash{Symbol => Object}] kwargs
|
|
493
|
+
# Additional keyword arguments for {#ssl_connect}.
|
|
494
|
+
#
|
|
495
|
+
# @option kwargs [Symbol, Boolean] :verify
|
|
496
|
+
# Specifies whether to verify the SSL certificate.
|
|
497
|
+
# May be one of the following:
|
|
498
|
+
#
|
|
499
|
+
# * `:none`
|
|
500
|
+
# * `:peer`
|
|
501
|
+
# * `:fail_if_no_peer_cert`
|
|
502
|
+
# * `:client_once`
|
|
503
|
+
#
|
|
504
|
+
# @option kwargs [Crypto::Key::RSA, OpenSSL::PKey::RSA, nil] :key
|
|
505
|
+
# The RSA key to use for the SSL context.
|
|
506
|
+
#
|
|
507
|
+
# @option kwargs [String] :key_file
|
|
508
|
+
# The path to the SSL `.key` file.
|
|
509
|
+
#
|
|
510
|
+
# @option kwargs [Crypto::Cert, OpenSSL::X509::Certificate, nil] :cert
|
|
511
|
+
# The X509 certificate to use for the SSL context.
|
|
512
|
+
#
|
|
513
|
+
# @option kwargs [String] :cert_file
|
|
514
|
+
# The path to the SSL `.crt` file.
|
|
515
|
+
#
|
|
516
|
+
# @option kwargs [String] :ca_bundle
|
|
517
|
+
# Path to the CA certificate file or directory.
|
|
518
|
+
#
|
|
519
|
+
# @return [true]
|
|
520
|
+
# The data was successfully sent.
|
|
521
|
+
#
|
|
522
|
+
# @example
|
|
523
|
+
# buffer = "GET /#{'A' * 4096}\n\r"
|
|
524
|
+
# ssl_send(buffer,'victim.com',443)
|
|
525
|
+
# # => true
|
|
526
|
+
#
|
|
527
|
+
# @api public
|
|
528
|
+
#
|
|
529
|
+
# @since 0.6.0
|
|
530
|
+
#
|
|
531
|
+
def ssl_send(data,host,port, bind_host: nil, bind_port: nil,**kwargs)
|
|
532
|
+
ssl_connect(host,port, bind_host: bind_host,
|
|
533
|
+
bind_port: bind_port,**kwargs) do |socket|
|
|
534
|
+
socket.write(data)
|
|
535
|
+
end
|
|
536
|
+
|
|
537
|
+
return true
|
|
538
|
+
end
|
|
539
|
+
|
|
540
|
+
#
|
|
541
|
+
# Accepts an SSL session from an existing TCP socket.
|
|
542
|
+
#
|
|
543
|
+
# @param [TCPSocket] socket
|
|
544
|
+
# The existing TCP socket.
|
|
545
|
+
#
|
|
546
|
+
# @param [Crypto::Key::RSA, OpenSSL::PKey::RSA, nil] key
|
|
547
|
+
# The RSA key to use for the SSL context.
|
|
548
|
+
#
|
|
549
|
+
# @param [Crypto::Cert, OpenSSL::X509::Certificate, nil] cert
|
|
550
|
+
# The X509 certificate to use for the SSL context.
|
|
551
|
+
#
|
|
552
|
+
# @param [Hash{Symbol => Object}] kwargs
|
|
553
|
+
# Additional keyword arguments for {#ssl_socket}.
|
|
554
|
+
#
|
|
555
|
+
# @option kwargs [Symbol, Boolean] :verify
|
|
556
|
+
# Specifies whether to verify the SSL certificate.
|
|
557
|
+
# May be one of the following:
|
|
558
|
+
#
|
|
559
|
+
# * `:none`
|
|
560
|
+
# * `:peer`
|
|
561
|
+
# * `:fail_if_no_peer_cert`
|
|
562
|
+
# * `:client_once`
|
|
563
|
+
#
|
|
564
|
+
# @option kwargs [String] :key_file
|
|
565
|
+
# The path to the SSL `.key` file.
|
|
566
|
+
#
|
|
567
|
+
# @option kwargs [String] :cert_file
|
|
568
|
+
# The path to the SSL `.crt` file.
|
|
569
|
+
#
|
|
570
|
+
# @option kwargs [String] :ca_bundle
|
|
571
|
+
# Path to the CA certificate file or directory.
|
|
572
|
+
#
|
|
573
|
+
# @return [OpenSSL::SSL::SSLSocket]
|
|
574
|
+
# the new SSL Socket.
|
|
575
|
+
#
|
|
576
|
+
# @api public
|
|
577
|
+
#
|
|
578
|
+
# @since 0.6.0
|
|
579
|
+
#
|
|
580
|
+
def ssl_server_socket(socket, key: Network::SSL.key,
|
|
581
|
+
cert: Network::SSL.cert,
|
|
582
|
+
**kwargs)
|
|
583
|
+
return ssl_socket(socket, cert: cert, key: key, **kwargs)
|
|
584
|
+
end
|
|
585
|
+
|
|
586
|
+
#
|
|
587
|
+
# Creates a new SSL socket listening on a given host and port,
|
|
588
|
+
# accepting clients in a loop.
|
|
589
|
+
#
|
|
590
|
+
# @param [Integer] port
|
|
591
|
+
# The local port to listen on.
|
|
592
|
+
#
|
|
593
|
+
# @param [String] host
|
|
594
|
+
# The host to bind to.
|
|
595
|
+
#
|
|
596
|
+
# @param [Integer] backlog (5)
|
|
597
|
+
# The maximum backlog of pending connections.
|
|
598
|
+
#
|
|
599
|
+
# @param [Hash{Symbol => Object}] kwargs
|
|
600
|
+
# Additional keyword arguments for {#ssl_server_socket}.
|
|
601
|
+
#
|
|
602
|
+
# @option kwargs [Symbol, Boolean] :verify
|
|
603
|
+
# Specifies whether to verify the SSL certificate.
|
|
604
|
+
# May be one of the following:
|
|
605
|
+
#
|
|
606
|
+
# * `:none`
|
|
607
|
+
# * `:peer`
|
|
608
|
+
# * `:fail_if_no_peer_cert`
|
|
609
|
+
# * `:client_once`
|
|
610
|
+
#
|
|
611
|
+
# @option kwargs [Crypto::Key::RSA, OpenSSL::PKey::RSA, nil] :key (Network::SSL.key)
|
|
612
|
+
# The RSA key to use for the SSL context.
|
|
613
|
+
#
|
|
614
|
+
# @option kwargs [String] :key_file
|
|
615
|
+
# The path to the SSL `.key` file.
|
|
616
|
+
#
|
|
617
|
+
# @option kwargs [Crypto::Cert, OpenSSL::X509::Certificate, nil] :cert (Network::SSL.cert)
|
|
618
|
+
# The X509 certificate to use for the SSL context.
|
|
619
|
+
#
|
|
620
|
+
# @option kwargs [String] :cert_file
|
|
621
|
+
# The path to the SSL `.crt` file.
|
|
622
|
+
#
|
|
623
|
+
# @option kwargs [String] :ca_bundle
|
|
624
|
+
# Path to the CA certificate file or directory.
|
|
625
|
+
#
|
|
626
|
+
# @yield [client]
|
|
627
|
+
# The given block will be passed the newly connected client.
|
|
628
|
+
# After the block has finished, the client will be closed.
|
|
629
|
+
#
|
|
630
|
+
# @yieldparam [OpenSSL::SSL::SSLSocket] client
|
|
631
|
+
# A newly connected client.
|
|
632
|
+
#
|
|
633
|
+
# @return [nil]
|
|
634
|
+
#
|
|
635
|
+
# @example
|
|
636
|
+
# # $ openssl genrsa -out ssl.key 1024
|
|
637
|
+
# # $ openssl req -new -key ssl.key -x509 -days 3653 -out ssl.crt
|
|
638
|
+
# # $ cat ssl.key ssl.crt > ssl.pem
|
|
639
|
+
# # $ chmod 600 ssl.key ssl.pem
|
|
640
|
+
# ssl_server_loop(port: 1337, cert: 'ssl.crt', key: 'ssl.key') do |sock|
|
|
641
|
+
# sock.puts 'lol'
|
|
642
|
+
# end
|
|
643
|
+
#
|
|
644
|
+
# @api public
|
|
645
|
+
#
|
|
646
|
+
# @since 0.6.0
|
|
647
|
+
#
|
|
648
|
+
def ssl_server_loop(port: nil, host: nil, backlog: 5, **kwargs)
|
|
649
|
+
return tcp_server_session(port: port, host: host, backlog: backlog) do |server|
|
|
650
|
+
loop do
|
|
651
|
+
client = server.accept
|
|
652
|
+
ssl_client = ssl_server_socket(client,**kwargs)
|
|
653
|
+
ssl_client.accept
|
|
654
|
+
|
|
655
|
+
yield ssl_client if block_given?
|
|
656
|
+
ssl_client.close
|
|
657
|
+
end
|
|
658
|
+
end
|
|
659
|
+
end
|
|
660
|
+
|
|
661
|
+
#
|
|
662
|
+
# Creates a new SSL socket listening on a given host and port,
|
|
663
|
+
# accepts only one client and then stops listening.
|
|
664
|
+
#
|
|
665
|
+
# @param [Integer] port
|
|
666
|
+
# The local port to listen on.
|
|
667
|
+
#
|
|
668
|
+
# @param [String] host
|
|
669
|
+
# The host to bind to.
|
|
670
|
+
#
|
|
671
|
+
# @param [Hash{Symbol => Object}] kwargs
|
|
672
|
+
# Additional keyword arguments for {#ssl_server_socket}.
|
|
673
|
+
#
|
|
674
|
+
# @option kwargs [Symbol, Boolean] :verify
|
|
675
|
+
# Specifies whether to verify the SSL certificate.
|
|
676
|
+
# May be one of the following:
|
|
677
|
+
#
|
|
678
|
+
# * `:none`
|
|
679
|
+
# * `:peer`
|
|
680
|
+
# * `:fail_if_no_peer_cert`
|
|
681
|
+
# * `:client_once`
|
|
682
|
+
#
|
|
683
|
+
# @option kwargs [Crypto::Key::RSA, OpenSSL::PKey::RSA, nil] :key (Network::SSL.key)
|
|
684
|
+
# The RSA key to use for the SSL context.
|
|
685
|
+
#
|
|
686
|
+
# @option kwargs [String] :key_file
|
|
687
|
+
# The path to the SSL `.key` file.
|
|
688
|
+
#
|
|
689
|
+
# @option kwargs [Crypto::Cert, OpenSSL::X509::Certificate, nil] :cert (Network::SSL.cert)
|
|
690
|
+
# The X509 certificate to use for the SSL context.
|
|
691
|
+
#
|
|
692
|
+
# @option kwargs [String] :cert_file
|
|
693
|
+
# The path to the SSL `.crt` file.
|
|
694
|
+
#
|
|
695
|
+
# @option kwargs [String] :ca_bundle
|
|
696
|
+
# Path to the CA certificate file or directory.
|
|
697
|
+
#
|
|
698
|
+
# @example
|
|
699
|
+
# ssl_accept(1337) do |client|
|
|
700
|
+
# client.puts 'lol'
|
|
701
|
+
# end
|
|
702
|
+
#
|
|
703
|
+
# @yield [client]
|
|
704
|
+
# The given block will be passed the newly connected client.
|
|
705
|
+
# After the block has finished, both the client and the server will
|
|
706
|
+
# be closed.
|
|
707
|
+
#
|
|
708
|
+
# @yieldparam [OpenSSL::SSL::SSLSocket] client
|
|
709
|
+
# The newly connected client.
|
|
710
|
+
#
|
|
711
|
+
# @return [nil]
|
|
712
|
+
#
|
|
713
|
+
# @example
|
|
714
|
+
# # $ openssl genrsa -out ssl.key 1024
|
|
715
|
+
# # $ openssl req -new -key ssl.key -x509 -days 3653 -out ssl.crt
|
|
716
|
+
# # $ cat ssl.key ssl.crt > ssl.pem
|
|
717
|
+
# # $ chmod 600 ssl.key ssl.pem
|
|
718
|
+
# ssl_accept(port: 1337, cert: 'ssl.crt', key: 'ssl.key') do |client|
|
|
719
|
+
# client.puts 'lol'
|
|
720
|
+
# end
|
|
721
|
+
#
|
|
722
|
+
# @api public
|
|
723
|
+
#
|
|
724
|
+
# @since 0.6.0
|
|
725
|
+
#
|
|
726
|
+
def ssl_accept(port: nil, host: nil,**kwargs)
|
|
727
|
+
tcp_server_session(port: port, host: host, backlog: 1) do |server|
|
|
728
|
+
client = server.accept
|
|
729
|
+
ssl_client = ssl_server_socket(client,options)
|
|
730
|
+
ssl_client.accept
|
|
731
|
+
|
|
732
|
+
yield ssl_client if block_given?
|
|
733
|
+
ssl_client.close
|
|
734
|
+
end
|
|
735
|
+
end
|
|
736
|
+
end
|
|
737
|
+
end
|
|
738
|
+
end
|
|
739
|
+
end
|
|
740
|
+
end
|