ronin 1.2.0 → 1.3.0
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.
- data/.gitignore +11 -0
- data/ChangeLog.md +28 -10
- data/Gemfile +1 -1
- data/README.md +14 -41
- data/Rakefile +3 -0
- data/gemspec.yml +14 -15
- data/lib/bond/completions/ronin.rb +0 -5
- data/lib/ronin/address.rb +17 -0
- data/lib/ronin/author.rb +1 -1
- data/lib/ronin/database/database.rb +11 -3
- data/lib/ronin/email_address.rb +33 -0
- data/lib/ronin/host_name.rb +57 -6
- data/lib/ronin/ip_address.rb +49 -5
- data/lib/ronin/license.rb +1 -1
- data/lib/ronin/mac_address.rb +39 -1
- data/lib/ronin/model/has_license.rb +12 -3
- data/lib/ronin/model/importable.rb +65 -0
- data/lib/ronin/repository.rb +12 -4
- data/lib/ronin/spec/database.rb +1 -1
- data/lib/ronin/tcp_port.rb +3 -12
- data/lib/ronin/udp_port.rb +2 -11
- data/lib/ronin/ui/cli/commands/emails.rb +0 -45
- data/lib/ronin/ui/cli/commands/hosts.rb +4 -31
- data/lib/ronin/ui/cli/commands/ips.rb +4 -30
- data/lib/ronin/ui/cli/commands/urls.rb +5 -45
- data/lib/ronin/ui/cli/model_command.rb +17 -27
- data/lib/ronin/ui/cli/resources_command.rb +25 -1
- data/lib/ronin/ui/cli/script_command.rb +1 -1
- data/lib/ronin/ui/console/context.rb +1 -1
- data/lib/ronin/url.rb +43 -1
- data/lib/ronin/version.rb +1 -1
- data/ronin.gemspec +1 -1
- data/spec/email_address_spec.rb +20 -0
- data/spec/host_name_spec.rb +20 -0
- data/spec/ip_address_spec.rb +104 -0
- data/spec/mac_address_spec.rb +20 -0
- data/spec/url_spec.rb +24 -0
- metadata +118 -155
- data/lib/ronin/network/mixins.rb +0 -27
- data/lib/ronin/network/mixins/esmtp.rb +0 -165
- data/lib/ronin/network/mixins/http.rb +0 -723
- data/lib/ronin/network/mixins/imap.rb +0 -151
- data/lib/ronin/network/mixins/pop3.rb +0 -141
- data/lib/ronin/network/mixins/smtp.rb +0 -159
- data/lib/ronin/network/mixins/tcp.rb +0 -331
- data/lib/ronin/network/mixins/telnet.rb +0 -199
- data/lib/ronin/network/mixins/udp.rb +0 -227
- data/lib/ronin/spec/ui/output.rb +0 -28
- data/lib/ronin/ui/output.rb +0 -21
- data/lib/ronin/ui/output/helpers.rb +0 -248
- data/lib/ronin/ui/output/output.rb +0 -146
- data/lib/ronin/ui/output/terminal.rb +0 -21
- data/lib/ronin/ui/output/terminal/color.rb +0 -118
- data/lib/ronin/ui/output/terminal/raw.rb +0 -103
- data/lib/ronin/ui/shell.rb +0 -92
- data/spec/ip_address.rb +0 -84
- data/spec/ui/output_spec.rb +0 -32
    
        data/lib/ronin/ip_address.rb
    CHANGED
    
    | @@ -17,6 +17,9 @@ | |
| 17 17 | 
             
            # along with Ronin.  If not, see <http://www.gnu.org/licenses/>.
         | 
| 18 18 | 
             
            #
         | 
| 19 19 |  | 
| 20 | 
            +
            require 'ronin/extensions/ip_addr'
         | 
| 21 | 
            +
            require 'ronin/extensions/resolv'
         | 
| 22 | 
            +
            require 'ronin/model/importable'
         | 
