compassd / dcompass

A high-performance programmable DNS component aiming at robustness, speed, and flexibility
GNU General Public License v3.0
283 stars 23 forks source link

如何获取请求中的 Client Subnet? #99

Open killbus opened 7 months ago

killbus commented 7 months ago

version: build-20230216_1021

不懂 rust,一边读源码一边问 chatbots,没头绪了。

以下是一些不成熟的尝试:

    let client_subnet = ClientSubnet::new(u8(15), u8(0), IpAddr::from_str("23.62.93.233")?);
    println(client_subnet.addr.to_str());
    ////query.push_opt(client_subnet.to_opt_data())?;
    //if let AllOptData::ClientSubnet(subnet) = client_subnet.to_opt_data() {
    //  dbg(subnet);
    //}
    let opt_records = query.options?;
    for opt in opt_records.into_iter() {
      dbg(opt);
      //if let AllOptData::ClientSubnet(subnet) = opt {
      //  dbg(subnet);
      //}
    }
LEXUGE commented 7 months ago

我最近几个月很忙,可能暂时不能给你完整的代码,我抽空会回复你。

你可以看一下 domain 这个 rust 库的相关 type (AllOptData 等) 的方法,因为在这里所有的方法几乎都是还原了这个库的。你也可以看看 runescript 的文档,我不太确定能不能做 if let 这样的模式匹配

我实现的相关的代码在 https://github.com/compassd/dcompass/tree/main/droute/src/router/script/rune_scripting