• 请不要在回答技术问题时复制粘贴 AI 生成的内容
chengr28
V2EX  ›  程序员

Pcap_DNSProxy 一个忽略 DNS 投毒污染的小工具

  •  6
     
  •   chengr28 · Jun 23, 2014 · 45366 views
    This topic created in 4519 days ago, the information mentioned may be changed or developed.
    https://github.com/chengr28/pcap_dnsproxy

    自己的小工程(?)嘛用的是 C/C++(其实骨子里是用了Cpp语法的C)
    之前看到SS的大大发了一个工具被引来了这边……
    听说用Python写简单,大部分DNS本地代理都是Python写的,可惜完全不懂
    看到这几天这么多工具忽然都冒出来被吓了 =3=

    回归正题
    这工具用的是 Pcap 抓包,什么IP头啊UDP都能看到,过滤其实也不难
    支持正则表达式的Hosts
    当然也支持TCP请求,不过TCP有几个固定域名会被连接重置,而且考虑资源占用当然首选UDP
    也可以把域名重定向请求境内的DNS服务器提高速度,不过规则我看过长得无法直视……就不带了
    v0.4里开始支持DNSCrypt的协议
    Windows/Linux/Mac 三个版本,不过Linux/Mac可能更新得比较慢
    54 replies  •  2020-01-21 09:48:33 +08:00
    LazyZhu
    LazyZhu
    Jun 23, 2014
    1
    “把域名重定向请求境内的DNS服务器”这个功能需要啊,类似于Dnsmasq的server设置,可以基于gfwlist做dns请求重定向
    chengr28
    chengr28
    OP
    Jun 23, 2014
    2
    @LazyZhu 哦哦可能是我的说法有问题……我的意思是规则太长项目没有自带,这个功能是有的,默认用的是114DNS: https://lh6.googleusercontent.com/-z1IfbCdAnJs/U6gj21OK4SI/AAAAAAABuJc/v_8IVkZ9pCk/w0/2014-06-23-RX-Hosts-Support.png
    jyzhengqian
    jyzhengqian
    Jun 23, 2014
    3
    围观Twitter上著名的28小盆友
    LazyZhu
    LazyZhu
    Jun 23, 2014
    4
    哦,你这个有点不一样,是白名单么?我可以改成黑名单来用么,就是把gfwlist加入Local Hosts,并把IPv4 Local DNS Address改成自己的可用dns可以么
    LazyZhu
    LazyZhu
    Jun 23, 2014
    5
    @jyzhengqian 难怪,眨眼功夫他又发了个twitter -_-!
    xinhugo
    xinhugo
    Jun 23, 2014❤️1
    6
    提供一份白名单(正则表达式),大部分以GitHub收集的域名列表转换而来。

    https://xinhugo-list.googlecode.com/svn/trunk/White_List.txt
    LazyZhu
    LazyZhu
    Jun 23, 2014
    7
    @xinhugo 都是以b开始的?

    PS:白名单是无止境的,黑名单只有2000+
    streamgo
    streamgo
    Jun 23, 2014
    8
    @chengr28 安装服务、启动程序,均报错。WIN7 64位系统。
    xinhugo
    xinhugo
    Jun 23, 2014
    9
    @LazyZhu 白名单改成黑名单用?当然可以。

    编辑 Config.ini,「IPv4 DNS Address」、「IPv4 Alternate DNS Address」与「IPv4 Local DNS Address」、「IPv4 Local Alternate DNS Address」的地址互换即可。

    即:
    1.「IPv4 DNS Address」、「IPv4 Alternate DNS Address」填写境内DNS地址;
    2.「IPv4 Local DNS Address」、「IPv4 Local Alternate DNS Address」填写境外DNS地址。


    以上,可实现 Hosts.ini 的[Local Hosts]部分,所包含的正则表达式匹配的域名,由境外DNS地址解析。
    xinhugo
    xinhugo
    Jun 23, 2014❤️1
    10
    @LazyZhu 建议提供报错信息,以便判断问题原因。

    猜测:
    1.WinPcap 没安装?
    2.127.0.0.1:53 被占用?


    @LazyZhu Pcap_DNSProxy 使用正则表达式匹配。例如,
    规则:「.*\b163\.com」
    匹配:「163.com」、「mail.163.com」
    不匹配:「1163.com」

    白名单,匹配中国境内有服务器的解析率高的域名就够了。只有一台服务器的域名,使用境外DNS服务器解析,也不会变慢。
    streamgo
    streamgo
    Jun 23, 2014❤️1
    11
    一、
    [SC] ControlService 失败 1062:

    服务尚未启动。

    [SC] DeleteService 成功
    [SC] CreateService 成功
    操作成功完成。
    操作成功完成。
    [SC] ChangeServiceConfig2 成功
    [SC] StartService 失败 1053:

    服务没有及时响应启动或控制请求。


    Done. Please confirm the PcapDNSProxyService service had been installed.

    请按任意键继续. . .


    二、
    [SC] StartService 失败 1053:

    服务没有及时响应启动或控制请求。


    Done. Please confirm the PcapDNSProxyService service had been started.

    请按任意键继续. . .

    三、
    WinPcap 已安装。
    xinhugo
    xinhugo
    Jun 23, 2014
    12
    @streamgo 作者已了解你的反馈,稍后在GitHub下载新版本试试。

    ——我具备客服的潜质?
    AstroProfundis
    AstroProfundis
    Jun 23, 2014
    13
    www看到好久了,不过一直还没试过_(:зゝ∠)_
    xinhugo
    xinhugo
    Jun 24, 2014
    14
    @streamgo @AstroProfundis 新版本已上传到GitHub,欢迎使用以及反馈。

    https://github.com/chengr28/pcap_dnsproxy
    RIcter
    RIcter
    Jun 24, 2014
    15
    28小朋友(`・ω・´)
    streamgo
    streamgo
    Jun 24, 2014
    16
    新版正常了。需要修改DNS为127.0.0.1吗?
    missdeer
    missdeer
    Jun 24, 2014
    17
    我也是来围观推友作品的~
    dopcn
    dopcn
    Jun 24, 2014
    18
    这个使用说明相当复杂,不明觉厉
    xinhugo
    xinhugo
    Jun 24, 2014
    19
    @streamgo 当然需要设置当前网络连接的 DNS 服务器地址啦。

    chengr28 在 Wiki 清楚列出了安装方法,建议阅读。(拿到新产品,先看说明书,竟然不是习惯?)

    https://github.com/chengr28/pcap_dnsproxy/wiki/ReadMe


    @dopcn 清楚的使用说明,能有效降低使用新产品的时间成本。
    chengr28
    chengr28
    OP
    Jun 24, 2014
    20
    @LazyZhu @xinhugo
    白名单其实有个更简单的方法……ReadMe里也有提到这个功能 -> https://github.com/chengr28/pcap_dnsproxy/wiki/ReadMe#whitelist---%E7%99%BD%E5%90%8D%E5%8D%95%E6%9D%A1%E7%9B%AE

    境内解析没有过滤伪包的能力,如果直接对换会被投毒污染的
    例如我想只有符合 *.google* 的域名才使用远程服务器,其它全部使用境内服务器解析

    [Local Hosts]
    NULL .*\.google.*
    .*\b
    chengr28
    chengr28
    OP
    Jun 24, 2014
    21
    @streamgo 感谢反馈错误,问题已经修复。至于 127.0.0.1 这个是必须要设置的,这一步是让系统的解析发送到程序的监听端口,如果不设置等于没装 Pcap_DNSProxy ……

    顺便赞一下 @xinhugo 高级客服经理 =w=
    streamgo
    streamgo
    Jun 24, 2014
    22
    @xinhugo
    @chengr28 万分感谢。多谢指教啦!
    LazyZhu
    LazyZhu
    Jun 24, 2014
    23
    @chengr28 这个NULL好
    a1328788808
    a1328788808
    Jun 25, 2014 via Android
    24
    @chengr28 首要dna填127.0.0.1 备用dns还用不用填什么呢?
    chengr28
    chengr28
    OP
    Jun 26, 2014
    25
    @a1328788808 一般是不用填的,不过事实上填点其它貌似也无所谓,不知道Windows是什么切换算法……我自己用着就没有填
    qjhqxnne
    qjhqxnne
    Jun 26, 2014
    26
    有没有android版?
    chengr28
    chengr28
    OP
    Jun 27, 2014
    27
    Shared
    Shared
    Jul 7, 2014
    28
    @chengr28 在 OSX 10.9.4 上设置完出现这个结果

    ; <<>> DiG 9.8.3-P1 <<>> www.google.com
    ;; global options: +cmd
    ;; connection timed out; no servers could be reached

    这是正常情况吗?没有日志生成。。
    chengr28
    chengr28
    OP
    Aug 20, 2014
    29
    @Shared 不好意思现在才回复……因为比较少上来这边

    这个还真是不好判断呢……似乎所有超时拿不到解析结果都是这样的
    这样吧……先看一下 Pcap_DNSProxy 是不是在运行之中
    在终端输入 sudo launchctl list 看看列表里面有没有 PcapDNSProxyService
    如果没有那可能是运行出错或者部署不成功,建议看下程序目录里有没有 Error.log 之类的
    如果已经在运行中了,则建议修改 Hosts.conf 随便加一条例如 203.208.46.200 www\.google\.com 这样的条目保存等一会儿再 dig www.google.com 看看有没有结果(注意实验完记得删掉w)
    如果有的话,那可能就是因为最近GFW对境外DNS服务器干扰太严重导致解析失败,这个似乎是无解的……可能需要等到 v0.4 新版本升级后启用了新功能才会有所缓解(参见 v0.4 Beta 的Windows版)
    如果没有结果那可能是程序的问题……
    Shared
    Shared
    Aug 20, 2014
    30
    @chengr28 谢谢,我晚上回去试试
    huangyedoushi
    huangyedoushi
    Apr 9, 2015
    31
    [SC] ControlService 失败 1062:

    服务尚未启动。

    [SC] DeleteService 成功
    [SC] CreateService 成功
    操作成功完成。
    操作成功完成。
    'Pcap_DNSProxy_x86.exe' 不是内部或外部命令,也不是可运行的程序
    或批处理文件。
    [SC] ChangeServiceConfig2 成功
    [SC] ChangeServiceConfig2 成功
    [SC] StartService 失败 2:

    系统找不到指定的文件。


    Windows IP 配置

    已成功刷新 DNS 解析缓存。

    Service start failed, please check the configurations.

    请按任意键继续. . .


    WinPcap 已安装
    请教如何解决?
    chengr28
    chengr28
    OP
    Apr 20, 2015
    32
    @huangyedoushi 请问下载的是 Release 分支的 ZIP 吗?
    hcql
    hcql
    Jun 1, 2015
    33
    升级后用不了了..白名单域名可以解析.非白名单解析都超时..
    服务器: pcap-dnsproxy.localhost.server
    Address: ::1

    DNS request timed out.
    timeout was 2 seconds.
    DNS request timed out.
    timeout was 2 seconds.
    DNS request timed out.
    timeout was 2 seconds.
    DNS request timed out.
    timeout was 2 seconds.
    *** 请求 pcap-dnsproxy.localhost.server 超时
    chengr28
    chengr28
    OP
    Jun 1, 2015
    34
    @hcql 希望能提供一下配置文件
    hcql
    hcql
    Jun 1, 2015
    35
    @chengr28


    [Base]
    Version = 0.4
    File Refresh Time = 10
    Additional Path =
    Hosts File Name = Hosts.ini|Hosts.conf|Hosts|Hosts.txt|Hosts.csv|WhiteList.txt|White_List.txt
    IPFilter File Name = IPFilter.ini|IPFilter.conf|IPFilter.dat|IPFilter.csv|IPFilter|Guarding.p2p|Guarding|Routing.txt|chnrouting.txt|chnroute.txt

    [Log]
    Print Error = 1
    Log Maximum Size = 8MB

    [DNS]
    Protocol = TCP
    Hosts Only = 0
    Local Main = 0
    Local Hosts = 1
    Local Routing = 0
    Cache Type = Queue
    Cache Parameter = 256
    Default TTL = 900

    [Listen]
    Pcap Capture = 1
    Pcap Reading Timeout = 200
    Operation Mode = Private
    Listen Protocol = IPv6 + TCP + UDP
    Listen Port = 53
    IPFilter Type = Deny
    IPFilter Level <
    Accept Type =

    [Addresses]
    IPv4 Listen Address =
    IPv4 EDNS Client Subnet Address =
    IPv4 DNS Address = 208.67.220.220:443
    IPv4 Alternate DNS Address = 8.8.8.8:53|208.67.220.220:443|208.67.222.222:5353
    IPv4 Local DNS Address = 202.101.172.47:53
    IPv4 Local Alternate DNS Address = 223.6.6.6:53
    IPv6 Listen Address =
    IPv6 EDNS Client Subnet Address =
    IPv6 DNS Address = [2001:470:20::2]:53
    ## IPv6 DNS Address = [2001:4860:4860::8844]:53
    IPv6 Alternate DNS Address =
    ## IPv6 Alternate DNS Address = [2001:4860:4860::8888]:53
    IPv6 Local DNS Address =
    IPv6 Local Alternate DNS Address =

    [Values]
    EDNS Payload Size =
    IPv4 TTL = 0
    IPv6 Hop Limits = 0
    IPv4 Alternate TTL = 0
    IPv6 Alternate Hop Limits = 0
    Hop Limits Fluctuation = 2
    Reliable Socket Timeout = 5000
    Unreliable Socket Timeout = 3000
    Receive Waiting = 0
    ICMP Test = 900
    Domain Test = 900
    Alternate Times = 10
    Alternate Time Range = 60
    Alternate Reset Time = 300
    Multi Request Times = 0

    [Switches]
    Domain Case Conversion = 1
    Compression Pointer Mutation = 0
    EDNS Label = 0
    EDNS Client Subnet = 0
    DNSSEC Request = 0
    DNSSEC Validation = 0
    DNSSEC Force Validation = 0
    Alternate Multi Request = 0
    IPv4 Data Filter = 0
    TCP Data Filter = 1
    DNS Data Filter = 1
    Blacklist Filter = 1

    [Data]
    ICMP ID =
    ICMP Sequence =
    ICMP PaddingData =
    Domain Test ID =
    Domain Test Data =
    Localhost Server Name =

    [DNSCurve]
    DNSCurve = 0
    DNSCurve Protocol = UDP
    DNSCurve Payload Size =
    Encryption = 1
    Encryption Only = 0
    Key Recheck Time = 3600

    [DNSCurve Addresses]
    DNSCurve IPv4 DNS Address = 208.67.220.220:443
    DNSCurve IPv4 Alternate DNS Address = 208.67.222.222:443
    DNSCurve IPv6 DNS Address =
    ## DNSCurve IPv6 DNS Address = [2620:0:CCC::2]:443
    DNSCurve IPv6 Alternate DNS Address =
    ## DNSCurve IPv6 Alternate DNS Address = [2620:0:CCD::2]:443
    DNSCurve IPv4 Provider Name = 2.dnscrypt-cert.opendns.com
    DNSCurve IPv4 Alternate Provider Name = 2.dnscrypt-cert.opendns.com
    DNSCurve IPv6 Provider Name =
    ## DNSCurve IPv6 Provider Name = 2.dnscrypt-cert.opendns.com
    DNSCurve IPv6 Alternate Provider Name =
    ## DNSCurve IPv6 Alternate Provider Name = 2.dnscrypt-cert.opendns.com

    [DNSCurve Keys]
    Client Public Key =
    Client Secret Key =
    IPv4 DNS Public Key = B735:1140:206F:225D:3E2B:D822:D7FD:691E:A1C3:3CC8:D666:8D0C:BE04:BFAB:CA43:FB79
    IPv4 Alternate DNS Public Key = B735:1140:206F:225D:3E2B:D822:D7FD:691E:A1C3:3CC8:D666:8D0C:BE04:BFAB:CA43:FB79
    IPv6 DNS Public Key =
    ## IPv6 DNS Public Key = B735:1140:206F:225D:3E2B:D822:D7FD:691E:A1C3:3CC8:D666:8D0C:BE04:BFAB:CA43:FB79
    IPv6 Alternate DNS Public Key =
    ## IPv6 Alternate DNS Public Key = B735:1140:206F:225D:3E2B:D822:D7FD:691E:A1C3:3CC8:D666:8D0C:BE04:BFAB:CA43:FB79
    IPv4 DNS Fingerprint =
    ## IPv4 DNS Fingerprint = 227C:86C7:7574:81AB:6AE2:402B:4627:6E18:CFBB:60FA:DF92:652F:D694:01E8:EBF2:B007
    IPv4 Alternate DNS Fingerprint =
    ## IPv4 Alternate DNS Fingerprint = 227C:86C7:7574:81AB:6AE2:402B:4627:6E18:CFBB:60FA:DF92:652F:D694:01E8:EBF2:B007
    IPv6 DNS Fingerprint =
    ## IPv6 DNS Fingerprint = 227C:86C7:7574:81AB:6AE2:402B:4627:6E18:CFBB:60FA:DF92:652F:D694:01E8:EBF2:B007
    IPv6 Alternate DNS Fingerprint =
    ## IPv6 Alternate DNS Fingerprint = 227C:86C7:7574:81AB:6AE2:402B:4627:6E18:CFBB:60FA:DF92:652F:D694:01E8:EBF2:B007

    [DNSCurve Magic Number]
    IPv4 Receive Magic Number =
    IPv4 Alternate Receive Magic Number =
    IPv6 Receive Magic Number =
    IPv6 Alternate Receive Magic Number =
    IPv4 DNS Magic Number =
    ## IPv4 DNS Magic Number = qe47QHHw
    IPv4 Alternate DNS Magic Number =
    ## IPv4 Alternate DNS Magic Number = qe47QHHw
    IPv6 DNS Magic Number =
    ## IPv6 DNS Magic Number = qe47QHHw
    IPv6 Alternate DNS Magic Number =
    ## IPv6 Alternate DNS Magic Number = qe47QHHw
    chengr28
    chengr28
    OP
    Jun 1, 2015❤️1
    36
    @hcql 似乎是 IPv6 DNS Address = [2001:470:20::2]:53 这行的问题
    关于 IPv6 因为如果用的是隧道的话抓包是抓不到的,系统内没有可用于公共地址路由的 IPv6 网关或者网关不通的话,填入 IPv6 地址后会导致程序往 IPv6 发并一直等待而不会进行 IPv4 的请求,然后就一直超时了……
    hcql
    hcql
    Jun 2, 2015
    37
    @chengr28 本月升级前的版本.我使用正常呢,升级后就用不来了.

    我是启用了IPV6 DNS 优先解析.用来免翻墙访问google什么的.
    不过用2001:470:20::2 这个DNS 解析淘宝等国内站都是美国地址.用了大神的软件感觉好爽. 现在没的用了.呜呜呜~~
    chengr28
    chengr28
    OP
    Jun 2, 2015
    38
    @hcql 之前的是什么版本……0.4 正式版之前的版本,出口的选择是有问题的,也就是说有时就算填了 IPv6 地址,实际上走的也是 IPv4 的解析……不确定的话,可以抓个包看看具体是怎么发的
    chengr28
    chengr28
    OP
    Jun 2, 2015
    39
    或者这样吧……可以在 GitHub 我的页面找到联系用的邮箱
    这样可以比较有针对性看看是什么问题
    muziling
    muziling
    Jan 29, 2016
    40
    这个有包含 chinadns 的功能不, 如果不在国内列表里的域名,会不会丢失 CDN 加速?
    c0mmand
    c0mmand
    Jul 28, 2016
    41
    [Imgur]( ) windows server 2003 sp2
    @chengr28
    c0mmand
    c0mmand
    Jul 28, 2016
    42
    @chengr28 全新安装同样报错
    [img][/img]
    chengr28
    chengr28
    OP
    Nov 17, 2016
    43
    @muziling 默认配置就是和 ChinaDNS 一样用的是境内路由表
    mythhack
    mythhack
    Dec 26, 2016
    44
    @wuxiao2522 你这明显是没权限。得用 admin 运行
    mythhack
    mythhack
    Dec 26, 2016
    45
    @hcql ,。,我也是这个情况。作者的回复,我把 Listen Protocol = IPv4 + TCP + UDP 的 ipv6 删了。。好像是好了
    ying9y
    ying9y
    Jan 17, 2017
    46
    交叉编译 Pcap_DNSProxy 到路由器运行,能运行,但是 dns leak 测试时,出现多个非指定的 dns 解析 ip ,是不是 dns 泄漏了?
    www.v2ex.com/t/335226
    chengr28
    chengr28
    OP
    May 15, 2017
    47
    @ying9y 不清楚你说的 DNS 泄漏是什么意思
    artoostark
    artoostark
    Mar 5, 2018
    48
    28 小朋友(`・ω・´)
    peesefoo
    peesefoo
    Sep 29, 2019
    49
    这个项目貌似今天删掉了。
    Nostopping
    Nostopping
    Sep 29, 2019
    50
    @peesefoo 我也发现了.一直在用来着.咋突然没了
    ddzy
    ddzy
    Oct 3, 2019
    51
    估计被招安了
    fawkex
    fawkex
    Oct 29, 2019 via Android❤️1
    52
    R.I.P Pcap_DNSProxy
    helixcg
    helixcg
    Jan 21, 2020
    53
    28 小朋友
    helixcg
    helixcg
    Jan 21, 2020
    54
    28 小朋友 哎
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1853 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 68ms · UTC 01:32 · PVG 09:32 · LAX 17:32 · JFK 20:32
    ♥ Do have faith in what you're doing.