default-gateway
Advanced tools
Comparing version 2.5.0 to 2.6.0
@@ -11,25 +11,37 @@ "use strict"; | ||
const get = family => { | ||
return execa.stdout("ip", args[family]).then(stdout => { | ||
let result; | ||
const parse = stdout => { | ||
let result; | ||
(stdout || "").trim().split("\n").some(line => { | ||
const results = /default via (.+?) dev (.+?)( |$)/.exec(line) || []; | ||
const gateway = results[1]; | ||
const iface = results[2]; | ||
if (gateway && net.isIP(gateway)) { | ||
result = {gateway: gateway, interface: (iface ? iface : null)}; | ||
return true; | ||
} | ||
}); | ||
if (!result) { | ||
throw new Error("Unable to determine default gateway"); | ||
(stdout || "").trim().split("\n").some(line => { | ||
const results = /default via (.+?) dev (.+?)( |$)/.exec(line) || []; | ||
const gateway = results[1]; | ||
const iface = results[2]; | ||
if (gateway && net.isIP(gateway)) { | ||
result = {gateway: gateway, interface: (iface ? iface : null)}; | ||
return true; | ||
} | ||
}); | ||
return result; | ||
if (!result) { | ||
throw new Error("Unable to determine default gateway"); | ||
} | ||
return result; | ||
}; | ||
const promise = family => { | ||
return execa.stdout("ip", args[family]).then(stdout => { | ||
return parse(stdout); | ||
}); | ||
}; | ||
module.exports.v4 = () => get("v4"); | ||
module.exports.v6 = () => get("v6"); | ||
const sync = family => { | ||
const result = execa.sync("ip", args[family]); | ||
return parse(result.stdout); | ||
}; | ||
module.exports.v4 = () => promise("v4"); | ||
module.exports.v6 = () => promise("v6"); | ||
module.exports.v4.sync = () => sync("v4"); | ||
module.exports.v6.sync = () => sync("v6"); |
@@ -12,26 +12,38 @@ "use strict"; | ||
const get = family => { | ||
return execa.stdout("netstat", args[family]).then(stdout => { | ||
let result; | ||
const parse = (stdout, family) => { | ||
let result; | ||
(stdout || "").trim().split("\n").some(line => { | ||
const results = line.split(/ +/) || []; | ||
const target = results[0]; | ||
const gateway = results[1]; | ||
const iface = results[family === "v4" ? 5 : 3]; | ||
if (dests.indexOf(target) !== -1 && gateway && net.isIP(gateway)) { | ||
result = {gateway: gateway, interface: (iface ? iface : null)}; | ||
return true; | ||
} | ||
}); | ||
if (!result) { | ||
throw new Error("Unable to determine default gateway"); | ||
(stdout || "").trim().split("\n").some(line => { | ||
const results = line.split(/ +/) || []; | ||
const target = results[0]; | ||
const gateway = results[1]; | ||
const iface = results[family === "v4" ? 5 : 3]; | ||
if (dests.indexOf(target) !== -1 && gateway && net.isIP(gateway)) { | ||
result = {gateway: gateway, interface: (iface ? iface : null)}; | ||
return true; | ||
} | ||
}); | ||
return result; | ||
if (!result) { | ||
throw new Error("Unable to determine default gateway"); | ||
} | ||
return result; | ||
}; | ||
const promise = family => { | ||
return execa.stdout("netstat", args[family]).then(stdout => { | ||
return parse(stdout, family); | ||
}); | ||
}; | ||
module.exports.v4 = () => get("v4"); | ||
module.exports.v6 = () => get("v6"); | ||
const sync = family => { | ||
const result = execa.sync("netstat", args[family]); | ||
return parse(result.stdout, family); | ||
}; | ||
module.exports.v4 = () => promise("v4"); | ||
module.exports.v6 = () => promise("v6"); | ||
module.exports.v4.sync = () => sync("v4"); | ||
module.exports.v6.sync = () => sync("v6"); |
@@ -12,26 +12,38 @@ "use strict"; | ||
const get = family => { | ||
return execa.stdout("netstat", args[family]).then(stdout => { | ||
let result; | ||
const parse = stdout => { | ||
let result; | ||
(stdout || "").trim().split("\n").some(line => { | ||
const results = line.split(/ +/) || []; | ||
const target = results[0]; | ||
const gateway = results[1]; | ||
const iface = results[3]; | ||
if (dests.indexOf(target) !== -1 && gateway && net.isIP(gateway)) { | ||
result = {gateway: gateway, interface: (iface ? iface : null)}; | ||
return true; | ||
} | ||
}); | ||
if (!result) { | ||
throw new Error("Unable to determine default gateway"); | ||
(stdout || "").trim().split("\n").some(line => { | ||
const results = line.split(/ +/) || []; | ||
const target = results[0]; | ||
const gateway = results[1]; | ||
const iface = results[3]; | ||
if (dests.indexOf(target) !== -1 && gateway && net.isIP(gateway)) { | ||
result = {gateway: gateway, interface: (iface ? iface : null)}; | ||
return true; | ||
} | ||
}); | ||
return result; | ||
if (!result) { | ||
throw new Error("Unable to determine default gateway"); | ||
} | ||
return result; | ||
}; | ||
const promise = family => { | ||
return execa.stdout("netstat", args[family]).then(stdout => { | ||
return parse(stdout); | ||
}); | ||
}; | ||
module.exports.v4 = () => get("v4"); | ||
module.exports.v6 = () => get("v6"); | ||
const sync = family => { | ||
const result = execa.sync("netstat", args[family]); | ||
return parse(result.stdout); | ||
}; | ||
module.exports.v4 = () => promise("v4"); | ||
module.exports.v6 = () => promise("v6"); | ||
module.exports.v4.sync = () => sync("v4"); | ||
module.exports.v6.sync = () => sync("v6"); |
14
index.js
@@ -14,7 +14,13 @@ "use strict"; | ||
].indexOf(platform) !== -1) { | ||
module.exports.v4 = () => require(`./${platform}`).v4(); | ||
module.exports.v6 = () => require(`./${platform}`).v6(); | ||
const families = require(`./${platform}`); | ||
module.exports.v4 = () => families.v4(); | ||
module.exports.v6 = () => families.v6(); | ||
module.exports.v4.sync = () => families.v4.sync(); | ||
module.exports.v6.sync = () => families.v6.sync(); | ||
} else { | ||
module.exports.v4 = () => { throw new Error(`Unsupported Platform: ${platform}`); }; | ||
module.exports.v6 = () => { throw new Error(`Unsupported Platform: ${platform}`); }; | ||
const noop = () => { throw new Error(`Unsupported Platform: ${platform}`); }; | ||
module.exports.v4 = noop; | ||
module.exports.v6 = noop; | ||
module.exports.v4.sync = noop; | ||
module.exports.v6.sync = noop; | ||
} |
68
linux.js
@@ -12,36 +12,48 @@ "use strict"; | ||
const get = family => { | ||
return execa.stdout("ip", args[family]).then(stdout => { | ||
let result; | ||
const parse = (stdout, family) => { | ||
let result; | ||
(stdout || "").trim().split("\n").some(line => { | ||
const results = /default( via .+?)?( dev .+?)( |$)/.exec(line) || []; | ||
const gateway = (results[1] || "").substring(5); | ||
const iface = (results[2] || "").substring(5); | ||
if (gateway && net.isIP(gateway)) { // default via 1.2.3.4 dev en0 | ||
result = {gateway: gateway, interface: (iface ? iface : null)}; | ||
return true; | ||
} else if (iface && !gateway) { // default via dev en0 | ||
const interfaces = os.networkInterfaces(); | ||
const addresses = interfaces[iface]; | ||
if (!addresses || !addresses.length) return; | ||
(stdout || "").trim().split("\n").some(line => { | ||
const results = /default( via .+?)?( dev .+?)( |$)/.exec(line) || []; | ||
const gateway = (results[1] || "").substring(5); | ||
const iface = (results[2] || "").substring(5); | ||
if (gateway && net.isIP(gateway)) { // default via 1.2.3.4 dev en0 | ||
result = {gateway: gateway, interface: (iface ? iface : null)}; | ||
return true; | ||
} else if (iface && !gateway) { // default via dev en0 | ||
const interfaces = os.networkInterfaces(); | ||
const addresses = interfaces[iface]; | ||
if (!addresses || !addresses.length) return; | ||
addresses.some(function(addr) { | ||
if (addr.family.substring(2) === family && net.isIP(addr.address)) { | ||
result = {gateway: addr.address, interface: (iface ? iface : null)}; | ||
return true; | ||
} | ||
}); | ||
} | ||
}); | ||
if (!result) { | ||
throw new Error("Unable to determine default gateway"); | ||
addresses.some(function(addr) { | ||
if (addr.family.substring(2) === family && net.isIP(addr.address)) { | ||
result = {gateway: addr.address, interface: (iface ? iface : null)}; | ||
return true; | ||
} | ||
}); | ||
} | ||
}); | ||
return result; | ||
if (!result) { | ||
throw new Error("Unable to determine default gateway"); | ||
} | ||
return result; | ||
}; | ||
const promise = family => { | ||
return execa.stdout("ip", args[family]).then(stdout => { | ||
return parse(stdout, family); | ||
}); | ||
}; | ||
module.exports.v4 = () => get("v4"); | ||
module.exports.v6 = () => get("v6"); | ||
const sync = family => { | ||
const result = execa.sync("ip", args[family]); | ||
return parse(result.stdout, family); | ||
}; | ||
module.exports.v4 = () => promise("v4"); | ||
module.exports.v6 = () => promise("v6"); | ||
module.exports.v4.sync = () => sync("v4"); | ||
module.exports.v6.sync = () => sync("v6"); |
@@ -12,26 +12,38 @@ "use strict"; | ||
const get = family => { | ||
return execa.stdout("netstat", args[family]).then(stdout => { | ||
let result; | ||
const parse = stdout => { | ||
let result; | ||
(stdout || "").trim().split("\n").some(line => { | ||
const results = line.split(/ +/) || []; | ||
const target = results[0]; | ||
const gateway = results[1]; | ||
const iface = results[7]; | ||
if (dests.indexOf(target) !== -1 && gateway && net.isIP(gateway)) { | ||
result = {gateway: gateway, interface: (iface ? iface : null)}; | ||
return true; | ||
} | ||
}); | ||
if (!result) { | ||
throw new Error("Unable to determine default gateway"); | ||
(stdout || "").trim().split("\n").some(line => { | ||
const results = line.split(/ +/) || []; | ||
const target = results[0]; | ||
const gateway = results[1]; | ||
const iface = results[7]; | ||
if (dests.indexOf(target) !== -1 && gateway && net.isIP(gateway)) { | ||
result = {gateway: gateway, interface: (iface ? iface : null)}; | ||
return true; | ||
} | ||
}); | ||
return result; | ||
if (!result) { | ||
throw new Error("Unable to determine default gateway"); | ||
} | ||
return result; | ||
}; | ||
const promise = family => { | ||
return execa.stdout("netstat", args[family]).then(stdout => { | ||
return parse(stdout); | ||
}); | ||
}; | ||
module.exports.v4 = () => get("v4"); | ||
module.exports.v6 = () => get("v6"); | ||
const sync = family => { | ||
const result = execa.sync("netstat", args[family]); | ||
return parse(result.stdout); | ||
}; | ||
module.exports.v4 = () => promise("v4"); | ||
module.exports.v6 = () => promise("v6"); | ||
module.exports.v4.sync = () => sync("v4"); | ||
module.exports.v6.sync = () => sync("v6"); |
{ | ||
"name": "default-gateway", | ||
"version": "2.5.0", | ||
"version": "2.6.0", | ||
"description": "Get the default network gateway, cross-platform.", | ||
@@ -15,5 +15,8 @@ "author": "silverwind <me@silverwind.io>", | ||
"dependencies": { | ||
"execa": "^0.7.0", | ||
"execa": "^0.8.0", | ||
"ip-regex": "^2.1.0" | ||
}, | ||
"devDependencies": { | ||
"eslint": "^4.7.2" | ||
}, | ||
"os": [ | ||
@@ -20,0 +23,0 @@ "android", |
@@ -20,19 +20,29 @@ # default-gateway | ||
defaultGateway.v4().then(result => { | ||
//=> {gateway: '1.2.3.4', interface: 'en1'} | ||
// result = {gateway: '1.2.3.4', interface: 'en1'} | ||
}); | ||
defaultGateway.v6().then(result => { | ||
//=> {gateway: '2001:db8::1', interface: 'en2'} | ||
// result = {gateway: '2001:db8::1', interface: 'en2'} | ||
}); | ||
const result = defaultGateway.v4().sync(); | ||
// result = {gateway: '1.2.3.4', interface: 'en1'} | ||
const result = defaultGateway.v6().sync(); | ||
// result = {gateway: '2001:db8::1', interface: 'en2'} | ||
``` | ||
## API | ||
### defaultGateway.v4() | ||
### defaultGateway.v6() | ||
### defaultGateway.v4().sync() | ||
### defaultGateway.v6().sync() | ||
Returns a promise that resolves to a object containing the IPv4 `gateway` and `interface` properties. If it succeeds, `gateway` will always be defined, while `interface` can be `null` if it cannot be determined. Rejects when the gateway cannot be determined. | ||
Returns: `result` *Object* | ||
- `gateway`: The IP address of the default gateway. | ||
- `interface`: The name of the interface. On Windows, this is the network adapter name. | ||
### defaultGateway.v6() | ||
The `.v{4,6}()` functions return a Promise while the `.v{4,6}().sync()` variants will return the result synchronously. | ||
Returns a promise that resolves to a object containing the IPv6 `gateway` and `interface` properties. If it succeeds, `gateway` will always be defined, while `interface` can be `null` if it cannot be determined. Rejects when the gateway cannot be determined. | ||
The `gateway` property will always be defined on success, while `interface` can be `null` if it cannot be determined. All methods reject/throws when the gateway cannot be determined or the `exec` call failed. | ||
@@ -39,0 +49,0 @@ ## License |
50
sunos.js
@@ -12,26 +12,38 @@ "use strict"; | ||
const get = family => { | ||
return execa.stdout("netstat", args[family]).then(stdout => { | ||
let result; | ||
const parse = stdout => { | ||
let result; | ||
(stdout || "").trim().split("\n").some(line => { | ||
const results = line.split(/ +/) || []; | ||
const target = results[0]; | ||
const gateway = results[1]; | ||
const iface = results[5]; | ||
if (dests.indexOf(target) !== -1 && gateway && net.isIP(gateway)) { | ||
result = {gateway: gateway, interface: (iface ? iface : null)}; | ||
return true; | ||
} | ||
}); | ||
if (!result) { | ||
throw new Error("Unable to determine default gateway"); | ||
(stdout || "").trim().split("\n").some(line => { | ||
const results = line.split(/ +/) || []; | ||
const target = results[0]; | ||
const gateway = results[1]; | ||
const iface = results[5]; | ||
if (dests.indexOf(target) !== -1 && gateway && net.isIP(gateway)) { | ||
result = {gateway: gateway, interface: (iface ? iface : null)}; | ||
return true; | ||
} | ||
}); | ||
return result; | ||
if (!result) { | ||
throw new Error("Unable to determine default gateway"); | ||
} | ||
return result; | ||
}; | ||
const promise = family => { | ||
return execa.stdout("netstat", args[family]).then(stdout => { | ||
return parse(stdout); | ||
}); | ||
}; | ||
module.exports.v4 = () => get("v4"); | ||
module.exports.v6 = () => get("v6"); | ||
const sync = family => { | ||
const result = execa.sync("netstat", args[family]); | ||
return parse(result.stdout); | ||
}; | ||
module.exports.v4 = () => promise("v4"); | ||
module.exports.v6 = () => promise("v6"); | ||
module.exports.v4.sync = () => sync("v4"); | ||
module.exports.v6.sync = () => sync("v6"); |
70
win32.js
@@ -9,5 +9,34 @@ "use strict"; | ||
function wmic(family) { | ||
const parse = (gwTable, ifTable, family) => { | ||
let gateway, gwid, result; | ||
(gwTable || "").trim().split("\n").splice(1).some(line => { | ||
const results = line.trim().split(/} +/) || []; | ||
const gw = results[0]; | ||
const id = results[1]; | ||
gateway = (ipRegex[family]().exec((gw || "").trim()) || [])[0]; | ||
if (gateway) { | ||
gwid = id; | ||
return true; | ||
} | ||
}); | ||
(ifTable || "").trim().split("\n").splice(1).some(line => { | ||
const i = line.indexOf(" "); | ||
const id = line.substr(0, i).trim(); | ||
const name = line.substr(i + 1).trim(); | ||
if (id === gwid) { | ||
result = {gateway: gateway, interface: name ? name : null}; | ||
return true; | ||
} | ||
}); | ||
if (!result) { | ||
throw new Error("Unable to determine default gateway"); | ||
} | ||
return result; | ||
}; | ||
const promise = family => { | ||
return Promise.all([ | ||
@@ -20,32 +49,17 @@ execa.stdout("wmic", gwArgs), | ||
(gwTable || "").trim().split("\n").splice(1).some(line => { | ||
const results = line.trim().split(/} +/) || []; | ||
const gw = results[0]; | ||
const id = results[1]; | ||
gateway = (ipRegex[family]().exec((gw || "").trim()) || [])[0]; | ||
if (gateway) { | ||
gwid = id; | ||
return true; | ||
} | ||
}); | ||
return parse(gwTable, ifTable, family); | ||
}); | ||
}; | ||
(ifTable || "").trim().split("\n").splice(1).some(line => { | ||
const i = line.indexOf(" "); | ||
const id = line.substr(0, i).trim(); | ||
const name = line.substr(i + 1).trim(); | ||
if (id === gwid) { | ||
result = {gateway: gateway, interface: name ? name : null}; | ||
return true; | ||
} | ||
}); | ||
const sync = family => { | ||
const gwTable = execa.sync("wmic", gwArgs); | ||
const ifTable = execa.sync("wmic", ifArgs); | ||
if (!result) { | ||
throw new Error("Unable to determine default gateway"); | ||
} | ||
return parse(gwTable, ifTable, family); | ||
}; | ||
return result; | ||
}); | ||
} | ||
module.exports.v4 = () => promise("v4"); | ||
module.exports.v6 = () => promise("v6"); | ||
module.exports.v4 = () => wmic("v4"); | ||
module.exports.v6 = () => wmic("v6"); | ||
module.exports.v4.sync = () => sync("v4"); | ||
module.exports.v6.sync = () => sync("v6"); |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
13437
308
51
2
1
+ Addedexeca@0.8.0(transitive)
- Removedexeca@0.7.0(transitive)
Updatedexeca@^0.8.0