跳转到主要内容

一个简单的DNS-over-HTTPS客户端

项目描述

doih-cli

一个简单的命令行 DNS over HTTPS 客户端。

这是一个简单的DoH Python客户端(RFC 8484,GET),支持 纯文本(默认)和 json 输出。

安装

pip3 install doh-cli

升级

或通过以下方式升级到最新版本:

pip install --upgrade doh-cli

要求

它基于并已在Python 3上测试。

如果您想贡献,您可以克隆存储库并安装所有本地依赖项。

pip3 install .

用法

doh-cli libredns.gr A

帮助

doh-cli --help

支持的资源记录

  • A
  • AAAA
  • CNAME
  • MX
  • NS
  • SOA
  • SPF
  • SRV
  • TXT
  • CAA
  • DNSKEY
  • DS

支持的DoH提供商

DoH选项

  • libredns(默认)
  • libredns-ads(LibreDNS No-Trackers/Ads)
  • google
  • cloudflare
  • quad9
  • cleanbrowsing(阻止访问成人、色情和明确网站,也阻止VPN)
  • cleanbrowsing-secure(阻止访问钓鱼、恶意软件和恶意域名)
  • cleanbrowsing-adult(阻止访问所有成人、色情和明确网站)
  • cira(CIRA的加拿大盾)
  • cira-protect(恶意软件和钓鱼保护)
  • circa-family(拦截色情内容加受保护内容)
  • securedns
  • securedns-ads(拦截广告、恶意软件和钓鱼网站)

一些示例

IPv4

doh-cli libredns.gr A
116.202.176.26

json格式

doh-cli libredns.gr A --json
[{"Query": "libredns.gr.", "TTL": "366", "RR": "A", "Answer": "116.202.176.26"}]

您可以使用jq进行格式化、解析输出

doh-cli libredns.gr A --json | jq .
[
  {
    "Query": "libredns.gr.",
    "TTL": "54",
    "RR": "A",
    "Answer": "116.202.176.26"
  }
]

IPv6

doh-cli example.org AAAA

2606:2800:220:1:248:1893:25c8:1946
doh-cli example.org AAAA --json | jq .

[
  {
    "Query": "example.org.",
    "TTL": "45832",
    "RR": "AAAA",
    "Answer": [
      "2606:2800:220:1:248:1893:25c8:1946"
    ]
  }
]

CNAME

doh-cli www.libredns.gr CNAME --json | jq .
[
  {
    "Query": "www.libredns.gr.",
    "TTL": "600",
    "RR": "CNAME",
    "Answer": "libredns.gr."
  }
]

MX

doh-cli libreops.cc MX --json | jq .
[
  {
    "Query": "libreops.cc.",
    "TTL": "10794",
    "RR": "MX",
    "Answer": [
      "10",
      "spool.mail.gandi.net.",
      "libreops.cc.",
      "10794",
      "IN",
      "MX",
      "50",
      "fb.mail.gandi.net."
    ]
  }
]

CAA

doh-cli libredns.gr CAA --json
[{"Query": "libredns.gr.", "TTL": "590", "RR": "CAA", "Answer": ["0", "issue", "\"letsencrypt.org\""]}]

DNSKEY

DNS密钥记录DNSSEC中使用的密钥记录。使用与KEY记录相同的格式。

doh-cli DNSKEY nasa.gov

256 3 8 AwEAAd86yGbz2WUp4VqClb1svSW9oyx0 CQqCCGebNIEEqbXsF5PtCz225RKL3cDr mPHIeSETR6iUvfPSDiKquYearoLFmPjU 0q1AJJmrZIzl9rDgMx/c9OPJxBnhp196 ntJEaGySgXSoaXQEdUpm8lZzhkjftTfC X9mwDY2abxa3Vq3t
256 3 8 AwEAAa/Jh5zZ/apbhzIG6CEUT8LL+WNK +HuVLbFf/pxk5Q/Qmng08J1+24B5ObWK +lUNGHN/FYC0TVbbofeHHOLVS88CBmK9 Zu5RWqDicYYKFu8vra+MXEcwLc6E0fTf R9I/OAIWF6GScPHnkq8GoK2qau8gSD96 UsAw6mCsWEqdyqof
257 3 8 AwEAAbo7ImTCXl2KuV8NK+0zEvLC+OrN M0/6rT/kKZncFc0CqIIQwZUJtdurpvi3 mUFY0J6Pv394E2gu/OLOe+EcIRatjxSv KITBM+PJTJq0OtwsGtBQyu4uU8hS2SNE g1hEJVGHE5q5LWIAy01TBnibyGOyVJE4 N3M50ezp4E7DqEYG6WkhZQxLDjn0T4ex KPDqIkP+QUB6OwF2CWKtWtpPIpI1i9h9 OgIWUfXb3uLEgcnJlAYYAf9Jw35hPPDo FP+Zi9fJ4mQ0olm8gj4668QZoCJ57MDr 3p3Rntfw5Ca+AQVNwnaqcB7iUWHYPZP0 KLk7V02NloWXpwNHOA8O1TsOYtc=

DS

