tauri获取本机IP及出网IP

2024-06-10 22:17:12

tauri中获取本机IP及公网IP的方法

# 背景

最近使用tauri开发的一款工具中需要根据网络环境判断限制软件功能的使用,记录下如何获取IP来判断是不是处在特定网络。

# 实现方式

通过tauricommand来获取本机IP,前端使用tauriapi获取公网IP

# 参考代码

主程序 src-tauri/src/main.rs 输入如下参考代码:

  1. 定义一个函数get_local_ip用于获取本机IP

use std::net::TcpStream;
use std::net::IpAddr;

#[tauri::command]
fn get_ip() -> String {
    let local_ip = get_local_ip().unwrap();
    format!("{}", local_ip)
}

fn get_local_ip() -> Result<IpAddr, Box<dyn std::error::Error>> {
    let socket = std::net::UdpSocket::bind("0.0.0.0:0")?;
    socket.connect("8.8.8.8:80")?;
    let local_ip = socket.local_addr()?.ip();
    Ok(local_ip)
}
  1. main函数中注册调用该函数的命令:

fn main() {
    tauri::Builder::default()
        .invoke_handler(tauri::generate_handler![get_ip])
        .run(tauri::generate_context!())
        .expect("error while running tauri application");
}
  1. 在前端页面调用该命令获取本机IP:

const localIp = ref("");

async function getIp() {
  localIp.value = await invoke("get_ip");
}
  1. 在页面中引入taurihttp,请求第三方接口获取出网IP。

import { http } from "@tauri-apps/api";

const outerIp = ref("");

async function getOuterIp() {
  return await http.fetch('https://ifconfig.me/ip', {
    method: "get",
    responseType: 2,
  });
}

let ipRes = await getOuterIp()
outerIp.value = ipRes.data

然后我们就可以拿到本机IP及公网IP了。

# 参考资料

本文链接:
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-ND 3.0 许可协议。可自由转载、引用,但需署名作者且注明文章出处。如转载至微信公众号,请在文末添加作者公众号二维码。

扫描下方二维码阅读当前文章

浏览器、微信扫码

评 论:

好文推荐
每天进步一点点~