patronus_fati 0.9.32 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b306e11499b0e488195a50d09903c63ce1b91929
4
- data.tar.gz: d7792915f6e0118627788053d363f09945791f36
3
+ metadata.gz: 3f6f3ad421d728ab9ad441d5863d7fb3ddb05182
4
+ data.tar.gz: e04b299336bb0630b70b21cd5c8a516ec7a859b2
5
5
  SHA512:
6
- metadata.gz: fb93258bb27ffd004e2a90784118af9daaff3d33592874c48b798349ef3a62efb76570e0968183d00c9bdaecf6091d6fa9c9aa40262eabd528afb3c83b7834e8
7
- data.tar.gz: 5af5155a352342d521b4f86cff6e3d4c74379e00b93f5c3b2ed208409bb379b8c0becd94ef1a32e68e7de689627d1239a7a229c9e8457c0341aa8fe408d5d5ca
6
+ metadata.gz: 6776c2501935b588b7b7fc64d0885718407c783aaebd65c55a0e08619599c24c1e2c4d65a6671a69834b542dd5fe3debeb98616f5fa7b72bf8eaf8a41e299b93
7
+ data.tar.gz: c9ca33dc0d16de2317557c17f6b82ec50dffc4dfaab68e16c50d8dc912715df1402b0b330814968a57ed34425285ad4f31695c81efc80c25930e22a98805a370
@@ -34,23 +34,21 @@ module PatronusFati
34
34
  (1 << 3) => 'WEP40',
35
35
  (1 << 4) => 'WEP104',
36
36
  (1 << 5) => 'WPA+TKIP',
37
- (1 << 6) => 'WPA', # Appears deprecated but still in the kismet source
38
37
  (1 << 7) => 'WPA+PSK',
39
38
  (1 << 8) => 'WPA+AES-OCB',
40
39
  (1 << 9) => 'WPA+AES-CCM',
41
- (1 << 10) => 'WPA Migration Mode',
42
- (1 << 11) => 'WPA+EAP', # Not a value that shows up in kismet exports... Bonus?
43
- (1 << 12) => 'WPA+LEAP',
44
- (1 << 13) => 'WPA+TTLS',
45
- (1 << 14) => 'WPA+TLS',
46
- (1 << 15) => 'WPA+PEAP',
47
- (1 << 20) => 'ISAKMP',
48
- (1 << 21) => 'PPTP',
49
- (1 << 22) => 'Fortress',
50
- (1 << 23) => 'Keyguard',
51
- (1 << 24) => 'Unknown Protected',
52
- (1 << 25) => 'Unknown Non-WEP',
53
- (1 << 26) => 'WPS'
40
+ (1 << 10) => 'WPA+LEAP',
41
+ (1 << 11) => 'WPA+TTLS',
42
+ (1 << 12) => 'WPA+TLS',
43
+ (1 << 13) => 'WPA+PEAP',
44
+ (1 << 14) => 'ISAKMP',
45
+ (1 << 15) => 'PPTP',
46
+ (1 << 16) => 'Fortress',
47
+ (1 << 17) => 'Keyguard',
48
+ (1 << 18) => 'Unknown_NonWEP',
49
+ (1 << 19) => 'WPA Migration Mode',
50
+ (1 << 20) => 'WPA',
51
+ (1 << 21) => 'WPA2',
54
52
  }
55
53
 
56
54
  SSID_CRYPT_MAP_INVERTED = Hash[SSID_CRYPT_MAP.map { |k, v| [v, k] }]
@@ -1,8 +1,11 @@
1
1
  module PatronusFati
2
2
  module MessageModels
3
+ # NOTE: If you change these fields the SSID message parser needs to be
4
+ # manually updated since these fields are very broken.
3
5
  Ssid = CapStruct.new(
4
6
  :mac, :checksum, :type, :ssid, :beaconinfo, :cryptset, :cloaked,
5
- :firsttime, :lasttime, :maxrate, :beaconrate
7
+ :maxrate, :beaconrate, :firsttime, :lasttime, :wps, :wps_device_name,
8
+ :wps_manuf, :wps_model_name, :wps_model_number
6
9
  )
7
10
  Ssid.set_data_filter(:mac) { |val| val.downcase }
8
11
  Ssid.set_data_filter(:checksum, :firsttime, :lasttime, :maxrate,
@@ -20,6 +23,16 @@ module PatronusFati
20
23
 
21
24
  SSID_CRYPT_MAP.select { |k, _| (k & val) != 0 }.map { |_, v| v }
22
25
  end
26
+ Ssid.set_data_filter(:wps) do |val|
27
+ next WPS_SETTING_MAP[0] unless val
28
+ next WPS_SETTING_MAP[0] if val.ord == 0
29
+
30
+ WPS_SETTING_MAP.select { |k, _| (k & val.ord) != 0 }.map { |_, v| v}.first
31
+ end
32
+ Ssid.set_data_filter(:wps_device_name) do |val|
33
+ next if val.nil? || val.empty?
34
+ val
35
+ end
23
36
 
24
37
  # Attempt to map the returned SSID type to one we know about it and convert
25
38
  # it to a string. In the event we don't know it will leave this as an
@@ -27,6 +27,27 @@ module PatronusFati
27
27
  data_line.scan(PatronusFati::DATA_DELIMITER).map { |a, b| (a || b).tr("\x01", '') }
28
28
  end
29
29
 
30
+ def self.extract_ssid_data(data_line)
31
+ data_scanner = StringScanner.new(data_line.force_encoding(Encoding::BINARY))
32
+
33
+ # We can use our normal scanner for the first 11 fields, the remainder
34
+ # are the WPS specific fields which are just bad...
35
+ results = 11.times.map do
36
+ field = data_scanner.scan(PatronusFati::DATA_DELIMITER).tr("\x01", '')
37
+ data_scanner.skip(/\s/)
38
+ field
39
+ end
40
+
41
+ # We need to grab the WPS state as a byte
42
+ results << data_scanner.get_byte
43
+ data_scanner.skip(/\s/)
44
+
45
+ # Put everything else in the 'wps_info' field
46
+ results << data_scanner.rest.strip
47
+
48
+ results
49
+ end
50
+
30
51
  def self.get_model(mdl)
31
52
  return unless PatronusFati::MessageModels.const_defined?(model_name(mdl))
32
53
  PatronusFati::MessageModels.const_get(model_name(mdl))
@@ -37,8 +58,11 @@ module PatronusFati
37
58
  return unless resp
38
59
 
39
60
  h = Hash[resp.names.zip(resp.captures)]
40
-
41
- [h['header'], extract_data(h['data'])]
61
+ if h['header'] == 'SSID'
62
+ [h['header'], extract_ssid_data(h['data'])]
63
+ else
64
+ [h['header'], extract_data(h['data'])]
65
+ end
42
66
  end
43
67
 
44
68
  def self.model_name(hdr)
@@ -1,3 +1,3 @@
1
1
  module PatronusFati
2
- VERSION = '0.9.32'
2
+ VERSION = '1.0.0'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: patronus_fati
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.32
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sam Stelfox
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-03-31 00:00:00.000000000 Z
11
+ date: 2017-04-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dm-constraints