委派签名者用于识别委派区域DNSSEC签名密钥的记录

doh-cli nasa.gov DS --output=json | jq .

[
  {
    "Query": "nasa.gov.",
    "TTL": "3588",
    "RR": "DS",
    "Answer": [
      "41452",
      "8",
      "2",
      "7490b7f47af44d4c0bed3a7a2fefeb50cf55e3209e5a82e30a44f9d4aa9ae688"
    ]
  }
]
[
  {
    "Query": "nasa.gov.",
    "TTL": "3588",
    "RR": "DS",
    "Answer": [
      "41452",
      "8",
      "1",
      "83bb6c5ac559bbe1e8b17a98465145265a3cafc4"
    ]
  }
]

DNSSEC

使用--dnssec设置EDNS DO标志。然后响应将包含请求的记录集的DNSSEC签名。

doh-cli A nasa.gov --dnssec
52.0.14.116
23.22.39.120
8 2 600 20210325164559 20210223160609 6816 nasa.gov. HqVx19SOdF4Mx2+UZl7rhecv99zJdj07 86R7sAAXP2poG5QDa9zpYz7WXz/y2UtV HpMk+0gfb2SrxQ1p93+VWs0S2UxnwZQI 8qtwuB6/9780LVLa8ZHEDVZzdO1NAAx1 AfaaQ0FjoxErPipPBi4edvMSYjnvVhY+ 0baRH2i1syk=

普通输出

doh-cli libredns.gr A
116.202.176.26

详细输出

doh-cli libredns.gr A --verbose
116.202.176.26
Verbose: https://doh.libredns.gr/dns-query?dns=lSIBAAABAAAAAAAACGxpYnJlZG5zAmdyAAABAAE

调试

doh-cli test.libredns.gr A --debug
116.202.176.26
Debug:  id 24169
opcode QUERY
rcode NOERROR
flags QR RD RA
;QUESTION
test.libredns.gr. IN A
;ANSWER
test.libredns.gr. 3600 IN A 116.202.176.26
;AUTHORITY
libredns.gr. 1822 IN SOA ns1.gandi.net. hostmaster.gandi.net. 1582812814 10800 3600 604800 10800
;ADDITIONAL

查询时间

doh-cli test.libredns.gr A --time
116.202.176.26
Query time:  531.764
doh-cli test.libredns.gr --time --json | jq .
[
  {
    "Query": "test.libredns.gr.",
    "TTL": "3600",
    "RR": "A",
    "Answer": [
      "116.202.176.26"
    ]
  },
  {
    "Query Time": "476.537"
  }
]

免责声明:此值与客户端对DoH提供者的请求有关,而不是实际的DNS响应。

选择其他DNS服务器

doh-cli libredns.gr A --dns cloudflare
116.202.176.26

或者您可以使用LibreDNS跟踪拦截端点

doh-cli --dns libredns-ads analytics.google.com A
0.0.0.0

或者提供您自己的DoH URL

doh-cli --url https://doh.libredns.gr/dns-query www.example.com A
93.184.216.34

注意:此选项(--url)会覆盖--dns选项。

变更日志

本文件跟踪doh-cli的所有显著更改,每次发布时都引入。

v0.7 - 2022-10-29

  • arg url覆盖dns arg的默认值(修复bug)。

v0.6 - 2021-03-25

  • 添加请求DNSSEC签名的支持
  • 支持处理响应中的多个答案部分
  • 使用itertools附加多个DNS答案
  • 简化doh-cli plain/json使用
  • 提高代码可读性
  • 使doh-cli模块更加独立
  • 相应地更新README

v0.5 - 2021-03-05

  • 添加对DNSKEY和DS RR的支持
  • 使用新的RR示例更新README
  • 修复多个答案上的输出bug

v0.4 - 2021-03-02

  • 更新文档说明
  • 添加自定义DoH端点--url选项
  • 添加版本选项到doh-cli
  • 添加cleanbrowsing & securedns DoH端点
  • 详细输出选项返回剩余的DoH请求
  • 当存在多个DNS答案时显示多个DNS答案
  • 使用base64url进行DNS请求消息
  • DNS响应应具有"application/dns-message"标题
  • 使用RequestException代替通用Exception
  • 拆分模块以提高可读性和模块化

v0.3 - 2020-04-12

  • 如有必要,交换位置参数(域名、RR)
  • 检查服务器错误时的响应状态
  • 将默认输出更改为普通输出
  • 调试、详细输出和查询时间值现在为普通/json输出的一部分

v0.2 - 2020-04-08

  • 支持自定义DoH端点
  • 更详细的调试选项
  • 允许用户使用任何RR类型
  • 添加CIRA提供商
  • 添加查询响应时间的新时间选项
  • 扩展文档
  • 新的详细输出选项用于显示DNS线

v0.1 - 2019-12-24

  • 初始发布

项目详情


下载文件

下载适合您的平台文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分布

doh-cli-0.7.tar.gz (21.2 KB 查看哈希值

上传时间

构建分布

doh_cli-0.7-py3-none-any.whl (19.5 KB 查看哈希值

上传于 Python 3

由以下支持