2 个版本
0.1.1 | 2023 年 12 月 9 日 |
---|---|
0.1.0 | 2023 年 12 月 9 日 |
#2070 在 网络编程
用于 ishan
16KB
128 行
IP Extractor
这是一个简单的 crate,用于提取基于 Unix 系统的 IP 地址。它基本上是 ifconfig 命令的封装。
这是我第一个 crate,所以请多多包涵。
继续阅读以获取迷你文档,或者您可以前往 文档。
使用方法
use ip_extractor::find_network;
fn main() {
let networks = get_networks().unwrap();
networks.iter().for_each(|network| {
println!("{}", network);
});
}
工作原理和注意事项
这个 crate 实际上是 ifconfig 命令的封装。它运行该命令然后解析输出以获取 IP 地址。
解析是通过简单的分割算法完成的,所以不要期望它完美。然而,它应该适用于大多数情况。
此外,这个 crate 只在具有 ifconfig 命令的系统中工作。因此,它在 Windows 上无法工作。我的意思是,您可能可以用 WSL 或 Git Bash 来使用它,但我还没有测试过。所以如果这样做了,请告诉我。
有一个内部函数实际上执行命令并解析输出。然而,它没有暴露给用户。如果找不到 ifconfig 命令,这个函数就会失败。
迷你文档
这是一个只有 5 个主要功能的简单 crate。所以如果您有 Rust 编程知识,查看 文档 会非常容易。但是,如果您想要快速概述,这里是一个迷你文档。
Network
结构
Network
结构是一个简单的结构,旨在表示网络接口。截至版本 0.1.0
,它有 5 个字段。
pub struct Network {
pub name: String,
pub inet: String,
pub mac: String,
pub netmask: String,
pub broadcast: String,
}
如果您想知道,网络接口的 IP 存储在 inet
字段中。
这个结构仅用于表示,因此它没有方法。顺便说一下,它实现了 Display
特性,因此您可以直接打印它。
get_networks
函数
这是crate的主要函数。它返回一个 Vec<Network>
,这是一个包含系统上所有网络接口的向量。
请注意,它直接返回网络,所以你可以这样使用
签名:
get_networks() -> Vec<Network>
get_networks().iter().for_each(|network| {
println!("{}", network);
});
find_network
函数
这是一个模糊搜索网络接口的函数。它接受一个 &str
作为参数,并返回一个 Option<Network>
。
签名:
find_network(&str) -> Option<Network>
use ip_extractor::{find_network, Network};
let network = find_network("wlan");
match network {
Some(network) => println!("{:?}", network),
None => println!("No network found."),
}
parse_network
函数
这是一个内部函数,用于解析 ifconfig
命令的输出。它接受一个 &str
作为参数,并返回一个 Network
。
解析是通过简单的分割算法完成的,所以不要期望它完美。然而,它应该适用于大多数情况。
签名:
parse_network(&str) -> Network
use ip_extractor::parse_network;
let network = parse_network("wlp2s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet
inet6
ether
");
println!("{:?}", network);
get_wlan
函数
这是一个获取系统上所有无线网络的方法。大多数基于Unix的系统使用wlan或wlp作为无线网络接口的前缀。
因此,这个方法基本上是对get_networks方法的迭代器过滤器,用于找到它们。你也可以传递一个可选的标识符来模糊匹配无线网络接口的名称。
签名:
get_wlan(Optional<&str>) -> Vec<Network>
use ip_extractor::{get_wlan, Network};
let networks = get_wlan(None);
for network in networks {
println!("{:?}", network);
}
let networks = get_wlan(Some("wlp"));
for network in networks {
println!("{:?}", network);
}
get_ethernet
函数
这个函数与 get_wlan
函数类似,但它是用于以太网网络接口。以太网网络接口的前缀通常是eth或enp。
签名:
get_ethernet(Optional<&str>) -> Vec<Network>
use ip_extractor::{get_ethernet, Network};
let networks = get_ethernet(None);
for network in networks {
println!("{:?}", network);
}
let networks = get_ethernet(Some("enp"));
for network in networks {
println!("{:?}", network);
}
注意:
get_wlan
和get_ethernet
函数只是get_networks
函数的迭代器。所以如果你想的话,可以直接使用get_networks
函数。
贡献
如果你想为这个crate做出贡献,你可以通过打开一个issue或pull request来做到。我会非常感激。
许可证
这个crate是在MIT许可证下授权的。你可以在这里阅读许可证。所以,基本上,只要你所使用的东西是合法的,你就可以使用它(至少,我认为这就是它的意思)。