| 20 23 | 
             
            require 'ronin/address'
         | 
| 21 24 | 
             
            require 'ronin/ip_address_mac_address'
         | 
| 22 25 | 
             
            require 'ronin/host_name_ip_address'
         | 
| @@ -24,7 +27,6 @@ require 'ronin/os' | |
| 24 27 | 
             
            require 'ronin/open_port'
         | 
| 25 28 |  | 
| 26 29 | 
             
            require 'ipaddr'
         | 
| 27 | 
            -
            require 'resolv'
         | 
| 28 30 |  | 
| 29 31 | 
             
            module Ronin
         | 
| 30 32 | 
             
              #
         | 
| @@ -32,6 +34,8 @@ module Ronin | |
| 32 34 | 
             
              #
         | 
| 33 35 | 
             
              class IPAddress < Address
         | 
| 34 36 |  | 
| 37 | 
            +
                include Model::Importable
         | 
| 38 | 
            +
             | 
| 35 39 | 
             
                # The IP Address
         | 
| 36 40 | 
             
                property :address, Property::IPAddress, :required => true,
         | 
| 37 41 | 
             
                                                        :unique => true
         | 
| @@ -75,6 +79,37 @@ module Ronin | |
| 75 79 | 
             
                                 :model => 'OS',
         | 
| 76 80 | 
             
                                 :via => :os
         | 
| 77 81 |  | 
| 82 | 
            +
                #
         | 
| 83 | 
            +
                # Extracts and parses IP addresses from text.
         | 
| 84 | 
            +
                #
         | 
| 85 | 
            +
                # @param [String] text
         | 
| 86 | 
            +
                #   The text to parse.
         | 
| 87 | 
            +
                #
         | 
| 88 | 
            +
                # @param [Symbol, Integer] version
         | 
| 89 | 
            +
                #   Specifies whether to parse IPv4 or IPv6 addresses.
         | 
| 90 | 
            +
                #
         | 
| 91 | 
            +
                # @yield [ip]
         | 
| 92 | 
            +
                #   The given block will be passed each extracted IP address.
         | 
| 93 | 
            +
                #
         | 
| 94 | 
            +
                # @yieldparam [IPAddress] ip
         | 
| 95 | 
            +
                #   An extracted IP Address from the text.
         | 
| 96 | 
            +
                #
         | 
| 97 | 
            +
                # @see http://ronin-ruby.github.com/docs/ronin-support/IPAddr.html#extract-class_method
         | 
| 98 | 
            +
                #
         | 
| 99 | 
            +
                # @since 1.3.0
         | 
| 100 | 
            +
                #
         | 
| 101 | 
            +
                # @api public
         | 
| 102 | 
            +
                #
         | 
| 103 | 
            +
                def self.extract(text,version=nil)
         | 
| 104 | 
            +
                  return enum_for(:extract,text,version).to_a unless block_given?
         | 
| 105 | 
            +
             | 
| 106 | 
            +
                  IPAddr.extract(text,version) do |ip|
         | 
| 107 | 
            +
                    yield parse(ip)
         | 
| 108 | 
            +
                  end
         | 
| 109 | 
            +
             | 
| 110 | 
            +
                  return nil
         | 
| 111 | 
            +
                end
         | 
| 112 | 
            +
             | 
| 78 113 | 
             
                #
         | 
| 79 114 | 
             
                # Searches for all IPv4 addresses.
         | 
| 80 115 | 
             
                #
         | 
| @@ -160,6 +195,9 @@ module Ronin | |
| 160 195 | 
             
                # @param [String] name
         | 
| 161 196 | 
             
                #   The host name to look up.
         | 
| 162 197 | 
             
                #
         | 
| 198 | 
            +
                # @param [String] nameserver
         | 
| 199 | 
            +
                #   Optional nameserver to query.
         | 
| 200 | 
            +
                #
         | 
| 163 201 | 
             
                # @return [Array<IPAddress>]
         | 
