首页 > 文库大全 > 精品范文库 > 11号文库

DNS服务器(windows)

DNS服务器(windows)



第一篇:DNS服务器(windows)

DNS服务器安装

实验规划

DNS域名:lw.com.cn DNS服务器IP:192.168.131.51 可用的外部DNS服务器:202.102.134.68 实验目标

1.配置A记录和指针记录。2.实现客户机正常上网。

配置步骤

步骤1 开始——管理您的服务器,进入如下界面。

步骤2 单击“添加或删除角色”,打开“配置您的服务器向导”,如下图:

步骤3 单击“下一步”。配置向导会检查你的网络设置,以确保网络设置符合安装要求。

步骤4 检查完网络设置后,进入“配置选项”界面。因为只需配置DNS服务器,所以选择“自定义配置”,如下图:

步骤5 单击“下一步”,进入“服务器角色”界面。

步骤5 选中“DNS服务器”,单击“下一步”,进入“选择总结”界面。

步骤6 单击“下一步”,开始安装DNS组件。

安装完DNS组件后进入“欢迎使用配置DNS服务器向导”界面。

步骤7 单击“下一步”,进入“选择配置操作”界面。

步骤8 根据实际需要选择适当的操作,这里选用了默认的选择。单击“下一步”,进入“主服务器位置”界面。

步骤9 选用默认选择即可,单击“下一步”,进入“区域名称”界面,如下图:

步骤10 在“区域名称”中输入指定的DNS名称。因为是实验演示,这里随便输入了一个名字“lw.com.cn”,单击“下一步”,进入“区域文件”界面,如下图:

步骤11 选用默认选择即可,单击“下一步”,进入“动态更新”界面,如下图:

步骤12 根据实际需要选择动态更新类型。本实验演示选择了默认选择。单击“下一步”,进入“转发器”界面:

步骤13 因为是实验演示,这里选择由外部可用的DNS服务器提供域名解析服务,以减少实验的难度。输入可用的DNS服务器的IP地址,单击“下一步”,进入如下图所示的界面:

步骤14 单击“完成”即可。

步骤15 单击“完成”即可。

安装完成DNS服务器后的“管理您的服务器”界面将如下图所示:

步骤16 单击“管理此DNS服务器”选项,打开“dnsmgmt”界面,如下图:

新建主机记录

步骤17 右击正向查询区域“lw.com.cn”,选择“新建主机(A)„”

步骤18 在弹出的“新建主机”对话框中输入新建主机的名称和对应的IP地址,点击“添加主机”按钮即可。因此时还没有新建方向查询区域,所以创建相关的指针记录会失败。待会单独建立指针记录即可。也可以先创建反向查询区域,再新建主机记录。

新建反向查询区域

步骤19 右击“反向查询区域”,选择“新建区域”,弹出“新建区域向导”

步骤20 区域类型选择“主要区域”,单击“下一步”,进入“方向查找区域名称”界面,如下图所示:

步骤21 输入正向查询区域的网络号即可,“反向查找区域名称”自动生成。单击“下一步”,进入“区域文件”界面,如下图:

步骤22 默认即可,单击“下一步”,进入“动态更新”界面,如下图:

步骤23 默认选择即可,单击“下一步”,进入如下所示的界面:

新建指针记录

步骤24 右击反向查找区域名,选择“新建指针(PTR)„”选项,进入“新建资源记录”界面。

步骤25 输入主机IP地址和主机名,单击“确定”即可。客户机测试

把客户机的DNS服务器IP修改为192.168.131.51。进入命令行界面。1.测试指针记录。

成功时结果如下:

不成功时,结果如下:

2.测试本地域名的解析

3.测试远程域名的地址解析

DNS服务器

用户在Internet上冲浪的时候一般都会使用诸如www.teniu.cc),单击“下一步”按钮,如下图所示。

