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

Configure Feed

Select the types of activity you want to include in your feed.

fix: Ignore internal interfaces when probing routes (VPNs) (#7)

* Ignore internal assignments for probed routes

* Add changeset

* Determine internal interfaces with mac address as well

authored by

Phil Pluckthun and committed by
GitHub
c3948d2f fa5b32fb

+15 -2
+5
.changeset/fair-cows-perform.md
··· 1 + --- 2 + 'lan-network': patch 3 + --- 4 + 5 + When matching a probed route, ignore internal interfaces. The probed route will match a VPN (virtual) interface when using it to tunnel all traffic, but is unlikely to be considered the local network by users.
+5 -1
src/index.ts
··· 5 5 DEFAULT_ASSIGNMENT, 6 6 interfaceAssignments, 7 7 matchAssignment, 8 + isInternal, 8 9 } from './network'; 9 10 import type { GatewayAssignment } from './types'; 10 11 ··· 26 27 try { 27 28 const defaultRoute = await probeDefaultRoute(); 28 29 // If this route matches a known assignment, return it without a gateway 29 - if ((assignment = matchAssignment(assignments, defaultRoute))) { 30 + if ( 31 + (assignment = matchAssignment(assignments, defaultRoute)) && 32 + !isInternal(assignment) 33 + ) { 30 34 return assignment; 31 35 } 32 36 } catch {
+5 -1
src/network.ts
··· 45 45 else return 0; 46 46 }; 47 47 48 + /** Determines if an assignment is internal (indicated by the flag or by a zeroed mac address) */ 49 + export const isInternal = (assignment: NetworkAssignment) => 50 + assignment.internal || parseMacStr(assignment.mac).every(x => !x); 51 + 48 52 export const interfaceAssignments = (): NetworkAssignment[] => { 49 53 const candidates: NetworkAssignment[] = []; 50 54 const interfaces = os.networkInterfaces(); ··· 62 66 // Prioritise external interfaces, then sort by priority, 63 67 // when priority is equal, sort by raw IP values 64 68 const sortBy = 65 - +a.internal - +b.internal || 69 + +isInternal(a) - +isInternal(b) || 66 70 priorityB - priorityA || 67 71 parseIpStr(b.address) - parseIpStr(a.address); 68 72 return sortBy;