generated from Dicken/dickendock
round41: Portscan-Timeout und Batch-Groesse fuers Heimnetz nachgeschaerft, letzten sequentiellen Rest parallelisiert
This commit is contained in:
@@ -117,10 +117,10 @@ export async function scanDeviceServices(
|
|||||||
// verpassen - das führte zu falschen "nicht mehr gefunden"-Meldungen,
|
// verpassen - das führte zu falschen "nicht mehr gefunden"-Meldungen,
|
||||||
// obwohl sich am Gerät nichts geändert hatte.
|
// obwohl sich am Gerät nichts geändert hatte.
|
||||||
const missedPriorityPorts = priorityPorts.filter((p) => !openPorts.includes(p));
|
const missedPriorityPorts = priorityPorts.filter((p) => !openPorts.includes(p));
|
||||||
for (const port of missedPriorityPorts) {
|
const retryResults = await Promise.all(
|
||||||
const open = await isPortOpen(device.ip, port, 1500);
|
missedPriorityPorts.map(async (port) => ({ port, open: await isPortOpen(device.ip, port, 1500) }))
|
||||||
if (open) openPorts.push(port);
|
);
|
||||||
}
|
for (const r of retryResults) if (r.open) openPorts.push(r.port);
|
||||||
|
|
||||||
const found: DiscoveredService[] = [];
|
const found: DiscoveredService[] = [];
|
||||||
|
|
||||||
|
|||||||
@@ -42,14 +42,21 @@ export function isPortOpen(host: string, port: number, timeoutMs = 800): Promise
|
|||||||
* Parallelität - für den vollständigen Portscan (1-65535, siehe
|
* Parallelität - für den vollständigen Portscan (1-65535, siehe
|
||||||
* scanDeviceServices mit fullScan=true). Alle Ports auf einmal parallel zu
|
* scanDeviceServices mit fullScan=true). Alle Ports auf einmal parallel zu
|
||||||
* prüfen wäre bei 65535 Ports zu viel gleichzeitig offener Sockets; komplett
|
* prüfen wäre bei 65535 Ports zu viel gleichzeitig offener Sockets; komplett
|
||||||
* nacheinander wäre selbst bei schnellen RSTs zu langsam. Ein Batch von 500
|
* nacheinander wäre selbst bei schnellen RSTs zu langsam.
|
||||||
* ist ein guter Mittelweg für ein Gerät im lokalen Netz.
|
*
|
||||||
|
* Timeout bewusst knapp (300ms): im lokalen Netz (derselbe Subnetz-Bereich)
|
||||||
|
* liegt die Round-Trip-Zeit normalerweise im niedrigen einstelligen
|
||||||
|
* Millisekundenbereich - 300ms ist selbst dafür noch großzügig bemessen.
|
||||||
|
* Der vorherige Wert von 600-800ms war für WAN-Verbindungen gedacht, nicht
|
||||||
|
* fürs Heimnetz, und hat bei geschlossenen/gefilterten Ports (die den
|
||||||
|
* vollen Timeout ausschöpfen) über ~131 Batches hinweg spürbar Sekunden
|
||||||
|
* gekostet.
|
||||||
*/
|
*/
|
||||||
export async function scanPortsInBatches(
|
export async function scanPortsInBatches(
|
||||||
host: string,
|
host: string,
|
||||||
ports: number[],
|
ports: number[],
|
||||||
batchSize = 500,
|
batchSize = 1000,
|
||||||
timeoutMs = 600
|
timeoutMs = 300
|
||||||
): Promise<number[]> {
|
): Promise<number[]> {
|
||||||
const open: number[] = [];
|
const open: number[] = [];
|
||||||
for (let i = 0; i < ports.length; i += batchSize) {
|
for (let i = 0; i < ports.length; i += batchSize) {
|
||||||
|
|||||||
Reference in New Issue
Block a user