class SnsUtils::AddressExtractor
Constants
- IP_REGEX
Attributes
file[RW]
ip_addrs[RW]
ip_addrs_log[RW]
mac_addrs[RW]
mac_addrs_log[RW]
options[RW]
Public Class Methods
new(argv)
click to toggle source
# File lib/sns_utils/address_extractor.rb, line 16 def initialize(argv) @file, @options = parse_options(argv) self.ip_addrs = {} self.mac_addrs = {} end
Public Instance Methods
run()
click to toggle source
# File lib/sns_utils/address_extractor.rb, line 22 def run extract_addresses log_ip_addrs log_mac_addrs self end
Private Instance Methods
extract_addresses()
click to toggle source
# File lib/sns_utils/address_extractor.rb, line 31 def extract_addresses File.open(file, 'r').each do |line| line.scan(IP_REGEX).each do |md| log_addr(md[0].to_s.strip) end end end
log_addr(ip)
click to toggle source
# File lib/sns_utils/address_extractor.rb, line 60 def log_addr(ip) key = IPAddr.new(ip).to_string ip_addrs[key] ||= 0 ip_addrs[key] += 1 rescue IPAddr::InvalidAddressError => e mac_addrs[ip] ||= 0 mac_addrs[ip] += 1 rescue IPAddr::AddressFamilyError => e $stderr.puts(e.message) end
log_ip_addrs()
click to toggle source
# File lib/sns_utils/address_extractor.rb, line 39 def log_ip_addrs self.ip_addrs_log = ip_addrs.select { |_, count| count >= options.ip_threshold }.keys write_file(::SnsUtils.ip_out_file, ip_addrs_log) end
log_mac_addrs()
click to toggle source
# File lib/sns_utils/address_extractor.rb, line 44 def log_mac_addrs self.mac_addrs_log = mac_addrs.select { |_, count| count >= options.mac_threshold }.keys write_file(::SnsUtils.mac_out_file, mac_addrs_log) end
output_dir(dir, file)
click to toggle source
# File lib/sns_utils/address_extractor.rb, line 56 def output_dir(dir, file) dir ? File.expand_path(File.join(dir, file)) : file end
parse_options(argv)
click to toggle source
# File lib/sns_utils/address_extractor.rb, line 71 def parse_options(argv) options = OpenStruct.new options.mac_threshold = 8 options.ip_threshold = 10 options.output_dir = nil parser = OptionParser.new do |opts| opts.on("-m N", Integer, "MAC address threshold, logs entries with N <= occurrences") do |n| options.mac_threshold = Integer(n).abs end opts.on("-i N", Integer, "IP address threshold, logs entries with N =< occurrences") do |n| options.ip_threshold = Integer(n).abs end opts.on("-d OUTPUT_DIR", String, "Dir used to write output files") do |dir| options.output_dir = dir end end parser.parse(argv) file = argv[0] || raise(OptionParser::InvalidOption.new) [file, options] end
write_file(file, entries)
click to toggle source
# File lib/sns_utils/address_extractor.rb, line 49 def write_file(file, entries) file_path = output_dir(options.output_dir, file) File.open(file_path, "w+") do |f| entries.each { |e| f.puts(e) } end end