#dns-server #async-dns #dns #no-alloc #portal #ip-address #networking

无 std edge-captive

异步 + 无 std + 无分配实现 Captive Portal DNS

3 个版本 (破坏性更新)

0.2.0 2024年2月1日
0.1.0 2024年1月27日
0.0.0 2023年11月22日

嵌入式开发 中排名 2020

Download history 39/week @ 2024-04-29 39/week @ 2024-05-06 5/week @ 2024-05-20 4/week @ 2024-05-27 4/week @ 2024-06-03 1/week @ 2024-06-10 17/week @ 2024-07-08 3/week @ 2024-07-15 17/week @ 2024-07-22 44/week @ 2024-07-29

每月下载 81
用于 edge-net

MIT/Apache 许可证

10KB
代码行数 202 行(不包括注释)

edge-captive

CI crates.io Documentation

异步 + 无 std + 无分配实现 Captive Portal DNS(即解析每个域名到固定 IP 地址的 DNS 服务器)。

该实现基于出色的 domain 库。

有关其他协议,请参阅 edge-net 聚合软件包的文档。

示例

use core::time::Duration;

use edge_captive::io::run;

use embedded_nal_async::{IpAddr, Ipv4Addr, SocketAddr};

use log::*;

fn main() {
    env_logger::init_from_env(
        env_logger::Env::default().filter_or(env_logger::DEFAULT_FILTER_ENV, "info"),
    );

    let stack = edge_std_nal_async::Stack::new();

    let mut tx_buf = [0; 1500];
    let mut rx_buf = [0; 1500];

    info!("Running Captive Portal DNS on UDP port 8853...");

    futures_lite::future::block_on(run(
        &stack,
        // Can't use DEFAULT_SOCKET because it uses DNS port 53 which needs root
        SocketAddr::new(IpAddr::V4(Ipv4Addr::UNSPECIFIED), 8853),
        &mut tx_buf,
        &mut rx_buf,
        Ipv4Addr::new(192, 168, 0, 1),
        Duration::from_secs(60),
    ))
    .unwrap();
}

依赖项

约 4MB
约 78K SLoC