5 releases (breaking)

new 0.4.0 Jan 2, 2025
0.3.0 Sep 10, 2024
0.2.0 Feb 1, 2024
0.1.0 Jan 27, 2024
0.0.0 Nov 22, 2023

#13 in #portal

Download history 23/week @ 2024-09-18 24/week @ 2024-09-25 13/week @ 2024-10-02 11/week @ 2024-10-09 4/week @ 2024-10-16 6/week @ 2024-10-30 9/week @ 2024-11-06 1/week @ 2024-11-13 4/week @ 2024-12-04 7/week @ 2024-12-11 167/week @ 2025-01-01

178 downloads per month
Used in edge-net

MIT/Apache

19KB
380 lines

edge-captive

CI crates.io Documentation

Async + no_std + no-alloc implementation of a Captive Portal DNS (i.e. a DNS server that resolves every domain name to a fixed IP address).

The implementation is based on the splendid domain library.

For other protocols, look at the edge-net aggregator crate documentation.

Example

use core::net::{IpAddr, Ipv4Addr, SocketAddr};
use core::time::Duration;

use edge_captive::io::run;

use log::*;

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

    let stack = edge_nal_std::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();
}

Dependencies

~4.5MB
~90K SLoC