electron 获取本机 ip 地址

1. 主进程代码

在主进程中,使用 `os` 模块获取本机 IP 地址,并通过 `ipcMain` 将结果发送给渲染进程。

javascript 复制代码
// main.js

const { app, BrowserWindow, ipcMain } = require("electron");

const os = require("os");


function createWindow() {

  const win = new BrowserWindow({

    width: 800,

    height: 600,

    webPreferences: {

      nodeIntegration: true,

      contextBridge: true,

    },

  });

  win.loadFile("index.html");

}



app.whenReady().then(() => {

  createWindow();



  app.on("activate", () => {

    if (BrowserWindow.getAllWindows().length === 0) {

      createWindow();

    }

  });

});

// 获取本机 IP 地址的函数

function getLocalIP() {

  let interfaces = os.networkInterfaces();

  for (let devName in interfaces) {

    let iface = interfaces[devName];

    for (let i = 0; i < iface.length; i++) {

      let alias = iface[i];

      if (

        alias.family === "IPv4" &&

        alias.address !== "127.0.0.1" &&

        !alias.internal

      ) {

        return alias.address;

      }

    }

  }

}

// 监听渲染进程的请求

ipcMain.on("get-ip-address", (event) => {

  const localIP = getLocalIP();

  event.reply("ip-address", localIP);

});

2. 渲染进程代码

在渲染进程中,使用 `ipcRenderer` 向主进程发送请求,并接收主进程返回的 IP 地址。

javascript 复制代码
<!-- index.html -->

<!DOCTYPE html>

<html lang="en">

  <head>

    <meta charset="UTF-8" />

    <title>Electron IP Address</title>

  </head>

  <body>

    <button id="get-ip">获取本机 IP 地址</button>

    <p id="ip-address"></p>

    <script>

      const { ipcRenderer } = require("electron");

      const getIpButton = document.getElementById("get-ip");

      const ipAddressDisplay = document.getElementById("ip-address");



      getIpButton.onclick = () => {

        ipcRenderer.send("get-ip-address");

      };



      ipcRenderer.on("ip-address", (event, ip) => {

        ipAddressDisplay.textContent = ip;

      });

    </script>

  </body>

</html>
相关推荐
Chengbei117 分钟前
云安全漏洞挖掘SKILL、一站式云漏洞挖掘工具,支持S3爆破、IMDS探测、K8s检测与AK/SK权限利用
前端·人工智能·网络安全·云原生·容器·kubernetes·系统安全
不简说35 分钟前
JS 代码技巧 vol.9 — 20 个设计模式在真实项目里的应用
前端·javascript·github
CoderLiu39 分钟前
Agent 工程的下一层:为什么「把流程写成图」还不够,还需要 Graph Engineering
前端·人工智能·后端
勇往直前plus43 分钟前
Vue3(篇三) Element Plus
前端·javascript·typescript·vue
爱勇宝1 小时前
《道德经》第 8 章:真正高级的能力,像水一样成事
前端·后端·程序员
Revolution611 小时前
数组本身没有 map,为什么还能直接调用:原型链怎样查找属性
前端·javascript·面试
bonechips1 小时前
RAG实战(一):EPUB 加载、文本切割与向量入库
前端·数据库
swipe1 小时前
10|(前端转全栈)库存扣减为什么最容易出事故?SKU、并发与原子更新
前端·后端·全栈
cdcdhj1 小时前
vue3中的watchEffect()监听,什么时候监听,什么时候清理,什么时候停止
前端·javascript·vue.js
huabuyu1 小时前
几百 MB 的文件为什么等几分钟才能打开?文件分片下载与渐进预览原理
前端·javascript