| 164 202 | 
             
                #   The new or previously saved IP Addresses for the host name.
         | 
| 165 203 | 
             
                #
         | 
| @@ -167,10 +205,12 @@ module Ronin | |
| 167 205 | 
             
                #
         | 
| 168 206 | 
             
                # @api public
         | 
| 169 207 | 
             
                #
         | 
| 170 | 
            -
                def self.lookup(name)
         | 
| 208 | 
            +
                def self.lookup(name,nameserver=nil)
         | 
| 171 209 | 
             
                  host = HostName.first_or_new(:address => name)
         | 
| 210 | 
            +
                  resolver = Resolv.resolver(nameserver)
         | 
| 211 | 
            +
             | 
| 172 212 | 
             
                  ips = begin
         | 
| 173 | 
            -
                           | 
| 213 | 
            +
                          resolver.getaddresses(name)
         | 
| 174 214 | 
             
                        rescue
         | 
| 175 215 | 
             
                          []
         | 
| 176 216 | 
             
                        end
         | 
| @@ -188,6 +228,9 @@ module Ronin | |
| 188 228 | 
             
                #
         | 
| 189 229 | 
             
                # Performs a reverse lookup on the IP address.
         | 
| 190 230 | 
             
                #
         | 
| 231 | 
            +
                # @param [String] nameserver
         | 
| 232 | 
            +
                #   Optional nameserver to query.
         | 
| 233 | 
            +
                #
         | 
| 191 234 | 
             
                # @return [Array<HostName>]
         | 
| 192 235 | 
             
                #   The host-names associated with the IP Address.
         | 
| 193 236 | 
             
                #
         | 
| @@ -195,9 +238,10 @@ module Ronin | |
| 195 238 | 
             
                #
         | 
| 196 239 | 
             
                # @api public
         | 
| 197 240 | 
             
                #
         | 
| 198 | 
            -
                def lookup!
         | 
| 241 | 
            +
                def lookup!(nameserver=nil)
         | 
| 242 | 
            +
                  resolver = Resolv.resolver(nameserver)
         | 
| 199 243 | 
             
                  hosts = begin
         | 
| 200 | 
            -
                             | 
| 244 | 
            +
                            resolver.getnames(self.address.to_s)
         | 
| 201 245 | 
             
                          rescue
         | 
| 202 246 | 
             
                            []
         | 
| 203 247 | 
             
                          end
         | 
    
        data/lib/ronin/license.rb
    CHANGED
    
    
    
        data/lib/ronin/mac_address.rb
    CHANGED
    
    | @@ -17,10 +17,13 @@ | |
| 17 17 | 
             
            # along with Ronin.  If not, see <http://www.gnu.org/licenses/>.
         | 
| 18 18 | 
             
            #
         | 
| 19 19 |  | 
| 20 | 
            +
            require 'ronin/extensions/regexp'
         | 
| 20 21 | 
             
            require 'ronin/address'
         | 
| 21 22 | 
             
            require 'ronin/ip_address'
         | 
| 22 23 | 
             
            require 'ronin/ip_address_mac_address'
         | 
| 23 24 |  | 
| 25 | 
            +
            require 'strscan'
         | 
| 26 | 
            +
             | 
| 24 27 | 
             
            module Ronin
         | 
| 25 28 | 
             
              #
         | 
| 26 29 | 
             
              # Represents MAC addresses that can be stored in the {Database}.
         | 
| @@ -30,7 +33,11 @@ module Ronin | |
| 30 33 | 
             
                # The MAC address
         | 
| 31 34 | 
             
                property :address, String, :length => 17..17,
         | 
| 32 35 | 
             
                                           :required => true,
         | 
| 33 | 
            -
                                           :unique => true
         | 
| 36 | 
            +
                                           :unique => true,
         | 
| 37 | 
            +
                                           :format => /^#{Regexp::MAC}$/,
         | 
