diff --git a/src/modules/discovery/scanners/arp.scanner.ts b/src/modules/discovery/scanners/arp.scanner.ts index 4567c6b..4c86cb5 100644 --- a/src/modules/discovery/scanners/arp.scanner.ts +++ b/src/modules/discovery/scanners/arp.scanner.ts @@ -30,16 +30,14 @@ function parseIpNeigh(output: string): DiscoveryResult[] { .split('\n') .map((line) => line.trim()) .filter(Boolean) - .map((line) => { + .flatMap((line) => { const ipMatch = line.match(/^(\d{1,3}(?:\.\d{1,3}){3})/); + if (!ipMatch) return []; const macMatch = line.match(/lladdr\s+([0-9a-fA-F:]{17})/); - if (!ipMatch) return null; - return { - ipAddress: ipMatch[1], - macAddress: macMatch?.[1], - } satisfies DiscoveryResult; - }) - .filter((r): r is DiscoveryResult => r !== null); + const result: DiscoveryResult = { ipAddress: ipMatch[1] }; + if (macMatch) result.macAddress = macMatch[1]; + return [result]; + }); } function parseArpA(output: string): DiscoveryResult[] { @@ -48,14 +46,12 @@ function parseArpA(output: string): DiscoveryResult[] { .split('\n') .map((line) => line.trim()) .filter(Boolean) - .map((line) => { + .flatMap((line) => { const ipMatch = line.match(/\((\d{1,3}(?:\.\d{1,3}){3})\)/); + if (!ipMatch) return []; const macMatch = line.match(/([0-9a-fA-F]{2}(:[0-9a-fA-F]{2}){5})/); - if (!ipMatch) return null; - return { - ipAddress: ipMatch[1], - macAddress: macMatch?.[1], - } satisfies DiscoveryResult; - }) - .filter((r): r is DiscoveryResult => r !== null); + const result: DiscoveryResult = { ipAddress: ipMatch[1] }; + if (macMatch) result.macAddress = macMatch[1]; + return [result]; + }); }