diff --git a/src/dto/Packet.js b/src/dto/Packet.js index 01d7466..77c8138 100644 --- a/src/dto/Packet.js +++ b/src/dto/Packet.js @@ -10,6 +10,8 @@ const PacketType = { BlockAcknowledgment: 'BlockAcknowledgment', NoData: 'NoData', Authentication: 'Authentication', + AssociationRequest: 'AssociationRequest', + AssociationResponse: 'AssociationResponse', Unknown: 'Unknown' } @@ -51,6 +53,11 @@ class AuthenticationPacket extends Packet{ authenticationType; } +class AssociationRequestPacket extends PacketWithSSID{} +class AssociationResponsePacket extends Packet{ + associationIsSuccessful; +} + // Specify exports module.exports = { PacketType, @@ -61,4 +68,6 @@ module.exports = { ProbeResponsePacket, AuthenticationType, AuthenticationPacket, + AssociationRequestPacket, + AssociationResponsePacket, }; diff --git a/src/streamHandler/PacketStreamFactory.js b/src/streamHandler/PacketStreamFactory.js index 331190e..ac25b6a 100644 --- a/src/streamHandler/PacketStreamFactory.js +++ b/src/streamHandler/PacketStreamFactory.js @@ -1,7 +1,7 @@ const logger = require.main.require("./helper/logger.js")("PacketStreamFactory"); const { Transform } = require('stream'); const { DateTime } = require("luxon"); -const { PacketType, Packet, PacketWithSSID, BeaconPacket, ProbeRequestPacket, ProbeResponsePacket, AuthenticationPacket, AuthenticationType } = require.main.require('./dto/Packet.js'); +const { PacketType, Packet, PacketWithSSID, BeaconPacket, ProbeRequestPacket, ProbeResponsePacket, AuthenticationPacket, AuthenticationType, AssociationResponsePacket } = require.main.require('./dto/Packet.js'); const PACKET_TYPE_MAP = { "Beacon": PacketType.Beacon, @@ -14,6 +14,8 @@ const PACKET_TYPE_MAP = { "Acknowledgment": PacketType.Acknowledgment, "BA": PacketType.BlockAcknowledgment, "Authentication": PacketType.Authentication, + "Assoc Request": PacketType.AssociationRequest, + "Assoc Response": PacketType.AssociationResponse, }; const PACKET_TYPES_REGEX = Object.keys(PACKET_TYPE_MAP).join('|'); @@ -76,6 +78,7 @@ class PacketStreamFactory extends Transform{ case PacketType.Beacon: case PacketType.ProbeRequest: case PacketType.ProbeResponse: + case PacketType.AssociationRequest: newPacket = new PacketWithSSID(); newPacket.ssid = data.match(new RegExp(`(^| )${packetTypeStr} `+'\\'+`((.{0,32})`+'\\'+`)($| )`, 'i'))?.[2] ?? null; break; @@ -84,6 +87,11 @@ class PacketStreamFactory extends Transform{ newPacket = new AuthenticationPacket(); newPacket.authenticationType = AUTHENTICATION_TYPE_MAP[data.match(/(?<=(^|\s)Authentication\s).{3,}(?=\:(\s|$))/i)[0]] ?? AuthenticationType.Unknown; break; + + case PacketType.AssociationResponse: + newPacket = new AssociationResponsePacket(); + newPacket.associationIsSuccessful = data.match(/Assoc Response\s.{0,30}Successful(?=\s|$)/img) ? true : false; + break; } if(newPacket) packet = Object.assign(new newPacket, packet); // Use new, more specific, packet and copy old data over }