Tôi có một chương trình node.js đơn giản đang chạy trên máy của mình và tôi muốn lấy địa chỉ IP cục bộ của PC mà chương trình của tôi đang chạy. Làm thế nào để tôi có được nó với node.js?
Tôi có một chương trình node.js đơn giản đang chạy trên máy của mình và tôi muốn lấy địa chỉ IP cục bộ của PC mà chương trình của tôi đang chạy. Làm thế nào để tôi có được nó với node.js?
Câu trả lời:
'use strict';
var os = require('os');
var ifaces = os.networkInterfaces();
Object.keys(ifaces).forEach(function (ifname) {
var alias = 0;
ifaces[ifname].forEach(function (iface) {
if ('IPv4' !== iface.family || iface.internal !== false) {
// skip over internal (i.e. 127.0.0.1) and non-ipv4 addresses
return;
}
if (alias >= 1) {
// this single interface has multiple ipv4 addresses
console.log(ifname + ':' + alias, iface.address);
} else {
// this interface has only one ipv4 adress
console.log(ifname, iface.address);
}
++alias;
});
});
// en0 192.168.1.101
// eth0 10.0.0.101
if( details.family=='IPv4' && details.internal === false ) {
nếu bạn chỉ muốn IP bên ngoài.
Object.values(require('os').networkInterfaces()).reduce((r, list) => r.concat(list.reduce((rr, i) => rr.concat(i.family==='IPv4' && !i.internal && i.address || []), [])), [])
Hiện tại os.networkInterfaces không hoạt động trên windows. Chạy các chương trình để phân tích kết quả có vẻ hơi iffy. Đây là những gì tôi sử dụng.
require('dns').lookup(require('os').hostname(), function (err, add, fam) {
console.log('addr: '+add);
})
Điều này sẽ trả về ip cục bộ giao diện mạng đầu tiên của bạn.
https://github.com/indutny/node-ip
var ip = require("ip");
console.dir ( ip.address() );
Bất kỳ IP nào của máy bạn có thể tìm thấy bằng cách sử dụng mô-đun os - và đó là nguồn gốc của NodeJS
var os = require( 'os' );
var networkInterfaces = os.networkInterfaces( );
console.log( networkInterfaces );
Tất cả những gì bạn cần làm là gọi os.networkInterfaces () và bạn sẽ nhận được một danh sách dễ quản lý - dễ dàng hơn so với việc chạy ifconfig bởi các giải đấu
http://nodejs.org/api/os.html#os_os_networkinterfaces
Tốt
Edoardo
var address = networkInterfaces['venet0:0'][0].address
Đây là một đoạn mã node.js sẽ phân tích cú pháp đầu ra ifconfig
và (không đồng bộ) trả về địa chỉ IP đầu tiên được tìm thấy:
(chỉ được thử nghiệm trên MacOS Snow Leopard; hy vọng nó cũng hoạt động trên linux)
var getNetworkIP = (function () {
var ignoreRE = /^(127\.0\.0\.1|::1|fe80(:1)?::1(%.*)?)$/i;
var exec = require('child_process').exec;
var cached;
var command;
var filterRE;
switch (process.platform) {
// TODO: implement for OSs without ifconfig command
case 'darwin':
command = 'ifconfig';
filterRE = /\binet\s+([^\s]+)/g;
// filterRE = /\binet6\s+([^\s]+)/g; // IPv6
break;
default:
command = 'ifconfig';
filterRE = /\binet\b[^:]+:\s*([^\s]+)/g;
// filterRE = /\binet6[^:]+:\s*([^\s]+)/g; // IPv6
break;
}
return function (callback, bypassCache) {
// get cached value
if (cached && !bypassCache) {
callback(null, cached);
return;
}
// system call
exec(command, function (error, stdout, sterr) {
var ips = [];
// extract IPs
var matches = stdout.match(filterRE);
// JS has no lookbehind REs, so we need a trick
for (var i = 0; i < matches.length; i++) {
ips.push(matches[i].replace(filterRE, '$1'));
}
// filter BS
for (var i = 0, l = ips.length; i < l; i++) {
if (!ignoreRE.test(ips[i])) {
//if (!error) {
cached = ips[i];
//}
callback(error, ips[i]);
return;
}
}
// nothing found
callback(error, null);
});
};
})();
Ví dụ sử dụng:
getNetworkIP(function (error, ip) {
console.log(ip);
if (error) {
console.log('error:', error);
}
}, false);
Nếu tham số thứ hai là true
, hàm sẽ thực hiện cuộc gọi hệ thống mỗi lần; mặt khác, giá trị lưu trữ được sử dụng.
Trả về một mảng của tất cả các địa chỉ mạng cục bộ.
Đã thử nghiệm trên Ubuntu 11.04 và Windows XP 32
var getNetworkIPs = (function () {
var ignoreRE = /^(127\.0\.0\.1|::1|fe80(:1)?::1(%.*)?)$/i;
var exec = require('child_process').exec;
var cached;
var command;
var filterRE;
switch (process.platform) {
case 'win32':
//case 'win64': // TODO: test
command = 'ipconfig';
filterRE = /\bIPv[46][^:\r\n]+:\s*([^\s]+)/g;
break;
case 'darwin':
command = 'ifconfig';
filterRE = /\binet\s+([^\s]+)/g;
// filterRE = /\binet6\s+([^\s]+)/g; // IPv6
break;
default:
command = 'ifconfig';
filterRE = /\binet\b[^:]+:\s*([^\s]+)/g;
// filterRE = /\binet6[^:]+:\s*([^\s]+)/g; // IPv6
break;
}
return function (callback, bypassCache) {
if (cached && !bypassCache) {
callback(null, cached);
return;
}
// system call
exec(command, function (error, stdout, sterr) {
cached = [];
var ip;
var matches = stdout.match(filterRE) || [];
//if (!error) {
for (var i = 0; i < matches.length; i++) {
ip = matches[i].replace(filterRE, '$1')
if (!ignoreRE.test(ip)) {
cached.push(ip);
}
}
//}
callback(error, cached);
});
};
})();
getNetworkIPs(function (error, ip) {
console.log(ip);
if (error) {
console.log('error:', error);
}
}, false);
filterRE = /\bIP-?[^:\r\n]+:\s*([^\s]+)/g;
. Bên cạnh đó, kịch bản tuyệt vời, một cứu cánh thực sự. Cảm ơn nhiều!
Đây là phương pháp tiện ích của tôi để lấy địa chỉ IP cục bộ, giả sử bạn đang tìm địa chỉ IPv4 và máy chỉ có một giao diện mạng thực. Nó có thể dễ dàng được tái cấu trúc để trả về một mảng IP cho các máy đa giao diện.
function getIPAddress() {
var interfaces = require('os').networkInterfaces();
for (var devName in interfaces) {
var iface = interfaces[devName];
for (var i = 0; i < iface.length; i++) {
var alias = iface[i];
if (alias.family === 'IPv4' && alias.address !== '127.0.0.1' && !alias.internal)
return alias.address;
}
}
return '0.0.0.0';
}
getLocalIP = (interfaceName = "en0",version = "IPv4")-> iface = require('os').networkInterfaces()[interfaceName] for alias in iface if (alias.family == version && !alias.internal) return alias.address return "0.0.0.0"
Cài đặt một mô-đun gọi là ip như
npm install ip
sau đó sử dụng mã này
var ip = require("ip");
console.log( ip.address() );
Gọi ifconfig phụ thuộc rất nhiều vào nền tảng và lớp mạng không biết địa chỉ IP nào là ổ cắm, vì vậy tốt nhất là hỏi nó. Node không tiết lộ một phương pháp trực tiếp để làm điều này, nhưng bạn có thể mở bất kỳ ổ cắm nào và hỏi địa chỉ IP cục bộ nào đang được sử dụng. Ví dụ: mở một ổ cắm cho www.google.com:
var net = require('net');
function getNetworkIP(callback) {
var socket = net.createConnection(80, 'www.google.com');
socket.on('connect', function() {
callback(undefined, socket.address().address);
socket.end();
});
socket.on('error', function(e) {
callback(e, 'error');
});
}
Trường hợp sử dụng:
getNetworkIP(function (error, ip) {
console.log(ip);
if (error) {
console.log('error:', error);
}
});
IP cục bộ của bạn luôn là 127.0.0.1.
Sau đó, có IP mạng, mà bạn có thể nhận được từ ifconfig
(* nix) hoặc ipconfig
(win). Điều này chỉ hữu ích trong mạng cục bộ.
Sau đó, có IP bên ngoài / công cộng của bạn, mà bạn chỉ có thể nhận được nếu bạn có thể yêu cầu bộ định tuyến bằng cách nào đó hoặc bạn có thể thiết lập một dịch vụ bên ngoài trả về địa chỉ IP của khách hàng bất cứ khi nào nhận được yêu cầu. Ngoài ra còn có các dịch vụ khác như vậy tồn tại, như whatismyip.com.
Trong một số trường hợp (ví dụ: nếu bạn có kết nối WAN), IP mạng và IP công cộng là như nhau và cả hai có thể được sử dụng bên ngoài để truy cập vào máy tính của bạn.
Nếu mạng và IP công cộng của bạn khác nhau, bạn có thể cần phải có bộ định tuyến mạng chuyển tiếp tất cả các kết nối đến ip mạng của bạn.
Cập nhật 2013:
Bây giờ có một cách mới để làm điều này, bạn có thể kiểm tra đối tượng socket của kết nối của mình để tìm một thuộc tính được gọi localAddress
, vd net.socket.localAddress
. Nó trả về địa chỉ ở cuối ổ cắm của bạn.
Cách dễ nhất là chỉ cần mở một cổng ngẫu nhiên và lắng nghe trên đó, sau đó lấy địa chỉ của bạn và đóng ổ cắm.
Cập nhật 2015:
Cái trước không hoạt động nữa.
ifconfig
hoặc ipconfig
phân tích chuỗi phản hồi?
ifconfig
khá nhiều cách duy nhất.
net.socket
lợi nhuận undefined
của năm 2015, vì vậy "cách làm mới này" không còn hiệu quả nữa. Có một net.Socket
, nhưng nó không có localAddress
tài sản.
sử dụng mô-đun ip npm
var ip = require('ip');
console.log(ip.address());
> '192.168.0.117'
Một lớp lót chính xác cho cả gạch dưới và lodash là:
var ip = require('underscore')
.chain(require('os').networkInterfaces())
.values()
.flatten()
.find({family: 'IPv4', internal: false})
.value()
.address;
.find({family: 'IPv4', internal: false})
cũng như cho một mã thanh lịch ngắn hơn
Đây là những gì có thể là câu trả lời sạch nhất, đơn giản nhất mà không phụ thuộc & hoạt động trên tất cả các nền tảng.
const { lookup } = require('dns').promises;
const { hostname } = require('os');
async function getMyIPAddress(options) {
return (await lookup(hostname(), options))
.address;
}
Tất cả những gì tôi biết là tôi muốn địa chỉ IP bắt đầu bằng 192.168.
. Mã này sẽ cung cấp cho bạn rằng:
function getLocalIp() {
const os = require('os');
for(let addresses of Object.values(os.networkInterfaces())) {
for(let add of addresses) {
if(add.address.startsWith('192.168.')) {
return add.address;
}
}
}
}
Tất nhiên bạn chỉ có thể thay đổi số nếu bạn đang tìm kiếm một số khác.
192.168
thì sao?
192.168.
đó là lý do tôi chọn nó.
để sử dụng Linux và MacOS, nếu bạn muốn nhận IP của mình theo cách đồng bộ, hãy thử cách này.
var ips = require('child_process').execSync("ifconfig | grep inet | grep -v inet6 | awk '{gsub(/addr:/,\"\");print $2}'").toString().trim().split("\n");
console.log(ips);
kết quả sẽ là một cái gì đó như thế này.
[ '192.168.3.2', '192.168.2.1' ]
Tôi đã viết một mô-đun Node.js xác định địa chỉ IP cục bộ của bạn bằng cách xem giao diện mạng nào chứa cổng mặc định của bạn.
Điều này đáng tin cậy hơn là chọn một giao diện từ os.networkInterfaces()
hoặc tra cứu DNS của tên máy chủ. Nó có thể bỏ qua các giao diện ảo, loopback và giao diện VPN của VMware và nó hoạt động trên Windows, Linux, Mac OS và FreeBSD. Dưới mui xe, nó thực thi route.exe
hoặc netstat
phân tích đầu ra.
var localIpV4Address = require("local-ipv4-address");
localIpV4Address().then(function(ipAddress){
console.log("My IP address is " + ipAddress);
// My IP address is 10.4.4.137
});
Đây là một phiên bản đơn giản hóa trong javilla javascript để có được một ip duy nhất:
function getServerIp() {
var os = require('os');
var ifaces = os.networkInterfaces();
var values = Object.keys(ifaces).map(function(name) {
return ifaces[name];
});
values = [].concat.apply([], values).filter(function(val){
return val.family == 'IPv4' && val.internal == false;
});
return values.length ? values[0].address : '0.0.0.0';
}
Đối với bất kỳ ai quan tâm đến tính ngắn gọn, đây là một số "lớp lót" không yêu cầu bổ trợ / phụ thuộc không phải là một phần của cài đặt Node tiêu chuẩn:
IPv4 và IPv6 công khai của eth0 dưới dạng Mảng:
var ips = require('os').networkInterfaces().eth0.map(function(interface) {
return interface.address;
});
IP công khai đầu tiên của eth0 (thường là IPv4) dưới dạng Chuỗi:
var ip = require('os').networkInterfaces().eth0[0].address;
en0
và en1
cho ethernet và wifi. Trên Windows, tôi có Local Area Connection
và Wireless Network Connection
.
Google hướng tôi đến câu hỏi này trong khi tìm kiếm "node.js get ip server" , vì vậy hãy đưa ra câu trả lời thay thế cho những ai đang cố gắng đạt được điều này trong chương trình máy chủ node.js của họ (có thể là trường hợp của poster gốc).
Trong trường hợp tầm thường nhất khi máy chủ bị ràng buộc chỉ có một địa chỉ IP, sẽ không cần xác định địa chỉ IP vì chúng ta đã biết địa chỉ nào chúng ta ràng buộc nó (ví dụ: tham số thứ hai được truyền cho listen()
hàm).
Trong trường hợp ít tầm thường hơn khi máy chủ bị ràng buộc với nhiều địa chỉ IP, chúng tôi có thể cần xác định địa chỉ IP của giao diện mà máy khách được kết nối. Và như Tor Valamo đề xuất ngắn gọn, ngày nay, chúng ta có thể dễ dàng lấy thông tin này từ ổ cắm được kết nối và localAddress
tài sản của nó .
Ví dụ: nếu chương trình là máy chủ web:
var http = require("http")
http.createServer(function (req, res) {
console.log(req.socket.localAddress)
res.end(req.socket.localAddress)
}).listen(8000)
Và nếu đó là một máy chủ TCP chung:
var net = require("net")
net.createServer(function (socket) {
console.log(socket.localAddress)
socket.end(socket.localAddress)
}).listen(8000)
Khi chạy một chương trình máy chủ, giải pháp này cung cấp tính di động, độ chính xác và hiệu quả rất cao.
Để biết thêm chi tiết, xem:
Dựa trên một nhận xét ở trên, đây là những gì hoạt động cho phiên bản hiện tại của Node:
var os = require('os');
var _ = require('lodash');
var ip = _.chain(os.networkInterfaces())
.values()
.flatten()
.filter(function(val) {
return (val.family == 'IPv4' && val.internal == false)
})
.pluck('address')
.first()
.value();
Nhận xét về một trong những câu trả lời ở trên đã bỏ lỡ cuộc gọi đến values()
. Có vẻ như os.networkInterfaces()
bây giờ trả về một đối tượng thay vì một mảng.
_.chain(..)
có thể được viết lại thành _(...)
, cái .filter(..)
có thể được viết lại dưới dạng .where({family: 'IPv4', internal: false})
, và bạn có thể bỏ bản cuối cùng value()
vì .first()
nó giúp bạn khi xâu chuỗi.
Dưới đây là một biến thể của các ví dụ trên. Cần phải lọc các giao diện vMware, v.v. Nếu bạn không vượt qua một chỉ mục, nó sẽ trả về tất cả các địa chỉ nếu không bạn có thể muốn đặt mặc định thành 0 thì chỉ cần chuyển null để lấy tất cả, nhưng bạn sẽ loại nó ra. Bạn cũng có thể chuyển vào một đối số khác cho bộ lọc regex nếu có xu hướng thêm
function getAddress(idx) {
var addresses = [],
interfaces = os.networkInterfaces(),
name, ifaces, iface;
for (name in interfaces) {
if(interfaces.hasOwnProperty(name)){
ifaces = interfaces[name];
if(!/(loopback|vmware|internal)/gi.test(name)){
for (var i = 0; i < ifaces.length; i++) {
iface = ifaces[i];
if (iface.family === 'IPv4' && !iface.internal && iface.address !== '127.0.0.1') {
addresses.push(iface.address);
}
}
}
}
}
// if an index is passed only return it.
if(idx >= 0)
return addresses[idx];
return addresses;
}
Tôi đã có thể làm điều này bằng cách chỉ sử dụng nút js
Như nút Node
var os = require( 'os' ); var networkInterfaces = Object.values(os.networkInterfaces()) .reduce((r,a)=>{ r = r.concat(a) return r; }, []) .filter(({family, address}) => { return family.toLowerCase().indexOf('v4') >= 0 && address !== '127.0.0.1' }) .map(({address}) => address); var ipAddresses = networkInterfaces.join(', ') console.log(ipAddresses);
Là tập lệnh bash (cần cài đặt nút js)
function ifconfig2 () { node -e """ var os = require( 'os' ); var networkInterfaces = Object.values(os.networkInterfaces()) .reduce((r,a)=>{ r = r.concat(a) return r; }, []) .filter(({family, address}) => { return family.toLowerCase().indexOf('v4') >= 0 && address !== '127.0.0.1' }) .map(({address}) => address); var ipAddresses = networkInterfaces.join(', ') console.log(ipAddresses); """ }
Đây là biến thể của tôi cho phép nhận cả địa chỉ IPv4 và IPv6 theo cách di động:
/**
* Collects information about the local IPv4/IPv6 addresses of
* every network interface on the local computer.
* Returns an object with the network interface name as the first-level key and
* "IPv4" or "IPv6" as the second-level key.
* For example you can use getLocalIPs().eth0.IPv6 to get the IPv6 address
* (as string) of eth0
*/
getLocalIPs = function () {
var addrInfo, ifaceDetails, _len;
var localIPInfo = {};
//Get the network interfaces
var networkInterfaces = require('os').networkInterfaces();
//Iterate over the network interfaces
for (var ifaceName in networkInterfaces) {
ifaceDetails = networkInterfaces[ifaceName];
//Iterate over all interface details
for (var _i = 0, _len = ifaceDetails.length; _i < _len; _i++) {
addrInfo = ifaceDetails[_i];
if (addrInfo.family === 'IPv4') {
//Extract the IPv4 address
if (!localIPInfo[ifaceName]) {
localIPInfo[ifaceName] = {};
}
localIPInfo[ifaceName].IPv4 = addrInfo.address;
} else if (addrInfo.family === 'IPv6') {
//Extract the IPv6 address
if (!localIPInfo[ifaceName]) {
localIPInfo[ifaceName] = {};
}
localIPInfo[ifaceName].IPv6 = addrInfo.address;
}
}
}
return localIPInfo;
};
Đây là phiên bản CoffeeScript có cùng chức năng:
getLocalIPs = () =>
###
Collects information about the local IPv4/IPv6 addresses of
every network interface on the local computer.
Returns an object with the network interface name as the first-level key and
"IPv4" or "IPv6" as the second-level key.
For example you can use getLocalIPs().eth0.IPv6 to get the IPv6 address
(as string) of eth0
###
networkInterfaces = require('os').networkInterfaces();
localIPInfo = {}
for ifaceName, ifaceDetails of networkInterfaces
for addrInfo in ifaceDetails
if addrInfo.family=='IPv4'
if !localIPInfo[ifaceName]
localIPInfo[ifaceName] = {}
localIPInfo[ifaceName].IPv4 = addrInfo.address
else if addrInfo.family=='IPv6'
if !localIPInfo[ifaceName]
localIPInfo[ifaceName] = {}
localIPInfo[ifaceName].IPv6 = addrInfo.address
return localIPInfo
Ví dụ đầu ra cho console.log(getLocalIPs())
{ lo: { IPv4: '127.0.0.1', IPv6: '::1' },
wlan0: { IPv4: '192.168.178.21', IPv6: 'fe80::aa1a:2eee:feba:1c39' },
tap0: { IPv4: '10.1.1.7', IPv6: 'fe80::ddf1:a9a1:1242:bc9b' } }
Nếu bạn tham gia vào toàn bộ điều ngắn gọn, thì đây là cách sử dụng lodash :
var os = require('os');
var _ = require('lodash');
var firstLocalIp = _(os.networkInterfaces()).values().flatten().where({ family: 'IPv4', internal: false }).pluck('address').first();
console.log('First local IPv4 address is ' + firstLocalIp);
Tương tự như các câu trả lời khác nhưng ngắn gọn hơn:
'use strict';
const interfaces = require('os').networkInterfaces();
const addresses = Object.keys(interfaces)
.reduce((results, name) => results.concat(interfaces[name]), [])
.filter((iface) => iface.family === 'IPv4' && !iface.internal)
.map((iface) => iface.address);
Object.keys(interfaces).reduce(...)
với Object.values(interfaces).flat()
và nó sẽ là điều tương tự.
Khi phát triển ứng dụng trên mac os và muốn thử nghiệm nó trên điện thoại và cần ứng dụng của bạn tự động chọn ip localhost.
require('os').networkInterfaces().en0.find(elm=>elm.family=='IPv4').address
Đây chỉ là đề cập đến cách bạn có thể tự động tìm ra địa chỉ IP. Để kiểm tra điều này, bạn có thể đi đến thiết bị đầu cuối nhấn
node
os.networkInterfaces().en0.find(elm=>elm.family=='IPv4').address
đầu ra sẽ là địa chỉ ip localhost của bạn.
Đây là một lớp lót nhỏ gọn cho bạn thực hiện chức năng này:
const ni = require('os').networkInterfaces();
Object
.keys(ni)
.map(interf =>
ni[interf].map(o => !o.internal && o.family === 'IPv4' && o.address))
.reduce((a, b) => a.concat(b))
.filter(o => o)
[0];
reduce
và thay thế cuộc gọi map
bằng cuộc gọi đến flatMap
.
Nhiều lần tôi thấy có rất nhiều giao diện phải đối mặt với nội bộ và bên ngoài có sẵn (ví dụ: 10.0.75.1
, 172.100.0.1
, 192.168.2.3
), và đó là một bên ngoài mà tôi thật sự sau ( 172.100.0.1
).
Trong trường hợp bất kỳ ai khác có mối quan tâm tương tự, đây là một lần nữa đảm nhận điều này với hy vọng có thể giúp ích được ...
const address = Object.keys(os.networkInterfaces())
// flatten interfaces to an array
.reduce((a, key) => [
...a,
...os.networkInterfaces()[key]
], [])
// non-internal ipv4 addresses only
.filter(iface => iface.family === 'IPv4' && !iface.internal)
// project ipv4 address as a 32-bit number (n)
.map(iface => ({...iface, n: (d => ((((((+d[0])*256)+(+d[1]))*256)+(+d[2]))*256)+(+d[3]))(iface.address.split('.'))}))
// set a hi-bit on (n) for reserved addresses so they will sort to the bottom
.map(iface => iface.address.startsWith('10.') || iface.address.startsWith('192.') ? {...iface, n: Math.pow(2,32) + iface.n} : iface)
// sort ascending on (n)
.sort((a, b) => a.n - b.n)
[0]||{}.address;
Tôi đang sử dụng node.js 0.6.5
$ node -v
v0.6.5
Đây là những gì tôi làm
var util = require('util');
var exec = require('child_process').exec;
function puts(error, stdout, stderr) {
util.puts(stdout);
}
exec("hostname -i", puts);
hostname -I
(chữ hoa i). Nó trả về một danh sách tất cả các địa chỉ IP được gán của máy. Địa chỉ IP đầu tiên là những gì bạn cần. IP đó là cái được gắn vào giao diện hiện tại.
Đây là phiên bản nhiều ip của câu trả lời của jhurliman ở trên:
function getIPAddresses() {
var ipAddresses = [];
var interfaces = require('os').networkInterfaces();
for (var devName in interfaces) {
var iface = interfaces[devName];
for (var i = 0; i < iface.length; i++) {
var alias = iface[i];
if (alias.family === 'IPv4' && alias.address !== '127.0.0.1' && !alias.internal) {
ipAddresses.push(alias.address);
}
}
}
return ipAddresses;
}
Tôi nhận ra đây là một chủ đề cũ, nhưng tôi muốn đưa ra một cải tiến về câu trả lời hàng đầu vì những lý do sau:
cho ... trong ... liệt kê nên được xác nhận để đảm bảo đối tượng được liệt kê có chứa tài sản mà bạn đang tìm kiếm. Vì javsacript được gõ lỏng lẻo và for ... in ... có thể được trao bất kỳ đối tượng trọng tài nào để xử lý; an toàn hơn để xác nhận tài sản mà chúng tôi đang tìm kiếm có sẵn.
var os = require('os'),
interfaces = os.networkInterfaces(),
address,
addresses = [],
i,
l,
interfaceId,
interfaceArray;
for (interfaceId in interfaces) {
if (interfaces.hasOwnProperty(interfaceId)) {
interfaceArray = interfaces[interfaceId];
l = interfaceArray.length;
for (i = 0; i < l; i += 1) {
address = interfaceArray[i];
if (address.family === 'IPv4' && !address.internal) {
addresses.push(address.address);
}
}
}
}
console.log(addresses);