在 Rust 中使用 pnet 獲取網絡接口
在這篇文章中,我們將探索如何使用 Rust 中的 pnet 庫查找和列出計算機上的網絡接口。
當你從事底層網絡編程任務 (如數據包捕獲或自定義數據包創建) 時,瞭解網絡接口是至關重要的。
通過 Cargo 創建一個新的 Rust 項目:
cargo new pnet_interface
在 Cargo.toml 文件中添加 pnet 依賴項:
[dependencies]
pnet = "0.34.0"
列出詳細的接口信息
use pnet::datalink;
fn main() {
let interfaces = datalink::interfaces();
for interface in interfaces {
println!("{:#?}", interface);
}
}
輸出如下:
NetworkInterface {
name: "lo",
description: "",
index: 1,
mac: Some(
00:00:00:00:00:00,
),
ips: [
V4(
Ipv4Network {
addr: 127.0.0.1,
prefix: 8,
},
),
V6(
Ipv6Network {
addr: ::1,
prefix: 128,
},
),
],
flags: 65609,
}
注意:flags 字段可以提供額外的信息,比如接口是否啓動、是否能夠廣播等等。它是位掩碼,需要參考特定於系統的文檔來解碼其含義。
列出名稱和索引
use pnet::datalink;
fn main() {
let interfaces = datalink::interfaces();
for interface in interfaces {
println!("{}: {}", interface.index, interface.name);
}
}
輸出如下:
1: lo
2: enp0s31f6
4: docker0
5: vmnet1
6: vmnet8
8: enx0a87c76ee9f1
注意:索引號可能並不是連續的,因爲它們是由系統生成的,可能是任意的。
我們可以使用迭代器實現更好的顯示:
use pnet::datalink;
fn main() {
println!("Available interfaces:");
let interfaces = datalink::interfaces();
for (index, interface) in interfaces.iter().enumerate() {
println!("{}: {}", index + 1, interface.name);
}
}
總結
在這篇文章中,我們介紹了在 Rust 中使用 pnet 庫列出網絡接口的要點。任何對網絡編程、數據包捕獲甚至網絡安全感興趣的人來說,這是一項基本技能。
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/GPlS-KS6Xbr3Obqx-fYgkg