Rust 服务器查询工具
下面是一个使用 Rust 和 Tauri 构建的简单服务器查询工具,可以通过域名查询服务器的 IP 地址和相关信息。
思路分析
1、使用 Tauri 创建桌面应用界面
2、通过 Rust 的后端代码执行网络查询
3、使用std::net::ToSocketAddrs
进行 DNS 解析
4、添加简单的 GUI 界面让用户输入域名并查看结果
代码实现
在Cargo.toml
中添加依赖:
[dependencies] serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" tauri = { version = "1.0", features = ["api-all"] }
下面是完整的 Rust 代码:
use serde::{Deserialize, Serialize}; use std::net::ToSocketAddrs; use tauri::Window; // 前端传递的查询参数 #[derive(Deserialize)] struct QueryRequest { domain: String, } // 返回给前端的响应 #[derive(Serialize)] struct QueryResponse { success: bool, ips: Vec<String>, error: Option<String>, } // 执行服务器查询的函数 #[tauri::command] fn query_server(window: Window, request: QueryRequest) -> QueryResponse { println!("查询域名: {}", request.domain); // 尝试解析域名 let socket_addrs = format!("{}:0", request.domain).to_socket_addrs(); match socket_addrs { Ok(addrs) => { let ips: Vec<String> = addrs .map(|addr| addr.ip().to_string()) .collect(); QueryResponse { success: true, ips, error: None, } } Err(e) => QueryResponse { success: false, ips: Vec::new(), error: Some(format!("解析失败: {}", e)), }, } } fn main() { tauri::Builder::default() .invoke_handler(tauri::generate_handler![query_server]) .run(tauri::generate_context!()) .expect("运行 Tauri 应用时出错"); }
前端界面 (HTML + JS)
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>服务器查询工具</title> <style> body { font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; max-width: 600px; margin: 0 auto; padding: 20px; background-color: #f5f5f5; color: #333; } h1 { text-align: center; color: #2c3e50; } .input-group { display: flex; margin-bottom: 20px; } input { flex: 1; padding: 10px; border: 1px solid #ddd; border-radius: 4px 0 0 4px; font-size: 16px; } button { padding: 10px 20px; background-color: #3498db; color: white; border: none; border-radius: 0 4px 4px 0; cursor: pointer; font-size: 16px; } button:hover { background-color: #2980b9; } .result { background-color: white; padding: 15px; border-radius: 4px; box-shadow: 0 2px 4px rgba(0,0,0,0.1); } .ip-list { list-style-type: none; padding: 0; } .ip-list li { padding: 8px; border-bottom: 1px solid #eee; } .ip-list li:last-child { border-bottom: none; } .error { color: #e74c3c; padding: 10px; background-color: #fadbd8; border-radius: 4px; } </style> </head> <body> <h1>服务器查询工具</h1> <div class="input-group"> <input type="text" id="domainInput" placeholder="输入域名 ( example.com)" /> <button id="queryButton">查询</button> </div> <div id="resultContainer" class="result" style="display: none;"> <h3>查询结果:</h3> <ul id="ipList" class="ip-list"></ul> <div id="errorMessage" class="error" style="display: none;"></div> </div> <script> const { invoke } = window.__TAURI__.invoke; document.getElementById('queryButton').addEventListener('click', async () => { const domain = document.getElementById('domainInput').value.trim(); if (!domain) { alert('请输入域名'); return; } try { const response = await invoke('query_server', { request: { domain } }); const resultContainer = document.getElementById('resultContainer'); const ipList = document.getElementById('ipList'); const errorMessage = document.getElementById('errorMessage'); resultContainer.style.display = 'block'; errorMessage.style.display = 'none'; ipList.innerHTML = ''; if (response.success) { if (response.ips.length === 0) { ipList.innerHTML = '<li>未找到IP地址</li>'; } else { response.ips.forEach(ip => { const li = document.createElement('li'); li.textContent = ip; ipList.appendChild(li); }); } } else { errorMessage.style.display = 'block'; errorMessage.textContent = response.error; } } catch (error) { console.error('查询失败:', error); alert('查询失败: ' + error); } }); // 支持按回车键触发查询 document.getElementById('domainInput').addEventListener('keypress', (e) => { if (e.key === 'Enter') { document.getElementById('queryButton').click(); } }); </script> </body> </html>
使用说明
1、确保已安装 Rust 和 Tauri 的开发环境
2、将上述代码保存到相应文件
3、运行tauri dev
启动应用
4、在输入框中输入域名并点击查询按钮
5、应用将显示该域名解析出的所有 IP 地址
注意事项
- 这个应用只提供基本的 DNS 解析功能
- 某些服务器可能配置了多个 IP 地址(IPv4 和 IPv6)
- 复杂的网络环境可能会影响查询结果
这个示例展示了如何使用 Rust 和 Tauri 创建一个简单的桌面应用程序来查询服务器的 IP 地址,您可以根据需要扩展功能,例如添加端口扫描、HTTP 请求测试等功能。
文章摘自:https://idc.huochengrm.cn/fwq/15853.html
评论