第5步,在打开的“区域文件”对话框中已经根据区域名称默认填入了一个文件名。该文件是一个ASCII文本文件,里面保存着该区域的信息,默认情况下保存在windowssystem32dns文件夹中。保持默认值不变,单击“下一步”按钮,如下图所示。

第6步,在打开的“动态更新”对话框中指定该DNS区域能够接受的注册信息更新类型。允许动态更新可以让系统自动在DNS中注册有关信息,在实际应用中比较有用。因此选中“允许非安全和安全动态更新”单选框,单击“下一步”按钮,如下图所示。

第7步,打开“转发器”对话框,保持“是,应当将查询转送到有下列IP地址的DNS服务器上”单选框的选中状态。在IP地址编辑框中输入ISP(或上级DNS服务器)提供的DNS服务器IP地址,单击“下一步”按钮,如下图所示。

小提示:ISP(Internet service Provider,Internet服务提供商)是专门提供网络接入服务的商家,通常都是电信部门。配置“转发器”可以使局域网内部用户在访问Internet上的网站时,尽量使用ISP提供的DNS服务器进行域名解析。第8步,在最后打开的完成对话框中列出了设置报告,确认无误后单击“完成”按钮结束主要区域的创建和DNS服务器的安装配置过程,如下图所示。

添加主机记录

在Windows Server 2003系统中安装DNS服务器,并在DNS服务器中创建主要区域后,还不能马上实现域名解析。用户还需要在DNS服务器中创建指向不同服务器的主机名。另外还要将DNS主机域名与其IP地址对应起来,实现主机域名和服务器IP地址的映射。当用户在Web浏览器中输入域名时,会通过DNS服务器解析成相应的IP地址,从而实现对特定服务器的访问。在DNS服务器中添加主机记录的步骤如下所述:

第1步,在开始菜单中依次单击“管理工具”→“DNS”菜单项,打开dnsmgmt窗口。在左窗格中依次展开服务器和“正向查找区域”目录,然后右键单击准备添加主机的区域名称(如lw.com.cn),在快捷菜单中选择“新建主机”命令,如下图所示。

提示:主机记录也叫做A记录,用于静态地建立主机名与IP地址之间的对应关系,以便提供正向查询服务。因此必须为每种服务均创建一个A记录,如FTP、www.teniu.cc,并单击“下一步”按钮,如下图所示。

第4步,打开“主DNS服务器”对话框。在“IP地址”编辑框中输入主DNS服务器的IP地址,以便从主DNS服务器中复制数据。完成输入后依次单击“添加”→“下一步”按钮,如下图所示。

第5步,最后打开“正在完成新建区域向导”对话框,列出已经设置的内容。确认无误后单击“完成”按钮完成辅助DNS区域的创建过程,该辅助DNS服务器会每隔15分钟自动和主DNS服务器进行数据同步操作,如下图所示。

设置DNS转发器

在DNS服务器组件安装配置的过程中已经设置了DNS转发器,但有时还需要添加多个DNS转发器或调整DNS转发器的顺序。设置DNS转发器的操作步骤如下所述:

第1步,打开DNS控制台窗口,在左窗格中右键单击准备设置DNS转发器的DNS服务器名称,选择“属性”命令,如下图所示。

第2步,打开服务器属性对话框,并切换到“转发器”选项卡。在“所选域的转发器的IP地址列表”编辑框中输入ISP提供的DNS服务器的IP地址,并单击“添加”按钮,如下图所示。

小提示:重复操作可以添加多个DNS服务器的IP地址。需要注意的是,除了可以添加本地ISP提供的DNS服务器IP地址外,还可以添加其他地区ISP的DNS服务器IP地址。第3步,用户还可以调整IP地址列表的顺序。在转发器的IP地址列表中选中准备调整顺序的IP地址,单击“上移”或“下移”按钮即可进行相关操作。一般情况下应将响应速度较快的DNS服务器IP地址调整至顶端。单击“确定”按钮使设置生效,如下图所示。

添加MX记录

