summaryrefslogtreecommitdiff
path: root/master/server/src/networking.ts
diff options
context:
space:
mode:
Diffstat (limited to 'master/server/src/networking.ts')
-rw-r--r--master/server/src/networking.ts38
1 files changed, 38 insertions, 0 deletions
diff --git a/master/server/src/networking.ts b/master/server/src/networking.ts
new file mode 100644
index 0000000..5a58fcd
--- /dev/null
+++ b/master/server/src/networking.ts
@@ -0,0 +1,38 @@
+import { filter_object } from "utility";
+
+import { NetworkInterfaceInfo, networkInterfaces } from "os";
+
+import { IPSubnetwork, IPv4 } from "ip-matching";
+import { promise as ping_promise } from "ping";
+
+const probe = ping_promise.probe;
+
+export function get_network_interfaces() {
+ const invalid_network_interfaces = [ "lo" ];
+
+ const nw_interfaces =
+ networkInterfaces() as Record<string, NetworkInterfaceInfo[] | undefined>;
+
+ return filter_object(
+ nw_interfaces,
+ (name, opt_info) => {
+ return !invalid_network_interfaces.includes(name) && opt_info !== undefined;
+ }
+ ) as Record<string, NetworkInterfaceInfo[]>;
+}
+
+export async function ping_subnetwork(subnetwork: IPSubnetwork) {
+ const first_ip = subnetwork.getFirst() as IPv4;
+
+ let current_ip = first_ip.getNext();
+
+ while(current_ip !== undefined && subnetwork.matches(current_ip)) {
+ const current_ip_str = current_ip.toString();
+
+ const ping_result = await probe(current_ip_str, { timeout: 0.1 });
+
+ console.log(`${current_ip_str}${ping_result.alive ? " - Alive" : ""}`);
+
+ current_ip = current_ip.getNext();
+ }
+}