class Ronin::CLI::Commands::Grep
Greps for common patterns in a file/stream.
## Usage
ronin grep [options] [FILE ...]
## Options
-N, --number Searches for all numbers -X, --hex-number Searches for all hexadecimal numbers -V, --version-number Searches for all version numbers -w, --word Searches for all words --mac-addr Searches for all MAC addresses -4, --ipv4-addr Searches for all IPv4 addresses -6, --ipv6-addr Searches for all IPv6 addresses -I, --ip Searches for all IP addresses -H, --host Searches for all host names -D, --domain Searches for all domain names --uri Searches for all URIs -U, --url Searches for all URLs --user-name Searches for all user names -E, --email-addr Searches for all email addresses --obfuscated-email-addr Searches for all obfuscated email addresses --phone-number Searches for all phone numbers --ssn Searches for all Social Security Numbers (SSNs) --amex-cc Searches for all AMEX Credit Card numbers --discover-cc Searches for all Discover Card numbers --mastercard-cc Searches for all MasterCard numbers --visa-cc Searches for all VISA Credit Card numbers --visa-mastercard-cc Searches for all VISA MasterCard numbers --cc Searches for all Credit Card numbers --file-name Searches for all file names --dir-name Searches for all directory names --relative-unix-path Searches for all relative UNIX paths --absolute-unix-path Searches for all absolute UNIX paths --unix-path Searches for all UNIX paths --relative-windows-path Searches for all relative Windows paths --absolute-windows-path Searches for all absolute Windows paths --windows-path Searches for all Windows paths --relative-path Searches for all relative paths --absolute-path Searches for all absolute paths -P, --path Searches for all paths --identifier Searches for all identifier names --variable-name Searches for all variable names --variable-assignment Searches for all variable assignments --function-name Searches for all function names --md5 Searches for all MD5 hashes --sha1 Searches for all SHA1 hashes --sha256 Searches for all SHA256 hashes --sha512 Searches for all SHA512 hashes --hash Searches for all hashes --ssh-private-key Searches for all SSH private key data --dsa-private-key Searches for all DSA private key data --ec-private-key Searches for all EC private key data --rsa-private-key Searches for all RSA private key data -K, --private-key Searches for all private key data --ssh-public-key Searches for all SSH public key data --public-key Searches for all public key data --aws-access-key-id Searches for all AWS access key IDs --aws-secret-access-key Searches for all AWS secret access keys -A, --api-key Searches for all API keys --single-quoted-string Searches for all single-quoted strings --double-quoted-string Searches for all double-quoted strings -S, --string Searches for all quoted strings -B, --base64 Searches for all Base64 strings --c-comment Searches for all C comments --cpp-comment Searches for all C++ comments --java-comment Searches for all Java comments --javascript-comment Searches for all JavaScript comments --shell-comment Searches for all Shell comments --ruby-comment Searches for all Ruby comments --python-comment Searches for all Python comments --comment Searches for all comments -e, --regexp /REGEXP/ Custom regular expression to search for -o, --only-matching Only print the matching data -n, --line-number Print the line number for each line --with-filename Print the file name for each match -h, --help Print help information
## Arguments
[FILE ...] Optional input file(s)
Public Instance Methods
filename_of(io)
click to toggle source
Returns the file name for the IO stream.
@param [File, IO] io
@return [String]
# File lib/ronin/cli/commands/grep.rb, line 166 def filename_of(io) case io when File then io.path else '[stdin]' end end
match_line(line,**kwargs)
click to toggle source
Attempts to match a line of text.
@param [String] line
@param [Hash{Symbol => Object}] kwargs
Additional keyword arguments.
@option kwargs [String] :filename
@option kwargs [Integer] :line_number
# File lib/ronin/cli/commands/grep.rb, line 185 def match_line(line,**kwargs) index = 0 printed_prefix = false only_matching = options[:only_matching] while (match = line.match(@pattern,index)) unless printed_prefix print_line_prefix(**kwargs) printed_prefix = true end match_start, match_stop = match.offset(0) # print the text before the match, unless --only-matching is enabled print(line[index...match_start]) unless only_matching print_match(match) index = match_stop end unless only_matching # print the rest of the line, if we've had at least one match puts(line[index..]) if index > 0 end end
print_line_prefix(filename: , line_number: )
click to toggle source
Optionally prints the filename or line-number prefix for a line.
@param [String] filename
@param [Integer] line_number
# File lib/ronin/cli/commands/grep.rb, line 219 def print_line_prefix(filename: , line_number: ) if options[:with_filename] print colors.magenta(filename) print colors.cyan(':') end if options[:line_numbers] print colors.green(line_number) print colors.cyan(':') end end
print_match(match)
click to toggle source
Prints the matched string w/o ANSI highlighting.
@param [String] match
# File lib/ronin/cli/commands/grep.rb, line 236 def print_match(match) match_string = match[0] highlighted = colors.bold(colors.red(match_string)) if options[:only_matching] puts highlighted else print highlighted end end
process_input(input)
click to toggle source
Greps the input stream.
@param [IO, StringIO] input
The input stream to grep.
# File lib/ronin/cli/commands/grep.rb, line 151 def process_input(input) filename = filename_of(input) input.each_line(chomp: true).with_index do |line,index| match_line(line, filename: filename, line_number: index + 1) end end
run(*files)
click to toggle source
Runs the ‘ronin grep` command.
@param [Array<String>] files
Additional file arguments to grep.
Calls superclass method
# File lib/ronin/cli/commands/grep.rb, line 136 def run(*files) unless @pattern print_error "must specify a pattern to search for" exit(-1) end super(*files) end