#dns-lookup #dns #spf #domain #dns-records #smtp

viaspf

发送者策略框架(SPF)规范的实现

27 个版本

0.7.0-alpha.22024 年 5 月 6 日
0.7.0-alpha.12023 年 11 月 28 日
0.6.0 2023 年 9 月 12 日
0.6.0-alpha.12023 年 7 月 12 日
0.0.2 2020 年 7 月 4 日

#97电子邮件

Download history 265/week @ 2024-04-29 250/week @ 2024-05-06 279/week @ 2024-05-13 215/week @ 2024-05-20 372/week @ 2024-05-27 469/week @ 2024-06-03 227/week @ 2024-06-10 352/week @ 2024-06-17 310/week @ 2024-06-24 105/week @ 2024-07-01 94/week @ 2024-07-08 103/week @ 2024-07-15 25/week @ 2024-07-22 94/week @ 2024-07-29 30/week @ 2024-08-05 49/week @ 2024-08-12

每月 204 次下载
17 个 crates(4 个直接) 中使用

GPL-3.0-or-later

230KB
4.5K SLoC

viaspf

viaspf 库包含 发送者策略框架(SPF)规范,版本 1 的完整实现,如 RFC 7208 中所述。它提供了一个异步 API,用于根据规范检查电子邮件发送者的授权。

该库实现了 SPF 协议的核心,但它不直接依赖于 DNS 解析器。相反,该库的用户可以提供 DNS 查询 trait 的实现,并自行选择使用哪个 DNS 解析器来实现他们的 SPF 验证器应用程序。

实现使用 Tokio,但仅用于超时逻辑。如果需要,可以通过切换某些 Cargo 功能来使用不同的异步运行时来驱动库。

该库是在“清洁室”环境中创建的。它是从头开始的,仅参考 RFC,并严格遵循它。广泛的检查确保正确性和符合 RFC 7208。

最低支持的 Rust 版本是 1.67.0。

使用方法

这是一个 Rust 库。像往常一样在 Cargo.toml 中包含 viaspf。为了方便使用,您可能希望启用功能 hickory-resolver;请参阅以下内容。

viaspf 库的主要目的是 SPF 验证,即检查发送主机是否根据已发布的 SPF 策略有权使用某个邮件域。提供 evaluate_sender 作为主要 API 项目。

use std::net::IpAddr;
use viaspf::*;

let config = Default::default();
let ip = IpAddr::from([1, 2, 3, 4]);
let mail_from = "[email protected]";

let spf_result = match mail_from.parse() {
    Ok(sender) => {
        evaluate_sender(&resolver, &config, ip, &sender, None)
            .await
            .spf_result
    }
    _ => SpfResult::None,
};

assert_eq!(spf_result, SpfResult::Pass);

上面的示例很简单。它演示了检查 amy@example.org 的 MAIL FROM 身份。

第一个参数 resolver 需要简要解释。虽然 viaspf 包含了 SPF 协议的完整实现,但它自身并不包含 DNS 解析功能。相反,DNS 解析被抽象成 Lookup 特性,因此是“可插拔”的。使用您选择的解析器来实现此特性,以控制如何进行 DNS 查询。

为了方便,可以启用 Cargo 功能 hickory-resolver,以便为 Hickory DNS 解析器提供 Lookup 的实现。

有关详细信息,请参阅 API 文档

示例

包含一个简单的 SPF 验证器作为可执行示例:命令行工具 spfquery。此程序使用 Hickory DNS 解析器执行 DNS 查询。

将 IP 地址和域名作为参数传递给 spfquery。然后评估查询,并打印出结果和跟踪信息。

cargo run --features hickory-resolver \
  --example spfquery -- 35.190.247.12 example.com
IP: 35.190.247.12
Domain: example.com
SPF result: pass
Mechanism: mx
Trace:
  executing SPF query for domain "example.com"
  looking up TXT records for "example.com"
  evaluating SPF record "v=spf1 mx -all"
  evaluating directive "mx"
  evaluating mechanism "mx"
  incrementing global lookup count
  using target name "example.com"
  looking up MX records for "example.com"
  trying MX name "mail.example.com"
  incrementing per-mechanism lookup count
  looking up A records for "mail.example.com"
  trying IP address 35.190.247.12
  mechanism matched
  evaluated directive to result "pass"
  evaluated SPF query to result "pass"

有关 viaspf 库的交互式使用,请参阅命令行工具 spftrace

许可

版权 © 2020–2024 David Bürgin

此程序是免费软件:您可以在自由软件基金会发布的 GNU 通用公共许可证的条款和条件下重新分发和/或修改它,许可证版本为 3,或者(根据您的选择)任何更高版本。

此程序的分发是希望它有用,但没有任何保证;甚至没有关于适销性或特定用途的隐含保证。有关详细信息,请参阅 GNU 通用公共许可证。

您应该已随此程序收到一份 GNU 通用公共许可证副本。如果没有,请参阅 https://www.gnu.org/licenses/

依赖关系

~1.1–8.5MB
~94K SLoC