| 38 | 
            +
                                           :messages => {
         | 
| 39 | 
            +
                                             :format => 'Must be a valid MAC address'
         | 
| 40 | 
            +
                                           }
         | 
| 34 41 |  | 
| 35 42 | 
             
                # The IP Addresses the MAC Address hosts
         | 
| 36 43 | 
             
                has 0..n, :ip_address_mac_addresses, :model => 'IPAddressMACAddress'
         | 
| @@ -39,6 +46,37 @@ module Ronin | |
| 39 46 | 
             
                has 0..n, :ip_addresses, :through => :ip_address_mac_addresses,
         | 
| 40 47 | 
             
                                         :model => 'IPAddress'
         | 
| 41 48 |  | 
| 49 | 
            +
                #
         | 
| 50 | 
            +
                # Extracts MAC addresses from the given text.
         | 
| 51 | 
            +
                #
         | 
| 52 | 
            +
                # @param [String] text
         | 
| 53 | 
            +
                #   The text to parse.
         | 
| 54 | 
            +
                #
         | 
| 55 | 
            +
                # @yield [mac]
         | 
| 56 | 
            +
                #   The given block will be passed each extracted MAC address.
         | 
| 57 | 
            +
                #
         | 
| 58 | 
            +
                # @yieldparam [MACAddress] mac
         | 
| 59 | 
            +
                #   An extracted MAC Address
         | 
| 60 | 
            +
                #
         | 
| 61 | 
            +
                # @return [Array<MACAddress>]
         | 
| 62 | 
            +
                #   If no block is given, an Array of MACAddress will be returned.
         | 
| 63 | 
            +
                #
         | 
| 64 | 
            +
                # @see 1.3.0
         | 
| 65 | 
            +
                #
         | 
| 66 | 
            +
                # @api public
         | 
| 67 | 
            +
                #
         | 
| 68 | 
            +
                def self.extract(text)
         | 
| 69 | 
            +
                  return enum_for(:extract,text).to_a unless block_given?
         | 
| 70 | 
            +
             | 
| 71 | 
            +
                  scanner = StringScanner.new(text)
         | 
| 72 | 
            +
             | 
| 73 | 
            +
                  while scanner.skip_until(Regexp::MAC)
         | 
| 74 | 
            +
                    yield parse(scanner.matched)
         | 
| 75 | 
            +
                  end
         | 
| 76 | 
            +
             | 
| 77 | 
            +
                  return nil
         | 
| 78 | 
            +
                end
         | 
| 79 | 
            +
             | 
| 42 80 | 
             
                #
         | 
| 43 81 | 
             
                # The IP Address that most recently used the MAC Address.
         | 
| 44 82 | 
             
                #
         | 
| @@ -105,15 +105,24 @@ module Ronin | |
| 105 105 | 
             
                    #   The new license of the model.
         | 
| 106 106 | 
             
                    #
         | 
| 107 107 | 
             
                    # @example
         | 
| 108 | 
            -
                    #    | 
| 108 | 
            +
                    #   licensed_under :mit
         | 
| 109 109 | 
             
                    #
         | 
| 110 | 
            -
                    # @since 1. | 
| 110 | 
            +
                    # @since 1.3.0
         | 
| 111 111 | 
             
                    #
         | 
| 112 112 | 
             
                    # @api public
         | 
| 113 113 | 
             
                    #
         | 
| 114 | 
            -
                    def  | 
| 114 | 
            +
                    def licensed_under(name)
         | 
| 115 115 | 
             
                      self.license = Ronin::License.predefined_resource(name)
         | 
| 116 116 | 
             
                    end
         | 
| 117 | 
            +
             | 
| 118 | 
            +
                    #
         | 
| 119 | 
            +
                    # @deprecated `license!` was deprecated in favor of {#licensed_under}.
         | 
| 120 | 
            +
                    #
         | 
| 121 | 
            +
                    # @since 1.0.0
         | 
| 122 | 
            +
                    #
         | 
