我们已经准备好了,你呢?

2024我们与您携手共赢,为您的企业形象保驾护航!

DNS 和世界

从硬件角度看,控制了海底光缆等互联网基础设施,就控制了世界;控制了海底光缆等互联网基础设施,就控制了世界。从软件角度来看,如果你控制了 DNS,你就控制了互联网。

互联网虽然叫国际互联网,但是也是分国家的,都是受控制的。这有多容易?硬件层面的安全问题将会成为国家层面的安全问题,是所有人都看得见的,所以这也无限增加了控制的难度。

从软件层面来说,控制DNS的可能性其实更高。很难知道DNS是否存在后门,尤其是在习惯之后;如果存在后门并且被激活,那几乎是毁灭性的。我们来看看市面上一般都有哪些DNS。有些是 、Apple 的 MacOS、Apple 的 iOS、 的 和 Linux 附带的。除了Linux(开源的很难留后门,没有强制,没有激励,监督),其他的都需要一次性控制,想一想都是极其困难的,几乎是不可能的。但与控制所有互联网设备相比,这种近乎不可能的困难就显得小巫见大巫了。

控制可以是破坏性的,但另一方面,它也可以是创造性的。如果有一个新的协议,并且得到整个DNS生态系统的普遍认可,那么可以潜移默化地推动整个互联网的演进。然而,这也是非常困难的。之前也有过这方面的尝试,比如EDNS,这是一个几乎是理所当然的改进。但要实现普遍性还需要很长很长的时间。

从整个互联网的角度来看,控制DNS是一个梦想;但让我们换个角度来看。网络是分层的。小层次结构可以是家庭内的 LAN 或学校内的 LAN。难度是直线降低,不出意外的话,只要控制我们当前电脑上的DNS,就很容易做到。

我们接管自己电脑上的DNS解析服务器,然后让所有域名解析直接指向我们自己的一台Web服务器(或者本地设备本身)。那么所有传入的流量都可以被代理,或者被代理。进行调整和优化。但这仅限于 HTTP 请求。 HTTPS请求是加密的,需要更复杂的“授权”。

进一步的发展就是干预浏览器的行为。例如,在低速互联网时代,UC浏览器可以通过干预/的进程控制来提高页面的访问速度。这里就不做详细解释了。

什么是URL转发

如果通过DNS提前拦截,然后重新处理一个HTTP Web请求,就可以完美匹配骗子的欺骗行为,所以有的网上银行会特别强调在地址栏上加一个绿色的锁(表示当前访问的是HTTPS)。然而,要接管计算机设备的DNS还是相当困难的,因此市场上出现了钓鱼网站的诈骗方法。

但我们这里不做特别的演示。这是很简单的事情,而且还是在自己的电脑设备上操作,但是对于外行来说,会很可怕。如果有人想找你麻烦,那么展开解释后,一切网络之后的行为都是犯罪行为。请参阅《刑法》第285条及以下条款。

我们要介绍的是URL转发,这也是一些国际域名服务商在DNS解析记录中提供的一种记录类型。它不是真正的DNS记录类型,而是为了用户体验而添加的逻辑。

之前我们简单介绍过DNS解析记录。我们应该非常清楚,它们是两个不同的东西。一个是根域名,一个是二级域名。但对于绝大多数互联网用户来说,两者应该是一样的。 URL转发解决了类似的问题。例如,当您访问时,如果设置了URL转发,则会自动跳转到该页面。

首先搭建一个Web服务器

我们首先使用Flask来完成一个Web服务器。它的目的很简单,就是处理URL跳转。跳转规则也很简单:比如访问的时候,会自动跳转到上面。

from flask import Flask, redirect, request, abort
app = Flask(__name__)
@app.route('/')
@app.route('/')
def auto_redirect(path=''):
    domain = request.host
    if domain.startswith('hello-'):
        original_domain = domain.replace('hello-', '', 1)
        new_url = 'http://%s/%s' % (original_domain, path.lstrip())
        return redirect(new_url)
    else:
        abort(404, '%s is not supported' % domain)
app.run(port=80)

调整DNS解析服务器的规则

也很简单,只需要把.py中的ip = ()这行改为:

if domain.startswith('hello-'):
    ip = '127.0.0.1'
else:
    ip = get_ip_from_domain(domain)

注意:如果源码中有time.sleep逻辑,一定要先删除或者注释掉。

跑步

为了方便起见,DNS服务器对应的.py文件为.py,Web服务器对应的.py文件为.py。

未使用

新打开两个命令行窗口,进入本文对应的两个.py文件所在目录,然后分别执行:

sudo python simple_dns_server.py

sudo python simple_web_server.py

DNS 和 Web 都需要 sudo 权限,因为 Web 端口 80 默认情况下也受到 MacOS 的限制。

用法

首先打开两个命令行窗口,进入对应的项目根目录,然后执行shell进入命令行对应的虚拟环境。

然后,进入本文对应的两个.py文件所在目录,然后分别执行:

sudo python simple_dns_server.py

sudo python simple_web_server.py

设置本地 DNS

具体参考请参见《DNS基础知识·DNS工作原理》中的“当前计算机的DNS服务器”部分。我们将本地DNS设置为127.0.0.1,不能有其他记录。

测试结果

现在我们要开始测试了。但在此之前,还有两点需要确认:

请勿处于完整的互联网环境(如VPN),否则您本地DNS服务器地址的配置可能无法生效。如果要访问,请确保浏览器之前没有访问过,否则浏览器的DNS缓存会生效,可能无法请求当前的127.0.0.1。

好了,现在打开浏览器访问,,hello-任意你想访问的域名,看看效果是否达到了?这就是基于DNS的URL转发。在互联网环境下,别人只要将域名的DNS指向你的解析服务器,就可以达到同样的效果。

扩张

此外,您还可以直接代理HTTP Web请求。所谓代理,就是说来了,分两步:1、从真实的外部获取内容;2、从外部获取内容。 2. 将步骤1得到的内容返回给 。

如果继续与DNS服务器集成,那么就需要注意如何获取真实的外部IP。例如,如果您执行代理,DNS 请求返回,您将返回 127.0.0.1。那么在自己的服务器上,就不能向127.0.0.1发送Web请求,否则就会成为无源之水。您需要找到外部域名对应的真实IP。这应该不难。 《编写DNS服务器》中有现成的代码。

当我们向外界发送Web请求时,看起来我们正在访问某个域名下的URL。其实我们请求的是域名对应的IP,而域名本身只是作为一个(命名为Host)来传输的。回顾最初的编程,Web请求就是连接的行为。

所有技术瓶颈都已解除,您现在可以随心所欲地扩展。

二维码
扫一扫在手机端查看

本文链接:https://by928.com/7257.html     转载请注明出处和本文链接!请遵守 《网站协议》
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。

项目经理在线

我们已经准备好了,你呢?

2020我们与您携手共赢,为您的企业形象保驾护航!

在线客服
联系方式

热线电话

13761152229

上班时间

周一到周五

公司电话

二维码
微信
线