防DNS污染工具Pcap_DNSProxy

什么是dns污染

DNS污染是一种让一般用户由于得到虚假目标主机IP而不能与其通信的方法,是一种DNS缓存投毒攻击(DNS cache poisoning)。其工作方式是:由于通常的DNS查询没有任何认证机制,而且DNS查询通常基于的UDP是无连接不可靠的协议,因此DNS的查询非常容易被篡改,通过对UDP端口53上的DNS查询进行入侵检测,一经发现与关键词相匹配的请求则立即伪装成目标域名的解析服务器(NS,Name Server)给查询者返回虚假结果。

DNS污染症状:目前一些被禁止访问的网站很多就是通过DNS污染来实现的,例如YouTube、Facebook等网站。

怎么应对dns污染

  • 对于DNS污染,可以说,个人用户很难单单靠设置解决,通常可以使用VPN或者域名远程解析的方法解决,但这大多需要购买付费的VPN或SSH等
  • 修改Hosts的方法,手动设置域名正确的IP地址
  • dns加密解析:DNSCrypt
  • 忽略DNS投毒污染小工具:Pcap_DNSProxy

今天要介绍的就是Pcap_DNSProxy:

Pcap_DNSProxy简介

  • Pcap_DNSProxy 是一个基于 LibPcap/WinPcap 制作的用于忽略DNS投毒污染的小工具,后期也加入了对包含正则表达式的 Hosts 和 DNSCurve/DNSCrypt 协议以及多线程请求的支持
  • 本工具同时也支持使用 TCP 协议请求,在被连接重置时会自动切换到 UDP 协议,可以使请求者获得正确的域名解析。完全支持正则表达式 Hosts 条目,可以为使用者提供更加便捷的途径设定域名所对应的地址,避免修改系统文件的麻烦。而多线程或多服务器多线程的请求,更能提高在恶劣网络环境下域名解析的可靠性。

特性

  • 同时支持本地 IPv4/IPv6 协议以及自定义端口的监听和远程请求
    Native Code 原生编译,不含任何托管代码,x64版为原生64位目标平台编译
  • 作为服务工作于系统底层
  • 多线程请求模型,充分利用多线程处理器的硬件资源
  • 使用 WinPcap/LibPcap 利用系统底层驱动抓取数据包,多种过滤方式忽略接收到的伪造数据包
  • 支持服务器模式,相当于小型的 DNS 服务器,能为其它设备提供解析服务,并可限制可请求的范围
  • 主要和备用双服务器模式,多服务器多次请求功能,提高 DNS 解析的可靠性
  • DNS 缓存功能
  • 支持 EDNS0 标签
  • 支持 DNSCurve/DNSCrypt 协议
  • Hosts Only 模式可只使用本工具支持正则表达式的 Hosts 的直连模式
  • Local Hosts 境内 DNS 服务器解析功能,可提高对境内域名的解析速度和服务器的访问速度
  • 丰富的配置选项,配置文件支持 ANSI、UTF-8(/BOM)、UTF-16(LE/BE) 和 UTF-32(LE/BE) 编码以及 Windows/Unix/Macintosh 换行格式
  • 错误报告功能
  • C/C++ 编写而成,使用 Visual Studio 2013 Update 3/VC++ 进行编译,完全支持 Unicode

Library

  • 正则表达式支持由 C++ STL(Windows)/系统自带的正则库(Linux/Mac) 提供
  • 文件 Hash 使用的算法由 SHA-3/Keccak 提供
  • 由 C++ STL 自带的梅森旋转算法引擎产生离散型均匀分布随机数,用于随机域名探测
  • DNSCurve 协议使用的 Curve25519/Salsa20/Poly1305 算法由 LibSodium 提供
  • DNSCurve 协议加密模式使用的一次性 Nonce 亦由 LibSodium 附带的随机数产生器提供

平台

  • 本工具抓包模块所支持的网络类型
    • 网络设备类型为 Ethernet 的网络
    • 原生 IPv4 网络和原生 IPv6 网络
    • 基于 PPPoE 的 IPv4 网络和 PPPoEv6 的 IPv6网络
    • 如果需要支持更多网络类型,可与作者联系
  • Windows
    • Windows XP SP3/2003 SP2 以及更新的版本(32位/x86版本)和 Windows Vista/2008 以及更新的版本(64位/x64版本)
    • 支持最新版本 WinPcap
  • Linux
    • 支持 编译所需依赖包 的Linux发行版
    • 支持最新版本 Libpcap
  • Mac
    • 采用Intel平台处理器的 Mac OS X 10.5 Leopard 以及更新的版本

Pcap_DNSProxy使用方法

前期装备

运行

  • 进入Pcap_DNSProxy解压目录,右键以管理员身份(Vista 以及更新版本)或直接以管理员登录双击(XP/2003)运行 ServiceControl.bat
    • 输入 1 并回车,即选择 1: Install service 安装服务
    • 批处理会将程序注册系统服务,并进行 Windows 防火墙测试,每次开机服务都将自动启动
  • 此时 Windows 系统会询问是否同意程序访问网络,请将 “专用网络” 以及 “公用网络” 都勾上并确认
  • 打开网络和共享中心-更改适配器设置选择本地连接无线连接宽带连接
    • 右击 属性 - Internet协议(TCP/IP)(XP/2003) 或 Internet协议版本4(IPv4)(Vista 以及更新版本) - 属性 - 勾选 使用下面的DNS服务器地址
    • 在 首选DNS服务器 内填入 127.0.0.1(不含引号) 确定保存并退出即可
    • 如果需要使用 IPv6 协议的本地服务器
      • 右击属性-Internet协议版本6(IPv6)-属性-勾选使用下面的DNS服务器地址
      • 首选DNS服务器内填入::1,确定保存并退出即可
    • 注意:建议将本地连接无线连接以及宽带连接全部修改!

重启服务方法(需要以管理员身份进行):

  • 右键以管理员身份(Vista 以及更新版本)或直接以管理员登录双击(XP/2003)运行 ServiceControl.bat
  • 输入 5 并回车,即选择 5: Restart service 立刻重启服务

