generated from Dicken/dickendock
round40: HTTP-Pruefung offener Ports parallelisiert (behebt sehr lange Scan-Zeiten seit vollstaendigem Portscan)
This commit is contained in:
@@ -124,7 +124,12 @@ export async function scanDeviceServices(
|
|||||||
|
|
||||||
const found: DiscoveredService[] = [];
|
const found: DiscoveredService[] = [];
|
||||||
|
|
||||||
for (const port of openPorts) {
|
// Die HTTP-Abfrage je offenem Port läuft PARALLEL, nicht mehr
|
||||||
|
// nacheinander - bei bis zu 3 HTTP-Versuchen (Protokoll-Fallback +
|
||||||
|
// Titel-Wiederholung) à 2 Sekunden Timeout summierte sich das bei einem
|
||||||
|
// Gerät mit vielen offenen Ports (seit dem vollständigen 1-65535-Portscan
|
||||||
|
// deutlich häufiger) schnell auf mehrere Minuten PRO GERÄT.
|
||||||
|
async function probePort(port: number): Promise<DiscoveredService | null> {
|
||||||
let isHttps = port === 443 || port === 9443 || port === 8006 || port === 8443;
|
let isHttps = port === 443 || port === 9443 || port === 8006 || port === 8443;
|
||||||
let baseUrl = `${isHttps ? "https" : "http"}://${address}:${port}`;
|
let baseUrl = `${isHttps ? "https" : "http"}://${address}:${port}`;
|
||||||
let probe = await probeHttp(baseUrl);
|
let probe = await probeHttp(baseUrl);
|
||||||
@@ -150,7 +155,7 @@ export async function scanDeviceServices(
|
|||||||
// solcher Nicht-Web-Ports - die sollen NICHT als (dann meist
|
// solcher Nicht-Web-Ports - die sollen NICHT als (dann meist
|
||||||
// ausgeblendeter) Dienst-Eintrag landen, sondern komplett übersprungen
|
// ausgeblendeter) Dienst-Eintrag landen, sondern komplett übersprungen
|
||||||
// werden. "Mich interessieren doch nur Webifs."
|
// werden. "Mich interessieren doch nur Webifs."
|
||||||
if (probe.status === undefined) continue;
|
if (probe.status === undefined) return null;
|
||||||
|
|
||||||
const software = detectSoftware({
|
const software = detectSoftware({
|
||||||
server: probe.server,
|
server: probe.server,
|
||||||
@@ -202,7 +207,7 @@ export async function scanDeviceServices(
|
|||||||
// Ladebildschirme landen als ausgeblendeter Dienst im Adminbereich.
|
// Ladebildschirme landen als ausgeblendeter Dienst im Adminbereich.
|
||||||
const visible = !!softwareResolved || (probe.ok && !titleIsJunkResolved);
|
const visible = !!softwareResolved || (probe.ok && !titleIsJunkResolved);
|
||||||
|
|
||||||
found.push({
|
return {
|
||||||
hostname: address,
|
hostname: address,
|
||||||
url: baseUrl,
|
url: baseUrl,
|
||||||
https: isHttps,
|
https: isHttps,
|
||||||
@@ -214,7 +219,12 @@ export async function scanDeviceServices(
|
|||||||
category: softwareResolved?.category,
|
category: softwareResolved?.category,
|
||||||
icon: softwareResolved?.icon,
|
icon: softwareResolved?.icon,
|
||||||
visible,
|
visible,
|
||||||
});
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
const probeResults = await Promise.all(openPorts.map(probePort));
|
||||||
|
for (const result of probeResults) {
|
||||||
|
if (result) found.push(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Fallback für Dienste ohne bestätigtes Favicon (kein <link rel="icon">
|
// Fallback für Dienste ohne bestätigtes Favicon (kein <link rel="icon">
|
||||||
|
|||||||
Reference in New Issue
Block a user