MX(Mail Exchanger,邮件交换)记录用以向用户指明可以为该域接收邮件的服务器。那么为什么要添加MX记录呢?首先用户来举一个例子。如用户准备发邮件给ygw@lw.com.cn,这个邮件地址只能表明收邮件人在lw.com.cn域上拥有一个账户。可是仅仅知道这些并不够,因为电子邮件程序并不知道该域的邮件服务器地址,因此不能将这封邮件发送到目的地。而MX记录就是专门为电子邮件程序指路的,在DNS服务器中添加MX记录后电子邮件程序就能知道邮件服务器的具体位置(即IP地址)了。在主DNS服务器中添加MX记录的操作步骤如下所述:

第1步,在DNS控制台窗口中首先添加一个主机名为mail的主机记录,并将域名mail.lw.com.cn映射到提供邮件服务的计算机IP地址上。

第2步,在“正向查找区域”目录中右键单击准备添加MX邮件交换记录的域名,选择“新建邮件交换器(MX)”命令,如下图所示。

第3步,打开“新建资源记录”对话框,在“邮件服务器的完全合格的域名(FQDN)”编辑框中输入事先添加的邮件服务器的主机域名(如mail.lw.com.cn)。或单击“浏览”按钮,在打开的“浏览”对话框中找到并选择作为邮件服务器的主机名称(如mail),如下图所示

第4步,返回“新建资源记录”对话框,当该区域中有多个MX记录(即有多个邮件服务器)时,则需要在“邮件服务器优先级”编辑框中输入数值来确定其优先级。通过设置优先级数字来指明首选服务器,数字越小表示优先级越高。最后单击“确定”按钮使设置生效,如下图所示。

小提示:一般情况下“主机或子域”编辑框中应该保持为空,这样才能得到诸如user@lw.com.cn之类的信箱地址。如果在“主机或子域”编辑框中输入内容(如mail),则信箱名将会成为user@mail.lw.com.cn。

第5步,重复上述步骤可以添加多个MX记录,并且需要在“邮件服务器优先级”编辑框中分别设置其优先级。

第二篇:windows下dns服务器的搭建

搭建dns服务器

DNS 的概念

DNS 在广域网上是一个不可缺少的非常重要的服务。DNS(do main name system)域名系统,能够将域名解析为 IP 地址,也能 把 IP 地址解析为域名,正向解析为域名解析为 IP,反向解析为 IP 解析为域名。

域分为: 根域(root “.”)、顶级域(.com;.net;.org)、二级 域(163;sohu;baidu)、子域。念域的顺序由低向高念,搜狐的 FQ DN(完全限定域名)名称[url]www.teniu.cc.uk顶级域名.tw在顶级域名下由二级域名,二级域名还可以进行再分配 组织域:组织域:.com.net.org.gov 等等依靠组织类型分配的地理域:地理域:.cn.tw.uk 全球200多个国家和地区的地理位置分配 反向域:反向域:进行反向解析的,一般不用(因为没有逻辑的树状的层次结构,有时可以有一些特殊的用途)。

DNS 查询方法

递归查询:客户端想服务端发送查询请求,服务器将在本服务器 上查询到结果并告诉客户端查询结果。我们在家用 ADSL 上网就属 于递归查询。反之,如果没有查到服务器将告诉客户端没有查询到。

迭代查询: 客户端发送查询请求,服务器将查询请求发到公网 上的其他 DNS 服务器上。

根提示: 公网上的 DNS 服务器和对应的 IP 地址(注意!根域已“.”表示。在自己建立 DNS 服务器时,不要把域的名称起做 “.”这样服务器会认为自己就是根域,没有必要再向其他 DNS 服务 器进行转发了)。在内部网络里建立 DNS 服务器时,想能访问内部 网络和外部网络,必须启动根提示。转发:客户端向 DNS 服务器申请查询,DNS将查询请求发给其他的DNS服务器进行查询。

DNS的排错工具在Windows操作系统上使用nslookup,该工具有两种模式:交互式和非交互式。