更新程序方法(需要以管理员身份进行

注意:更新程序切勿直接覆盖,否则可能会造成不可预料的错误!请按照以下的步骤进行:

  • 提前下载好新版本的 Pcap_DNSProxy(亦即 安装方法 中第2步),更新过程可能会造成域名解析短暂中断
  • 备份好所有配置文件 Hosts 文件 IPFilter 文件的自定义内容
  • 右键以管理员身份(Vista 以及更新版本)或直接以管理员登录双击(XP/2003)运行 ServiceControl.bat
  • 输入 2 并回车,即选择 2: Uninstall service 卸载服务
  • 将整个 Pcap_DNSProxy 程序的目录删除。注意 Windows 防火墙可能会留有允许程序访问网络的信息,卸载服务后又变更了程序的目录则可能需要使用注册表清理工具清理
  • 将新版本的 Pcap_DNSProxy 解压到任何位置(亦即 安装方法 中第3步)
  • 将配置文件的自定义内容加回新版本配置文件里相应的区域内
  • 按照 安装方法 中第4步重新部署 Pcap_DNSProxy

安全模式下的使用方法(需要以管理员身份进行):

程序具备在安全模式下运行的能力,在安全模式下右键以管理员身份直接运行程序

  • 直接运行模式有控制台窗口,关闭程序时直接关闭控制台窗口即可
  • 注意:直接运行可能会生成 Service start error, ERROR_FAILED_SERVICE_CONTROLLER_CONNECT(The service process could not connect to the service controller). 错误,因为程序是设计运行于系统服务模式,虽然也可直接运行但并不推荐

卸载方法(需要以管理员身份进行):

  • 按照 安装方法 中第6步还原 DNS 域名服务器地址配置
  • 右键以管理员身份(Vista 以及更新版本)或直接以管理员登录双击(XP/2003)运行 ServiceControl.bat
    • 输入 2 并回车,即选择 2: Uninstall service 卸载服务
    • 注意 Windows 防火墙可能会留有允许程序访问网络的信息,故卸载后可能需要使用注册表清理工具清理
    • 转移工具目录路径需要重新安装服务,先卸载服务转移,转移完成后重新安装服务即可

正常工作查看方法

  • 打开命令提示符
    • 在开始菜单或直接 Win + R 调出 运行 ,输入 cmd 并回车
    • 开始菜单 - 程序/所有程序 - 附件 - 命令提示符
  • 输入 nslookup www.google.com 并回车
  • 运行结果应类似:

    1
    2
    3
    4
    5
    6
    nslookup www.google.com
    服务器: pcap-dnsproxy.localhost.server(注意:此处由配置文件设置的值确定,参见下文 `配置文件详细参数说明` 一节)
    Address: 127.0.0.1(视所在网络环境而定,本地监听协议为 IPv6 时为 ::1
    非权威应答:
    名称: www.google.com
    Addresses: ……(IP地址或地址列表)
  • 如非以上结果,请移步 FAQ 文档运行结果分析 一节


注意事项

  • 修改 DNS 服务器时请务必设置一个正确的、有效的、可以正常使用的境外DNS服务器!
  • 关于 WinPcap
    • 如果程序启动提示丢失 wpcap.dll 请重新安装 WinPcap 或者将其更新到最新版本
    • 安装前注意系统是否已经安装过 WinPcap 建议不要重复安装
  • Windows 平台下读取文件名时不存在大小写的区别
  • 配置文件 Hosts 文件 IPFilter 文件和错误报告所在的目录以上文 安装方法 一节中第4步注册的服务信息为准
    • 填写时一行不要超过 4096字节/4KB
    • 文件读取只支持整个文本单一的编码和换行格式组合,切勿在文本文件中混合所支持的编码或换行格式!
  • 服务启动前请先确认没有其它本地 DNS 服务器运行或本工具多个拷贝运行中,否则可能会导致监听冲突无法正常工作
    • 监听冲突会生成错误报告,可留意 Windows Socket 相关的错误(参见 FAQ 文档中 Error.log 详细错误报告 一节)
  • 杀毒软件/第三方防火墙可能会阻止本程序的操作,请将行为全部允许或将本程序加入到白名单中
  • 如果启动服务时提示 “服务没有及时响应启动或者控制请求” 请留意是否有错误报告生成,详细的错误信息参见 FAQ 文档中 Error.log 详细错误报告 一节
  • 目录和程序的名称可以随意更改,但请务必在进行安装方法第4步前完成。如果服务注册后需移动工具目录的路径,参见上文 卸载方法 第2步的注意事项
  • 由于本人水平有限,程序编写难免会出现差错疏漏,如有问题可至项目页面提出,望谅解 v_v

功能和技术

  • 批处理的作用:
    • 运行结束会有运行结果,具体是否成功需要留意屏幕上的提示
    • 1: Install service - 将程序注册为系统服务,并启动程序进行 Windows 防火墙测试
      • 运行结束时会显示 Done. Please confirm the PcapDNSProxyService service had been installed.
    • 2: Uninstall service - 停止并卸载工具的服务
      • 运行结束时会显示 Done. Please confirm the PcapDNSProxyService service had been deleted.
    • 3: Start service - 启动工具的服务
      • 运行结束时会显示 Done. Please confirm the PcapDNSProxyService service had been started.
    • 4: Stop service - 停止工具的服务
      • 运行结束时会显示 Done. Please confirm the PcapDNSProxyService service had been stopped.
    • 5: Restart service - 重启工具的服务
      • 运行结束时会显示 Done. Please confirm the PcapDNSProxyService service had been restarted.
    • 6: Service Query(Windows XP/2003 only) - 适用于 Windows XP/2003 以及更旧版本 Windows 的测试批处理,能测试工具服务是否安装成功
      • 如果服务安装成功,运行后会显示 SERVICE_NAME: PcapDNSProxyService(不含引号)
  • 配置文件支持的文件名(只会读取优先级较高者,优先级较低者将被直接忽略):
    • Windows: Config.ini > Config.conf > Config
    • Linux/Mac: Config.conf > Config.ini > Config
  • 请求域名解析优先级
    • 使用系统 API 函数进行域名解析(大部分):系统 Hosts > Pcap_DNSProxy 的 Hosts 条目(Whitelist/白名单条目 > Hosts/主要 Hosts 列表) > DNS 缓存 > Local Hosts/境内 DNS 解析域名列表 > 远程 DNS 服务器
    • 直接使用网络适配器设置进行域名解析(小部分):Pcap_DNSProxy 的 Hosts.ini(Whitelist/白名单条目 > Hosts/主要 Hosts 列表) > DNS 缓存 > Local Hosts/境内 DNS 解析域名列表 > 远程 DNS 服务器
    • 请求远程 DNS 服务器的优先级:Hosts Only 模式 > TCP 模式的 DNSCurve 加密/非加密模式(如有) > UDP 模式的 DNSCurve 加密/非加密模式(如有) > TCP 模式普通请求(如有) > UDP 模式普通请求
  • 本工具的 DNSCurve/DNSCrypt 协议是内置的实现,不需要安装 DNSCrypt 官方的工具!
    • DNSCurve 协议为 Streamlined/精简类型
    • 自动获取连接信息时必须保证系统时间的正确,否则证书验证时会出错导致连接信息获取失败!
    • DNSCrypt 官方工具会占用本地 DNS 端口导致 Pcap_DNSProxy 部署失败!

特别使用技巧

这里罗列出部分作者建议的介绍和使用技巧,供大家参考和使用。关于调整配置,参见下文 配置文件详细参数说明 一节

  • 一个含有大部分境内域名的 [Local Hosts] 如有需要可直接添加到 Pcap_DNSProxy 的 Hosts 里,参见 Hosts 文件格式说明 一节
  • DNS缓存类型
    • Timer/计时型:可以自定义缓存的时间长度,队列长度不限
    • Queue/队列型:默认缓存时间15分钟,可通过 Default TTL 值自定义,同时可自定义缓存队列长度(亦即限制队列长度的 Timer/计时型
    • 强烈建议打开 DNS 缓存功能!
  • 本工具配置选项丰富,配置不同的组合会有不同的效果,介绍几个比较常用的组合:
    • 默认配置:UDP 请求 + 抓包模式
    • Local Main = 1 同时 Local Routing = 1 时:将大部分的解析请求发往境内的DNS服务器,遇到解析出来的是境外的地址后切换到境外服务器进行解析
      • 此组合的过滤效果依靠境内路由表,不可靠
    • Protocol = TCP:先 TCP 请求失败后再 UDP 请求 + 抓包模式,对网络资源的占用比较高
      • 由于 TCP 请求大部分时候不会被投毒污染,此组合的过滤效果比较可靠
    • 将目标服务器的请求端口改为非标准 DNS 端口:例如 OpenDNS 支持 53 标准端口和 5353 非标准端口的请求
      • 非标准 DNS 端口现阶段尚未被干扰,此组合的过滤效果比较可靠
    • Multi Request Times = xx 时:应用到所有除请求境内服务器外的所有请求,一个请求多次发送功能
      • 此功能用于对抗网络丢包比较严重的情况,对系统和网络资源的占用都比较高,但在网络环境恶劣的情况下能提高获得解析结果的可靠性
    • DNSCurve = 1 同时 Encryption = 0:使用 DNSCurve/DNSCrypt 非加密模式请求域名解析
      • 此组合等于使用非标准DNS端口请求,但是多了一层标签识别使得可靠性很高,详细情况参见上文
    • DNSCurve = 1 同时 Encryption = 1:使用 DNSCurve/DNSCrypt 加密模式请求域名解析
      • 此组合加密传输所有域名请求,域名解析可靠性最高
    • DNSCurve = 1 同时 Encryption = 1 同时 Encryption Only = 1:只使用 DNSCurve/DNSCrypt 加密模式请求域名解析
      • 上文的加密组合并不阻止程序在请求 DNSCurve/DNSCrypt 加密模式失败是使用其它协议请求域名解析,开启 Encryption Only = 1 后将只允许使用加密传输,安全性和可靠性最高,但域名解析成功率可能会下降

配置文件详细参数说明

有效参数格式为 选项名称 = 数值/数据(注意空格和等号的位置)

注意:配置文件只会在工具服务开始时读取,修改本文件的参数后请重启服务(参见上文 重启服务 一节)

  • Base - 基本参数区域

    * `Version` - 配置文件的版本,用于正确识别配置文件:本参数与程序版本号不相关,切勿修改,默认为发布时的最新配置文件版本
    * `File Refresh Time` - 文件刷新间隔时间:单位为秒,最短间隔时间为5秒,默认为 10 秒
    * `File Hash` - 文件 Hash 功能,开启此功能能降低刷新文件时的 CPU 占用:开启为1/关闭为0,默认为 1
    * `Additional Path` - 附加的数据文件读取路径,附加在此处的目录路径下的 Hosts 文件和 IPFilter 文件会被依次读取:默认为空
    * `Hosts File Name` - Hosts 文件的文件名,附加在此处的 Hosts 文件名将被依次读取:默认为 `Hosts.ini|Hosts.conf|Hosts|Hosts.txt|Hosts.csv|WhiteList.txt|White_List.txt`
    * `IPFilter File Name` - IPFilter 文件的文件名,附加在此处的 IPFilter 文件名将被依次读取:默认为 `IPFilter.ini|IPFilter.conf|IPFilter.dat|IPFilter.csv|IPFilter|Guarding.p2p|Guarding|Routing.txt|Route.txt|chnrouting.txt|chnroute.txt`
    
  • Log - 日志参数区域

    • Print Error - 输出错误报告功能:开启为1/关闭为0,默认为 1
    • Print Running Log - 输出运行日志功能:默认为 0
    • Log Maximum Size - 日志文件最大容量:直接填数字时单位为字节,可加上单位,支持的单位有 KB/MB/GB,可接受范围为 4KB - 4GB,如果留空则为 8MB,默认为空
      • 注意:日志文件到达最大容量后将被直接删除,然后重新生成新的日志文件,原来的日志将无法找回!
  • DNS - 域名解析参数区域

    • Protocol - 发送请求所使用的协议,分 UDP 和 TCP:默认为 UDP
      • 注意:此处所指的协议指的是程序请求远程 DNS 服务器时所使用的协议,而向本程序请求域名解析时可随意使用 UDP 或 TCP
    • Hosts Only - Hosts Only 直连模式,启用后将使用系统直接请求远程服务器而启用只使用本工具的 Hosts 功能:开启为1/关闭为0,默认为 0
    • Local Main - 主要境内服务器请求功能,开启后则平时使用 Local 的服务器进行解析,遇到遭投毒污染的解析结果时自动再向境外服务器请求
    • Local Hosts - 白名单境内服务器请求功能,开启后才能使用自带或自定义的 Local Hosts 白名单:开启为1/关闭为0,默认为 0
    • Local Routing - Local 路由表识别功能,开启后所有使用 Local 请求的解析结果都会被检查,路由表命中后会直接返回结果,命中失败将丢弃解析结果并向境外服务器再次发起请求:开启为1/关闭为0,默认为 0
    • Cache Type - DNS 缓存的类型:分 Timer/计时型以及 Queue/队列型
    • Cache Parameter - DNS 缓存的参数:Timer/计时型 时为时间长度(单位为秒),Queue/队列型 时为队列长度
    • Default TTL - Hosts 条目默认生存时间:单位为秒,留空则为 900秒/15分钟,默认为空
  • Listen - 监听参数区域

    • Pcap Capture - 抓包功能总开关,开启后抓包模块才能正常使用:开启为1/关闭为0,默认为 1
    • Operation Mode - 程序的监听工作模式:分 Server/服务器模式Private/私有网络模式Proxy/代理模式,默认为 Private
      • Server/服务器模式:打开DNS通用端口(TCP/UDP 同时打开),可为所有其它设备提供代理域名解析请求服务
      • Private/私有网络模式:打开DNS通用端口(TCP/UDP 同时打开),可为仅限于私有网络地址的设备提供代理域名解析请求服务
      • Proxy/代理模式:只打开回环地址的DNS端口(TCP/UDP 同时打开),只能为本机提供代理域名解析请求服务
      • Custom/自定义模式:打开DNS通用端口(TCP/UDP 同时打开),可用的地址由 IPFilter 参数决定
    • Listen Protocol - 监听协议,本地监听的协议:可填入 IPv4 和 IPv6 和 TCP 和 UDP,默认为 IPv4 + IPv6 + UDP
      • 只填 IPv4 或 IPv6 配合 UDP 或 TCP 时,只监听指定协议的本地端口
      • IPv4 + IPv6 + TCP + UDP 时同时监听两个协议的本地端口
      • 填入的协议可随意组合
    • Listen Port - 监听端口,本地监听请求的端口:可填入 1-65535 之间的端口,如果留空则为 53,默认为空
    • IPFilter Type - IPFilter 参数的类型:分为 Deny 禁止和 Permit 允许,对应 IPFilter 参数应用为黑名单或白名单,默认为 Deny
    • IPFilter Level - IPFilter 参数的过滤级别,级别越高过滤越严格,与 IPFilter 条目相对应:0为不启用过滤,如果留空则为 0,默认为空
    • Accept Type - 禁止或只允许所列DNS类型的请求:格式为 Deny:DNS记录的名称或ID(|DNS记录的名称或ID)Permit:DNS记录的名称或ID(|DNS记录的名称或ID)(不含引号,括号内为可选项目)
      • 所有可用的 DNS 类型列表:
      • A/1
      • NS/2
      • MD/3
      • MF/4
      • CNAME/5
      • SOA/6
      • MB/7
      • MG/8
      • MR/9
      • NULL/10
      • WKS/11
      • PTR/12
      • HINFO/13
      • MINFO/14
      • MX/15
      • TXT/16
      • RP/17
      • AFSDB/18
      • X25/19
      • ISDN/20
      • RT/21
      • NSAP/22
      • NSAP_PTR/23
      • SIG/24
      • KEY/25
      • PX/26
      • GPOS/27
      • AAAA/28
      • LOC/29
      • NXT/30
      • EID/31
      • NIMLOC/32
      • SRV/33
      • ATMA/34
      • NAPTR/35
      • KX/36
      • CERT/37
      • A6/38
      • DNAME/39
      • SINK/40
      • OPT/41
      • APL/42
      • DS/43
      • SSHFP/44
      • IPSECKEY/45
      • RRSIG/46
      • NSEC/47
      • DNSKEY/48
      • DHCID/49
      • NSEC3/50
      • NSEC3PARAM/51
      • TLSA/52
      • HIP/55
      • NINFO/56
      • RKEY/57
      • TALINK/58
      • CDS/59
      • CDNSKEY/60
      • OPENPGPKEY/61
      • SPF/99
      • UINFO/100
      • UID/101
      • GID/102
      • UNSPEC/103
      • NID/104
      • L32/105
      • L64/106
      • LP/107
      • EUI48/108
      • EUI64/109
      • TKEY/249
      • TSIG/250
      • IXFR/251
      • AXFR/252
      • MAILB/253
      • MAILA/254
      • ANY/255
      • URI/256
      • CAA/257
      • TA/32768
      • DLV/32769
      • RESERVED/65535
  • Addresses - 普通模式地址区域
    注意:IPv4 地址格式为 IPv4 地址:端口,IPv6地址格式为[IPv6 地址]:端口(均不含引号)

    • IPv4 Listen Address - IPv4 本地监听地址:默认为空
      • 填入此值后 IPv4 协议的 Operation ModeListen Port 参数将被自动忽略
    • IPv4 DNS Address - IPv4 主要 DNS 服务器地址:需要输入一个带端口格式的地址,默认为 8.8.4.4:53
      • 本参数支持同时请求多服务器的功能,开启后将同时向列表中的服务器请求解析域名,并采用最快回应的服务器的结果
      • 使用同时请求多服务器格式为 地址 A:端口|地址 B:端口|地址 C:端口(不含引号),同时请求多服务器启用后将自动启用 Alternate Multi Request 参数(参见下文)
      • 指定端口时可使用服务名称代替:
        • TCPMUX
        • ECHO
        • DISCARD
        • SYSTAT
        • DAYTIME
        • NETSTAT
        • QOTD
        • MSP
        • CHARGEN
        • FTP
        • SSH
        • TELNET
        • SMTP
        • TIME
        • RAP
        • RLP
        • NAME
        • WHOIS
        • TACACS
        • DNS
        • XNSAUTH
        • MTP
        • BOOTPS
        • BOOTPC
        • TFTP
        • RJE
        • FINGER
        • TTYLINK
        • SUPDUP
        • SUNRPC
        • SQL
        • NTP
        • EPMAP
        • NETBIOSNS
        • NETBIOSDGM
        • NETBIOSSSN
        • IMAP
        • BFTP
        • SGMP
        • SQLSRV
        • DMSP
        • SNMP
        • SNMPTRAP
        • ATRTMP
        • ATHBP
        • QMTP
        • IPX
        • IMAP
        • IMAP3
        • BGMP
        • TSP
        • IMMP
        • ODMR
        • RPC2PORTMAP
        • CLEARCASE
        • HPALARMMGR
        • ARNS
        • AURP
        • LDAP
        • UPS
        • SLP
        • SNPP
        • MICROSOFTDS
        • KPASSWD
        • TCPNETHASPSRV
        • RETROSPECT
        • ISAKMP
        • BIFFUDP
        • WHOSERVER
        • SYSLOG
        • ROUTERSERVER
        • NCP
        • COURIER
        • COMMERCE
        • RTSP
        • NNTP
        • HTTPRPCEPMAP
        • IPP
        • LDAPS
        • MSDP
        • AODV
        • FTPSDATA
        • FTPS
        • NAS
        • TELNETS
    • IPv4 Alternate DNS Address - IPv4 备用 DNS 服务器地址:需要输入一个带端口格式的地址,默认为 8.8.8.8:53|208.67.220.220:53|208.67.222.222:53
      • 本参数支持同时请求多服务器的功能,开启后将同时向列表中的服务器请求解析域名,并采用最快回应的服务器的结果
      • 使用同时请求多服务器格式为 “地址 A:端口|地址 B:端口|地址 C:端口”(不含引号),同时请求多服务器启用后将自动启用 Alternate Multi Request 参数(参见下文)
      • 指定端口时可使用服务名称代替,参见上表
    • IPv4 Local DNS Address - IPv4 主要境内 DNS 服务器地址,用于境内域名解析:需要输入一个带端口格式的地址,默认为 114.114.115.115:53
      • 指定端口时可使用服务名称代替,参见上表
    • IPv4 Local Alternate DNS Address - IPv4 备用境内 DNS 服务器地址,用于境内域名解析:需要输入一个带端口格式的地址,默认为 114.114.114.114:53
      • 指定端口时可使用服务名称代替,参见上表
    • IPv6 Listen Address - IPv6 本地监听地址:默认为空
      • 填入此值后 IPv6 协议的 Operation ModeListen Port 参数将被自动忽略
    • IPv6 DNS Address - IPv6 主要 DNS 服务器地址:需要输入一个带端口格式的地址,留空为不启用,默认为空
      • 指定端口时可使用服务名称代替,参见上表
    • IPv6 Alternate DNS Address - IPv6 备用 DNS 服务器地址:需要输入一个带端口格式的地址,留空为不启用,默认为空
      • 指定端口时可使用服务名称代替,参见上表
    • IPv6 Local DNS Address - IPv6 主要境内 DNS 服务器地址,用于境内域名解析:需要输入一个带端口格式的地址,留空为不启用,默认为空
      • 指定端口时可使用服务名称代替,参见上表
    • IPv6 Local Alternate DNS Address - IPv6 备用境内 DNS 服务器地址,用于境内域名解析:需要输入一个带端口格式的地址,留空为不启用,默认为空
      • 指定端口时可使用服务名称代替,参见上表
  • Values - 扩展参数值区域

    • EDNS0 Payload Size - EDNS0 标签附带使用的最大载荷长度:最小为 DNS 协议实现要求的 512(bytes),留空则使用 EDNS0 标签要求最短的 1220(bytes),默认为留空
    • IPv4 TTL - IPv4 主要 DNS 服务器接受请求的远程 DNS 服务器数据包的 TTL 值:0为自动获取,取值为 1-255 之间:默认为 0
      • 本参数支持同时请求多服务器的功能,与 IPv4 DNS Address 相对应
      • 使用同时请求多服务器格式为 TTL(A)|TTL(B)|TTL(C),也可直接默认(即只填一个 0 不是用此格式)则所有 TTL 都将由程序自动获取
      • 使用时多 TTL 值所对应的顺序与 IPv4 DNS Address 中对应的地址顺序相同
    • IPv6 Hop Limits - IPv6 主要 DNS 服务器接受请求的远程 DNS 服务器数据包的 Hop Limits 值:0为自动获取,取值为 1-255 之间,默认为 0
      • 本参数支持同时请求多服务器的功能,与 IPv6 DNS Address 相对应
      • 使用同时请求多服务器格式为 Hop Limits(A)|Hop Limits(B)|Hop Limits(C),也可直接默认(即只填一个 0 不是用此格式)则所有 Hop Limits 都将由程序自动获取
      • 使用时多 Hop Limits 值所对应的顺序与 IPv6 DNS Address 中对应的地址顺序相同
    • IPv4 Alternate TTL - IPv4 备用 DNS 服务器接受请求的远程 DNS 服务器数据包的 TTL 值:0为自动获取,取值为 1-255 之间:默认为 0
      • 本参数支持同时请求多服务器的功能,与 IPv4 Alternate DNS Address 相对应
      • 使用同时请求多服务器格式为 TTL(A)|TTL(B)|TTL(C),也可直接默认(即只填一个 0 不是用此格式)则所有 TTL 都将由程序自动获取
      • 使用时多 TTL 值所对应的顺序与 IPv4 Alternate DNS Address 中对应的地址顺序相同
    • IPv6 Alternate Hop Limits - IPv6备用DNS服务器接受请求的远程 DNS 服务器数据包的 Hop Limits 值:0为自动获取,取值为 1-255 之间,默认为 0
      • 本参数支持同时请求多服务器的功能,与 IPv6 Alternate DNS Address 相对应
      • 使用同时请求多服务器格式为 Hop Limits(A)|Hop Limits(B)|Hop Limits(C),也可直接默认(即只填一个 0 不是用此格式)则所有 Hop Limits 都将由程序自动获取
      • 使用时多 Hop Limits 值所对应的顺序与 IPv6 Alternate DNS Address 中对应的地址顺序相同
    • Hop Limits Fluctuation - IPv4 TTL/IPv6 Hop Limits 可接受范围,即 IPv4 TTL/IPv6 Hop Limits 的值 ± 数值的范围内的数据包均可被接受,用于避免网络环境短暂变化造成解析失败的问题:取值为 1-255 之间,默认为2
    • Reliable Socket Timeout - 可靠协议端口超时时间,可靠端口指 TCP 协议,单位为毫秒:默认为 5000
    • Unreliable Socket Timeout - 不可靠协议端口超时时间,不可靠端口指 UDP/ICMP/ICMPv6 协议,单位为毫秒:默认为 3000
    • ICMP Test - ICMP/Ping 测试间隔时间:单位为秒,最短间隔时间为5秒,默认为 900秒/15分钟
    • Domain Test - DNS 服务器解析域名测试间隔时间:单位为秒,最短间隔时间为5秒,默认为 900秒/15分钟
    • Alternate Times - 备用服务器失败次数阈值,一定周期内如超出阈值会触发服务器切换:默认为5次
    • Alternate Time Range - 备用服务器失败次数阈值计算周期:单位为秒,默认为 60秒/1分钟
    • Alternate Reset Time - 备用服务器重置切换时间,切换产生后经过此事件会切换回主要服务器:单位为秒,默认为 300秒/5分钟
    • Multi Request Times - 接受一个域名请求后向同一个远程服务器发送多次域名解析请求:0为关闭,1时为收到一个请求时请求2次,2时为收到一个请求时请求3次……最大值为15,也就是最多可同时请求16次,默认为 0
      • 注意:此值将应用到 Local Hosts 外对所有远程服务器所有协议的请求,因此可能会对系统以及远程服务器造成压力,请谨慎考虑开启的风险!
      • 一般除非丢包非常严重干扰正常使用否则不建议开启,开启也不建议将值设得太大。实际使用可以每次+1后重启服务测试效果,找到最合适的值
  • Switches - 控制开关区域

    • Domain Case Conversion - 随机转换域名请求大小写:开启为1/关闭为0,默认为 1
    • Compression Pointer Mutation - 随机添加压缩指针:可填入 1 (+ 2 + 3),关闭为0,默认为 0
      • 随机添加压缩指针有3种不同的类型,对应 1 和 2 和 3
      • 可单独使用其中一个,即只填一个数字,或填入多个,中间使用 + 号连接
      • 填入多个时,当实际需要使用随机添加压缩指针时将随机使用其中的一种,每个请求都有可能不相同
    • EDNS0 Label - EDNS0 标签支持,开启后将为所有请求添加 EDNS0 标签:开启为1/关闭为0,默认为 0
    • DNSSEC Request - DNSSEC 请求,开启后将尝试为所有请求添加 DNSSEC 请求:开启为1/关闭为0,默认为 0
      • 注意:此功能为实验性质,本程序不具备任何验证 DNSSEC 回复的能力,单独开启此功能理论上并不能避免 DNS 投毒污染的问题
    • Alternate Multi Request - 备用服务器同时请求参数,开启后将同时请求主要服务器和备用服务器并采用最快回应的服务器的结果:开启为1/关闭为0,默认为 0
      • 同时请求多服务器启用后本参数将强制启用,将同时请求所有存在于列表中的服务器,并采用最快回应的服务器的结果
    • IPv4 Data Filter - IPv4 数据包头检测:开启为1/关闭为0,默认为 0
    • TCP Data Filter - TCP 数据包头检测;开启为1/关闭为0,默认为 1
    • DNS Data Filter - DNS 数据包头检测:开启为1/关闭为0,默认为 1
    • Blacklist Filter - 解析结果黑名单过滤:开启为1/关闭为0,默认为 1
  • Data - 数据区域

    • ICMP ID - ICMP/Ping 数据包头部ID的值:格式为 0x** 的十六进制字符,如果留空则获取线程的 ID 作为请求用 ID 默认为空
    • ICMP Sequence - ICMP/Ping 数据包头部 Sequence/序列号 的值:格式为 0x** 的十六进制字符,如果留空则为 0x0001 默认为空
    • Domain Test Data - DNS 服务器解析域名测试:请输入正确、确认不会被投毒污染的域名并且不要超过 253 字节 ASCII 数据,留空则会随机生成一个域名进行测试:默认为空
    • Domain Test ID - DNS 数据包头部 ID 的值:格式为 0x** 的十六进制字符,如果留空则为 0x0001 默认为空
    • ICMP PaddingData - ICMP 附加数据,Ping 程序发送请求时为补足数据使其达到 Ethernet 类型网络最低的可发送长度时添加的数据:长度介乎于 18字节` - 1512字节 ASCII 数据之间,留空则使用 Microsoft Windows Ping 程序的 ICMP 附加数据 默认为空
    • Localhost Server Name - 本地 DNS 服务器名称:请输入正确的域名并且不要超过253字节ASCII数据,留空则使用 pcap-dnsproxy.localhost.server 作为本地服务器名称,默认为空
  • DNSCurve - DNSCurve 协议基本参数区域

    • DNSCurve - DNSCurve 协议总开关,控制所有和 DNSCurve 协议有关的选项:开启为1/关闭为0,默认为 0
    • DNSCurve Protocol - 发送请求所使用的协议:分 UDP 和 TCP,默认为 UDP
    • DNSCurve Payload Size - DNSCurve EDNS0 标签附带使用的最大载荷长度,同时亦为发送请求的总长度,并决定请求的填充长度:最小为 DNS 协议实现要求的 512(bytes),留空则为 512(bytes),默认为留空
    • Encryption - 启用加密,DNSCurve 协议支持加密和非加密模式:开启为1/关闭为0,默认为 1
    • Encryption Only - 只使用加密模式:开启为1/关闭为0,默认为 1
      • 注意:使用 只使用加密模式 时必须提供服务器的魔数和指纹用于请求和接收
    • Key Recheck Time - DNSCurve 协议DNS服务器连接信息检查间隔:单位为秒,最短为10秒,默认为 3600秒/1小时
  • DNSCurve Addresses - DNSCurve 协议地址区域

    • DNSCurve IPv4 DNS Address - DNSCurve 协议 IPv4 主要 DNS 服务器地址:需要输入一个带端口格式的地址,默认为 208.67.220.220:443
      • 指定端口时可使用服务名称代替,参见上表
    • DNSCurve IPv4 Alternate DNS Address - DNSCurve 协议 IPv4 备用 DNS 服务器地址:需要输入一个带端口格式的地址,默认为 208.67.222.222:443
      • 指定端口时可使用服务名称代替,参见上表
    • DNSCurve IPv6 DNS Address - DNSCurve 协议 IPv6 主要 DNS 服务器地址:需要输入一个带端口格式的地址,默认为空
      • 指定端口时可使用服务名称代替,参见上表
    • DNSCurve IPv6 Alternate DNS Address - DNSCurve 协议 IPv6 备用 DNS 服务器地址:需要输入一个带端口格式的地址,默认为空
      • 指定端口时可使用服务名称代替,参见上表
    • DNSCurve IPv4 Provider Name - DNSCurve 协议 IPv4 主要 DNS 服务器提供者,请输入正确的域名并且不要超过253字节 ASCII 数据,默认为 2.dnscrypt-cert.opendns.com
      • 注意:自动获取 DNSCurve 服务器连接信息时必须输入提供者的域名,不能留空
    • DNSCurve IPv4 Alternate Provider Name - DNSCurve 协议 IPv4 备用 DNS 服务器提供者,请输入正确的域名并且不要超过253字节 ASCII 数据,默认为 2.dnscrypt-cert.opendns.com
      • 注意:自动获取 DNSCurve 服务器连接信息时必须输入提供者的域名,不能留空
    • DNSCurve IPv6 Provider Name - DNSCurve 协议 IPv6 主要 DNS 服务器提供者,请输入正确的域名并且不要超过253字节 ASCII 数据,默认为空
      • 注意:自动获取 DNSCurve 服务器连接信息时必须输入提供者的域名,不能留空
    • DNSCurve IPv6 Provider Name - DNSCurve 协议 IPv6 备用 DNS 服务器提供者,请输入正确的域名并且不要超过253字节 ASCII 数据,默认为空
      • 注意:自动获取 DNSCurve 服务器连接信息时必须输入提供者的域名,不能留空
  • DNSCurve Keys - DNSCurve 协议密钥区域
    注意:公开网站上的 “公钥” 普遍为验证用的公钥,用于验证与服务器通讯时使用的指纹,两者为不同性质的公钥不可混用!

    • Client Public Key - 自定义客户端公钥:可使用 KeyPairGenerator 生成,留空则每次启动时自动生成,默认为空
    • Client Secret Key - 自定义客户端私钥:可使用 KeyPairGenerator 生成,留空则每次启动时自动生成,默认为空
    • IPv4 DNS Public Key - DNSCurve 协议 IPv4 主要 DNS 服务器验证用公钥,默认为 B735:1140:206F:225D:3E2B:D822:D7FD:691E:A1C3:3CC8:D666:8D0C:BE04:BFAB:CA43:FB79
    • IPv4 Alternate DNS Public Key - DNSCurve 协议 IPv4 备用 DNS 服务器验证用公钥,默认为 B735:1140:206F:225D:3E2B:D822:D7FD:691E:A1C3:3CC8:D666:8D0C:BE04:BFAB:CA43:FB79
    • IPv6 DNS Public Key - DNSCurve 协议 IPv6 主要 DNS 服务器验证用公钥,默认为空
    • IPv6 Alternate DNS Public Key - DNSCurve 协议 IPv6 备用 DNS 服务器验证用公钥,默认为空
    • IPv4 DNS Fingerprint - DNSCurve 协议 IPv4 主要 DNS 服务器传输用指纹,留空则自动通过服务器提供者和公钥获取,默认为空
    • IPv4 Alternate DNS Fingerprint - DNSCurve 协议 IPv4 备用 DNS 服务器传输用指纹,留空则自动通过服务器提供者和公钥获取,默认为空
    • IPv6 DNS Fingerprint - DNSCurve 协议 IPv6 备用 DNS 服务器传输用指纹,留空则自动通过服务器提供者和公钥获取,默认为空
    • IPv6 Alternate DNS Fingerprint - DNSCurve 协议IPv6备用 DNS 服务器传输用指纹,留空则自动通过服务器提供者和公钥获取,默认为空
  • DNSCurve Magic Number - DNSCurve 协议魔数区域

    • IPv4 Receive Magic Number - DNSCurve 协议 IPv4 主要 DNS 服务器接收魔数:长度必须为8字节,留空则使用程序内置的接收魔数,默认留空
    • IPv4 Alternate Receive Magic Number - DNSCurve 协议 IPv4 备用 DNS 服务器接收魔数:长度必须为8字节,留空则使用程序内置的接收魔数,默认留空
    • IPv6 Receive Magic Number - DNSCurve 协议 IPv6 主要 DNS 服务器接收魔数:长度必须为8字节,留空则使用程序内置的接收魔数,默认留空
    • IPv6 Alternate Receive Magic Number - DNSCurve 协议 IPv6 备用 DNS 服务器接收魔数:长度必须为8字节,留空则使用程序内置的接收魔数,默认留空
    • IPv4 DNS Magic Number - DNSCurve 协议 IPv4 主要 DNS 服务器发送魔数:长度必须为8字节,留空则自动获取,默认留空
    • IPv4 Alternate DNS Magic Number - DNSCurve 协议 IPv4 备用 DNS 服务器发送魔数:长度必须为8字节,留空则自动获取,默认留空
    • IPv6 DNS Magic Number - 协议 IPv6 主要 DNS 服务器发送魔数:长度必须为8字节,留空则自动获取,默认留空
    • IPv6 Alternate DNS Magic Number - DNSCurve 协议 IPv6 备用 DNS 服务器发送魔数:长度必须为8字节,留空则自动获取,默认留空

Hosts 文件格式说明

Hosts 配置文件分为 Hosts/主要Hosts列表Local Hosts/境内DNS解析域名列表 区域

  • 区域通过标签识别,修改时切勿将其删除
  • 优先级:Local Hosts/境内DNS解析域名列表 > Hosts/主要Hosts列表Whitelist/白名单条目Banned/黑名单条目 的优先级由位置决定,参见下文详细说明
  • 一条条目的总长度切勿超过 4096字节/4KB
  • 需要注释请在条目开头添加 #/井号
  • 优先级别自上而下递减,条目越前优先级越高
  • 平行 Hosts 条目支持数量由请求域名以及 EDNS0 Payload 长度决定,建议不要超过70个 A 记录或40个 AAAA 记录

Whitelist - 白名单条目

此类型的条目列出的符合要求的域名会直接绕过 Hosts,不会使用 Hosts 功能

直接在条目前添加 NULL 即可,有效参数格式为 NULL 正则表达式

注意优先级的问题,例如有一片含白名单条目的区域:
NULL .*\.test\.localhost
127.0.0.1|127.0.0.2|127.0.0.3 .*\.localhost
虽然 .*\.localhost 包含了 .*\.test\.localhost 但由于优先级别自上而下递减,故先命中 .*\.test\.localhost 并返回使用远程服务器解析,从而绕过了下面的条目不使用Hosts的功能

Banned - 黑名单条目

此类型的条目列出的符合要求的域名会直接返回域名不存在的功能,避免重定向导致的超时问题

直接在条目前添加 BANNED 即可,有效参数格式为 BANNED 正则表达式

注意优先级的问题,例如有一片含黑名单条目的区域:
BANNED .*\.test\.localhost
127.0.0.1|127.0.0.2|127.0.0.3 .*\.localhost
虽然 .*\.localhost 包含了 .*\.test\.localhost 但由于优先级别自上而下递减,故先命中 .*\.test\.localhost 并直接返回域名不存在,从而绕过了下面的条目,达到屏蔽域名的目的

Hosts - 主要 Hosts 列表

有效参数格式为 地址(|地址A|地址B) 正则表达式(括号内为可选项目,注意间隔所在的位置)

  • 地址与正则表达式之间的间隔字符可为 Space/半角空格 或者 HT/水平定位符号,间隔长度不限,但切勿输入全角空格
  • 一条条目只能接受一种地址类型(IPv4/IPv6),如有同一个域名需要同时进行 IPv4/IPv6 的 Hosts,请分为两个条目输入
  • 平行地址原理为一次返回多个记录,而具体使用哪个记录则由请求者决定,一般为第1个
例如有一个 [Hosts] 下有效数据区域:
127.0.0.1|127.0.0.2|127.0.0.3 .*\.test\.localhost
127.0.0.4|127.0.0.5|127.0.0.6 .*\.localhost
::1|::2|::3    .*\.test.localhost
::4|::5|::6    .*\.localhost
虽然 .*\.localhost 包含了 .*\.test\.localhost 但是由于优先级别自上而下递减,故先命中 .*\.test\.localhost 并直接返回,不会再进行其它检查
请求解析 xxx.localhost 的 A 记录(IPv4)会返回 127.0.0.4、127.0.0.5 和 127.0.0.6
请求解析 xxx.localhost 的 AAAA 记录(IPv6)会返回 ::4、::5 和 ::6
请求解析 xxx.test.localhost 的 A 记录(IPv4)会返回 127.0.0.1、127.0.0.2 和 127.0.0.3
请求解析 xxx.test.localhost 的 AAAA 记录(IPv6)会返回 ::1、::2 和 ::3

Local Hosts - 境内 DNS 解析域名列表

本区域数据用于为域名使用境内 DNS 服务器解析提高访问速度,使用时请确认境内DNS服务器地址不为空(参见上文 配置文件详细参数说明 一节)

  • 要使用本功能,必须将配置文件内的 Local Hosts 选项打开!
  • 有效参数格式为 域名的正则表达式
  • 本功能不会对境内 DNS 服务器回复进行任何过滤,请确认本区域填入的数据不会受到 DNS 投毒污染干扰
例如有一个 [Local Hosts] 下有效数据区域:
.*\.test\.localhost
.*\.localhost
即所有符合以上正则表达式的域名请求都将使用境内DNS服务器解析

Stop - 临时停止读取标签

在需要停止读取的数据前添加 [Stop] 标签即可在中途停止对文件的读取,直到有其它标签时再重新开始读取

  • 例如有一片数据区域:

    [Hosts]

    127.0.0.1|127.0.0.2|127.0.0.3 .*\.test\.localhost

    [Stop]

    127.0.0.4|127.0.0.5|127.0.0.6 .*\.localhost

    ::1|::2|::3 .*\.test\.localhost

    ::4|::5|::6 .*\.localhost

    [Local Hosts]

    .*\.test\.localhost

    .*\.localhost

  • 则从 [Stop] 一行开始,下面到 [Local Hosts] 之间的数据都将不会被读取

  • 即实际有效的数据区域是:

    [Hosts]

    127.0.0.1|127.0.0.2|127.0.0.3 .*\.test\.localhost

    [Local Hosts]

    .*\.test\.localhost

    .*\.localhost


IPFilter 文件格式说明

IPFilter 配置文件分为 Blacklist/黑名单区域IPFilter/地址过滤区域 以及 Local Routing/境内路由表区域

  • 区域通过标签识别,修改时切勿将其删除
  • 一条条目的总长度切勿超过 4096字节/4KB
  • 需要注释请在条目开头添加 #/井号

Blacklist - 黑名单区域

Blacklist Filter 为开启时,将检查本列表域名与解析结果,如果解析结果里含有与域名对应的黑名单地址,则会直接丢弃此解析结果

有效参数格式为 地址(|地址A|地址B) 正则表达式(括号内为可选项目,注意间隔所在的位置)

  • 地址与正则表达式之间的间隔字符可为 Space/半角空格 或者 HT/水平定位符号,间隔长度不限,但切勿输入全角空格
  • 一条条目只能接受一种地址类型(IPv4/IPv6),如有同一个域名需要同时进行 IPv4/IPv6 地址的过滤,请分为两个条目输入

IPFilter - 地址过滤区域

地址过滤黑名单或白名单由配置文件的 IPFilter Type 值决定,Deny 禁止/黑名单和 Permit 允许/白名单

有效参数格式为 开始地址 - 结束地址, 过滤等级, 条目简介注释

  • 同时支持 IPv4 和 IPv6 地址,但填写时请分开为2个条目
  • 同一类型的地址地址段有重复的条目将会被自动合并

Local Routing - 境内路由表区域

Local Routing 为开启时,将检查本列表的路由表是否命中,检查与否与域名请求是否使用 Local 服务器有关,路由表命中后会直接返回结果,命中失败将丢弃解析结果并向境外服务器再次发起请求

有效参数格式为 地址块/网络前缀长度

  • 本路由表支持 IPv4 和 IPv6 地址
  • IPv4 时网络前缀长度范围为 1-32,IPv6 时网络前缀长度范围为 1-128

Stop - 临时停止读取标签

在需要停止读取的数据前添加 [Stop] 标签即可在中途停止对文件的读取,直到有其它标签时再重新开始读取