| 123 | 
            +
                    def license!(name)
         | 
| 124 | 
            +
                      licensed_under(name)
         | 
| 125 | 
            +
                    end
         | 
| 117 126 | 
             
                  end
         | 
| 118 127 | 
             
                end
         | 
| 119 128 | 
             
              end
         | 
| @@ -0,0 +1,65 @@ | |
| 1 | 
            +
            #
         | 
| 2 | 
            +
            # Copyright (c) 2006-2011 Hal Brodigan (postmodern.mod3 at gmail.com)
         | 
| 3 | 
            +
            #
         | 
| 4 | 
            +
            # This file is part of Ronin.
         | 
| 5 | 
            +
            #
         | 
| 6 | 
            +
            # Ronin is free software: you can redistribute it and/or modify
         | 
| 7 | 
            +
            # it under the terms of the GNU General Public License as published by
         | 
| 8 | 
            +
            # the Free Software Foundation, either version 3 of the License, or
         | 
| 9 | 
            +
            # (at your option) any later version.
         | 
| 10 | 
            +
            #
         | 
| 11 | 
            +
            # Ronin is distributed in the hope that it will be useful,
         | 
| 12 | 
            +
            # but WITHOUT ANY WARRANTY; without even the implied warranty of
         | 
| 13 | 
            +
            # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
         | 
| 14 | 
            +
            # GNU General Public License for more details.
         | 
| 15 | 
            +
            #
         | 
| 16 | 
            +
            # You should have received a copy of the GNU General Public License
         | 
| 17 | 
            +
            # along with Ronin.  If not, see <http://www.gnu.org/licenses/>.
         | 
| 18 | 
            +
            #
         | 
| 19 | 
            +
             | 
| 20 | 
            +
            module Ronin
         | 
| 21 | 
            +
              module Model
         | 
| 22 | 
            +
                #
         | 
| 23 | 
            +
                # Uses the `extract` method to extract and save resources from the
         | 
| 24 | 
            +
                # contents of text-files.
         | 
| 25 | 
            +
                #
         | 
| 26 | 
            +
                # @since 1.3.0
         | 
| 27 | 
            +
                #
         | 
| 28 | 
            +
                module Importable
         | 
| 29 | 
            +
                  def self.included(base)
         | 
| 30 | 
            +
                    base.extend ClassMethods
         | 
| 31 | 
            +
                  end
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                  module ClassMethods
         | 
| 34 | 
            +
                    #
         | 
| 35 | 
            +
                    # Extracts and imports resources from the given file.
         | 
| 36 | 
            +
                    #
         | 
| 37 | 
            +
                    # @param [String] path
         | 
| 38 | 
            +
                    #   The path of the file.
         | 
| 39 | 
            +
                    #
         | 
| 40 | 
            +
                    # @yield [resource]
         | 
| 41 | 
            +
                    #   The given block will be passed every imported resource.
         | 
| 42 | 
            +
                    #
         | 
| 43 | 
            +
                    # @yieldparam [Model] resource
         | 
| 44 | 
            +
                    #   A successfully imported resource.
         | 
| 45 | 
            +
                    #
         | 
| 46 | 
            +
                    # @return [Array<Model>]
         | 
| 47 | 
            +
                    #   If no block is given, an Array of imported resources is returned.
         | 
| 48 | 
            +
                    #
         | 
| 49 | 
            +
                    # @api public
         | 
| 50 | 
            +
                    #
         | 
| 51 | 
            +
                    def import(path)
         | 
| 52 | 
            +
                      return enum_for(:import,path).to_a unless block_given?
         | 
| 53 | 
            +
             | 
| 54 | 
            +
                      File.open(path) do |file|
         | 
| 55 | 
            +
                        file.each_line do |line|
         | 
| 56 | 
            +
                          extract(line) do |resource|
         | 
| 57 | 
            +
                            yield(resource) if resource.save
         | 
| 58 | 
            +
                          end
         | 
