【问题标题】:How to get MAC-address in Rust?如何在 Rust 中获取 MAC 地址?
【发布时间】:2014-10-13 18:31:57
【问题描述】:

如何获取第一张网卡的hwaddr

以及如何列出所有接口?

【问题讨论】:

  • 你想在什么平台上做这个?我不相信有任何跨平台库可以做到这一点。
  • 例如在python中你可以这样做:from uuid import getnode; print getnode()是的,这是跨平台的方法。
  • @Brian,在第一行我需要在 linux 上做。在 RaspberryPi 上 ArchLinux 的第一行。
  • github.com/dlevy47/rust-interfaces 每晚工作,可能做你想做的事

标签: network-programming hardware rust mac-address


【解决方案1】:

在类 Unix 操作系统上,/sys/class/net/ 包含指向您机器上可用接口的符号链接,并且接口的 MAC 地址写入类似/sys/class/net/eth0/address 的文件中

在 Windows 上,我猜你必须解析像 ipconfig 这样的外部命令的输出来获取你想要的信息。

演示:

use std::fs;
use std::io::Read;
use std::path::Path;

fn main() {
    let net = Path::new("/sys/class/net");
    let entry = fs::read_dir(net).expect("Error");
    // a bit cubersome :/
    let ifaces = entry.filter_map(|p| p.ok())
                      .map(|p| p.path().file_name().expect("Error").to_os_string())
                      .filter_map(|s| s.into_string().ok())
                      .collect::<Vec<String>>();
    println!("Available interfaces: {:?}", ifaces);


    let iface = net.join(ifaces[0].as_str()).join("address");
    let mut f = fs::File::open(iface).expect("Failed");
    let mut macaddr = String::new();
    f.read_to_string(&mut macaddr).expect("Error");
    println!("MAC address: {}", macaddr);
}

【讨论】:

  • 您的第一句话是错误的:在 Linux 上,您可以使用/sys,或者更具体地说,在带有sysfs的系统上, Linux 是其中之一。例如,BSD 或 Mac 没有sysfs,因此无法访问/sys
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-07-24
  • 1970-01-01
  • 2019-07-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多