1. 安装 DNS 服务

“开始”菜单,单击“管理您的服务器”,“添加和删除程序”下一步,选择DNS服务

下面实现 DNS 服务器部署:

选择创建正向和反向查找区域(适合大型网络使用)。“下一步” 可以根据需求去选择。

选择创建正向查找区域(很重要的功能,最好不要选择“不”)单击 “下一步”。

创建一个主要区域,单击“下一步”

辅助区域是用做 DNS 服务器备份。如果需要做备份或者辅助的话可以选择此项。

这里需要写入区域名称,但此区域名称不是 DNS 服务器名称。单击 “下一步”

这里不用填写,默认会有,如果你要使用现存文件,可以使用下面选 项,选择路经。

选择“不允许动态更新”,单击下一步

这里选择“不,不创建反向解析”。

创建了正向解析,用 DNS 域名解析到 IP。

转发器可以填写另外一台 DNS 服务器 IP,这样可以互相转发。

但这里我们选择,否,不用转发。

单击“完成”

效果图

因为选择的是正向解析,所以还要新建一个主机,填写合格的域名,以实现 DNS 域名解析 IP 地址的过程。

这样我们的 DNS 服务器就完成了。

IP 地址,这样就可

第三篇:DNS服务器实验报告

网 络 工 程 实 验

实验名称:DNS服务(系统自带)

班级:计科一班

组长:李柯颖(41112045)

组员:马晓贤(41112033)马彬(41112036)

刘永军(41112012)高富雷(41112003)

张明东(41112016)

前 言

一、DNS服务器的概念

它是由解析器以及域名服务器组成的。域名服务器是指保存有该网络中所有主机的域名和对应IP地址,并具有将域名转换为IP地址功能的服务器。DNS使用TCP与UDP端口号都是53,主要使用UDP,服务器之间备份使用TCP。

DNS最早于1983年由保罗·莫卡派乔斯(Paul Mockapetris)发明;原始的技术规范在882号因特网标准草案(RFC 882)中发布。1987年发布的第1034和1035号草案修正了DNS技术规范,并废除了之前的第882和883号草案。在此之后对因特网标准草案的修改基本上没有涉及到DNS技术规范部分的改动。

域名结构

通常 Internet 主机域名的一般结构为:主机名.三级域名.二级域名.顶级域名。Internet 的顶级域名由 Internet网络协会域名注册查询负责网络地址分配的委员会进行登记和管理,它还为 Internet的每一台主机分配唯一的 IP 地址。全世界现有三个大的网络信息中心: 位于美国的 Inter-NIC,负责美国及其他地区; 位于荷兰的RIPE-NIC,负责欧洲地区;位于日本的APNIC,负责亚太地区。

解析器

解析器,或另一台DNS服务器递归代表的情况下,域名解析器,协商使用递归服务,使用查询头位。

解析通常需要遍历多个名称服务器,找到所需要的信息。然而,一些解析器的功能更简单地只用一个名称服务器进行通信。这些简单的解析器依赖于一个递归名称服务器(称为“存根解析器”),为他们寻找信息的执行工作。

服务器

提供DNS服务的是安装了DNS服务器端软件的计算机。服务器端软件既可以是基于类linux操作系统,也可以是基于Windows操作系统的。装好DNS服务器软件后,您就可以在您指定的位置创建区域文件了,所谓区域文件就是包含了此域中名字到IP地址解析记录的一个文件,如文件的内容可能是这样的:primary name server = dns2(主服务器的主机名是)

serial = 2913(序列号=2913、这个序列号的作用是当辅域名服务器来复制这个文件的时候,如果号码增加了就复制)

refresh = 10800(3 hours)(刷新=10800秒、辅域名服务器每隔3小时查询一个主服务器)

retry = 3600(1 hour)(重试=3600秒、当辅域名服务试图在主服务器上查询更新时,而连接失败了,辅域名服务器每隔1小时访问主域名服务器)

