@jait/gateway 0.1.72 → 0.1.73
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/network-scan.d.ts +9 -0
- package/dist/lib/network-scan.d.ts.map +1 -0
- package/dist/lib/network-scan.js +373 -0
- package/dist/lib/network-scan.js.map +1 -0
- package/dist/routes/network.d.ts.map +1 -1
- package/dist/routes/network.js +16 -270
- package/dist/routes/network.js.map +1 -1
- package/dist/tools/network-tools.d.ts.map +1 -1
- package/dist/tools/network-tools.js +24 -255
- package/dist/tools/network-tools.js.map +1 -1
- package/package.json +1 -1
- package/web-dist/assets/{index-BvzxRIUF.js → index-C5gs8pTm.js} +61 -61
- package/web-dist/dist/assets/{index-BvzxRIUF.js → index-C5gs8pTm.js} +61 -61
- package/web-dist/dist/index.html +1 -1
- package/web-dist/index.html +1 -1
|
@@ -1,114 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { promisify } from "node:util";
|
|
3
|
-
import { platform, networkInterfaces } from "node:os";
|
|
4
|
-
import { createConnection } from "node:net";
|
|
5
|
-
const execAsync = promisify(exec);
|
|
6
|
-
// ---------------------------------------------------------------------------
|
|
7
|
-
// Helpers (shared with routes/network.ts — extract later if needed)
|
|
8
|
-
// ---------------------------------------------------------------------------
|
|
9
|
-
function getLocalSubnets() {
|
|
10
|
-
const ifaces = networkInterfaces();
|
|
11
|
-
const subnets = [];
|
|
12
|
-
for (const entries of Object.values(ifaces)) {
|
|
13
|
-
if (!entries)
|
|
14
|
-
continue;
|
|
15
|
-
for (const entry of entries) {
|
|
16
|
-
if (entry.family === "IPv4" && !entry.internal) {
|
|
17
|
-
// Skip link-local / APIPA addresses (169.254.x.x)
|
|
18
|
-
if (entry.address.startsWith("169.254."))
|
|
19
|
-
continue;
|
|
20
|
-
const parts = entry.address.split(".");
|
|
21
|
-
subnets.push(parts.slice(0, 3).join("."));
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
return [...new Set(subnets)];
|
|
26
|
-
}
|
|
27
|
-
function parseArpTable(output) {
|
|
28
|
-
const results = [];
|
|
29
|
-
const lineRegex = /(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\s+(?:at\s+)?([0-9a-fA-F]{2}[:-][0-9a-fA-F]{2}[:-][0-9a-fA-F]{2}[:-][0-9a-fA-F]{2}[:-][0-9a-fA-F]{2}[:-][0-9a-fA-F]{2})/;
|
|
30
|
-
for (const line of output.split("\n")) {
|
|
31
|
-
const match = lineRegex.exec(line);
|
|
32
|
-
if (match) {
|
|
33
|
-
results.push({ ip: match[1], mac: match[2].replace(/-/g, ":").toLowerCase() });
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
return results;
|
|
37
|
-
}
|
|
38
|
-
function probePort(ip, port, timeoutMs = 2000) {
|
|
39
|
-
return new Promise((resolve) => {
|
|
40
|
-
const socket = createConnection({ host: ip, port, timeout: timeoutMs });
|
|
41
|
-
socket.once("connect", () => { socket.destroy(); resolve(true); });
|
|
42
|
-
socket.once("timeout", () => { socket.destroy(); resolve(false); });
|
|
43
|
-
socket.once("error", () => { socket.destroy(); resolve(false); });
|
|
44
|
-
});
|
|
45
|
-
}
|
|
46
|
-
async function reverseResolve(ip) {
|
|
47
|
-
try {
|
|
48
|
-
const cmd = platform() === "win32"
|
|
49
|
-
? `nslookup ${ip} 2>nul`
|
|
50
|
-
: `host ${ip} 2>/dev/null || true`;
|
|
51
|
-
const { stdout } = await execAsync(cmd, { timeout: 3000 });
|
|
52
|
-
const winMatch = /Name:\s+(\S+)/i.exec(stdout);
|
|
53
|
-
if (winMatch)
|
|
54
|
-
return winMatch[1];
|
|
55
|
-
const linMatch = /pointer\s+(\S+)/i.exec(stdout);
|
|
56
|
-
if (linMatch)
|
|
57
|
-
return linMatch[1].replace(/\.$/, "");
|
|
58
|
-
return null;
|
|
59
|
-
}
|
|
60
|
-
catch {
|
|
61
|
-
return null;
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
/** Detect OS version via SSH banner and/or Jait gateway health endpoint. */
|
|
65
|
-
async function detectOsVersion(ip, sshReachable, agentStatus) {
|
|
66
|
-
// If it's a running Jait gateway, ask its health endpoint for OS info
|
|
67
|
-
if (agentStatus === "running") {
|
|
68
|
-
try {
|
|
69
|
-
const res = await fetch(`http://${ip}:8000/health`, { signal: AbortSignal.timeout(2000) });
|
|
70
|
-
if (res.ok) {
|
|
71
|
-
const health = (await res.json());
|
|
72
|
-
if (health.osVersion)
|
|
73
|
-
return health.osVersion;
|
|
74
|
-
if (health.os)
|
|
75
|
-
return health.os;
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
catch { }
|
|
79
|
-
}
|
|
80
|
-
// Try SSH banner for OS hints
|
|
81
|
-
if (sshReachable) {
|
|
82
|
-
try {
|
|
83
|
-
const banner = await new Promise((resolve) => {
|
|
84
|
-
const socket = createConnection({ host: ip, port: 22, timeout: 3000 });
|
|
85
|
-
let data = "";
|
|
86
|
-
socket.on("data", (chunk) => { data += chunk.toString(); socket.destroy(); resolve(data); });
|
|
87
|
-
socket.on("timeout", () => { socket.destroy(); resolve(""); });
|
|
88
|
-
socket.on("error", () => { socket.destroy(); resolve(""); });
|
|
89
|
-
});
|
|
90
|
-
if (banner) {
|
|
91
|
-
const trimmed = banner.trim().slice(0, 200);
|
|
92
|
-
// Extract OS info from SSH banner (e.g. "SSH-2.0-OpenSSH_8.9p1 Ubuntu-3ubuntu0.6")
|
|
93
|
-
if (/ubuntu/i.test(trimmed)) {
|
|
94
|
-
const m = /Ubuntu[\s-]*(\S*)/i.exec(trimmed);
|
|
95
|
-
return m ? `Ubuntu ${m[1]}` : "Ubuntu";
|
|
96
|
-
}
|
|
97
|
-
if (/debian/i.test(trimmed))
|
|
98
|
-
return "Debian";
|
|
99
|
-
if (/windows/i.test(trimmed))
|
|
100
|
-
return "Windows";
|
|
101
|
-
if (/raspbian/i.test(trimmed))
|
|
102
|
-
return "Raspbian";
|
|
103
|
-
// Return raw banner as fallback if it looks informative
|
|
104
|
-
if (trimmed.startsWith("SSH-"))
|
|
105
|
-
return trimmed;
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
catch { }
|
|
109
|
-
}
|
|
110
|
-
return null;
|
|
111
|
-
}
|
|
1
|
+
import { scanNetwork } from "../lib/network-scan.js";
|
|
112
2
|
/** In-memory cache of the latest scan result, populated by the tool/job */
|
|
113
3
|
let latestScan = null;
|
|
114
4
|
/** Optional DB reference, set once at startup for persistent storage */
|
|
@@ -164,157 +54,36 @@ export function createNetworkScanTool() {
|
|
|
164
54
|
type: "string",
|
|
165
55
|
description: 'Target subnet prefix (e.g. "192.168.1"). If omitted, auto-detects from local interfaces.',
|
|
166
56
|
},
|
|
57
|
+
deep: {
|
|
58
|
+
type: "boolean",
|
|
59
|
+
description: "Whether to run a deeper sweep across the full subnet instead of relying mostly on ARP/neighbour cache. Defaults to true.",
|
|
60
|
+
},
|
|
61
|
+
includeIps: {
|
|
62
|
+
type: "array",
|
|
63
|
+
items: { type: "string" },
|
|
64
|
+
description: 'Specific IPs to force-include in the scan, for example ["192.168.178.53"].',
|
|
65
|
+
},
|
|
167
66
|
},
|
|
168
67
|
},
|
|
169
68
|
execute: async (input) => {
|
|
170
|
-
const { subnet: targetSubnet } = (input ?? {});
|
|
171
|
-
const subnets = targetSubnet ? [targetSubnet] : getLocalSubnets();
|
|
172
|
-
if (subnets.length === 0) {
|
|
173
|
-
return { ok: false, message: "No active IPv4 subnets found" };
|
|
174
|
-
}
|
|
175
|
-
const start = Date.now();
|
|
176
|
-
// 1. Collect / refresh ARP table
|
|
177
|
-
let arpEntries = [];
|
|
178
69
|
try {
|
|
179
|
-
const {
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
// Batched ping sweep — 25 per batch, batches in parallel
|
|
190
|
-
const BATCH = 25;
|
|
191
|
-
const batches = [];
|
|
192
|
-
for (let i = 1; i <= 254; i += BATCH) {
|
|
193
|
-
const end = Math.min(i + BATCH - 1, 254);
|
|
194
|
-
const cmds = Array.from({ length: end - i + 1 }, (_, j) => `ping -n 1 -w 500 ${subnet}.${i + j} > nul 2>&1`).join(" & ");
|
|
195
|
-
batches.push(cmds);
|
|
196
|
-
}
|
|
197
|
-
await Promise.all(batches.map(cmd => execAsync(cmd, { timeout: 45000 }).catch(() => { })));
|
|
198
|
-
}
|
|
199
|
-
else {
|
|
200
|
-
const pingCmd = `for i in $(seq 1 254); do ping -c 1 -W 1 ${subnet}.$i & done; wait`;
|
|
201
|
-
await execAsync(pingCmd, { timeout: 30000, shell: "/bin/bash" }).catch(() => { });
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
// Brief pause for ARP cache to settle
|
|
205
|
-
await new Promise(r => setTimeout(r, 2500));
|
|
206
|
-
// Re-read ARP table after all sweeps
|
|
207
|
-
const { stdout } = await execAsync("arp -a", { timeout: 10000 });
|
|
208
|
-
arpEntries = parseArpTable(stdout);
|
|
209
|
-
}
|
|
210
|
-
catch {
|
|
211
|
-
// use existing ARP entries
|
|
212
|
-
}
|
|
213
|
-
// 2b. On Windows, supplement with Get-NetNeighbor
|
|
214
|
-
if (platform() === "win32") {
|
|
215
|
-
try {
|
|
216
|
-
const { stdout: pshOutput } = await execAsync('powershell -NoProfile -Command "Get-NetNeighbor -AddressFamily IPv4 | Where-Object { $_.State -ne \'Unreachable\' -and $_.LinkLayerAddress -ne \'\' -and $_.LinkLayerAddress -ne \'00-00-00-00-00-00\' } | Select-Object IPAddress,LinkLayerAddress | ConvertTo-Csv -NoTypeInformation"', { timeout: 15000 });
|
|
217
|
-
const existingIps = new Set(arpEntries.map(e => e.ip));
|
|
218
|
-
for (const line of pshOutput.split("\n")) {
|
|
219
|
-
const csvMatch = /"(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})"\s*,\s*"([0-9a-fA-F]{2}-[0-9a-fA-F]{2}-[0-9a-fA-F]{2}-[0-9a-fA-F]{2}-[0-9a-fA-F]{2}-[0-9a-fA-F]{2})"/.exec(line);
|
|
220
|
-
if (!csvMatch)
|
|
221
|
-
continue;
|
|
222
|
-
const ip = csvMatch[1];
|
|
223
|
-
const mac = csvMatch[2].replace(/-/g, ":").toLowerCase();
|
|
224
|
-
if (existingIps.has(ip))
|
|
225
|
-
continue;
|
|
226
|
-
if (mac === "ff:ff:ff:ff:ff:ff" || mac === "00:00:00:00:00:00")
|
|
227
|
-
continue;
|
|
228
|
-
const firstOctet = parseInt(mac.slice(0, 2), 16);
|
|
229
|
-
if (firstOctet & 1)
|
|
230
|
-
continue;
|
|
231
|
-
if (subnets.some(s => ip.startsWith(s + "."))) {
|
|
232
|
-
arpEntries.push({ ip, mac });
|
|
233
|
-
}
|
|
234
|
-
}
|
|
235
|
-
}
|
|
236
|
-
catch { }
|
|
70
|
+
const { subnet: targetSubnet, deep = true, includeIps = [] } = (input ?? {});
|
|
71
|
+
const result = await scanNetwork({ subnet: targetSubnet, deep, includeIps });
|
|
72
|
+
latestScan = result;
|
|
73
|
+
const gatewayCount = result.hosts.filter((host) => host.agentStatus === "running").length;
|
|
74
|
+
const sshCount = result.hosts.filter((host) => host.sshReachable).length;
|
|
75
|
+
return {
|
|
76
|
+
ok: true,
|
|
77
|
+
message: `Network scan complete: ${result.hosts.length} hosts found (${sshCount} with SSH, ${gatewayCount} running Jait Gateway)`,
|
|
78
|
+
data: result,
|
|
79
|
+
};
|
|
237
80
|
}
|
|
238
|
-
|
|
239
|
-
const subnetFiltered = arpEntries.filter((e) => subnets.some((s) => e.ip.startsWith(s + ".")));
|
|
240
|
-
// 4. Probe ports in parallel
|
|
241
|
-
const PROBE_PORTS = [22, 80, 443, 8000, 8080];
|
|
242
|
-
const hosts = await Promise.all(subnetFiltered.map(async (entry) => {
|
|
243
|
-
const portResults = await Promise.all(PROBE_PORTS.map(async (port) => ({
|
|
244
|
-
port,
|
|
245
|
-
open: await probePort(entry.ip, port, 1500),
|
|
246
|
-
})));
|
|
247
|
-
const openPorts = portResults.filter((p) => p.open).map((p) => p.port);
|
|
248
|
-
const sshReachable = openPorts.includes(22);
|
|
249
|
-
const hostname = await reverseResolve(entry.ip);
|
|
250
|
-
let agentStatus = "not-installed";
|
|
251
|
-
let providers;
|
|
252
|
-
if (openPorts.includes(8000)) {
|
|
253
|
-
try {
|
|
254
|
-
const res = await fetch(`http://${entry.ip}:8000/health`, {
|
|
255
|
-
signal: AbortSignal.timeout(2000),
|
|
256
|
-
});
|
|
257
|
-
if (res.ok) {
|
|
258
|
-
const health = (await res.json());
|
|
259
|
-
if (health.name === "jait-gateway") {
|
|
260
|
-
agentStatus = "running";
|
|
261
|
-
// Try to discover providers from the remote gateway
|
|
262
|
-
try {
|
|
263
|
-
const topoRes = await fetch(`http://${entry.ip}:8000/api/network/topology`, {
|
|
264
|
-
signal: AbortSignal.timeout(2000),
|
|
265
|
-
});
|
|
266
|
-
if (topoRes.ok) {
|
|
267
|
-
const topo = (await topoRes.json());
|
|
268
|
-
const all = new Set();
|
|
269
|
-
for (const d of topo.devices ?? [])
|
|
270
|
-
for (const p of d.providers ?? [])
|
|
271
|
-
all.add(p);
|
|
272
|
-
if (all.size > 0)
|
|
273
|
-
providers = [...all];
|
|
274
|
-
}
|
|
275
|
-
}
|
|
276
|
-
catch { }
|
|
277
|
-
}
|
|
278
|
-
}
|
|
279
|
-
}
|
|
280
|
-
catch {
|
|
281
|
-
agentStatus = "not-installed";
|
|
282
|
-
}
|
|
283
|
-
}
|
|
81
|
+
catch (err) {
|
|
284
82
|
return {
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
hostname,
|
|
288
|
-
alive: true,
|
|
289
|
-
openPorts,
|
|
290
|
-
sshReachable,
|
|
291
|
-
agentStatus,
|
|
292
|
-
osVersion: await detectOsVersion(entry.ip, sshReachable, agentStatus),
|
|
293
|
-
providers,
|
|
294
|
-
lastSeen: new Date().toISOString(),
|
|
83
|
+
ok: false,
|
|
84
|
+
message: err instanceof Error ? err.message : "Network scan failed",
|
|
295
85
|
};
|
|
296
|
-
}
|
|
297
|
-
// Sort by IP
|
|
298
|
-
hosts.sort((a, b) => {
|
|
299
|
-
const aNum = a.ip.split(".").map(Number).reduce((sum, n) => sum * 256 + n, 0);
|
|
300
|
-
const bNum = b.ip.split(".").map(Number).reduce((sum, n) => sum * 256 + n, 0);
|
|
301
|
-
return aNum - bNum;
|
|
302
|
-
});
|
|
303
|
-
const result = {
|
|
304
|
-
subnet: subnets.map(s => s + ".0/24").join(", "),
|
|
305
|
-
hosts,
|
|
306
|
-
scannedAt: new Date().toISOString(),
|
|
307
|
-
durationMs: Date.now() - start,
|
|
308
|
-
};
|
|
309
|
-
// Cache for the UI network panel
|
|
310
|
-
latestScan = result;
|
|
311
|
-
const gatewayCount = hosts.filter((h) => h.agentStatus === "running").length;
|
|
312
|
-
const sshCount = hosts.filter((h) => h.sshReachable).length;
|
|
313
|
-
return {
|
|
314
|
-
ok: true,
|
|
315
|
-
message: `Network scan complete: ${hosts.length} hosts found (${sshCount} with SSH, ${gatewayCount} running Jait Gateway)`,
|
|
316
|
-
data: result,
|
|
317
|
-
};
|
|
86
|
+
}
|
|
318
87
|
},
|
|
319
88
|
};
|
|
320
89
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"network-tools.js","sourceRoot":"","sources":["../../src/tools/network-tools.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"network-tools.js","sourceRoot":"","sources":["../../src/tools/network-tools.ts"],"names":[],"mappings":"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"}
|