Sha256: ea3c52343d96e2f88caec01ca947969ab0134a202ecc647ba8ace898ecad73c9

Contents?: true

Size: 1.21 KB

Versions: 2

Compression:

Stored size: 1.21 KB

Contents

module Recog
class Matcher
  attr_reader :fingerprints, :reporter

  def initialize(fingerprints, reporter)
    @fingerprints = fingerprints
    @reporter = reporter
  end

  def match_banners(banners_file)
    reporter.report do
      
      fd = $stdin
      file_source = false

      if banners_file and banners_file != "-"
        fd = File.open(banners_file, "rb")
        file_source = true
      end

      fd.each_line do |line|
        reporter.increment_line_count

        line = line.to_s.unpack("C*").pack("C*").strip.gsub(/\\[rn]/, '')
        found = nil 
        fingerprints.each do |fp|
          m = line.match(fp.regex)
          if m
            found = [fp, m]
            break
          end
        end

        if found
          info = { }
          fp, m = found
          fp.params.each_pair do |k,v|
            if v[0] == 0
              info[k] = v[1]
            else
              info[k] = m[ v[0] ]
            end
          end
          info['data'] = line
          reporter.match "MATCH: #{info.inspect}"
        else
          reporter.failure "FAIL: #{line}"
        end

        if reporter.stop?
          break
        end
      end

      fd.close if file_source
      
    end
  end
end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
recog-0.02 lib/recog/matcher.rb
recog-0.01 lib/recog/matcher.rb