Module: FIDIUS::NVDParser

Includes:
NVDParserModel
Defined in:
lib/cveparser/parser.rb

Class Method Summary collapse

Class Method Details

.parse_cve_file(file) ⇒ Object

Parse Version 2.0 XML-File from nvd.nist.gov.



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/cveparser/parser.rb', line 20

def self.parse_cve_file file
  
  doc = Nokogiri::XML(File.open(file))
  doc.css("nvd").each do |nvd| 
    version = nvd.attributes['nvd_xml_version'].value
    if version != "2.0"
      puts "Your XML has the wrong version (#{version}). " + 
           "The CVE-Parser can only handle XML-Feeds in Version 2.0."
      raise 'Invalid XML Version'
    end 
  end

  start_time = Time.now
  puts "[*] Start parsing \"#{file}\""

  entries = []
  entry_count = 0
  doc.css('nvd > entry').each do |entry|
    entries << single_entry(entry)
    entry_count += 1
    if entry_count % 100 == 0 and entry_count > 0
      puts "Parsed #{entry_count} CVE Entries."
    end
  end
  end_time = Time.now
  puts "[*] Finished parsing, parsed #{entries.size} entries in " +
       "#{(end_time-start_time).round} seconds."
  entries
end