Linux下NodeJS获取网卡IP地址等信息

centos7
/*
 *Linux 环境下获取网络接口信息
 */
 
//导入os模块
var os = require("os");
 
 
//获取系统的网络接口信息
var netInfo = os.networkInterfaces();
 
 
//ip地址
var ip = netInfo.eth0[0].address;
//子网掩码
var netMask = netInfo.eth0[0].netmask;
//协议族
var family = netInfo.eth0[0].family;
//Mac地址
var macAddr = netInfo.eth0[0].mac;
 
 
//验证
console.log("IP:"+ip);
console.log("NetMask:"+netMask);
console.log("Family:"+family);
console.log("Mac:"++macAddr);
Ubuntu18

//导入os模块
var os = require("os");
 
 
//获取系统的网络接口信息
var netInfo = os.networkInterfaces();
 
 
//ip地址
var ip = netInfo.enp3s0[0].address;
//子网掩码
var netMask = netInfo.enp3s0[0].netmask;
//协议族
var family = netInfo.enp3s0[0].family;
//Mac地址
var macAddr = netInfo.enp3s0[0].mac;
 
 
//验证
console.log("IP:"+ip);
console.log("NetMask:"+netMask);
console.log("Family:"+family);
console.log("Mac:"++macAddr);
读取多网卡IP地址
// 导入os模块
const os = require("os");
 
// 获取系统的网络接口信息
const netInfo = os.networkInterfaces();

// 获取所有网卡名称 
const netInfoNames = Object.keys(netInfo);

let ips = [];

// 循环获取所有网卡IPv4地址
netInfoNames.forEach(n => {
    netInfo[n].some(i => {
        if (i.family === 'IPv4') {
            return ips.push({ name: n, ip:i.address});
        }
    });
});

