ciscollm-cli 1.0.9 → 1.0.11

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.
@@ -0,0 +1,562 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ShellSimulator = void 0;
4
+ class ShellSimulator {
5
+ hostname = 'Switch1';
6
+ mode = 'PRIVILEGED_EXEC';
7
+ activeInterface = null;
8
+ interfaces = new Map([
9
+ ['GigabitEthernet0/0', {
10
+ name: 'GigabitEthernet0/0',
11
+ ip: '192.168.1.254',
12
+ subnet: '255.255.255.0',
13
+ adminShutdown: false,
14
+ lineProtocolUp: true,
15
+ description: 'Management Uplink'
16
+ }],
17
+ ['GigabitEthernet0/1', {
18
+ name: 'GigabitEthernet0/1',
19
+ ip: null,
20
+ subnet: null,
21
+ adminShutdown: true,
22
+ lineProtocolUp: false,
23
+ description: null
24
+ }],
25
+ ['GigabitEthernet0/2', {
26
+ name: 'GigabitEthernet0/2',
27
+ ip: null,
28
+ subnet: null,
29
+ adminShutdown: true,
30
+ lineProtocolUp: false,
31
+ description: null
32
+ }]
33
+ ]);
34
+ vlans = new Set([1]);
35
+ vlanNames = new Map([[1, 'default']]);
36
+ activeVlan = null;
37
+ routes = [
38
+ {
39
+ network: '192.168.1.0',
40
+ mask: '255.255.255.0',
41
+ nextHop: null,
42
+ outgoingInterface: 'GigabitEthernet0/0',
43
+ connected: true
44
+ }
45
+ ];
46
+ shellEnabled = false;
47
+ shellVariables = {};
48
+ shellFunctions = {};
49
+ ospfEnabled = false;
50
+ ospfProcessId = null;
51
+ ipRoutingEnabled = true;
52
+ flashFiles = new Set(['c2960-lanbasek9-mz.150-2.SE4.bin']);
53
+ pendingCopyDest = null;
54
+ backupState = null;
55
+ saveBackupState() {
56
+ const interfacesCopy = new Map();
57
+ for (const [name, val] of this.interfaces.entries()) {
58
+ interfacesCopy.set(name, { ...val });
59
+ }
60
+ const routesCopy = this.routes.map(r => ({ ...r }));
61
+ const vlansCopy = new Set(this.vlans);
62
+ const vlanNamesCopy = new Map(this.vlanNames);
63
+ this.backupState = {
64
+ hostname: this.hostname,
65
+ interfaces: interfacesCopy,
66
+ routes: routesCopy,
67
+ vlans: vlansCopy,
68
+ vlanNames: vlanNamesCopy
69
+ };
70
+ }
71
+ restoreBackupState() {
72
+ if (!this.backupState)
73
+ return;
74
+ this.hostname = this.backupState.hostname;
75
+ this.interfaces = this.backupState.interfaces;
76
+ this.routes = this.backupState.routes;
77
+ this.vlans = this.backupState.vlans;
78
+ this.vlanNames = this.backupState.vlanNames;
79
+ }
80
+ constructor(initialHostname) {
81
+ if (initialHostname) {
82
+ this.hostname = initialHostname;
83
+ }
84
+ }
85
+ getPrompt() {
86
+ switch (this.mode) {
87
+ case 'USER_EXEC':
88
+ return `${this.hostname}> `;
89
+ case 'PRIVILEGED_EXEC':
90
+ return `${this.hostname}# `;
91
+ case 'GLOBAL_CONFIG':
92
+ return `${this.hostname}(config)# `;
93
+ case 'INTERFACE_CONFIG':
94
+ return `${this.hostname}(config-if)# `;
95
+ case 'OSPF_CONFIG':
96
+ return `${this.hostname}(config-router)# `;
97
+ case 'DHCP_CONFIG':
98
+ return `${this.hostname}(config-dhcp)# `;
99
+ case 'ACL_CONFIG':
100
+ return `${this.hostname}(config-ext-nacl)# `;
101
+ default:
102
+ return `${this.hostname}# `;
103
+ }
104
+ }
105
+ execute(line) {
106
+ const trimmed = line.trim();
107
+ if (this.pendingCopyDest) {
108
+ const dest = trimmed || this.pendingCopyDest;
109
+ this.flashFiles.add(dest);
110
+ this.saveBackupState();
111
+ this.pendingCopyDest = null;
112
+ return `1542 bytes copied in 0.456 secs (3381 bytes/sec)\n[OK]`;
113
+ }
114
+ if (!trimmed)
115
+ return '';
116
+ if (this.shellEnabled) {
117
+ const varMatch = trimmed.match(/^([A-Za-z_][A-Za-z0-9_]*)=(.*)$/);
118
+ if (varMatch) {
119
+ const [, name, val] = varMatch;
120
+ this.shellVariables[name] = val;
121
+ return '';
122
+ }
123
+ const funcMatch = trimmed.match(/^([A-Za-z_][A-Za-z0-9_]*)\(\)\s*{(.*)}$/);
124
+ if (funcMatch) {
125
+ const [, name, body] = funcMatch;
126
+ this.shellFunctions[name] = body.trim();
127
+ return '';
128
+ }
129
+ }
130
+ let commandToExecute = trimmed;
131
+ const tempArgs = commandToExecute.split(/\s+/);
132
+ const tempCmd = tempArgs[0].toLowerCase();
133
+ const isConfigMode = this.mode !== 'USER_EXEC' && this.mode !== 'PRIVILEGED_EXEC';
134
+ if (tempCmd === 'do' && isConfigMode) {
135
+ const doMatch = commandToExecute.match(/^do\s+(.+)$/i);
136
+ if (doMatch) {
137
+ commandToExecute = doMatch[1];
138
+ }
139
+ }
140
+ const args = commandToExecute.split(/\s+/);
141
+ const cmd = args[0].toLowerCase();
142
+ if (cmd === 'exit') {
143
+ if (this.mode === 'INTERFACE_CONFIG' || this.mode === 'OSPF_CONFIG' || this.mode === 'DHCP_CONFIG' || this.mode === 'ACL_CONFIG') {
144
+ this.mode = 'GLOBAL_CONFIG';
145
+ this.activeInterface = null;
146
+ this.activeVlan = null;
147
+ return '';
148
+ }
149
+ else if (this.mode === 'GLOBAL_CONFIG') {
150
+ this.mode = 'PRIVILEGED_EXEC';
151
+ return '';
152
+ }
153
+ else if (this.mode === 'PRIVILEGED_EXEC') {
154
+ this.mode = 'USER_EXEC';
155
+ return '';
156
+ }
157
+ else {
158
+ return 'exit';
159
+ }
160
+ }
161
+ if (cmd === 'end') {
162
+ if (this.mode !== 'USER_EXEC' && this.mode !== 'PRIVILEGED_EXEC') {
163
+ this.mode = 'PRIVILEGED_EXEC';
164
+ this.activeInterface = null;
165
+ this.activeVlan = null;
166
+ return '';
167
+ }
168
+ }
169
+ if (cmd === 'enable') {
170
+ if (this.mode === 'USER_EXEC') {
171
+ this.mode = 'PRIVILEGED_EXEC';
172
+ return '';
173
+ }
174
+ return '';
175
+ }
176
+ if (cmd === 'disable') {
177
+ if (this.mode !== 'USER_EXEC') {
178
+ this.mode = 'USER_EXEC';
179
+ return '';
180
+ }
181
+ return '';
182
+ }
183
+ if (trimmed.toLowerCase() === 'configure terminal' || trimmed.toLowerCase() === 'conf t') {
184
+ if (this.mode === 'PRIVILEGED_EXEC') {
185
+ this.mode = 'GLOBAL_CONFIG';
186
+ return 'Enter configuration commands, one per line. End with CNTL/Z.\n';
187
+ }
188
+ else {
189
+ return `% Command rejected: Place in Privileged EXEC mode first.`;
190
+ }
191
+ }
192
+ if (cmd === 'terminal' && args[1] === 'length' && args[2] === '0') {
193
+ return '';
194
+ }
195
+ if (cmd === 'screen-length' && args[1] === '0' && args[2] === 'temporary') {
196
+ return '';
197
+ }
198
+ if (cmd === 'set' && args[1] === 'cli' && args[2] === 'screen-length' && args[3] === '0') {
199
+ return '';
200
+ }
201
+ if (cmd === 'terminal' && args[1] === 'shell') {
202
+ this.shellEnabled = true;
203
+ return '';
204
+ }
205
+ if (cmd === 'shell' && args[1] === 'processing' && args[2] === 'full') {
206
+ this.shellEnabled = true;
207
+ return '';
208
+ }
209
+ if (this.mode === 'GLOBAL_CONFIG') {
210
+ if (cmd === 'hostname' && args[1]) {
211
+ this.hostname = args[1];
212
+ return '';
213
+ }
214
+ if (cmd === 'interface' && args[1]) {
215
+ const ifaceName = this.normalizeInterfaceName(args[1]);
216
+ this.mode = 'INTERFACE_CONFIG';
217
+ this.activeInterface = ifaceName;
218
+ if (!this.interfaces.has(ifaceName)) {
219
+ this.interfaces.set(ifaceName, {
220
+ name: ifaceName,
221
+ ip: null,
222
+ subnet: null,
223
+ adminShutdown: false,
224
+ lineProtocolUp: true,
225
+ description: null
226
+ });
227
+ }
228
+ return '';
229
+ }
230
+ if (cmd === 'vlan' && args[1]) {
231
+ const vlanId = parseInt(args[1], 10);
232
+ if (!isNaN(vlanId)) {
233
+ this.vlans.add(vlanId);
234
+ this.activeVlan = vlanId;
235
+ this.mode = 'GLOBAL_CONFIG';
236
+ return '';
237
+ }
238
+ }
239
+ if (cmd === 'no' && args[1] === 'vlan' && args[2]) {
240
+ const vlanId = parseInt(args[2], 10);
241
+ if (!isNaN(vlanId)) {
242
+ this.vlans.delete(vlanId);
243
+ this.vlanNames.delete(vlanId);
244
+ return '';
245
+ }
246
+ }
247
+ if (cmd === 'ip' && args[1] === 'route' && args[2] && args[3]) {
248
+ const network = args[2];
249
+ const mask = args[3];
250
+ const next = args[4] || null;
251
+ this.routes.push({
252
+ network,
253
+ mask,
254
+ nextHop: next && !next.startsWith('Gig') && !next.startsWith('Loop') ? next : null,
255
+ outgoingInterface: next && (next.startsWith('Gig') || next.startsWith('Loop')) ? next : null,
256
+ connected: false
257
+ });
258
+ return '';
259
+ }
260
+ if (cmd === 'no' && args[1] === 'ip' && args[2] === 'route' && args[3] && args[4]) {
261
+ const network = args[3];
262
+ const mask = args[4];
263
+ this.routes = this.routes.filter(r => !(r.network === network && r.mask === mask));
264
+ return '';
265
+ }
266
+ if (cmd === 'ip' && args[1] === 'routing') {
267
+ this.ipRoutingEnabled = true;
268
+ return '';
269
+ }
270
+ if (cmd === 'no' && args[1] === 'ip' && args[2] === 'routing') {
271
+ this.ipRoutingEnabled = false;
272
+ return '';
273
+ }
274
+ if (cmd === 'router' && args[1] === 'ospf') {
275
+ this.mode = 'OSPF_CONFIG';
276
+ this.ospfProcessId = args[2] || null;
277
+ this.ospfEnabled = true;
278
+ return '';
279
+ }
280
+ if (cmd === 'no' && args[1] === 'router' && args[2] === 'ospf') {
281
+ this.ospfEnabled = false;
282
+ this.ospfProcessId = null;
283
+ return '';
284
+ }
285
+ if (cmd === 'ip' && args[1] === 'dhcp' && args[2] === 'pool' && args[3]) {
286
+ this.mode = 'DHCP_CONFIG';
287
+ return '';
288
+ }
289
+ if (cmd === 'ip' && args[1] === 'dhcp' && args[2] === 'excluded-address') {
290
+ return '';
291
+ }
292
+ if (cmd === 'ip' && args[1] === 'access-list') {
293
+ this.mode = 'ACL_CONFIG';
294
+ return '';
295
+ }
296
+ if (cmd === 'access-list') {
297
+ return '';
298
+ }
299
+ return `% Invalid input detected at '^' marker.`;
300
+ }
301
+ if (this.mode === 'INTERFACE_CONFIG' && this.activeInterface) {
302
+ const iface = this.interfaces.get(this.activeInterface);
303
+ if (cmd === 'shutdown') {
304
+ iface.adminShutdown = true;
305
+ iface.lineProtocolUp = false;
306
+ return '';
307
+ }
308
+ if (cmd === 'no' && args[1] === 'shutdown') {
309
+ iface.adminShutdown = false;
310
+ iface.lineProtocolUp = true;
311
+ return '';
312
+ }
313
+ if (cmd === 'ip' && args[1] === 'address' && args[2] && args[3]) {
314
+ iface.ip = args[2];
315
+ iface.subnet = args[3];
316
+ const network = this.calculateNetwork(args[2], args[3]);
317
+ this.routes = this.routes.filter(r => !(r.outgoingInterface === this.activeInterface && r.connected));
318
+ this.routes.push({
319
+ network,
320
+ mask: args[3],
321
+ nextHop: null,
322
+ outgoingInterface: this.activeInterface,
323
+ connected: true
324
+ });
325
+ return '';
326
+ }
327
+ if (cmd === 'no' && args[1] === 'ip' && args[2] === 'address') {
328
+ iface.ip = null;
329
+ iface.subnet = null;
330
+ this.routes = this.routes.filter(r => !(r.outgoingInterface === this.activeInterface && r.connected));
331
+ return '';
332
+ }
333
+ if (cmd === 'description') {
334
+ iface.description = args.slice(1).join(' ');
335
+ return '';
336
+ }
337
+ if (cmd === 'no' && args[1] === 'description') {
338
+ iface.description = null;
339
+ return '';
340
+ }
341
+ if (cmd === 'ip' && args[1] === 'access-group') {
342
+ return '';
343
+ }
344
+ if (cmd === 'ip' && args[1] === 'ospf') {
345
+ return '';
346
+ }
347
+ return `% Invalid input detected at '^' marker.`;
348
+ }
349
+ if (this.mode === 'OSPF_CONFIG') {
350
+ if (cmd === 'network' || cmd === 'router-id') {
351
+ return '';
352
+ }
353
+ if (cmd === 'passive-interface' || (cmd === 'no' && args[1] === 'passive-interface')) {
354
+ return '';
355
+ }
356
+ return `% Invalid input detected at '^' marker.`;
357
+ }
358
+ if (this.mode === 'DHCP_CONFIG') {
359
+ if (cmd === 'network' || cmd === 'default-router' || cmd === 'dns-server') {
360
+ return '';
361
+ }
362
+ return `% Invalid input detected at '^' marker.`;
363
+ }
364
+ if (this.mode === 'ACL_CONFIG') {
365
+ if (cmd === 'permit' || cmd === 'deny') {
366
+ return '';
367
+ }
368
+ return `% Invalid input detected at '^' marker.`;
369
+ }
370
+ const isShow = cmd === 'show' || cmd === 'sh' || (cmd === 'do' && (args[1]?.toLowerCase() === 'show' || args[1]?.toLowerCase() === 'sh'));
371
+ if (isShow) {
372
+ const showArgs = cmd === 'do' ? args.slice(2) : args.slice(1);
373
+ const showCmd = showArgs[0]?.toLowerCase();
374
+ if (showCmd === 'version' || showCmd === 'ver') {
375
+ return `Cisco IOS Software, C2960 Software (C2960-LANBASEK9-M), Version 15.0(2)SE4, RELEASE SOFTWARE (fc1)
376
+ Technical Support: http://www.cisco.com/techsupport
377
+ Copyright (c) 1986-2013 by Cisco Systems, Inc.
378
+ Compiled Wed 26-Jun-13 02:49 by prod_rel_team
379
+
380
+ ROM: Bootstrap program is 12.2(44)SE Version
381
+ BOOTLDR: C2960 Boot Loader (C2960-HBOOT-M) Version 12.2(44)SE, RELEASE SOFTWARE (fc1)
382
+
383
+ Switch1 uptime is 2 hours, 15 minutes
384
+ System returned to ROM by power-on
385
+ System image file is "flash:/c2960-lanbasek9-mz.150-2.SE4.bin"
386
+
387
+ This product contains cryptographic features and is subject to Y...
388
+ `;
389
+ }
390
+ if (showCmd === 'ip' && showArgs[1]?.startsWith('int') && showArgs[2]?.startsWith('br')) {
391
+ let out = 'Interface IP-Address OK? Method Status Protocol\n';
392
+ for (const [name, status] of this.interfaces.entries()) {
393
+ const ip = status.ip || 'unassigned';
394
+ const method = status.ip ? 'manual' : 'unset';
395
+ const adminStatus = status.adminShutdown ? 'administratively down' : 'up';
396
+ const protocolStatus = status.lineProtocolUp ? 'up' : 'down';
397
+ out += `${name.padEnd(26)} ${ip.padEnd(15)} YES ${method.padEnd(6)} ${adminStatus.padEnd(21)} ${protocolStatus}\n`;
398
+ }
399
+ return out;
400
+ }
401
+ if (showCmd?.startsWith('run')) {
402
+ let out = `Building configuration...\n\nCurrent configuration : 1542 bytes\n!\nversion 15.0\n!\nhostname ${this.hostname}\n!\n`;
403
+ for (const [name, status] of this.interfaces.entries()) {
404
+ out += `interface ${name}\n`;
405
+ if (status.description) {
406
+ out += ` description ${status.description}\n`;
407
+ }
408
+ if (status.ip) {
409
+ out += ` ip address ${status.ip} ${status.subnet}\n`;
410
+ }
411
+ if (status.adminShutdown) {
412
+ out += ` shutdown\n`;
413
+ }
414
+ out += `!\n`;
415
+ }
416
+ for (const r of this.routes) {
417
+ if (!r.connected) {
418
+ out += `ip route ${r.network} ${r.mask} ${r.nextHop || r.outgoingInterface}\n`;
419
+ }
420
+ }
421
+ out += `!\nend\n`;
422
+ return out;
423
+ }
424
+ if (showCmd === 'ip' && showArgs[1]?.startsWith('ro')) {
425
+ if (!this.ipRoutingEnabled) {
426
+ return '% IP routing table is not enabled';
427
+ }
428
+ let out = `Codes: L - local, C - connected, S - static, R - RIP, M - mobile, B - BGP\n\n`;
429
+ out += `Gateway of last resort is not set\n\n`;
430
+ for (const r of this.routes) {
431
+ const code = r.connected ? 'C' : 'S';
432
+ const target = r.nextHop ? `via ${r.nextHop}` : `directly connected, ${r.outgoingInterface || 'Null0'}`;
433
+ out += `${code} ${r.network}/${this.getPrefixLength(r.mask)} is ${target}\n`;
434
+ }
435
+ return out;
436
+ }
437
+ if (showCmd === 'ip' && showArgs[1] === 'ospf' && showArgs[2]?.startsWith('ne')) {
438
+ if (!this.ospfEnabled) {
439
+ return '% OSPF is not enabled';
440
+ }
441
+ return `Neighbor ID Pri State Dead Time Address Interface\n` +
442
+ `2.2.2.2 1 FULL/DR 00:00:35 192.168.1.2 GigabitEthernet0/0\n`;
443
+ }
444
+ if (showCmd === 'ip' && showArgs[1] === 'ospf' && showArgs[2]?.startsWith('in')) {
445
+ if (!this.ospfEnabled) {
446
+ return '% OSPF is not enabled';
447
+ }
448
+ return `GigabitEthernet0/0 is up, line protocol is up \n` +
449
+ ` Internet Address 192.168.1.254/24, Area 0 \n` +
450
+ ` Process ID ${this.ospfProcessId || '10'}, Router ID 192.168.1.254, Network Type BROADCAST, Cost: 1\n`;
451
+ }
452
+ if (showCmd === 'ip' && showArgs[1] === 'ospf' && !showArgs[2]) {
453
+ if (!this.ospfEnabled) {
454
+ return '% OSPF is not enabled';
455
+ }
456
+ return ` Routing Process "ospf ${this.ospfProcessId || '10'}" with ID 192.168.1.254\n` +
457
+ ` Supports only single TOS(TOS0) routes\n` +
458
+ ` Supports opaque LSA\n`;
459
+ }
460
+ if (showCmd?.startsWith('vl') && (showArgs[1]?.startsWith('br') || !showArgs[1])) {
461
+ let out = 'VLAN Name Status Ports\n';
462
+ out += '---- -------------------------------- --------- -------------------------------\n';
463
+ for (const vid of this.vlans) {
464
+ const name = this.vlanNames.get(vid) || `VLAN${vid.toString().padStart(4, '0')}`;
465
+ out += `${vid.toString().padEnd(4)} ${name.padEnd(32)} active \n`;
466
+ }
467
+ return out;
468
+ }
469
+ if (showCmd === 'cdp' && showArgs[1]?.startsWith('ne')) {
470
+ return `Capability Codes: R - Router, T - Trans Bridge, B - Source Route Bridge
471
+ S - Switch, H - Host, I - IGMP, r - Repeater, P - Phone
472
+
473
+ Device ID Local Intrfce Holdtme Capability Platform Port ID
474
+ Switch2 Gig 0/1 125 S I WS-C2960- Gig 0/1
475
+ `;
476
+ }
477
+ if (showCmd === 'lldp' && showArgs[1]?.startsWith('ne')) {
478
+ return `Device ID Local Intf Hold-time Capability Port ID
479
+ Switch2 Gi0/1 120 S Gi0/1
480
+ Total entries displayed: 1
481
+ `;
482
+ }
483
+ return `% Unrecognized show command: show ${showArgs.join(' ')}`;
484
+ }
485
+ if (cmd === 'write' || cmd === 'wr') {
486
+ return `Building configuration...\n[OK]`;
487
+ }
488
+ if (cmd === 'copy' && args[1]?.startsWith('run') && args[2]?.startsWith('sta')) {
489
+ return `Destination filename [startup-config]? \nBuilding configuration...\n[OK]`;
490
+ }
491
+ if (cmd === 'copy' && args[1]?.startsWith('run') && args[2]?.startsWith('flash:')) {
492
+ const destFile = args[2].replace(/^flash:/i, '');
493
+ this.pendingCopyDest = destFile || 'backup-agent.cfg';
494
+ return `Destination filename [${this.pendingCopyDest}]? `;
495
+ }
496
+ if (cmd === 'dir' && args[1] === 'flash:') {
497
+ let out = `Directory of flash:/\n\n`;
498
+ let index = 1;
499
+ let totalBytesUsed = 0;
500
+ out += ` ${index++} -rw- 4414921 Mar 01 1993 00:02:18 +00:00 c2960-lanbasek9-mz.150-2.SE4.bin\n`;
501
+ totalBytesUsed += 4414921;
502
+ if (this.flashFiles.has('backup-agent.cfg')) {
503
+ out += ` ${index++} -rw- 1542 May 31 2026 12:24:17 +00:00 backup-agent.cfg\n`;
504
+ totalBytesUsed += 1542;
505
+ }
506
+ const totalBytes = 32514048;
507
+ const freeBytes = totalBytes - totalBytesUsed;
508
+ out += `\n${totalBytes} bytes total (${freeBytes} bytes free)\n`;
509
+ return out;
510
+ }
511
+ if (cmd === 'configure' && args[1] === 'replace' && args[2]?.startsWith('flash:')) {
512
+ const file = args[2].replace(/^flash:/i, '');
513
+ if (!this.flashFiles.has(file)) {
514
+ return `% Error opening flash:${file} (No such file or directory)`;
515
+ }
516
+ this.restoreBackupState();
517
+ return `Total number of passes: 1\nRollback Done\n`;
518
+ }
519
+ if (cmd === 'ping' && args[1]) {
520
+ const ip = args[1];
521
+ return `Sending 5, 100-byte ICMP Echos to ${ip}, timeout is 2 seconds:
522
+ !!!!!
523
+ Success rate is 100 percent (5/5), round-trip min/avg/max = 1/1/4 ms
524
+ `;
525
+ }
526
+ return `% Unrecognized command: ${trimmed}`;
527
+ }
528
+ normalizeInterfaceName(name) {
529
+ const lower = name.toLowerCase();
530
+ if (lower.startsWith('gi')) {
531
+ return 'GigabitEthernet' + name.substring(2);
532
+ }
533
+ if (lower.startsWith('lo')) {
534
+ return 'Loopback' + name.substring(2);
535
+ }
536
+ if (lower.startsWith('fa')) {
537
+ return 'FastEthernet' + name.substring(2);
538
+ }
539
+ return name;
540
+ }
541
+ getPrefixLength(mask) {
542
+ const parts = mask.split('.').map(Number);
543
+ let len = 0;
544
+ for (const p of parts) {
545
+ let b = p;
546
+ while (b > 0) {
547
+ if (b & 1)
548
+ len++;
549
+ b = b >> 1;
550
+ }
551
+ }
552
+ return len;
553
+ }
554
+ calculateNetwork(ip, mask) {
555
+ const ipParts = ip.split('.').map(Number);
556
+ const maskParts = mask.split('.').map(Number);
557
+ const netParts = ipParts.map((p, i) => p & maskParts[i]);
558
+ return netParts.join('.');
559
+ }
560
+ }
561
+ exports.ShellSimulator = ShellSimulator;
562
+ //# sourceMappingURL=shell-simulator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shell-simulator.js","sourceRoot":"","sources":["../../src/server/shell-simulator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { Server } from 'ssh2';
2
+ export declare function startSshServer(port: number, onLog: (msg: string) => void): Server;