https://tools.ietf.org/html/draft-ietf-doh-dns-over-https-13的客户端和代理实现

doh-prox的Python项目详细描述


通过https代理的dns

Build StatusPyPI version

一组python 3脚本,支持指定的通过https代理dns 在IETF Draft draft-ietf-doh-dns-over-https中。

doh提供了一种通过https运行加密dns的方法,该协议可以自由地 当其他加密机制可能被阻止时遍历防火墙。

该项目附带一套4个工具:

  • doh-proxy:通过http2接收doh查询并转发它们的服务。 递归解析器。
  • doh-httpproxy:类似于doh-proxy,但使用http而不是http2。 其主要目的是在反向代理后面运行此操作。
  • doh-stub:侦听dns查询并将其转发到doh服务器的服务。
  • doh-client:对doh服务器执行测试dns查询的工具。

请参阅CONTRIBUTING文件以获取帮助。

doh代理是在IETF Hackathon 100期间创建的,作为概念的证明,不在facebook上使用。

欢迎您使用它,但请注意,支持是有限的,而且是最大的努力。

安装

直接从pypi安装已打包的版本:

$ pip3 install doh-proxy

用法

DOH代理

doh-proxy是响应DOH请求的独立服务器。代理不这样做 dns递归本身并将查询转发到功能齐全的dns 递归服务器或DNS缓存服务器。

通过运行doh-proxy,您可以使用最小的 设置。

$ sudo doh-proxy \
    --upstream-resolver=::1 \
    --certfile=./fullchain.pem \
    --keyfile=./privkey.pem

DOH HttpProxy

doh-httpproxy设计为在反向代理后面运行。在此设置中 反向代理(如NGINX)将处理 DOH客户端的https/http2请求并将其转发给 doh-httpproxy后端。

虽然此设置需要更多的预先设置,但它允许运行doh proxy 在多个核心上没有特权。

$ doh-httpproxy \
    --upstream-resolver=::1 \
    --port 8080\
    --listen-address ::1

doh-httpproxy现在还支持tls,您可以启用传递 参数--certfile--keyfile(就像doh-proxy

DOH存根

doh-stub是在客户端上运行的软件。由 提供本地dns服务器,doh-stub将转发dns请求 使用加密链接接收到DOH服务器。

可以使用以下命令启动存根解析程序:

$ doh-stub \
    --listen-port 5553\
    --listen-address ::1 \
    --domain foo.bar \
    --remote-address ::1

并提出质疑。

$ dig @::1 -p 5553 example.com

DOH客户

doh-client只是一个测试cli,可用于快速向 DOH服务器并转储返回的答案。

$ doh-client  \
    --domain dns.dnsoverhttps.net \
    --qname sigfail.verteiltesysteme.net \
    --dnssec
id 37762
opcode QUERY
rcode SERVFAIL
flags QR RD RA
edns 0
eflags DO
payload 4096;QUESTION
sigfail.verteiltesysteme.net. IN AAAA
;ANSWER
;AUTHORITY
;ADDITIONAL

$ doh-client  \
    --domain dns.dnsoverhttps.net \
    --qname sigok.verteiltesysteme.net \
    --dnssec
id 49772
opcode QUERY
rcode NOERROR
flags QR RD RA AD
edns 0
eflags DO
payload 4096;QUESTION
sigok.verteiltesysteme.net. IN AAAA
;ANSWER
sigok.verteiltesysteme.net. 60 IN AAAA 2001:638:501:8efc::139
sigok.verteiltesysteme.net. 60 IN RRSIG AAAA 5360201801300300022017103103000230665 verteiltesysteme.net. O7QgNZFBu3fULvBXwM39apv5nMehh51f mLOVEsC8qZUyxIbxo4eDLQt0JvPoPpFH 5TbWdlm/jxq5x2/Kjw7yUdpohhiNmdoD Op7Y+RyHbf676FoC5Zko9uOAB7Pp8ERz qiT0QPt1ec12bM0XKQigfp+2Hy9wUuSN QmAzXS2s75k=;AUTHORITY
;ADDITIONAL

开发

要求

  • python>;=3.5
  • aiohttp
  • 空气2
  • dnspython

建筑

doh代理使用python的setuptools来管理依赖项和构建。

要安装其依赖项:

$ python3 setup.py develop

构建:

$ python3 setup.py build

运行单元测试:

$ python3 setup.py test

运行棉绒:

$ python3 setup.py flake8
# Also run flake8 on the testing files
$ flake8 test

在存储库的根目录中,可以分别测试代理、存根和客户端 使用以下命令:

$ sudo PYTHONPATH=. ./dohproxy/proxy.py ...
$ PYTHONPATH=. ./dohproxy/httpproxy.py ...
$ PYTHONPATH=. ./dohproxy/stub.py ...
$ PYTHONPATH=. ./dohproxy/client.py ...

许可证

DOH代理是BSD授权的。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java为什么程序显示空结果?   java应用程序在测试设备上调试时工作正常,但在发布版apk中没有,它没有获得post。来自firebase的类变量   java Android:从主活动按钮确定在listview中选中哪个复选框   在Spring中添加@OneToOne注释时启动ApplicationContext时发生java错误   用JAVA Android实现矩阵计算的最快方法   SpringJava语义有没有更好的编写方法?   java从hashmap中减去两个值后返回最小差值的键?   Java中的静态初始化顺序:Netty 4.0.7的例外   java如何检查用户输入是否为字符串   循环Java计数单词索引   java如何使用以下代码将视频流传输到Android异步Http服务器?   java如何在jtable的所有行中循环   java如何使用maven将unicode插入mysql   java使用安卓加速远程数据检索   java试图模拟麦克风(javax.sound.sampled)   swing SwingWorker从不归还任何东西?(爪哇)   首次在Android Studio上未加载java LibGDX文件   java如何在多个Mysql服务器上设置限制和偏移?   如何防止从java连接到mongodb时登录控制台?