| 59 | 
            +
                        end
         | 
| 60 | 
            +
                      end
         | 
| 61 | 
            +
                    end
         | 
| 62 | 
            +
                  end
         | 
| 63 | 
            +
                end
         | 
| 64 | 
            +
              end
         | 
| 65 | 
            +
            end
         | 
    
        data/lib/ronin/repository.rb
    CHANGED
    
    | @@ -125,8 +125,12 @@ module Ronin | |
| 125 125 | 
             
                #   The path to the repository.
         | 
| 126 126 | 
             
                #
         | 
| 127 127 | 
             
                # @param [Symbol] scm
         | 
| 128 | 
            -
                #   The SCM used by the repository. Can be either | 
| 129 | 
            -
                # | 
| 128 | 
            +
                #   The SCM used by the repository. Can be either:
         | 
| 129 | 
            +
                #
         | 
| 130 | 
            +
                #   * `:git`
         | 
| 131 | 
            +
                #   * `:mercurial` / `:hg`
         | 
| 132 | 
            +
                #   * `:sub_version` / `:svn`
         | 
| 133 | 
            +
                #   * `:rsync`
         | 
| 130 134 | 
             
                #
         | 
| 131 135 | 
             
                # @param [String, URI::HTTP, URI::HTTPS] uri
         | 
| 132 136 | 
             
                #   The URI the repository resides at.
         | 
| @@ -259,8 +263,12 @@ module Ronin | |
| 259 263 | 
             
                #   The URI to the repository.
         | 
| 260 264 | 
             
                #
         | 
| 261 265 | 
             
                # @option options [Symbol] :scm
         | 
| 262 | 
            -
                #   The SCM used by the repository. May be either | 
| 263 | 
            -
                # | 
| 266 | 
            +
                #   The SCM used by the repository. May be either:
         | 
| 267 | 
            +
                #
         | 
| 268 | 
            +
                #   * `:git`
         | 
| 269 | 
            +
                #   * `:mercurial` / `:hg`
         | 
| 270 | 
            +
                #   * `:sub_version` / `:svn`
         | 
| 271 | 
            +
                #   * `:rsync`
         | 
| 264 272 | 
             
                #
         | 
| 265 273 | 
             
                # @return [Repository]
         | 
| 266 274 | 
             
                #   The newly installed repository.
         | 
    
        data/lib/ronin/spec/database.rb
    CHANGED
    
    | @@ -25,7 +25,7 @@ require 'tempfile' | |
| 25 25 | 
             
            RSpec.configure do |spec|
         | 
| 26 26 | 
             
              spec.before(:suite) do
         | 
| 27 27 | 
             
                database_file = Tempfile.new('ronin_database').path
         | 
| 28 | 
            -
                database_uri | 
| 28 | 
            +
                database_uri  = {:adapter => 'sqlite3', :database => database_file}
         | 
| 29 29 |  | 
| 30 30 | 
             
                Ronin::Database.repositories[:default] = database_uri
         | 
| 31 31 |  | 
    
        data/lib/ronin/tcp_port.rb
    CHANGED
    
    | @@ -26,21 +26,12 @@ module Ronin | |
| 26 26 | 
             
              #
         | 
| 27 27 | 
             
              class TCPPort < Port
         | 
| 28 28 |  | 
| 29 | 
            +
                # The protocol used for the port
         | 
| 30 | 
            +
                property :protocol, String, :default => 'tcp'
         | 
| 31 | 
            +
             | 
| 29 32 | 
             
                # The URLs that use the port
         | 
| 30 33 | 
             
                has 0..n, :urls, :model => 'URL',
         | 
| 31 34 | 
             
                                 :child_key => [:port_id]
         | 
| 32 35 |  | 
| 33 | 
            -
                #
         | 
| 34 | 
            -
                # Creates a new {TCPPort} resource.
         | 
| 35 | 
            -
                #
         | 