expire = 604800(7 days)(到期=604800秒、辅域名服务器在向主服务更新失败后,7天后删除中的记录。)

default TTL = 3600(1 hour)(默认生存时间=3600秒、缓存服务器保存记录的时间是1小时。也就是告诉缓存服务器保存域的解析记录为1小时)

二、设置类别

您可以把DNS服务器配置成以下3类之一: 1.主DNS服务器。2.辅DNS服务器。3.缓存DNS服务器。

三、DNS服务器的工作原理大致如下:

1、用户在浏览器里输入域名,例如www.teniu.cc,这个邮件地址只能表明收邮件人在msserver.com.cn域上拥有一个账户。可是仅仅知道这些并不够,因为电子邮件程序并不知道该域的邮件服务器地址,因此不能将这封邮件发送到目的地。而MX记录就是专门为电子邮件程序指路的,在DNS服务器中添加MX记录后电子邮件程序就能知道邮件服务器的具体位置(即IP地址)了。在主DNS服务器中添加MX记录的操作步骤如下所述:

步骤:1 在DNS控制台窗口中首先添加一个主机名为mail的主机记录,并将域名mail.msserver.com.cn映射到提供邮件服务的计算机IP地址上。2 在“正向查找区域”目录中右键单击准备添加MX邮件交换记录的域名,选择“新建邮件交换器(MX)”命令,如图所示。

1.2.3

打开“新建资源记录”对话框,在“邮件服务器的完全合格的域名(FQDN)”编辑框中输入事先添加的邮件服务器的主机域名(如mail.msserver.com.cn)。或单击“浏览”按钮,在打开的“浏览”对话框中找到并选择作为邮件服务器的主机名称(如mail),如图所示。

3.4 返回“新建资源记录”对话框,当该区域中有多个MX记录(即有多个邮件服务器)时,则需要在“邮件服务器优先级”编辑框中输入数值来确定其优先级。通过设置优先级数字来指明首选服务器,数字越小表示优先级越高。最后单击“确定”按钮使设置生效,如图所示。小提示:一般情况下“主机或子域”编辑框中应该保持为空,这样才能得到诸如user@msserver.com.cn之类的信箱地址。如果在“主机或子域”编辑框中输入内容(如mail),则信箱名将会成为user@mail.msserver.com.cn5 重复上述步骤可以添加多个MX记录,并且需要在“邮件服务器优先级”编辑框中分别设置其优先级。

实验六 给DNS服务器做个快速体检

你的内网DNS服务器工作状态正常吗?大家常用的测试方法是查看内网用户是否能使用域名浏览网站,但这种测试方法并不全面和科学。其实最简单和便捷的方式是使用nslookup+Ping命令的组合方式,通过简单的两步就能给本地企业网中的DNS服务器做个快速“体检”。

步骤:

第一步:首先使用nslookup命令来测试本企业网的DNS服务器,查看它是否能正常将域名解析成IP地址。这里以www.teniu.cc”

第六步:设置完毕后我们访问www.teniu.cc时就会自动根据是在内网还是外网来解析了。

命令提示符输入netsh winsock reset重启电脑

实验九 快速删除电脑IPv6 DNS地址

随着IPv6地址使用范围的越来越广,在电脑上进行IPv6 DNS地址的配置和删除也是常有的事,下面就介绍一种快速删除电脑IPv6 DNS地址的方法:

步骤:

1.1 在Win 7的“开始”中打开“运行”对话框,并在其中运行“cmd”命令,点击“确定”按钮。

2.2 在“CMD”命令行中执行命令“ipconfig/all”,查看电脑网卡上配置的ipv6 DNS地址。

执行完上面的命令后就能看到电脑网卡的IPv6 DNS地址配置情况,如下图。

3.4 然后在“CMD”命令行中执行命令“netsh interface ipv6 delete dnsservers “本地连接”2001:dn8:8000:1:202:120:2:101”,就可以把电脑网卡上的ipv6 DNS地址删除掉。

