tauri获取本机IP及出网IP

2024-09-19 13:48:42 浏览数 (2)

背景

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

实现方式

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

参考代码

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

  1. 定义一个函数get_local_ip用于获取本机IP
代码语言:rust复制
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函数中注册调用该函数的命令:
代码语言:rust复制
fn main() {
    tauri::Builder::default()
        .invoke_handler(tauri::generate_handler![get_ip])
        .run(tauri::generate_context!())
        .expect("error while running tauri application");
}
  1. 在前端页面调用该命令获取本机IP:
代码语言:js复制
const localIp = ref("");

async function getIp() {
  localIp.value = await invoke("get_ip");
}
  1. 在页面中引入taurihttp,请求第三方接口获取出网IP。
代码语言:js复制
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了。

参考资料

  • command 系统
  • tauri http client

0 人点赞