if (ips.length) {
    console.log(ips);
} else {
    console.log('网卡不存在');
}
<think>好的,用户现在的问题是在虚拟机上运行Node.js服务,然后从主机Windows访问这个服务,用户认为必须使用桥接模式,但之前我提到他的无线网卡可能不支持桥接,导致网络问题。他现在可能有点困惑,不确定是否必须桥接,或者有其他方法可以实现。 首先,我需要确认他的需求:在虚拟机里运行后端服务,主机访问。通常桥接确实可以让虚拟机获得同一局域网的独立IP,方便主机直接访问。但用户使用的是Intel AX201无线网卡,可能桥接有问题,导致之前的网络故障。他关闭虚拟机后主机无法访问外网,但微信能用,可能因为DNS问题或桥接导致的配置错误。 用户现在可能误解必须用桥接才能让主机访问虚拟机的服务。我需要解释还有其他方法,比如NAT端口转发或者Host-Only网络,这些方法不需要桥接,但同样可以实现主机访问虚拟机。另外,可能需要指导他如何在不同的网络模式下配置,比如设置NAT的端口转发规则,或者使用Host-Only加NAT的组合。 另外,用户可能对虚拟机的网络配置不太熟悉,需要给出具体的步骤,比如在VirtualBox或VMware中如何设置NAT端口转发。同时,可能需要验证他的虚拟机网络设置是否正确,服务是否监听正确接口,防火墙是否放行端口等。 还要考虑他是否尝试过桥接模式导致的问题,现在需要避免桥接,转而使用其他方法。可能需要分步骤说明不同的解决方案,并推荐最稳定可靠的方式,比如NAT端口转发,因为无线网卡桥接不稳定,而NAT则不会有这个问题。 最后,确保用户明白即使不用桥接也能实现需求,并给出具体的操作步骤,例如修改虚拟机网络设置为NAT,然后在设置中添加端口转发规则,将主机的某个端口转发到虚拟机的Node.js服务端口。同时,提醒他检查虚拟机内的防火墙设置,确保端口开放。根据</think>你的需求(在虚拟机中运行Node.js服务,主机Windows访问该服务),**无需强制使用桥接模式**。以下是详细解决方案: --- ### **一、核心需求分析** - **目标**:虚拟机运行Node.js服务(如监听 `192.168.1.100:3000`),主机通过浏览器访问 `http://[虚拟机IP]:3000`。 - **误区澄清**: 桥接模式(Bridged)只是让虚拟机获得与主机同一局域网的独立IP,但并非唯一方案。 **无线网卡桥接存在兼容性问题**(如前所述),可能导致主机网络异常,建议优先选择以下替代方案。 --- ### **二、替代桥接的三种方案(推荐优先级排序)** #### **方案1:NAT模式 + 端口转发(最稳定)** - **原理**: 虚拟机通过NAT共享主机IP,通过端口转发将主机的某个端口(如 `8888`)映射到虚拟机的服务端口(如 `3000`)。 **主机访问 `localhost:8888` 即可直达虚拟机服务**。 - **配置步骤**(以VirtualBox/VMware为例): **1. VirtualBox** 1. 虚拟机设置 → 网络 → 连接方式选择 **“NAT”**。 2. 进入 **“高级” → “端口转发”** → 添加规则: - 名称:任意(如 `NodeJS`) - 协议:TCP - 主机IP:`127.0.0.1`(仅限本机访问)或留空(允许外部访问) - 主机端口:`8888` - 虚拟机IP:留空(自动指向虚拟机) - 虚拟机端口:`3000` **2. VMware** 1. 虚拟机设置 → 网络适配器 → 选择 **“NAT模式”**。 2. 编辑 → 虚拟网络编辑器 → 选择NAT模式的网络 → **“NAT设置”** → 添加端口转发: - 主机端口:`8888` - 虚拟机IP地址:虚拟机内网IP(如 `192.168.xx.xx`) - 虚拟机端口:`3000` **3. 验证** - 虚拟机内启动Node.js服务: ```javascript const http = require('http'); http.createServer((req, res) => { res.end('Hello from VM!'); }).listen(3000, '0.0.0.0'); // 必须监听所有接口 ``` - 主机浏览器访问: ``` http://localhost:8888 # 直接访问 ``` #### **方案2:Host-Only模式(主机与虚拟机专属内网)** - **原理**: 创建仅主机和虚拟机之间的私有网络,虚拟机获得固定内网IP(如 `192.168.56.101`),主机可直接通过该IP访问服务。 -Only网络”**(可能需要先创建虚拟网卡)。 2. 虚拟机网络设置为 **“Host-Only”**。 3. 查看虚拟机IPLinux执行 `ip a`,Windows执行 `ipconfig`),假设为 `192.168.56.101`。 4. 主机浏览器访问 `http://192.168.56.101:3000`。 #### **方案3:共享网络(NAT + 虚拟网卡)** - **适用场景**: 需要虚拟机既能访问外网,又能被主机通过固定IP访问。 - **配置方法**: 1. VirtualBox中设置虚拟机为 **“NAT网络”**。 2. 编辑 → 虚拟网络编辑器 → 创建NAT网络 → 启用 **“端口转发”**(类似方案1)。 --- ### **三、桥接模式的替代验证(针对你的无线网卡)** - **临时修复桥接问题**: 若仍希望尝试桥接,可采取以下步骤: 1. 重启主机和路由器,确保IP分配正常。 2. 虚拟机设置桥接到无线网卡(如 `Intel AX201`)。 3. 虚拟机内手动分配与主机同一网段的IP(避免DHCP冲突): ```bash # Linux示例(Ubuntu) sudo nano /etc/netplan/00-installer-config.yaml # 添加配置: network: ethernets: enp0s3: dhcp4: no addresses: [192.168.1.150/24] # 替换为主机同网段IP gateway4: 192.168.1.1 nameservers: addresses: [8.8.8.8] sudo netplan apply ``` 4. 主机访问虚拟机的静态IP(如 `http://192.168.1.150:3000`)。 --- ### **四、关键注意事项** 1. **防火墙放行**: - 虚拟机内需放行服务端口(如3000): ```bash # Linux sudo ufw allow 3000/tcp # Windows New-NetFirewallRule -LocalPort 3000 -Action Allow ``` 2. **服务绑定地址**: Node.js需监听 `0.0.0.0`(而非 `127.0.0.1`),否则外部无法访问: ```javascript app.listen(3000, '0.0.0.0', () => { console.log('Server running on 0.0.0.0:3000'); }); ``` 3. **无线网卡桥接的稳定性**: 即使桥接成功,Intel AX201可能因驱动问题偶发断连,建议优先选择NAT端口转发。 --- ### **五、操作流程图** ``` [虚拟机网络配置] │ ├─→ NAT模式 + 端口转发 → 主机访问 localhost:映射端口 ←推荐 │ ├─→ Host-Only模式 → 主机访问虚拟机固定内网IP │ └─→ 桥接模式 → 虚拟机分配局域网IP → 主机通过该IP访问 (无线网卡可能不稳定) ``` --- ### **六、总结** - **最佳选择**:**NAT模式 + 端口转发**,无需依赖桥接,稳定性最高。 - **调试技巧**: - 虚拟机内执行 `curl localhost:3000` 确认服务是否正常。 - 主机执行 `telnet 虚拟机IP 3000` 测试端口连通性。 - **最终结论**:即使无线网卡不支持桥接,仍可通过其他方式实现主机与虚拟机通信。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值