| 36 | 
            -
                # @param [Hash] attributes
         | 
| 37 | 
            -
                #   The attribute names and values to initialize the TCP port with.
         | 
| 38 | 
            -
                #
         | 
| 39 | 
            -
                # @api public
         | 
| 40 | 
            -
                #
         | 
| 41 | 
            -
                def initialize(attributes={})
         | 
| 42 | 
            -
                  super(attributes.merge(:protocol => 'tcp'))
         | 
| 43 | 
            -
                end
         | 
| 44 | 
            -
             | 
| 45 36 | 
             
              end
         | 
| 46 37 | 
             
            end
         | 
    
        data/lib/ronin/udp_port.rb
    CHANGED
    
    | @@ -25,17 +25,8 @@ module Ronin | |
| 25 25 | 
             
              #
         | 
| 26 26 | 
             
              class UDPPort < Port
         | 
| 27 27 |  | 
| 28 | 
            -
                #
         | 
| 29 | 
            -
                 | 
| 30 | 
            -
                #
         | 
| 31 | 
            -
                # @param [Hash] attributes
         | 
| 32 | 
            -
                #   The attribute names and values to initialize the UDP port with.
         | 
| 33 | 
            -
                #
         | 
| 34 | 
            -
                # @api public
         | 
| 35 | 
            -
                #
         | 
| 36 | 
            -
                def initialize(attributes={})
         | 
| 37 | 
            -
                  super(attributes.merge(:protocol => 'udp'))
         | 
| 38 | 
            -
                end
         | 
| 28 | 
            +
                # The protocol used for the port
         | 
| 29 | 
            +
                property :protocol, String, :default => 'tcp'
         | 
| 39 30 |  | 
| 40 31 | 
             
              end
         | 
| 41 32 | 
             
            end
         | 
| @@ -51,51 +51,6 @@ module Ronin | |
| 51 51 | 
             
                                            :aliases => '-i',
         | 
| 52 52 | 
             
                                            :banner => 'FILE'
         | 
| 53 53 |  | 
| 54 | 
            -
                      #
         | 
| 55 | 
            -
                      # Queries the {EmailAddress} model.
         | 
| 56 | 
            -
                      #
         | 
| 57 | 
            -
                      # @since 1.0.0
         | 
| 58 | 
            -
                      #
         | 
| 59 | 
            -
                      def execute
         | 
| 60 | 
            -
                        if options[:import]
         | 
| 61 | 
            -
                          import options[:import]
         | 
| 62 | 
            -
                        elsif options.list?
         | 
| 63 | 
            -
                          super
         | 
| 64 | 
            -
                        end
         | 
| 65 | 
            -
                      end
         | 
| 66 | 
            -
             | 
| 67 | 
            -
                      protected
         | 
| 68 | 
            -
             | 
| 69 | 
            -
                      #
         | 
| 70 | 
            -
                      # Imports email addresses from a file.
         | 
| 71 | 
            -
                      #
         | 
| 72 | 
            -
                      # @param [String] path
         | 
| 73 | 
            -
                      #   The path to the file.
         | 
| 74 | 
            -
                      #
         | 
| 75 | 
            -
                      # @since 1.0.0
         | 
| 76 | 
            -
                      #
         | 
| 77 | 
            -
                      def import(path)
         | 
| 78 | 
            -
                        File.open(path) do |file|
         | 
| 79 | 
            -
                          file.each_line do |line|
         | 
| 80 | 
            -
                            line.strip!
         | 
| 81 | 
            -
                            next if line.empty?
         | 
| 82 | 
            -
             | 
| 83 | 
            -
                            email = begin
         | 
| 84 | 
            -
                                      EmailAddress.parse(line)
         | 
| 85 | 
            -
                                    rescue => e
         | 
| 86 | 
            -
                                      print_error e.message
         | 
| 87 | 
            -
                                      next
         | 
| 88 | 
            -
                                    end
         | 
| 89 | 
            -
             | 
