Node.js 获取网卡信息(解决中文乱码问题)

这段代码展示了如何通过node.js的child_process模块执行命令获取网络接口信息。第一种方法使用iconv-lite库进行编码转换,第二种方法则是通过设置系统编码为65001来直接处理输出。两种方法都解析了接口名、型号、供应商、MAC地址等信息,并结合os.networkInterfaces()获取IPv4地址和网关。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 使用 iconv-lite 依赖库

var cluster = require('child_process')
var iconv = require('iconv-lite');
var encoding = 'cp936';
var binaryEncoding = 'binary';
   
cluster.exec("netsh wlan show interfaces|more", { encoding: binaryEncoding }, (err, res) => {
    var node_nics = require("os").networkInterfaces();
    var lines = iconv.decode(Buffer.from(res, binaryEncoding), encoding).split('\r\n');
    var fields = [
	        'name',
	        'model',
	        'vendor',
	        'mac_address',
	        'status',
	        'ssid',
	        'bssid',
	        'mode',
	        'radio',
	        'authentication',
	        'encryption',
	        'connection',
	        'channel',
	        'reception',
	        'transmission',
	        'signal',
	        'profil'
	];
    var connections = [];
    var tmp = {}
    var len = 0;
    for (var i = 3; i < lines.length; i++) {
	        if (lines[i] != "" && lines[i] != null && lines[i].indexOf(":") != -1) {
	            tmp[fields[len]] = lines[i].split(':')[1].trim()
	            len += 1;
	        } else {
	            if (tmp['name'] != null && tmp['model'] != null && tmp['vendor'] != null && tmp['mac_address'] != null && tmp['status'] != null) {
	                var node_nic = node_nics[tmp.name] || [];
	                node_nic.forEach(function (type) {
	                    if (type.family == 'IPv4') {
	                        tmp.ip_address = type.address;
	                        tmp.ip_gateway = "http://"+type.address.split('.')[0] + "." + type.address.split('.')[1] + "." + type.address.split('.')[2] + ".1"
	                    }
	                });
	                connections.push(tmp);
	                tmp = {}
	                len = 0;
	            }
	        }
	    }
    console.log(connections)
})

2.不使用依赖库,设置系统编码语言获取

var cluster = require('child_process')

cluster.exec("cmd /c chcp 65001>nul && netsh wlan show interface",  (err, res) => {
	    var node_nics = require("os").networkInterfaces();
		var lines = res.split('\r\n');
	    var fields = [
	        'name',
	        'model',
	        'vendor',
	        'mac_address',
	        'status',
	        'ssid',
	        'bssid',
	        'mode',
	        'radio',
	        'authentication',
	        'encryption',
	        'connection',
	        'channel',
	        'reception',
	        'transmission',
	        'signal',
	        'profil'
	];
	   var connections = [];
	    var tmp = {}
	    var len = 0;
	    for (var i = 3; i < lines.length; i++) {
	        if (lines[i] != "" && lines[i] != null && lines[i].indexOf(":") != -1) {
	            tmp[fields[len]] = lines[i].split(':')[1].trim()
	            len += 1;
	        } else {
	            if (tmp['name'] != null && tmp['model'] != null && tmp['vendor'] != null && tmp['mac_address'] != null && tmp['status'] != null) {
	                var node_nic = node_nics[tmp.name] || [];
	                node_nic.forEach(function (type) {
	                    if (type.family == 'IPv4') {
	                        tmp.ip_address = type.address;
	                        tmp.ip_gateway = "http://"+type.address.split('.')[0] + "." + type.address.split('.')[1] + "." + type.address.split('.')[2] + ".1"
	                    }
	                });
	                connections.push(tmp);
	                tmp = {}
	                len = 0;
	            }
	        }
	    }
	})

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值