Rust操作系统信息库os-id的使用,os-id提供跨平台获取系统标识和硬件信息的轻量级解决方案

Rust操作系统信息库os-id的使用

os-id是一个提供跨平台获取系统标识和硬件信息的轻量级Rust库。

特性

  • process - 启用进程模块 (默认开启)
  • thread - 启用线程模块 (默认开启)

安装

在Cargo.toml中添加以下依赖:

os-id = "3.1.0"

或者运行以下命令:

cargo add os-id

使用示例

use os_id;

fn main() {
    // 获取操作系统ID
    let os_id = os_id::get();
    println!("操作系统ID: {:?}", os_id);

    // 获取进程ID
    #[cfg(feature = "process")]
    {
        let pid = os_id::process::id();
        println!("当前进程ID: {}", pid);
    }

    // 获取线程ID
    #[cfg(feature = "thread")]
    {
        let tid = os_id::thread::id();
        println!("当前线程ID: {:?}", tid);
    }
}

完整示例代码

// 引入os-id库
use os_id;

fn main() {
    // 示例1:获取操作系统信息
    let os_id = os_id::get();
    println!("操作系统ID: {:?}", os_id);
    
    // 示例2:获取进程ID(需要启用process特性)
    #[cfg(feature = "process")]
    {
        let pid = os_id::process::id();
        println!("当前进程ID: {}", pid);
        
        // 获取父进程ID
        let ppid = os_id::process::parent_id();
        println!("父进程ID: {}", ppid);
    }

    // 示例3:获取线程ID(需要启用thread特性)
    #[cfg(feature = "thread")]
    {
        let tid = os_id::thread::id();
        println!("当前线程ID: {:?}", tid);
        
        // 获取线程名称
        let tname = os_id::thread::name();
        println!("线程名称: {:?}", tname);
    }

    // 示例4:获取硬件信息
    let hw_id = os_id::hardware::id();
    println!("硬件ID: {:?}", hw_id);
}

许可证

BSL-1.0

文档

更多详细使用方法请参考官方文档。


1 回复

Rust操作系统信息库os-id的使用指南

os-id是一个轻量级的Rust库,用于跨平台获取系统标识和硬件信息。它提供了简单易用的API来获取操作系统和硬件相关的标识信息。

主要特性

  • 跨平台支持(Windows, Linux, macOS等)
  • 获取系统唯一标识符
  • 获取硬件相关信息
  • 轻量级且高效
  • 无需特殊权限

安装方法

在Cargo.toml中添加依赖:

[dependencies]
os-id = "0.1"

基本使用方法

获取系统ID

use os_id::get_system_id;

fn main() {
    match get_system_id() {
        Ok(id) => println!("System ID: {}", id),
        Err(e) => eprintln!("Failed to get system ID: {}", e),
    }
}

获取平台信息

use os_id::get_platform_info;

fn main() {
    let info = get_platform_info();
    println!("OS Type: {}", info.os_type);
    println!("OS Version: {}", info.os_version);
    println!("Hardware ID: {}", info.hardware_id);
}

高级用法

自定义哈希算法

use os_id::{get_raw_system_info, SystemInfoHasher};

fn main() {
    let raw_info = get_raw_system_info().unwrap();
    
    // 使用自定义哈希器
    let mut hasher = SystemInfoHasher::new();
    hasher.update(&raw_info);
    let custom_id = hasher.finalize();
    
    println!("Custom System ID: {}", custom_id);
}

获取详细硬件信息

use os_id::get_hardware_info;

fn main() {
    let hw_info = get_hardware_info().unwrap();
    println!("CPU Info: {:?}", hw_info.cpu);
    println!("Memory Info: {:?}", hw_info.memory);
    println!("Disk Info: {:?}", hw_info.disks);
}

使用场景

  1. 软件授权:生成基于硬件的唯一许可证密钥
  2. 设备识别:在分布式系统中唯一标识设备
  3. 系统监控:跟踪系统配置变化
  4. 数据分析:收集匿名设备统计信息

注意事项

  • 系统ID可能会在硬件配置发生重大变化时改变
  • 某些信息可能需要管理员/root权限才能获取
  • 不同平台返回的信息详细程度可能不同

完整示例代码

下面是一个综合使用os-id库的完整示例:

use os_id::{get_system_id, get_platform_info, get_hardware_info};

fn main() {
    // 1. 获取系统ID
    match get_system_id() {
        Ok(id) => println!("[1] System ID: {}", id),
        Err(e) => eprintln!("[1] Failed to get system ID: {}", e),
    }

    // 2. 获取平台信息
    let platform = get_platform_info();
    println!("\n[2] Platform Info:");
    println!("OS Type: {}", platform.os_type);
    println!("OS Version: {}", platform.os_version);
    println!("Hardware ID: {}", platform.hardware_id);

    // 3. 获取硬件信息
    if let Ok(hardware) = get_hardware_info() {
        println!("\n[3] Hardware Info:");
        println!("CPU: {:?}", hardware.cpu);
        println!("Memory: {:?}", hardware.memory);
        println!("Disks: {:?}", hardware.disks);
    } else {
        eprintln!("\n[3] Failed to get hardware info");
    }

    // 4. 生成设备指纹
    println!("\n[4] Device Fingerprint: {}", generate_device_fingerprint());
}

fn generate_device_fingerprint() -> String {
    let platform = get_platform_info();
    let hardware = get_hardware_info().unwrap_or_default();
    
    format!(
        "{}-{}-{}-{}",
        platform.os_type,
        platform.os_version,
        hardware.cpu.model,
        hardware.memory.total
    )
}

这个完整示例演示了如何:

  1. 获取系统唯一ID
  2. 获取平台基本信息
  3. 获取详细的硬件信息
  4. 生成一个简单的设备指纹

您可以根据实际需求选择使用其中的部分功能或全部功能。

回到顶部