19 个版本

0.9.2 2024年4月14日
0.9.0 2022年11月19日
0.8.0 2022年5月24日
0.7.7 2021年12月14日
0.3.0 2020年11月22日

#605 in 命令行工具

MIT/Apache 许可

18KB
136

connchk

关于

connchk 是一个用 Rust 编写的命令行网络验证工具。它旨在提供一个跨平台的工具,可以验证您的宿主是否能够访问在 TOML 文档中定义的目标。以下是对这些宿主的检查方式:

  • 对于纯 TCP 宿主,打开 TcpStream 或返回相关错误
  • 对于 HTTP(S) 宿主,有以下两种情况:
    • 基本检查如果返回状态码 200 则声明成功
    • 自定义检查基于用户定义的状态码,针对表单编码数据的 POST 进行声明
      • JSON 主体
    • 在任意情况下,都会将错误返回给用户

应用程序期望正好一个参数,即定义目标宿主的 TOML 文档。

从版本 0.5.0 开始,也可以将 connchk 作为 Rust 库使用。文档可在 此处 查找。

安装

要获取 connchk,请在已安装 Cargo 的系统上运行 cargo install connchk

示例 TOML 配置

# example.toml
[[target]]
kind = "Tcp"
desc = "GitLab SSH"
addr = "gitlab.com:22"

[[target]]
kind = "Tcp"
desc = "Freenode IRC"
addr = "irc.freenode.net:6667"

[[target]]
kind = "Tcp"
desc = "httpbin IP endpoint"
addr = "https://httpbin.org/ip"

# Posts as a form and reports success if the status code returned is 400
# which it will be for this bad request to this particular endpoint
[[target]]
kind = "Http"
desc = "httpbin POST endpoint (form)"
addr = "https://httpbin.org/status/undefined"
custom = { params = { someKey = "SpecialValue" }, ok = 400 } 

# Posts as JSON and reports success if the status code returned is 400
# as it will be for this particular endpoint
[[target]]
kind = "Http"
desc = "httpbin JSON endpoint"
addr = "https://httpbin.org/status/400"
custom = { json = { someKey = "SpecialValue" }, ok = 400 } 

# An example failure - this endpoing will return a 502 status code,
# but our configuration expects a 400 
[[target]]
kind = "Http"
desc = "httpbin JSON endpoint - Error"
addr = "https://httpbin.org/status/502"
custom = { json = { someKey = [3, "AnotherValue", false], anotherKey = { nested = "value", count = [1, 2, 3] } }, ok = 400 } 

示例用法

$ ./connchk example.toml 
Successfully connected to GitLab SSH in 72ms
Successfully connected to Freenode IRC in 176ms
Successfully connected to httpbin IP endpoint in 648ms
Successfully connected to httpbin POST endpoint (form) in 666ms
Successfully connected to httpbin JSON endpoint in 647ms
Failed to connect to httpbin JSON endpoint - Error with: 
        Status: 502
        Details:

JSON 主体

配置文件的 TOML 结构与 JSON 之间的映射非常干净。定义 JSON 主体应该与以下类似:custom = { json = <Your JSON Here> }。虽然已经对这种情况进行了合理的测试,但不太可能探索所有可能性,所以如果在使用过程中遇到问题,请告知

主要变更

  • v0.9.0 将参数解析升级到 clap v4.x。
  • v0.8.0 将参数解析升级到 clap v3.x。
  • v0.7.0
    • 将项目改为 Apache 2.0 / MIT 双重许可。
    • clap添加了依赖项以进行参数解析。
  • v0.6.0
    • 重构了TcpResourceHttpResource结构体,使用ResType枚举区分不同的Resource类型。
    • 添加了Resource.kind来存储ResType变体。
    • 修改了NetworkResources,使其在NetworkResources.target中持有Vec<Resources>
    • 以上更改与所有现有配置文件都是不兼容的。用户应
      • 将所有[[http]][[tcp]]行替换为[[target]]
      • 在之前以[[http]]开始的任何块中添加kind = "Http"
      • 在之前以[[tcp]]开始的任何块中添加kind = "Tcp"
    • 更新了Cargo.toml和Cargo.lock中的依赖项
    • 将调用延迟添加到成功输出
    • 更新逻辑以在打印结果时保持资源顺序
  • v0.5.0
    • 重构以生成二进制和库crate
    • 创建了一个通用的Resource结构体,将TcpResourceHttpResources映射到由rayonpar_iter()消费
    • 成功或失败消息的显示顺序可能与TOML输入文件中定义的顺序不一致
  • v0.4.0
    • 添加了对rayon的使用以支持并行连接执行
  • v0.3.0
    • 添加了对JSON请求体的支持。
    • 删除了“不良”状态码的声明。自定义测试仅定义预期的良好状态码。
  • v0.2.1修复了错误处理,使测试不会在第一次失败时终止
  • v0.2.0禁用了默认的reqwest功能,以将包移动到使用rustls而不是native-tls

许可协议

根据您的选择,许可协议为以下之一

贡献

除非您明确声明,否则根据Apache-2.0许可协议定义,您提交的任何旨在包含在作品中的贡献,都将按上述方式双重许可,无需任何附加条款或条件。

版权所有(C) 2020-2024 安东尼·马丁内斯

依赖项

~6–18MB
~271K SLoC