注意事项

删除电脑IPv6 DNS地址的命令格式,必须按要求输入,不能有任何的差错,否则不能正确执行。

实验十 怎样让别人无法修改DNS的内容

DNS设置在TCP/IP中,我们可以通过禁用TCP/IP来实现。

1.1 首先点击“开始”菜单,点击运行。2 在打开的运行框中输入gpedit.msc,按确定。

2.3 依次展开“用户配置管理模板网络网络连接”4 在右侧窗口中找到“禁用TCP/IP高级配置”。

3.5 双击打开将“已启用”选中,确定。

然后再强制执行组策略即可生效。

保护DNS服务器的几种方法

DNS软件是黑客热衷攻击的目标,它可能带来安全问题。下面是保护DNS服务器的几种方法。

禁用区域传输

区域传输发生在主DNS服务器和从DNS服务器之间。主DNS服务器授权特定域名,并且带有可改写的DNS区域文件,在需要的时候可以对该文件进行更新。从DNS服务器从主力DNS服务器接收这些区域文件的只读拷贝。从DNS服务器被用于提高来自内部或者互联网DNS查询响应性能。

然而,区域传输并不仅仅针对从DNS服务器。任何一个能够发出DNS查询请求的人都可能引起DNS服务器配置改变,允许区域传输倾倒自己的区域数据库文件。恶意用户可以使用这些信息来侦察你组织内部的命名计划,并攻击关键服务架构。你可以配置你的DNS服务器,禁止区域传输请求,或者仅允许针对组织内特定服务器进行区域传输,以此来进行安全防范。

使DNS只用安全连接

很多DNS服务器接受动态更新。动态更新特性使这些DNS服务器能记录使用DHCP的主机的主机名和IP地址。DDNS能够极大地减

轻DNS管理员的管理费用,否则管理员必须手工配置这些主机的DNS资源记录。

然而,如果未检测的DDNS更新,可能会带来很严重的安全问题。一个恶意用户可以配置主机成为台文件服务器、Web服务器或者数据库服务器动态更新的DNS主机记录,如果有人想连接到这些服务器就一定会被转移到其他的机器上。

你可以减少恶意DNS升级的风险,通过要求安全连接到DNS服务器执行动态升级。这很容易做到,你只要配置你的DNS服务器使用活动目录综合区(ActiveDirectoryIntegratedZones)并要求安全动态升级就可以实现。这样一来,所有的域成员都能够安全地、动态更新他们的DNS信息。

使用防火墙来控制DNS访问

防火墙可以用来控制谁可以连接到你的DNS服务器上。对于那些仅仅响应内部用户查询请求的DNS服务器,应该设置防火墙的配置,阻止外部主机连接这些DNS服务器。对于用做只缓存转发器的DNS服务器,应该设置防火墙的配置,仅仅允许那些使用只缓存转发器的DNS服务器发来的查询请求。防火墙策略设置的重要一点是阻止内部用户使用DNS协议连接外部DNS服务器。

在DNS注册表中建立访问控制

在基于Windows的DNS服务器中,你应该在DNS服务器相关的注册表中设置访问控制,这样只有那些需要访问的帐户才能够阅读或修改这些注册表设置。

HKLMCurrentControlSetServicesDNS键应该仅仅允许管理员和系统帐户访问,这些帐户应该拥有完全控制权限。在DNS文件系统入口设置访问控制

在基于Windows的DNS服务器中,你应该在DNS服务器相关的文件系统入口设置访问控制,这样只有需要访问的帐户才能够阅读或修改这些文件。

%system_directory%DNS文件夹及子文件夹应该仅仅允许系统帐户访问,系统帐户应该拥有完全控制权限。实验十一 在windows07 查看DNS服务器属性

步骤:

打开“控制面板”里的“管理工具”

点击“服务”,下拉列表框,找到“DNS client”

双击“DNS client”

