V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
chengr28
V2EX  ›  程序员

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

  •  6
     
  •   chengr28 · 2014-06-23 20:46:53 +08:00 · 43595 次点击
    这是一个创建于 3810 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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 条回复    2020-01-21 09:48:33 +08:00
    LazyZhu
        1
    LazyZhu  
       2014-06-23 21:03:20 +08:00
    “把域名重定向请求境内的DNS服务器”这个功能需要啊,类似于Dnsmasq的server设置,可以基于gfwlist做dns请求重定向
    chengr28
        2
    chengr28  
    OP
       2014-06-23 21:07:37 +08:00
    @LazyZhu 哦哦可能是我的说法有问题……我的意思是规则太长项目没有自带,这个功能是有的,默认用的是114DNS: https://lh6.googleusercontent.com/-z1IfbCdAnJs/U6gj21OK4SI/AAAAAAABuJc/v_8IVkZ9pCk/w0/2014-06-23-RX-Hosts-Support.png
    jyzhengqian
        3
    jyzhengqian  
       2014-06-23 21:09:44 +08:00
    围观Twitter上著名的28小盆友
    LazyZhu
        4
    LazyZhu  
       2014-06-23 21:23:06 +08:00
    哦,你这个有点不一样,是白名单么?我可以改成黑名单来用么,就是把gfwlist加入Local Hosts,并把IPv4 Local DNS Address改成自己的可用dns可以么
    LazyZhu
        5
    LazyZhu  
       2014-06-23 21:29:54 +08:00
    @jyzhengqian 难怪,眨眼功夫他又发了个twitter -_-!
    xinhugo
        6
    xinhugo  
       2014-06-23 21:41:42 +08:00   ❤️ 1
    提供一份白名单(正则表达式),大部分以GitHub收集的域名列表转换而来。

    https://xinhugo-list.googlecode.com/svn/trunk/White_List.txt
    LazyZhu
        7
    LazyZhu  
       2014-06-23 21:53:57 +08:00
    @xinhugo 都是以b开始的?

    PS:白名单是无止境的,黑名单只有2000+
    streamgo
        8
    streamgo  
       2014-06-23 21:56:26 +08:00
    @chengr28 安装服务、启动程序,均报错。WIN7 64位系统。
    xinhugo
        9
    xinhugo  
       2014-06-23 22:06:54 +08:00
    @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
        10
    xinhugo  
       2014-06-23 22:17:21 +08:00   ❤️ 1
    @LazyZhu 建议提供报错信息,以便判断问题原因。

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


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

    白名单,匹配中国境内有服务器的解析率高的域名就够了。只有一台服务器的域名,使用境外DNS服务器解析,也不会变慢。
    streamgo
        11
    streamgo  
       2014-06-23 22:25:09 +08:00   ❤️ 1
    一、
    [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
        12
    xinhugo  
       2014-06-23 22:50:04 +08:00
    @streamgo 作者已了解你的反馈,稍后在GitHub下载新版本试试。

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

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

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

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


    @dopcn 清楚的使用说明,能有效降低使用新产品的时间成本。
    chengr28
        20
    chengr28  
    OP
       2014-06-24 16:01:37 +08:00
    @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
        21
    chengr28  
    OP
       2014-06-24 16:35:23 +08:00
    @streamgo 感谢反馈错误,问题已经修复。至于 127.0.0.1 这个是必须要设置的,这一步是让系统的解析发送到程序的监听端口,如果不设置等于没装 Pcap_DNSProxy ……

    顺便赞一下 @xinhugo 高级客服经理 =w=
    streamgo
        22
    streamgo  
       2014-06-24 18:32:04 +08:00
    @xinhugo
    @chengr28 万分感谢。多谢指教啦!
    LazyZhu
        23
    LazyZhu  
       2014-06-24 19:14:40 +08:00
    @chengr28 这个NULL好
    a1328788808
        24
    a1328788808  
       2014-06-25 19:16:04 +08:00 via Android
    @chengr28 首要dna填127.0.0.1 备用dns还用不用填什么呢?
    chengr28
        25
    chengr28  
    OP
       2014-06-26 09:52:11 +08:00
    @a1328788808 一般是不用填的,不过事实上填点其它貌似也无所谓,不知道Windows是什么切换算法……我自己用着就没有填
    qjhqxnne
        26
    qjhqxnne  
       2014-06-26 21:10:51 +08:00
    有没有android版?
    chengr28
        27
    chengr28  
    OP
       2014-06-27 17:51:16 +08:00
    Shared
        28
    Shared  
       2014-07-07 21:17:09 +08:00
    @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
        29
    chengr28  
    OP
       2014-08-20 01:57:25 +08:00
    @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
        30
    Shared  
       2014-08-20 12:06:46 +08:00
    @chengr28 谢谢,我晚上回去试试
    huangyedoushi
        31
    huangyedoushi  
       2015-04-09 14:41:06 +08:00
    [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
        32
    chengr28  
    OP
       2015-04-20 22:16:29 +08:00
    @huangyedoushi 请问下载的是 Release 分支的 ZIP 吗?
    hcql
        33
    hcql  
       2015-06-01 10:12:48 +08:00
    升级后用不了了..白名单域名可以解析.非白名单解析都超时..
    服务器: 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
        34
    chengr28  
    OP
       2015-06-01 13:35:19 +08:00
    @hcql 希望能提供一下配置文件
    hcql
        35
    hcql  
       2015-06-01 16:54:16 +08:00
    @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
        36
    chengr28  
    OP
       2015-06-01 23:21:55 +08:00   ❤️ 1
    @hcql 似乎是 IPv6 DNS Address = [2001:470:20::2]:53 这行的问题
    关于 IPv6 因为如果用的是隧道的话抓包是抓不到的,系统内没有可用于公共地址路由的 IPv6 网关或者网关不通的话,填入 IPv6 地址后会导致程序往 IPv6 发并一直等待而不会进行 IPv4 的请求,然后就一直超时了……
    hcql
        37
    hcql  
       2015-06-02 11:57:52 +08:00
    @chengr28 本月升级前的版本.我使用正常呢,升级后就用不来了.

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