Mirror: Best-effort discovery of the machine's local network using just Node.js dgram sockets

fix: Fix probe and fallback method for Windows (#9)

* Add designated Microsoft virtual interface MAC

* Add viname by name

* Update probe route to IP/port combo that's definitely publicly routable

* Add changeset

Changed files
+25 -5
.changeset
src
+5
.changeset/funny-sloths-joke.md
···
+
---
+
'lan-network': patch
+
---
+
+
Fix probing and fallback methods for Windows
+17 -2
src/network.ts
···
};
/** Determines if an assignment is internal (indicated by the flag or by a zeroed mac address) */
-
export const isInternal = (assignment: NetworkAssignment) =>
-
assignment.internal || parseMacStr(assignment.mac).every(x => !x);
+
export const isInternal = (assignment: NetworkAssignment) => {
+
if (assignment.internal) {
+
return true;
+
}
+
const mac = parseMacStr(assignment.mac);
+
if (mac.every(x => !x)) {
+
return true;
+
} else if (mac[0] === 0 && mac[1] === 21 && mac[2] === 93) {
+
// NOTE(@kitten): Microsoft virtual interface
+
return true;
+
} else if (assignment.iname.includes('vEthernet')) {
+
// NOTE(@kitten): Other Windows virtual interfaces
+
return true;
+
} else {
+
return false;
+
}
+
};
export const interfaceAssignments = (): NetworkAssignment[] => {
const candidates: NetworkAssignment[] = [];
+3 -3
src/route.ts
···
import { createSocket } from 'dgram';
-
const NOOP_PORT = 65535;
-
const NOOP_IP = '255.255.255.255';
+
const PROBE_PORT = 53;
+
const PROBE_IP = '1.1.1.1';
const NO_ROUTE_IP = '0.0.0.0';
class DefaultRouteError extends TypeError {
···
socket.close();
socket.unref();
});
-
socket.connect(NOOP_PORT, NOOP_IP, () => {
+
socket.connect(PROBE_PORT, PROBE_IP, () => {
const address = socket.address();
if (address && 'address' in address && address.address !== NO_ROUTE_IP) {
resolve(address.address);