Sha256: 43643ff5e4a2cb557d5a67eb6fdca214aa08230d58b38128bef85c7fd44b91ee
Contents?: true
Size: 1.73 KB
Versions: 2
Compression:
Stored size: 1.73 KB
Contents
module PatronusFati::MessageProcessor::Ssid include PatronusFati::MessageProcessor def self.process(obj) # Ignore the initial flood of cached data and any objects that would have # already expired return unless PatronusFati.past_initial_flood? && obj[:lasttime] >= PatronusFati::DataModels::Ssid.current_expiration_threshold ssid_info = ssid_data(obj.attributes) if %w(beacon probe_response).include?(obj[:type]) access_point = PatronusFati::DataModels::AccessPoint.first(bssid: obj[:mac]) return unless access_point # Only happens with a corrupt message ssid = PatronusFati::DataModels::Ssid.first_or_create({access_point: access_point, essid: ssid_info[:essid]}, ssid_info) unless ssid.saved? puts "Created but failed to persist SSID for unknown reason. Available validation errors: #{ssid.errors.to_a.inspect}" raise "SSID wasn't able to be saved: #{ssid.errors.to_a.inspect}" unless ssid.save end ssid.update(ssid_info) access_point.seen! elsif obj[:type] == 'probe_request' client = PatronusFati::DataModels::Client.first(bssid: obj[:mac]) return if client.nil? client.seen! return if obj[:ssid].nil? || obj[:ssid].empty? client.probes.first_or_create(essid: obj[:ssid]) end nil end protected def self.ssid_data(attrs) crypt_set = attrs[:cryptset].map(&:to_s) crypt_set << 'WPS' if %w(WPS_CONFIGURED WPS_LOCKED).include?(attrs[:wps]) { beacon_info: attrs[:beaconinfo], beacon_rate: attrs[:beaconrate], cloaked: attrs[:cloaked], crypt_set: crypt_set, essid: attrs[:ssid], max_rate: attrs[:maxrate], last_seen_at: Time.now.to_i }.reject { |_, v| v.nil? } end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
patronus_fati-1.0.2 | lib/patronus_fati/message_processor/ssid.rb |
patronus_fati-1.0.1 | lib/patronus_fati/message_processor/ssid.rb |