Compare commits

..

No commits in common. "aa9d5431f85c1c7a1bb6c03176d9c872dbb8e6a5" and "1aae9d5e719975795811c46d00670a97740d3df7" have entirely different histories.

2 changed files with 23 additions and 19 deletions

View File

@ -9,7 +9,6 @@ const PacketType = {
Acknowledgment: 'Acknowledgment', Acknowledgment: 'Acknowledgment',
BlockAcknowledgment: 'BlockAcknowledgment', BlockAcknowledgment: 'BlockAcknowledgment',
NoData: 'NoData', NoData: 'NoData',
ContentionFreePeriod: 'ContentionFreePeriod',
Unknown: 'Unknown' Unknown: 'Unknown'
} }
@ -24,11 +23,6 @@ class Packet{
frequency; frequency;
dataRate; dataRate;
payloadData;
get payloadSize(){
return payloadData.length/2;
}
packetType; packetType;
} }

View File

@ -12,8 +12,7 @@ const PACKET_TYPE_MAP = {
"Request-To-Send": PacketType.RequestToSend, "Request-To-Send": PacketType.RequestToSend,
"Clear-To-Send": PacketType.ClearToSend, "Clear-To-Send": PacketType.ClearToSend,
"Acknowledgment": PacketType.Acknowledgment, "Acknowledgment": PacketType.Acknowledgment,
"BA": PacketType.BlockAcknowledgment, "BA": PacketType.BlockAcknowledgment
"CD": PacketType.ContentionFreePeriod
}; };
const PACKET_TYPES_REGEX = Object.keys(PACKET_TYPE_MAP).join('|'); const PACKET_TYPES_REGEX = Object.keys(PACKET_TYPE_MAP).join('|');
@ -42,6 +41,7 @@ class PacketStreamFactory extends Transform{
logger.debug(packet); logger.debug(packet);
this.read();
next(null, packet); // Get next chunk next(null, packet); // Get next chunk
} }
@ -49,19 +49,30 @@ class PacketStreamFactory extends Transform{
// Convert time to epoch-micros Unfortunately luxon doesnt use micros, but millis as smallest time-unit requiring some "hacks" // Convert time to epoch-micros Unfortunately luxon doesnt use micros, but millis as smallest time-unit requiring some "hacks"
packet.timestampMicros = DateTime.fromISO(data.slice(0, 12)).toSeconds() + data.slice(12, 15)/1000000; packet.timestampMicros = DateTime.fromISO(data.slice(0, 12)).toSeconds() + data.slice(12, 15)/1000000;
packet.dataRate = Number(data.match(/(^| )([0-9]+(\.[0-9]+)?) Mb\/s($| )/i)?.[2]) || null; packet.dataRate = Number(data.match(/(^| )([0-9]+(\.[0-9]+)?) Mb\/s($| )/i)[2]);
packet.frequency = Number(data.match(/(^| )([0-9]{4}) MHz($| )/i)?.[2]) || null; packet.frequency = Number(data.match(/(^| )([0-9]{4}) MHz($| )/i)[2]);
packet.signal = Number(data.match(/(^| )(-[0-9]{2})dBm Signal($| )/i)?.[2]) || null; let signalStrMatch = data.match(/(^| )(-[0-9]{2})dBm Signal($| )/i);
if(signalStrMatch) packet.signal = Number(signalStrMatch[2]);
else packet.signal = -100;
let packetTypeStr = data.match(new RegExp(`(^|.{80} )(${PACKET_TYPES_REGEX})($| )`, 'i'))?.[2]; let packetTypeStrMatch = data.match(new RegExp(`(^|.{80} )(${PACKET_TYPES_REGEX})($| )`, 'i'));
packet.packetType = packetTypeStr? PACKET_TYPE_MAP[packetTypeStr]: PacketType.Unknown; let packetTypeStr;
if(packetTypeStrMatch) {
packetTypeStr = packetTypeStrMatch[2];
packet.packetType = PACKET_TYPE_MAP[packetTypeStr];
}
else
packet.packetType = PacketType.Unknown;
packet.srcMac = data.match(/(^| )(SA|TA):(.{17})($| )/i)?.[3] ?? null; let srcMacMatch = data.match(/(^| )(SA|TA):(.{17})($| )/i);
if(srcMacMatch) packet.srcMac = srcMacMatch[3];
packet.dstMac = data.match(/(^| )(DA|RA):(.{17})($| )/i)?.[3] ?? null; let dstMacMatch = data.match(/(^| )(DA|RA):(.{17})($| )/i);
if(dstMacMatch) packet.dstMac = dstMacMatch[3];
packet.bssid = data.match(/(^| )BSSID:(.{17})($| )/i)?.[2] ?? null; let bssidMatch = data.match(/(^| )BSSID:(.{17})($| )/i)
if(bssidMatch) packet.bssid = bssidMatch[2];
// Cover special cases with more data // Cover special cases with more data
switch(packet.packetType){ switch(packet.packetType){
@ -69,14 +80,13 @@ class PacketStreamFactory extends Transform{
case PacketType.ProbeRequest: case PacketType.ProbeRequest:
case PacketType.ProbeResponse: case PacketType.ProbeResponse:
packet = Object.assign(new PacketWithSSID(), packet); // Create new, more specific, packet and copy old data over packet = Object.assign(new PacketWithSSID(), packet); // Create new, more specific, packet and copy old data over
packet.ssid = data.match(new RegExp(`(^| )${packetTypeStr} `+'\\'+`((.{0,32})`+'\\'+`)($| )`, 'i'))?.[2] ?? null; packet.ssid = data.match(new RegExp(`(^| )${packetTypeStr} `+'\\'+`((.{0,32})`+'\\'+`)($| )`, 'i'))[2];
break; break;
} }
} }
_handlePayload(packet, data){ _handlePayload(packet, data){
// Get payload-Hex-Data. If there is no data: empty
packet.payloadData = data.join('').match(/(?<=\s)([A-F0-9]{1,4}(?!(\.|x)))/igm)?.join('') ?? '';
} }
} }