| 90 | 
            -
                            if email.save
         | 
| 91 | 
            -
                              print_info "Imported #{email}"
         | 
| 92 | 
            -
                            else
         | 
| 93 | 
            -
                              print_error "Unable to import #{line.dump}."
         | 
| 94 | 
            -
                            end
         | 
| 95 | 
            -
                          end
         | 
| 96 | 
            -
                        end
         | 
| 97 | 
            -
                      end
         | 
| 98 | 
            -
             | 
| 99 54 | 
             
                    end
         | 
| 100 55 | 
             
                  end
         | 
| 101 56 | 
             
                end
         | 
| @@ -65,11 +65,9 @@ module Ronin | |
| 65 65 | 
             
                      # @since 1.0.0
         | 
| 66 66 | 
             
                      #
         | 
| 67 67 | 
             
                      def execute
         | 
| 68 | 
            -
                        if options[: | 
| 69 | 
            -
                          import options[:import]
         | 
| 70 | 
            -
                        elsif options[:lookup]
         | 
| 68 | 
            +
                        if options[:lookup]
         | 
| 71 69 | 
             
                          lookup options[:lookup]
         | 
| 72 | 
            -
                         | 
| 70 | 
            +
                        else
         | 
| 73 71 | 
             
                          super
         | 
| 74 72 | 
             
                        end
         | 
| 75 73 | 
             
                      end
         | 
| @@ -94,31 +92,6 @@ module Ronin | |
| 94 92 | 
             
                        print_info "Looked up #{ip}"
         | 
| 95 93 | 
             
                      end
         | 
| 96 94 |  | 
| 97 | 
            -
                      #
         | 
| 98 | 
            -
                      # Imports host names from a file.
         | 
| 99 | 
            -
                      #
         | 
| 100 | 
            -
                      # @param [String] path
         | 
| 101 | 
            -
                      #   The path to the file.
         | 
| 102 | 
            -
                      #
         | 
| 103 | 
            -
                      # @since 1.0.0
         | 
| 104 | 
            -
                      #
         | 
| 105 | 
            -
                      def import(path)
         | 
| 106 | 
            -
                        File.open(path) do |file|
         | 
| 107 | 
            -
                          file.each_line do |line|
         | 
| 108 | 
            -
                            line.strip!
         | 
| 109 | 
            -
                            next if line.empty?
         | 
| 110 | 
            -
             | 
| 111 | 
            -
                            host = HostName.new(:address => line)
         | 
| 112 | 
            -
             | 
| 113 | 
            -
                            if host.save
         | 
| 114 | 
            -
                              print_info "Imported #{host}"
         | 
| 115 | 
            -
                            else
         | 
| 116 | 
            -
                              print_error "Unable to import #{line.dump}."
         | 
| 117 | 
            -
                            end
         | 
| 118 | 
            -
                          end
         | 
| 119 | 
            -
                        end
         | 
| 120 | 
            -
                      end
         | 
| 121 | 
            -
             | 
| 122 95 | 
             
                      #
         | 
| 123 96 | 
             
                      # Prints a host name.
         | 
| 124 97 | 
             
                      #
         | 
| @@ -134,11 +107,11 @@ module Ronin | |
| 134 107 |  | 
| 135 108 | 
             
                        indent do
         | 
| 136 109 | 
             
                          if (org = host.organization)
         | 
| 137 | 
            -
                            print_hash | 
| 110 | 
            +
                            print_hash 'Organization' => org
         | 
| 138 111 | 
             
                          end
         | 
| 139 112 |  | 
| 140 113 | 
             
                          if (last_scanned_at = host.last_scanned_at)
         | 
| 141 | 
            -
                            print_hash | 
| 114 | 
            +
                            print_hash 'Last Scanned' => last_scanned_at
         | 
| 142 115 | 
             
                          end
         | 
| 143 116 |  | 
| 144 117 | 
             
                          unless host.ip_addresses.empty?
         |