可对其属性查看,或进行修改。

第四篇:襄阳电信宽带DNS服务器

襄阳电信宽带DNS服务器:

202.103.44.150

202.103.24.68

客服电话:10000

襄阳网通(联通)宽带DNS服务器:218.104.111.122

218.104.111.114

客服电话:10010 襄阳总公司:0710-3700663 襄阳铁通(移动)宽带DNS服务器:61.232.206.102

61.232.206.100

61.234.145.102

客服电话:10050

襄阳广电宽带DNS服务器:

10.0.20.1

10.0.20.3

客服电话:0710-3567110

第五篇:北邮计算机网络课程设计DNS服务器

北邮计算机网络课程设计DNS服务器 环境

操作系统随意,语言python2.7

2.文件

Socket.py 说明

完成缓存检测,确定是回应,还是转发,如果是回应,确定是本地回应还是外部应答转发

import socket import mydic import charhandle import makeframe

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)port = 53

the_dic = mydic.get_web_ip()client_request = {} client_request_index = {} reverse_map = {} key_record = 0 client_wait = []

s.bind(('',port))

time_rest = 0 request_general = ''

print 'running' while True:

try:

msg ,(client,port)= s.recvfrom(1024)

except:

print 'Time out!'

continue

request = []

request = list(msg)

requre_web = charhandle.get_request(request[12:])

website = ''.join(requre_web)

if(port == 53):

answer = []

answer = list(msg)

print “Type:Remote Response”

print “remote answer is: ”

response_ip = msg[-4]+msg[-3]+msg[-2]+msg[-1]

char_ip = socket.inet_ntoa(response_ip)

print website + ' has the ip : '+char_ip

fre = mydic.storeForUpdate(website,char_ip)

print 'with the frequence of '+ str(fre)

###real_request = client_request[request[0]+request[1]]

for each_client in client_wait:

my_key = client_request[request[0]+request[1]+str(each_client)]

if client_request_index.get(my_key)!= None :

s.sendto(msg,client_request_index[my_key])

print “Response to ip and Client port:”

print client_request_index[my_key]

break

else:

print “Type: Client Request”

print “ip and port:”

print(client,port)

### requre_web = charhandle.get_request(request[12:])

### website = ''.join(requre_web)

print “Request website:”+website

if(the_dic.get(website)!= None):

print “Found in local cache:”

re_ip = the_dic.get(website)

print re_ip

fre = mydic.storeForUpdate(website)

print re_ip[0]+' with frequence '+str(fre)

zhen = makeframe.make(re_ip[0],msg)

s.sendto(zhen,(client,port))

else:

print “need to ask remote server”

key_record = key_record + 1

request_general = key_record

client_request[request[0]+request[1]+str(client)] = request_general

client_request_index[request_general] =(client,port)

if client not in client_wait:

client_wait.append(client)

# select authority DNS server as you wish

s.sendto(msg,('10.3.9.4',53))

time_rest = time_rest+1

try:

if(time_rest == 50):

print 'pay attention'

print '

#'

mydic.updateCache()

print '

#'

the_dic = mydic.get_web_ip()

time_rest = 0

except:

print 'not valid frequence'

print '--------------------' s.close()

Mydic.py 完成本地查询,LRU算法维护本地缓存,socket.py第97行的time_request值可以确定更新缓存的频率,可以直接输出在dnsrelay.txt内,但是为了方便观测变化,我输出到了dnsrelaycopy.txt里面,运行一段时间之后,可以去看看学习到的新条目

import pickle import os import threading A=[] d_web_ip = {} d_ip_web = {} update_dic = {}

data = open('dnsrelay.txt')for each_line in data:

try:

(ip,sitecopy)= each_line.split(' ',1)

(site,nothing)= str(sitecopy).split('n',1)

d_web_ip[site] = [ip,1]

d_ip_web[ip] = site

except:

print 'file error'

data.close()

try:

with open('newdnsrelay.pickle','wb')as newdnsrelay_file:

pickle.dump(d_web_ip,newdnsrelay_file)except IOError as err:

print 'File error:'+str(err)except pickle.PickleError as perr:

print 'Pickling error:'+str(perr)

def get_web_ip():

with open('newdnsrelay.pickle','rb')as f:

global update_dic

update_dic = pickle.load(f)

return update_dic.copy()

return(None)

def storeForUpdate(web_site, add = None):

global update_dic

if(update_dic.get(web_site)!= None):

add_frequen = update_dic[web_site]

add_frequen[1] = add_frequen[1] + 1

print web_site+' frequence incrase 1,with ip '+add_frequen[0]

return add_frequen[1]

else:

update_dic[web_site] = [add,1]

print 'record for a new site'

return 1

def updateCache():

global update_dic

m = update_dic.copy()

t = threading.Thread(target = my_thread,kwargs = m)

print 'ready to update local cache'

t.start()

t.join()

def my_thread(*argu,**arg):

frequence = []

remain_dic = {}

for each_key in arg:

tmp = arg[each_key]

if(tmp[1] not in frequence):

frequence.append(tmp[1])

if(tmp[0] == '0.0.0.0'):

remain_dic[each_key] = '0.0.0.0'

print 'various frequence:'

for each in frequence:

print 'have '+ str(each)

for each_key in remain_dic:

arg.pop(each_key)#enimilate ban

i = 0

while(i < 30):

max_frequence = max(frequence)

for each_key in arg:

tmp = arg[each_key]

if(tmp[1] == max_frequence):

remain_dic[each_key] = tmp[0]

i = i + 1

if(i == 30):

break;

frequence.remove(max_frequence)

if(not frequence):###no more

break;

updateFile(remain_dic)

def updateFile(new_dic):

f = open('dnsrelaycopy.txt','w')

for each_key in new_dic:

word = str(new_dic[each_key])+ ' ' + str(each_key)

f.write(word)

f.write('n')

new_dic[each_key] = [new_dic[each_key],0]

try:

with open('newdnsrelay.pickle','wb')as newdnsrelay_file:

pickle.dump(new_dic,newdnsrelay_file)

except IOError as err:

print 'File error:'+str(err)

except pickle.PickleError as perr:

print 'Pickling error:'+str(perr)

Makefram.py 成帧模块,形成对外围权威服务器的询问帧

import socket

def make(re_ip,msg):

tmp_list = []

for ch in msg:

tmp_list.append(ch)

tmp_list[4:12] = ['x00','x01','x00','x01','x00','x00','x00','x00']

tmp_list = tmp_list+['xc0','x0c','x00','x01','x00 ','x01','x00','x00','x02','x58','x00','x04']

pe_ip = socket.inet_aton(re_ip)

ch_ip = []

for each_ch in pe_ip:

ch_ip.append(each_ch)

tmp_list = tmp_list + ch_ip

re_msg = ''.join(tmp_list)

return re_msg

Charhandle.py 提取出报文中的url

def get_request(your_list):

my_list = []

new_list = []

my_list.extend(your_list)

re_list = []

thelen = ord(my_list[0])

try:

while thelen!= 0:

new_list = new_list + my_list[1:thelen+1]

my_list[0:thelen+1] = []

thelen = ord(my_list[0])

new_list.append('.')

except IndexError:

print “bao wen ge shi bu dui”

new_list.pop()

return new_list

原始的dnsrelay.txt老师给出了,自己去弄,把四个py文件放一个目录下,再放一个dnsrelay.txt 然后,用python shell 打开 socket.py 从python shell 运行,或者直接F5,记得把本地dns手动指向本机。

P.S:本人亲测,蒋老师没用过python,从头到尾就是我讲他听,从不为难我,我说有个LRU算法,他还说我做的好!

如果有不懂的 联系作者:302969722@qq.com 学妹优先

相关内容

热门阅读

最新更新

随机推荐