auto
This commit is contained in:
@@ -1,19 +0,0 @@
|
||||
on: [push, pull_request]
|
||||
jobs:
|
||||
test:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: ruby/setup-ruby@v1
|
||||
with:
|
||||
ruby-version: '3.0'
|
||||
bundler-cache: true
|
||||
- name: Run tests
|
||||
run: bundle exec sus
|
||||
- name: gen hash
|
||||
run: |
|
||||
echo "hash=$(sha256sum accelerated-domains.china.conf)" >> $GITHUB_ENV
|
||||
- uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: ${{env.hash}}
|
||||
path: /dev/null
|
||||
@@ -1,18 +0,0 @@
|
||||
Copyright © 2013 Felix Yan <felixonmars@archlinux.org>
|
||||
This work is free. You can redistribute it and/or modify it under the
|
||||
terms of the Do What The Fuck You Want To Public License, Version 2,
|
||||
as published by Sam Hocevar. See below for more details.
|
||||
|
||||
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
|
||||
Version 2, December 2004
|
||||
|
||||
Copyright (C) 2004 Sam Hocevar <sam@hocevar.net>
|
||||
|
||||
Everyone is permitted to copy and distribute verbatim or modified
|
||||
copies of this license document, and changing it is allowed as long
|
||||
as the name is changed.
|
||||
|
||||
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. You just DO WHAT THE FUCK YOU WANT TO.
|
||||
@@ -1,71 +0,0 @@
|
||||
SERVER=114.114.114.114
|
||||
SMARTDNS_SPEEDTEST_MODE=ping,tcp:80
|
||||
NEWLINE=UNIX
|
||||
SHELL=bash
|
||||
|
||||
raw:
|
||||
sed -e 's|^server=/\(.*\)/114.114.114.114$$|\1|' accelerated-domains.china.conf | grep -Ev '^#' > accelerated-domains.china.raw.txt
|
||||
sed -e 's|^server=/\(.*\)/114.114.114.114$$|\1|' google.china.conf | grep -Ev '^#' > google.china.raw.txt
|
||||
sed -e 's|^server=/\(.*\)/114.114.114.114$$|\1|' apple.china.conf | grep -Ev '^#' > apple.china.raw.txt
|
||||
|
||||
dnsmasq: raw
|
||||
sed -e 's|\(.*\)|server=/\1/$(SERVER)|' accelerated-domains.china.raw.txt > accelerated-domains.china.dnsmasq.conf
|
||||
sed -e 's|\(.*\)|server=/\1/$(SERVER)|' google.china.raw.txt > google.china.dnsmasq.conf
|
||||
sed -e 's|\(.*\)|server=/\1/$(SERVER)|' apple.china.raw.txt > apple.china.dnsmasq.conf
|
||||
|
||||
coredns: raw
|
||||
sed -e "s|\(.*\)|\1 {\n forward . $(SERVER)\n}|" accelerated-domains.china.raw.txt > accelerated-domains.china.coredns.conf
|
||||
sed -e "s|\(.*\)|\1 {\n forward . $(SERVER)\n}|" google.china.raw.txt > google.china.coredns.conf
|
||||
sed -e "s|\(.*\)|\1 {\n forward . $(SERVER)\n}|" apple.china.raw.txt > apple.china.coredns.conf
|
||||
|
||||
smartdns: raw
|
||||
sed -e "s|\(.*\)|nameserver /\1/$(SERVER)|" accelerated-domains.china.raw.txt > accelerated-domains.china.smartdns.conf
|
||||
sed -e "s|\(.*\)|nameserver /\1/$(SERVER)|" google.china.raw.txt > google.china.smartdns.conf
|
||||
sed -e "s|\(.*\)|nameserver /\1/$(SERVER)|" apple.china.raw.txt > apple.china.smartdns.conf
|
||||
sed -e "s|=| |" bogus-nxdomain.china.conf > bogus-nxdomain.china.smartdns.conf
|
||||
|
||||
smartdns-domain-rules: raw
|
||||
sed -e "s|\(.*\)|domain-rules /\1/ -speed-check-mode $(SMARTDNS_SPEEDTEST_MODE) -nameserver $(SERVER)|" accelerated-domains.china.raw.txt > accelerated-domains.china.domain.smartdns.conf
|
||||
sed -e "s|\(.*\)|domain-rules /\1/ -speed-check-mode $(SMARTDNS_SPEEDTEST_MODE) -nameserver $(SERVER)|" google.china.raw.txt > google.china.domain.smartdns.conf
|
||||
sed -e "s|\(.*\)|domain-rules /\1/ -speed-check-mode $(SMARTDNS_SPEEDTEST_MODE) -nameserver $(SERVER)|" apple.china.raw.txt > apple.china.domain.smartdns.conf
|
||||
|
||||
unbound: raw
|
||||
sed -e 's|\(.*\)|forward-zone:\n name: "\1."\n forward-addr: $(SERVER)\n|' accelerated-domains.china.raw.txt > accelerated-domains.china.unbound.conf
|
||||
sed -e 's|\(.*\)|forward-zone:\n name: "\1."\n forward-addr: $(SERVER)\n|' google.china.raw.txt > google.china.unbound.conf
|
||||
sed -e 's|\(.*\)|forward-zone:\n name: "\1."\n forward-addr: $(SERVER)\n|' apple.china.raw.txt > apple.china.unbound.conf
|
||||
ifeq ($(NEWLINE),DOS)
|
||||
sed -i 's/\r*$$/\r/' accelerated-domains.china.unbound.conf google.china.unbound.conf apple.china.unbound.conf
|
||||
endif
|
||||
|
||||
bind: raw
|
||||
sed -e 's|\(.*\)|zone "\1." {type forward; forwarders { $(SERVER); }; };|' accelerated-domains.china.raw.txt > accelerated-domains.china.bind.conf
|
||||
sed -e 's|\(.*\)|zone "\1." {type forward; forwarders { $(SERVER); }; };|' google.china.raw.txt > google.china.bind.conf
|
||||
sed -e 's|\(.*\)|zone "\1." {type forward; forwarders { $(SERVER); }; };|' apple.china.raw.txt > apple.china.bind.conf
|
||||
ifeq ($(NEWLINE),DOS)
|
||||
sed -i 's/\r*$$/\r/' accelerated-domains.china.bind.conf google.china.bind.conf apple.china.bind.conf
|
||||
endif
|
||||
|
||||
dnscrypt-proxy: raw
|
||||
sed -e 's|\(.*\)|\1 $(SERVER)|' accelerated-domains.china.raw.txt google.china.raw.txt apple.china.raw.txt > dnscrypt-proxy-forwarding-rules.txt
|
||||
ifeq ($(NEWLINE),DOS)
|
||||
sed -i 's/\r*$$/\r/' dnscrypt-proxy-forwarding-rules.txt
|
||||
endif
|
||||
|
||||
dnsforwarder6: raw
|
||||
{ printf "protocol udp\nserver $(SERVER)\nparallel on \n"; cat accelerated-domains.china.raw.txt; } > accelerated-domains.china.dnsforwarder.conf
|
||||
{ printf "protocol udp\nserver $(SERVER)\nparallel on \n"; cat google.china.raw.txt; } > google.china.dnsforwarder.conf
|
||||
{ printf "protocol udp\nserver $(SERVER)\nparallel on \n"; cat apple.china.raw.txt; } > apple.china.dnsforwarder.conf
|
||||
ifeq ($(NEWLINE),DOS)
|
||||
sed -i 's/\r*$$/\r/' accelerated-domains.china.dnsforwarder.conf google.china.dnsforwarder.conf apple.china.dnsforwarder.conf
|
||||
endif
|
||||
|
||||
adguardhome: raw
|
||||
cat google.china.raw.txt | tr "\n" "/" | sed -e 's|^|/|' -e 's|\(.*\)|[\1]$(SERVER)|' > google.china.adguardhome.conf
|
||||
cat accelerated-domains.china.raw.txt | tr "\n" "/" | sed -e 's|^|/|' -e 's|\(.*\)|[\1]$(SERVER)|' > accelerated-domains.china.adguardhome.conf
|
||||
cat apple.china.raw.txt | tr "\n" "/" | sed -e 's|^|/|' -e 's|\(.*\)|[\1]$(SERVER)|' > apple.china.adguardhome.conf
|
||||
ifeq ($(NEWLINE),DOS)
|
||||
sed -i 's/\r*$$/\r/' accelerated-domains.china.adguardhome.conf google.china.adguardhome.conf apple.china.adguardhome.conf
|
||||
endif
|
||||
|
||||
clean:
|
||||
rm -f {accelerated-domains,google,apple}.china.*.conf *.smartdns.conf {accelerated-domains,google,apple}.china.raw.txt dnscrypt-proxy-forwarding-rules.txt
|
||||
@@ -1,78 +0,0 @@
|
||||
dnsmasq-china-list
|
||||
==================
|
||||
|
||||
Chinese-specific configuration to improve your favorite DNS server. Best partner for chnroutes.
|
||||
|
||||
- Improve resolve speed for Chinese domains.
|
||||
|
||||
- Get the best CDN node near you whenever possible, but don't compromise foreign CDN results so you also get best CDN node for your VPN at the same time.
|
||||
|
||||
- Block ISP ads on NXDOMAIN result (like 114so).
|
||||
|
||||
Details
|
||||
=======
|
||||
|
||||
- `accelerated-domains.china.conf`: General domains to be accelerated.
|
||||
|
||||
These domains have a better resolving speed and/or result when using a Chinese DNS server.
|
||||
|
||||
To determine if a domain is eligible, one of the criteria below must be met:
|
||||
|
||||
- The domain's NS server is located in China mainland.
|
||||
|
||||
- The domain will resolve to an IP located in China mainland when using a Chinese DNS server, but _not_ always do when using a foreign DNS server (For example, CDN accelerated sites that have node in China). This however does _not_ include those having node _near_ China mainland, like in Japan, Hong Kong, Taiwan, etc.
|
||||
|
||||
Please don't add subdomains if the top domain is already in the list. This includes all .cn domains which are already matched by the `/cn/` rule.
|
||||
|
||||
- `google.china.conf`: Google domains to be accelerated.
|
||||
|
||||
These domains are resolved to Google China servers when using a Chinese DNS. In most conditions this will yield better page load time for sites using Google's web services, e.g. Google Web Fonts and AdSense.
|
||||
|
||||
Bear in mind that they are _not_ considered stable. **Use at your own risk**.
|
||||
|
||||
- `apple.china.conf`: Apple domains to be accelerated.
|
||||
|
||||
Some ISPs (often smaller ones) have problem accessing Apple's assets using their China mainland CDN servers. Please consider remove this file if that happens to you. See #156 for some more info.
|
||||
|
||||
- `bogus-nxdomain.china.conf`: Known addresses that are hijacking NXDOMAIN results returned by DNS servers.
|
||||
|
||||
Usage
|
||||
=====
|
||||
|
||||
Automatic Installation (recommended)
|
||||
------------------------------------
|
||||
|
||||
1. Fetch the installer from github (or a mirror): `wget https://raw.githubusercontent.com/felixonmars/dnsmasq-china-list/master/install.sh`
|
||||
2. (Optional) Edit it to use your favorite DNS server and/or another mirror to download the list.
|
||||
3. Run it as root: `sudo ./install.sh`
|
||||
|
||||
You can save the installer and run it again to update the list regularly.
|
||||
|
||||
Manual Installation
|
||||
-------------------
|
||||
|
||||
1. Place accelerated-domains.china.conf, bogus-nxdomain.china.conf (and optionally google.china.conf, apple.china.conf) under /etc/dnsmasq.d/ (Create the folder if it does not exist).
|
||||
2. Uncomment "conf-dir=/etc/dnsmasq.d" in /etc/dnsmasq.conf
|
||||
3. (Optional) Place dnsmasq-update-china-list into /usr/bin/
|
||||
4. (Optional) Make custom DNS server configuration and/or other services' configuration.
|
||||
|
||||
```shell
|
||||
# change the default DNS server to 202.96.128.86
|
||||
make SERVER=202.96.128.86 dnsmasq
|
||||
# generate unbound's configuration
|
||||
make unbound
|
||||
# generate bind's configuration
|
||||
make bind
|
||||
# full example of generating dnscrypt-proxy forwarding rules for Windows
|
||||
make SERVER=101.6.6.6 NEWLINE=DOS dnscrypt-proxy
|
||||
```
|
||||
|
||||
License
|
||||
=======
|
||||
|
||||
```
|
||||
Copyright © 2015 Felix Yan <felixonmars@archlinux.org>
|
||||
This work is free. You can redistribute it and/or modify it under the
|
||||
terms of the Do What The Fuck You Want To Public License, Version 2,
|
||||
as published by Sam Hocevar. See the LICENSE file for more details.
|
||||
```
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,137 +0,0 @@
|
||||
server=/a1.mzstatic.com/114.114.114.114
|
||||
server=/a2.mzstatic.com/114.114.114.114
|
||||
server=/a3.mzstatic.com/114.114.114.114
|
||||
server=/a4.mzstatic.com/114.114.114.114
|
||||
server=/a5.mzstatic.com/114.114.114.114
|
||||
server=/adcdownload.apple.com.akadns.net/114.114.114.114
|
||||
server=/adcdownload.apple.com/114.114.114.114
|
||||
server=/app-site-association.cdn-apple.com/114.114.114.114
|
||||
server=/appldnld.apple.com/114.114.114.114
|
||||
server=/appldnld.g.aaplimg.com/114.114.114.114
|
||||
server=/appleid.cdn-apple.com/114.114.114.114
|
||||
server=/apps.apple.com/114.114.114.114
|
||||
server=/apps.mzstatic.com/114.114.114.114
|
||||
server=/cdn-cn1.apple-mapkit.com/114.114.114.114
|
||||
server=/cdn-cn2.apple-mapkit.com/114.114.114.114
|
||||
server=/cdn-cn3.apple-mapkit.com/114.114.114.114
|
||||
server=/cdn-cn4.apple-mapkit.com/114.114.114.114
|
||||
server=/cdn.apple-mapkit.com/114.114.114.114
|
||||
server=/cdn1.apple-mapkit.com/114.114.114.114
|
||||
server=/cdn2.apple-mapkit.com/114.114.114.114
|
||||
server=/cdn3.apple-mapkit.com/114.114.114.114
|
||||
server=/cdn4.apple-mapkit.com/114.114.114.114
|
||||
server=/cds-cdn.v.aaplimg.com/114.114.114.114
|
||||
server=/cds.apple.com.akadns.net/114.114.114.114
|
||||
server=/cds.apple.com/114.114.114.114
|
||||
server=/cdsassets.apple.com/114.114.114.114
|
||||
server=/cl1-cdn.origin-apple.com.akadns.net/114.114.114.114
|
||||
server=/cl1.apple.com/114.114.114.114
|
||||
server=/cl2-cn.apple.com/114.114.114.114
|
||||
server=/cl2.apple.com/114.114.114.114
|
||||
server=/cl3-cdn.origin-apple.com.akadns.net/114.114.114.114
|
||||
server=/cl3.apple.com/114.114.114.114
|
||||
server=/cl4-cdn.origin-apple.com.akadns.net/114.114.114.114
|
||||
server=/cl4-cn.apple.com/114.114.114.114
|
||||
server=/cl4.apple.com/114.114.114.114
|
||||
server=/cl5-cdn.origin-apple.com.akadns.net/114.114.114.114
|
||||
server=/cl5.apple.com/114.114.114.114
|
||||
server=/clientflow.apple.com.akadns.net/114.114.114.114
|
||||
server=/clientflow.apple.com/114.114.114.114
|
||||
server=/configuration.apple.com.akadns.net/114.114.114.114
|
||||
server=/configuration.apple.com/114.114.114.114
|
||||
server=/cstat.apple.com/114.114.114.114
|
||||
server=/cstat.cdn-apple.com/114.114.114.114
|
||||
server=/dd-cdn.origin-apple.com.akadns.net/114.114.114.114
|
||||
server=/download.developer.apple.com/114.114.114.114
|
||||
server=/gs-loc-cn.apple.com/114.114.114.114
|
||||
server=/gs-loc.apple.com/114.114.114.114
|
||||
server=/gsp10-ssl-cn.ls.apple.com/114.114.114.114
|
||||
server=/gsp13-cn.ls.apple.com/114.114.114.114
|
||||
server=/gsp4-cn.ls.apple.com.edgekey.net.globalredir.akadns.net/114.114.114.114
|
||||
server=/gsp4-cn.ls.apple.com.edgekey.net/114.114.114.114
|
||||
server=/gsp4-cn.ls.apple.com/114.114.114.114
|
||||
server=/gsp5-cn.ls.apple.com/114.114.114.114
|
||||
server=/gsp85-cn-ssl.ls.apple.com/114.114.114.114
|
||||
server=/gspe19-cn-ssl.ls.apple.com/114.114.114.114
|
||||
server=/gspe19-cn.ls-apple.com.akadns.net/114.114.114.114
|
||||
server=/gspe19-cn.ls.apple.com/114.114.114.114
|
||||
server=/gspe21-ssl.ls.apple.com/114.114.114.114
|
||||
server=/gspe21.ls.apple.com/114.114.114.114
|
||||
server=/gspe35-ssl.ls.apple.com/114.114.114.114
|
||||
server=/guzzoni-apple-com.v.aaplimg.com/114.114.114.114
|
||||
server=/guzzoni.apple.com/114.114.114.114
|
||||
server=/iadsdk.apple.com/114.114.114.114
|
||||
server=/icloud-cdn.icloud.com.akadns.net/114.114.114.114
|
||||
server=/icloud.cdn-apple.com/114.114.114.114
|
||||
server=/images.apple.com.akadns.net/114.114.114.114
|
||||
server=/images.apple.com.edgekey.net.globalredir.akadns.net/114.114.114.114
|
||||
server=/images.apple.com/114.114.114.114
|
||||
server=/init-p01md-lb.push-apple.com.akadns.net/114.114.114.114
|
||||
server=/init-p01md.apple.com/114.114.114.114
|
||||
server=/init-p01st-lb.push-apple.com.akadns.net/114.114.114.114
|
||||
server=/init-p01st.push.apple.com/114.114.114.114
|
||||
server=/init-s01st-lb.push-apple.com.akadns.net/114.114.114.114
|
||||
server=/init-s01st.push.apple.com/114.114.114.114
|
||||
server=/iosapps.itunes.g.aaplimg.com/114.114.114.114
|
||||
server=/ipcdn.apple.com/114.114.114.114
|
||||
server=/iphone-ld.apple.com/114.114.114.114
|
||||
server=/is1-ssl.mzstatic.com/114.114.114.114
|
||||
server=/is1.mzstatic.com/114.114.114.114
|
||||
server=/is2-ssl.mzstatic.com/114.114.114.114
|
||||
server=/is2.mzstatic.com/114.114.114.114
|
||||
server=/is3-ssl.mzstatic.com/114.114.114.114
|
||||
server=/is3.mzstatic.com/114.114.114.114
|
||||
server=/is4-ssl.mzstatic.com/114.114.114.114
|
||||
server=/is4.mzstatic.com/114.114.114.114
|
||||
server=/is5-ssl.mzstatic.com/114.114.114.114
|
||||
server=/is5.mzstatic.com/114.114.114.114
|
||||
server=/itunes-apple.com.akadns.net/114.114.114.114
|
||||
server=/itunes.apple.com/114.114.114.114
|
||||
server=/itunesconnect.apple.com/114.114.114.114
|
||||
server=/mesu-cdn.apple.com.akadns.net/114.114.114.114
|
||||
server=/mesu-china.apple.com.akadns.net/114.114.114.114
|
||||
server=/mesu.apple.com/114.114.114.114
|
||||
server=/music.apple.com/114.114.114.114
|
||||
server=/ocsp-lb.apple.com.akadns.net/114.114.114.114
|
||||
server=/ocsp.apple.com/114.114.114.114
|
||||
server=/ocsp2.apple.com/114.114.114.114
|
||||
server=/oscdn.apple.com/114.114.114.114
|
||||
server=/oscdn.origin-apple.com.akadns.net/114.114.114.114
|
||||
server=/osxapps.itunes.g.aaplimg.com/114.114.114.114
|
||||
server=/pancake.apple.com/114.114.114.114
|
||||
server=/pancake.cdn-apple.com.akadns.net/114.114.114.114
|
||||
server=/prod-support.apple-support.akadns.net/114.114.114.114
|
||||
server=/publicassets.cdn-apple.com/114.114.114.114
|
||||
server=/reserve-prime.apple.com/114.114.114.114
|
||||
server=/s.mzstatic.com/114.114.114.114
|
||||
server=/smp-device-content.apple.com/114.114.114.114
|
||||
server=/stocks-sparkline-lb.apple.com.akadns.net/114.114.114.114
|
||||
server=/stocks-sparkline.apple.com/114.114.114.114
|
||||
server=/store.apple.com.edgekey.net.globalredir.akadns.net/114.114.114.114
|
||||
server=/store.apple.com.edgekey.net/114.114.114.114
|
||||
server=/store.apple.com/114.114.114.114
|
||||
server=/store.storeimages.apple.com.akadns.net/114.114.114.114
|
||||
server=/store.storeimages.cdn-apple.com/114.114.114.114
|
||||
server=/support-china.apple-support.akadns.net/114.114.114.114
|
||||
server=/support.apple.com/114.114.114.114
|
||||
server=/swallow.apple.com/114.114.114.114
|
||||
server=/swallow-apple-com.v.aaplimg.com/114.114.114.114
|
||||
server=/swcatalog-cdn.apple.com.akadns.net/114.114.114.114
|
||||
server=/swcatalog.apple.com/114.114.114.114
|
||||
server=/swcdn.apple.com/114.114.114.114
|
||||
server=/swcdn.g.aaplimg.com/114.114.114.114
|
||||
server=/swdist.apple.com.akadns.net/114.114.114.114
|
||||
server=/swdist.apple.com/114.114.114.114
|
||||
server=/swscan-cdn.apple.com.akadns.net/114.114.114.114
|
||||
server=/swscan.apple.com/114.114.114.114
|
||||
server=/updates-http.cdn-apple.com.akadns.net/114.114.114.114
|
||||
server=/updates-http.cdn-apple.com/114.114.114.114
|
||||
server=/updates.cdn-apple.com/114.114.114.114
|
||||
server=/valid.apple.com/114.114.114.114
|
||||
server=/valid.origin-apple.com.akadns.net/114.114.114.114
|
||||
server=/weather-data.apple.com.akadns.net/114.114.114.114
|
||||
server=/weather-data.apple.com/114.114.114.114
|
||||
server=/www.apple.com.edgekey.net.globalredir.akadns.net/114.114.114.114
|
||||
server=/www.apple.com.edgekey.net/114.114.114.114
|
||||
server=/www.apple.com/114.114.114.114
|
||||
server=/xp.apple.com/114.114.114.114
|
||||
@@ -1,52 +0,0 @@
|
||||
#!/usr/bin/ruby
|
||||
require 'concurrent'
|
||||
require 'filelock'
|
||||
require 'set'
|
||||
require_relative 'verify'
|
||||
|
||||
$stdout.sync = true
|
||||
|
||||
echo_set = Concurrent::Set[]
|
||||
tested = Concurrent::Set[]
|
||||
|
||||
File.readlines("accelerated-domains.china.conf").each do |line|
|
||||
line.chomp!
|
||||
if !line.empty? and !line.start_with?("#")
|
||||
tested << line.split("/")[1]
|
||||
end
|
||||
end
|
||||
|
||||
v = ChinaListVerify.new
|
||||
pool = Concurrent::FixedThreadPool.new(ENV.fetch("JOBS", Concurrent.processor_count).to_i)
|
||||
|
||||
ARGF.each do |domain|
|
||||
pool.post do
|
||||
domain.chomp!.downcase!
|
||||
next if domain.empty? or domain.end_with?('.arpa', '.cn', '.top')
|
||||
|
||||
if !echo_set.include? domain
|
||||
puts "Trying to detect #{domain}"
|
||||
echo_set << domain
|
||||
end
|
||||
|
||||
begin
|
||||
domain = PublicSuffix.domain(domain, ignore_private: true)
|
||||
rescue PublicSuffix::DomainNotAllowed, PublicSuffix::DomainInvalid
|
||||
next
|
||||
end
|
||||
|
||||
next if tested.include? domain
|
||||
tested << domain
|
||||
|
||||
if v.check_domain_verbose(domain, enable_cdnlist: false, show_green: true)
|
||||
Filelock '.git.lock' do
|
||||
puts `./updater.rb -a #{domain}`
|
||||
puts `git commit -S -am "accelerated-domains: add #{domain}"` if $?.success?
|
||||
puts `./update-local` if $?.success?
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
pool.shutdown
|
||||
pool.wait_for_termination
|
||||
@@ -1,242 +0,0 @@
|
||||
## Public DNS
|
||||
|
||||
# DNSPai
|
||||
bogus-nxdomain=123.125.81.12
|
||||
bogus-nxdomain=101.226.10.8
|
||||
|
||||
# Level3
|
||||
bogus-nxdomain=198.105.254.11
|
||||
bogus-nxdomain=104.239.213.7
|
||||
bogus-nxdomain=23.217.138.108
|
||||
bogus-nxdomain=23.202.231.167
|
||||
|
||||
|
||||
## China Telecom
|
||||
|
||||
# Anhui Telecom
|
||||
bogus-nxdomain=61.191.206.4
|
||||
|
||||
# Beijing Telecom
|
||||
bogus-nxdomain=218.30.64.194
|
||||
|
||||
# Chengdu Telecom
|
||||
bogus-nxdomain=61.139.8.101
|
||||
bogus-nxdomain=61.139.8.102
|
||||
bogus-nxdomain=61.139.8.103
|
||||
bogus-nxdomain=61.139.8.104
|
||||
|
||||
# Fujian Telecom
|
||||
bogus-nxdomain=42.123.125.237
|
||||
|
||||
# Gansu Telecom
|
||||
bogus-nxdomain=202.100.68.117
|
||||
|
||||
# Guangxi Telecom
|
||||
bogus-nxdomain=113.12.83.4
|
||||
bogus-nxdomain=113.12.83.5
|
||||
|
||||
# Hainan Telecom
|
||||
bogus-nxdomain=202.100.220.54
|
||||
|
||||
# Hangzhou Telecom
|
||||
bogus-nxdomain=60.191.124.236
|
||||
bogus-nxdomain=60.191.124.252
|
||||
|
||||
# Hebei Telecom
|
||||
bogus-nxdomain=222.221.5.204
|
||||
|
||||
# Hunan Telecom
|
||||
bogus-nxdomain=124.232.132.94
|
||||
|
||||
# Jiangsu Telecom
|
||||
bogus-nxdomain=202.102.110.204
|
||||
|
||||
# Jiangxi Telecom
|
||||
bogus-nxdomain=61.131.208.210
|
||||
bogus-nxdomain=61.131.208.211
|
||||
|
||||
# Nanjing Telecom
|
||||
bogus-nxdomain=202.102.110.203
|
||||
bogus-nxdomain=202.102.110.205
|
||||
|
||||
# Shandong Telecom
|
||||
bogus-nxdomain=219.146.13.36
|
||||
|
||||
# Shanghai Telecom
|
||||
bogus-nxdomain=180.168.41.175
|
||||
bogus-nxdomain=180.153.103.224
|
||||
|
||||
# Wuhan Telecom
|
||||
bogus-nxdomain=111.175.221.58
|
||||
bogus-nxdomain=61.183.1.186
|
||||
|
||||
# Xi'an Telecom
|
||||
bogus-nxdomain=125.76.239.244
|
||||
bogus-nxdomain=125.76.239.245
|
||||
|
||||
# Yunnan Telecom
|
||||
bogus-nxdomain=222.221.5.252
|
||||
bogus-nxdomain=222.221.5.253
|
||||
bogus-nxdomain=220.165.8.172
|
||||
bogus-nxdomain=220.165.8.174
|
||||
|
||||
|
||||
## China Unicom
|
||||
|
||||
# Anhui Unicom
|
||||
bogus-nxdomain=112.132.230.179
|
||||
|
||||
# Beijing Unicom (bjdnserror1.wo.com.cn ~ bjdnserror5.wo.com.cn)
|
||||
bogus-nxdomain=202.106.199.34
|
||||
bogus-nxdomain=202.106.199.35
|
||||
bogus-nxdomain=202.106.199.36
|
||||
bogus-nxdomain=202.106.199.37
|
||||
bogus-nxdomain=202.106.199.38
|
||||
|
||||
# Hebei Unicom (hbdnserror1.wo.com.cn ~ hbdnserror7.wo.com.cn)
|
||||
bogus-nxdomain=221.192.153.41
|
||||
bogus-nxdomain=221.192.153.42
|
||||
bogus-nxdomain=221.192.153.43
|
||||
bogus-nxdomain=221.192.153.44
|
||||
bogus-nxdomain=221.192.153.45
|
||||
bogus-nxdomain=221.192.153.46
|
||||
bogus-nxdomain=221.192.153.49
|
||||
|
||||
# Heilongjiang Unicom (hljdnserror1.wo.com.cn ~ hljdnserror5.wo.com.cn)
|
||||
bogus-nxdomain=125.211.213.130
|
||||
bogus-nxdomain=125.211.213.131
|
||||
bogus-nxdomain=125.211.213.132
|
||||
bogus-nxdomain=125.211.213.133
|
||||
bogus-nxdomain=125.211.213.134
|
||||
|
||||
# Henan Unicom (hndnserror1.wo.com.cn ~ hndnserror7.wo.com.cn)
|
||||
bogus-nxdomain=218.28.144.36
|
||||
bogus-nxdomain=218.28.144.37
|
||||
bogus-nxdomain=218.28.144.38
|
||||
bogus-nxdomain=218.28.144.39
|
||||
bogus-nxdomain=218.28.144.40
|
||||
bogus-nxdomain=218.28.144.41
|
||||
bogus-nxdomain=218.28.144.42
|
||||
|
||||
# Jilin Unicom (jldnserror1.wo.com.cn ~ jldnserror5.wo.com.cn)
|
||||
bogus-nxdomain=202.98.24.121
|
||||
bogus-nxdomain=202.98.24.122
|
||||
bogus-nxdomain=202.98.24.123
|
||||
bogus-nxdomain=202.98.24.124
|
||||
bogus-nxdomain=202.98.24.125
|
||||
|
||||
# Liaoning Unicom (lndnserror1.wo.com.cn ~ lndnserror7.wo.com.cn)
|
||||
bogus-nxdomain=60.19.29.21
|
||||
bogus-nxdomain=60.19.29.22
|
||||
bogus-nxdomain=60.19.29.23
|
||||
bogus-nxdomain=60.19.29.24
|
||||
bogus-nxdomain=60.19.29.25
|
||||
bogus-nxdomain=60.19.29.26
|
||||
bogus-nxdomain=60.19.29.27
|
||||
|
||||
# Nanfang Unicom (nfdnserror1.wo.com.cn ~ nfdnserror17.wo.com.cn)
|
||||
bogus-nxdomain=220.250.64.18
|
||||
bogus-nxdomain=220.250.64.19
|
||||
bogus-nxdomain=220.250.64.20
|
||||
bogus-nxdomain=220.250.64.21
|
||||
bogus-nxdomain=220.250.64.22
|
||||
bogus-nxdomain=220.250.64.23
|
||||
bogus-nxdomain=220.250.64.24
|
||||
bogus-nxdomain=220.250.64.25
|
||||
bogus-nxdomain=220.250.64.26
|
||||
bogus-nxdomain=220.250.64.27
|
||||
bogus-nxdomain=220.250.64.28
|
||||
bogus-nxdomain=220.250.64.29
|
||||
bogus-nxdomain=220.250.64.30
|
||||
bogus-nxdomain=220.250.64.225
|
||||
bogus-nxdomain=220.250.64.226
|
||||
bogus-nxdomain=220.250.64.227
|
||||
bogus-nxdomain=220.250.64.228
|
||||
|
||||
# Neimenggu Unicom (nmdnserror2.wo.com.cn ~ nmdnserror4.wo.com.cn)
|
||||
bogus-nxdomain=202.99.254.231
|
||||
bogus-nxdomain=202.99.254.232
|
||||
bogus-nxdomain=202.99.254.230
|
||||
|
||||
# Shandong Unicom (sddnserror1.wo.com.cn ~ sddnserror9.wo.com.cn)
|
||||
bogus-nxdomain=123.129.254.11
|
||||
bogus-nxdomain=123.129.254.12
|
||||
bogus-nxdomain=123.129.254.13
|
||||
bogus-nxdomain=123.129.254.14
|
||||
bogus-nxdomain=123.129.254.15
|
||||
bogus-nxdomain=123.129.254.16
|
||||
bogus-nxdomain=123.129.254.17
|
||||
bogus-nxdomain=123.129.254.18
|
||||
bogus-nxdomain=123.129.254.19
|
||||
|
||||
# Shanxi Unicom (sxdnserror1.wo.com.cn ~ sxdnserror6.wo.com.cn)
|
||||
bogus-nxdomain=221.204.244.36
|
||||
bogus-nxdomain=221.204.244.37
|
||||
bogus-nxdomain=221.204.244.38
|
||||
bogus-nxdomain=221.204.244.39
|
||||
bogus-nxdomain=221.204.244.40
|
||||
bogus-nxdomain=221.204.244.41
|
||||
|
||||
# Tianjin Unicom (tjdnserror1.wo.com.cn ~ tjdnserror5.wo.com.cn)
|
||||
bogus-nxdomain=218.68.250.117
|
||||
bogus-nxdomain=218.68.250.118
|
||||
bogus-nxdomain=218.68.250.119
|
||||
bogus-nxdomain=218.68.250.120
|
||||
bogus-nxdomain=218.68.250.121
|
||||
|
||||
|
||||
## China Mobile
|
||||
|
||||
# Anhui Mobile
|
||||
bogus-nxdomain=120.209.138.64
|
||||
|
||||
# Guangdong Mobile
|
||||
bogus-nxdomain=211.139.136.73
|
||||
bogus-nxdomain=221.179.46.190
|
||||
bogus-nxdomain=221.179.46.194
|
||||
|
||||
# Jiangsu Mobile
|
||||
bogus-nxdomain=183.207.232.253
|
||||
|
||||
# Jiangxi Mobile
|
||||
bogus-nxdomain=223.82.248.117
|
||||
|
||||
# Qinghai Mobile
|
||||
bogus-nxdomain=211.138.74.132
|
||||
|
||||
# Shaanxi Mobile
|
||||
bogus-nxdomain=211.137.130.101
|
||||
|
||||
# Shanghai Mobile
|
||||
bogus-nxdomain=211.136.113.1
|
||||
|
||||
# Shanxi Mobile
|
||||
bogus-nxdomain=211.138.102.198
|
||||
|
||||
# Shandong Mobile
|
||||
bogus-nxdomain=120.192.83.163
|
||||
|
||||
# Sichuan Mobile
|
||||
bogus-nxdomain=183.221.242.172
|
||||
bogus-nxdomain=183.221.250.11
|
||||
|
||||
# Xizang Mobile
|
||||
bogus-nxdomain=111.11.208.2
|
||||
|
||||
# Yunnan Mobile
|
||||
bogus-nxdomain=183.224.40.24
|
||||
|
||||
|
||||
## China Tie Tong
|
||||
|
||||
# Shandong TieTong
|
||||
bogus-nxdomain=211.98.70.226
|
||||
bogus-nxdomain=211.98.70.227
|
||||
bogus-nxdomain=211.98.71.195
|
||||
|
||||
|
||||
## GWBN
|
||||
|
||||
# Wuhan GWBN
|
||||
bogus-nxdomain=114.112.163.232
|
||||
bogus-nxdomain=114.112.163.254
|
||||
@@ -1,81 +0,0 @@
|
||||
265.com
|
||||
2mdn-cn.net
|
||||
a1.cdn-hotels.com
|
||||
a1.phobos.apple.com
|
||||
ad.doubleclick.net
|
||||
admob-cn.com
|
||||
all.ldycdn.com
|
||||
app-cdn.2q10.com
|
||||
app-measurement.com
|
||||
app-measurement-cn.com
|
||||
cdn.globalsigncdn.com
|
||||
cdnbye.com
|
||||
cnc.ef-cdn.com
|
||||
dartsearch-cn.net
|
||||
dnl-11.geo.kaspersky.com
|
||||
doubleclick-cn.net
|
||||
dsany.sgnic.sg
|
||||
edge.yunjiasu.com
|
||||
fotadown.mayitek.com.wsdvs.com
|
||||
gcpnode.com
|
||||
gonglchuangl.net
|
||||
gongyichuangyi.net
|
||||
google-analytics-cn.com
|
||||
googleadservices.com
|
||||
googleadservices-cn.com
|
||||
googleapis-cn.com
|
||||
googleapps-cn.com
|
||||
googleflights-cn.net
|
||||
googleoptimize.com
|
||||
googleoptimize-cn.com
|
||||
googleplex.com
|
||||
googlesyndication-cn.com
|
||||
googletagmanager.com
|
||||
googletagmanager-cn.com
|
||||
googletagservices-cn.com
|
||||
googletraveladservices.com
|
||||
googletraveladservices-cn.com
|
||||
googlevads-cn.com
|
||||
gstatic-cn.com
|
||||
gvt1-cn.com
|
||||
gvt2-cn.com
|
||||
insta360.com
|
||||
itunes-cdn.itunes-apple.com.akadns.net
|
||||
netease.ugcvideoss.ourdvs.com
|
||||
oneplus.com
|
||||
opthw.xdwscache.speedcdns.com
|
||||
p00.upd.kaspersky.com
|
||||
pagead2.googlesyndication.com
|
||||
play.nyaacat.com
|
||||
r1.res.outlook.com
|
||||
recaptcha.net
|
||||
redirector.gvt1.com
|
||||
rsb.net
|
||||
s.c.lnkd.licdn.com
|
||||
s0.2mdn.net
|
||||
t1.tiles.ditu.live.com
|
||||
tse1-mm.cn.bing.net
|
||||
u.sb
|
||||
v24.lscache2.c.android.clients.google.com
|
||||
v2ex.assets.uxengine.net
|
||||
v2ex.china.uxengine.net
|
||||
v2ex.com
|
||||
www.agora.io
|
||||
www.azure.cn.mschcdn.com
|
||||
www.camcard.com
|
||||
www.fund001.com
|
||||
www.google-analytics.com
|
||||
www.googleanalytics.com
|
||||
www.googletagservices.com
|
||||
www.gov.cn
|
||||
www.henan.gov.cn.cdn30.com
|
||||
www.howbuy.com
|
||||
www.microad-cn.com
|
||||
www.shandongair.com
|
||||
www.sunrtb.com
|
||||
www.yangfd.com
|
||||
www.youngfunding.co.uk
|
||||
www.cz88.net
|
||||
xn--9kr7l.com
|
||||
xn--flw351e.com
|
||||
zoom.us
|
||||
@@ -1,28 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
case "$1" in
|
||||
114)
|
||||
DNS=114.114.114.114
|
||||
;;
|
||||
ali)
|
||||
DNS=223.5.5.5
|
||||
;;
|
||||
baidu)
|
||||
DNS=180.76.76.76
|
||||
;;
|
||||
cnnic)
|
||||
DNS=1.2.4.8
|
||||
;;
|
||||
dnspod)
|
||||
DNS=119.29.29.29
|
||||
;;
|
||||
google)
|
||||
DNS=8.8.8.8
|
||||
;;
|
||||
*)
|
||||
DNS=$1
|
||||
esac
|
||||
|
||||
sed -i "s|^\(server.*\)/[^/]*$|\1/$DNS|" /etc/dnsmasq.d/accelerated-domains.china.conf
|
||||
sed -i "s|^\(server.*\)/[^/]*$|\1/$DNS|" /etc/dnsmasq.d/google.china.conf 2>/dev/null
|
||||
sed -i "s|^\(server.*\)/[^/]*$|\1/$DNS|" /etc/dnsmasq.d/apple.china.conf 2>/dev/null
|
||||
@@ -1,81 +0,0 @@
|
||||
#!/usr/bin/ruby
|
||||
|
||||
""" Find redundant items in accelerated-domains.china.conf.
|
||||
e.g. 'bar.foo.com' is redundant for 'foo.com'.
|
||||
"""
|
||||
|
||||
def load(conf_file)
|
||||
""" Parse conf file & Prepare data structure
|
||||
Returns: [ ['abc', 'com'],
|
||||
['bar', 'foo', 'com'],
|
||||
... ]
|
||||
"""
|
||||
|
||||
results = []
|
||||
if conf_file.is_a? String
|
||||
lines = File.readlines(conf_file)
|
||||
elsif conf_file.is_a? Array
|
||||
lines = conf_file
|
||||
end
|
||||
lines.map do |line|
|
||||
line = line.chomp
|
||||
next if line.empty? or line.start_with?('#')
|
||||
# A domain name is case-insensitive and
|
||||
# consists of several labels, separated by a full stop
|
||||
domain_name = line.split('/')[1]
|
||||
domain_name = domain_name.downcase
|
||||
domain_labels = domain_name.split('.')
|
||||
results << domain_labels
|
||||
end
|
||||
|
||||
# Sort results by domain labels' length
|
||||
results.sort_by(&:length)
|
||||
end
|
||||
|
||||
|
||||
LEAF = 1
|
||||
def find(labelses)
|
||||
""" Find redundant items by a tree of top-level domain label to sub-level.
|
||||
`tree` is like { 'com': { 'foo: { 'bar': LEAF },
|
||||
'abc': LEAF },
|
||||
'org': ... }
|
||||
"""
|
||||
redundant = []
|
||||
tree = {}
|
||||
labelses.each do |labels|
|
||||
domain = labels.join('.')
|
||||
# Init root node as current node
|
||||
node = tree
|
||||
until labels.empty?
|
||||
label = labels.pop
|
||||
if node.include? label
|
||||
# If child node is a LEAF node,
|
||||
# current domain must be an existed domain or a subdomain of an existed.
|
||||
if node[label] == LEAF
|
||||
puts "Redundant found: #{domain} at #{labels.join('.')}"
|
||||
redundant << domain
|
||||
break
|
||||
end
|
||||
else
|
||||
# Create a leaf node if current label is last one
|
||||
if labels.empty?
|
||||
node[label] = LEAF
|
||||
# Create a branch node
|
||||
else
|
||||
node[label] = {}
|
||||
end
|
||||
end
|
||||
# Iterate to child node
|
||||
node = node[label]
|
||||
end
|
||||
end
|
||||
redundant
|
||||
end
|
||||
|
||||
def find_redundant(conf_file)
|
||||
return find(load(conf_file))
|
||||
end
|
||||
|
||||
if __FILE__ == $0
|
||||
find_redundant('accelerated-domains.china.conf')
|
||||
end
|
||||
@@ -1,7 +0,0 @@
|
||||
source "https://rubygems.org"
|
||||
|
||||
gem "colorize"
|
||||
gem "concurrent-ruby"
|
||||
gem "ipaddr"
|
||||
gem "public_suffix"
|
||||
gem "sus"
|
||||
@@ -1,161 +0,0 @@
|
||||
server=/265.com/114.114.114.114
|
||||
server=/2mdn-cn.net/114.114.114.114
|
||||
server=/2mdn.net/114.114.114.114
|
||||
server=/accounts.googlers.com/114.114.114.114
|
||||
server=/accounts.xn--9trs65b.com/114.114.114.114
|
||||
server=/accounts.xn--ggle-55da.com/114.114.114.114
|
||||
server=/admob-cn.com/114.114.114.114
|
||||
server=/adservice.google.com/114.114.114.114
|
||||
server=/ai.ytimg.com/114.114.114.114
|
||||
server=/app-measurement-cn.com/114.114.114.114
|
||||
server=/app-measurement.com/114.114.114.114
|
||||
server=/apps5.oingo.com/114.114.114.114
|
||||
server=/avail.googleflights.net/114.114.114.114
|
||||
server=/beacons.gcp.gvt2.com/114.114.114.114
|
||||
server=/beacons.gvt2.com/114.114.114.114
|
||||
server=/beacons2.gvt2.com/114.114.114.114
|
||||
server=/beacons3.gvt2.com/114.114.114.114
|
||||
server=/borgmon.adz.google.com/114.114.114.114
|
||||
server=/c.admob.com/114.114.114.114
|
||||
server=/c.android.clients.google.com/114.114.114.114
|
||||
server=/cache-management-prod.google.com/114.114.114.114
|
||||
server=/cache.pack.google.com/114.114.114.114
|
||||
server=/checkin.gstatic.com/114.114.114.114
|
||||
server=/clickserve.cc-dt.com/114.114.114.114
|
||||
server=/clickserve.dartsearch.net/114.114.114.114
|
||||
server=/clickserver.googleads.com/114.114.114.114
|
||||
server=/clientservices.googleapis.com/114.114.114.114
|
||||
server=/cn.widevine.com/114.114.114.114
|
||||
server=/cnappinstall.googleadapis.com/114.114.114.114
|
||||
server=/connectivitycheck.gstatic.com/114.114.114.114
|
||||
server=/content.googleadapis.com/114.114.114.114
|
||||
server=/corp.google.com/114.114.114.114
|
||||
server=/corp.googleapis.com/114.114.114.114
|
||||
server=/crashlyticsreports-pa.googleapis.com/114.114.114.114
|
||||
server=/crl.pki.goog/114.114.114.114
|
||||
server=/csi.gstatic.com/114.114.114.114
|
||||
server=/dartsearch-cn.net/114.114.114.114
|
||||
server=/dg-meta.video.google.com/114.114.114.114
|
||||
server=/distribution.qatp1.net/114.114.114.114
|
||||
server=/distribution.qcpp1.net/114.114.114.114
|
||||
server=/distribution.qpdp1.net/114.114.114.114
|
||||
server=/dl.google.com/114.114.114.114
|
||||
server=/dl.l.google.com/114.114.114.114
|
||||
server=/doubleclick-cn.net/114.114.114.114
|
||||
server=/doubleclick.net/114.114.114.114
|
||||
server=/download.mlcc.google.com/114.114.114.114
|
||||
server=/download.qatp1.net/114.114.114.114
|
||||
server=/download.qcpp1.net/114.114.114.114
|
||||
server=/download.qpdp1.net/114.114.114.114
|
||||
server=/download.tensorflow.google.com/114.114.114.114
|
||||
server=/emmapplecodevice.googleapis.com/114.114.114.114
|
||||
server=/firebase-settings.crashlytics.com/114.114.114.114
|
||||
server=/fontfiles.googleadapis.com/114.114.114.114
|
||||
server=/fontfiles.googleapis.com/114.114.114.114
|
||||
server=/fonts.googleadapis.com/114.114.114.114
|
||||
server=/fonts.googleapis.com/114.114.114.114
|
||||
server=/fonts.gstatic.com/114.114.114.114
|
||||
server=/g0.gstatic.com/114.114.114.114
|
||||
server=/g1.gstatic.com/114.114.114.114
|
||||
server=/g2.gstatic.com/114.114.114.114
|
||||
server=/g3.gstatic.com/114.114.114.114
|
||||
server=/gcpnode.com/114.114.114.114
|
||||
server=/gonglchuangl.net/114.114.114.114
|
||||
server=/gongyichuangyi.net/114.114.114.114
|
||||
server=/google-analytics-cn.com/114.114.114.114
|
||||
server=/google-analytics.com/114.114.114.114
|
||||
server=/googleadservices-cn.com/114.114.114.114
|
||||
server=/googleadservices.com/114.114.114.114
|
||||
server=/googleanalytics.com/114.114.114.114
|
||||
server=/googleapis-cn.com/114.114.114.114
|
||||
server=/googleapps-cn.com/114.114.114.114
|
||||
server=/googleflights-cn.net/114.114.114.114
|
||||
server=/googleoptimize-cn.com/114.114.114.114
|
||||
server=/googleoptimize.com/114.114.114.114
|
||||
server=/googleplex.com/114.114.114.114
|
||||
server=/googlesyndication-cn.com/114.114.114.114
|
||||
server=/googlesyndication.com/114.114.114.114
|
||||
server=/googletagmanager-cn.com/114.114.114.114
|
||||
server=/googletagmanager.com/114.114.114.114
|
||||
server=/googletagservices-cn.com/114.114.114.114
|
||||
server=/googletagservices.com/114.114.114.114
|
||||
server=/googletraveladservices-cn.com/114.114.114.114
|
||||
server=/googletraveladservices.com/114.114.114.114
|
||||
server=/googlevads-cn.com/114.114.114.114
|
||||
server=/goto.google.com/114.114.114.114
|
||||
server=/gstatic-cn.com/114.114.114.114
|
||||
server=/gstaticadssl.l.google.com/114.114.114.114
|
||||
server=/gtm.oasisfeng.com/114.114.114.114
|
||||
server=/gvt1-cn.com/114.114.114.114
|
||||
server=/gvt2-cn.com/114.114.114.114
|
||||
server=/imasdk.googleapis.com/114.114.114.114
|
||||
server=/monitoring.qatp1.net/114.114.114.114
|
||||
server=/monitoring.qcpp1.net/114.114.114.114
|
||||
server=/monitoring.qpdp1.net/114.114.114.114
|
||||
server=/ocsp.pki.goog/114.114.114.114
|
||||
server=/pagead-googlehosted.l.google.com/114.114.114.114
|
||||
server=/performanceparameters.googleapis.com/114.114.114.114
|
||||
server=/pki-goog.l.google.com/114.114.114.114
|
||||
server=/play.1ucrs.com/114.114.114.114
|
||||
server=/prod-controlbe.floonet.goog/114.114.114.114
|
||||
server=/prod-databe.floonet.goog/114.114.114.114
|
||||
server=/prod.databe.floonet.goog/114.114.114.114
|
||||
server=/qagpublic.qatp1.net/114.114.114.114
|
||||
server=/qagpublic.qcpp1.net/114.114.114.114
|
||||
server=/qagpublic.qpdp1.net/114.114.114.114
|
||||
server=/qgadmin.qatp1.net/114.114.114.114
|
||||
server=/qgadmin.qcpp1.net/114.114.114.114
|
||||
server=/qgadmin.qpdp1.net/114.114.114.114
|
||||
server=/qpx.googleflights.net/114.114.114.114
|
||||
server=/qualysapi.qatp1.net/114.114.114.114
|
||||
server=/qualysapi.qcpp1.net/114.114.114.114
|
||||
server=/qualysapi.qpdp1.net/114.114.114.114
|
||||
server=/qualysguard.qatp1.net/114.114.114.114
|
||||
server=/qualysguard.qcpp1.net/114.114.114.114
|
||||
server=/qualysguard.qpdp1.net/114.114.114.114
|
||||
server=/recaptcha.net/114.114.114.114
|
||||
server=/redirector.bdn.dev/114.114.114.114
|
||||
server=/redirector.c.chat.google.com/114.114.114.114
|
||||
server=/redirector.c.docs.google.com/114.114.114.114
|
||||
server=/redirector.c.drive.google.com/114.114.114.114
|
||||
server=/redirector.c.mail.google.com/114.114.114.114
|
||||
server=/redirector.c.pack.google.com/114.114.114.114
|
||||
server=/redirector.c.play.google.com/114.114.114.114
|
||||
server=/redirector.c.youtubeeducation.com/114.114.114.114
|
||||
server=/redirector.gcpcdn.gvt1.com/114.114.114.114
|
||||
server=/redirector.gvt1.com/114.114.114.114
|
||||
server=/redirector.offline-maps.gvt1.com/114.114.114.114
|
||||
server=/redirector.snap.gvt1.com/114.114.114.114
|
||||
server=/redirector.xn--ngstr-lra8j.com/114.114.114.114
|
||||
server=/regioninfo-pa.googleapis.com/114.114.114.114
|
||||
server=/safebrowsing.googleapis.com/114.114.114.114
|
||||
server=/scanservice1.qatp1.net/114.114.114.114
|
||||
server=/scanservice1.qcpp1.net/114.114.114.114
|
||||
server=/scanservice1.qpdp1.net/114.114.114.114
|
||||
server=/service.urchin.com/114.114.114.114
|
||||
server=/settings.xn--9trs65b.com/114.114.114.114
|
||||
server=/ssl-google-analytics.l.google.com/114.114.114.114
|
||||
server=/ssl.gstatic.com/114.114.114.114
|
||||
server=/staging-controlbe.floonet.goog/114.114.114.114
|
||||
server=/staging-databe.floonet.goog/114.114.114.114
|
||||
server=/staging-regioninfo-pa.googleapis.com/114.114.114.114
|
||||
server=/staging.databe.floonet.goog/114.114.114.114
|
||||
server=/support.1ucrs.com/114.114.114.114
|
||||
server=/tac.googleapis.com/114.114.114.114
|
||||
server=/test.bugs-qa.chromium.org/114.114.114.114
|
||||
server=/test.gbugs-qa.chromium.org/114.114.114.114
|
||||
server=/tools.google.com/114.114.114.114
|
||||
server=/tools.l.google.com/114.114.114.114
|
||||
server=/up.corp.goog/114.114.114.114
|
||||
server=/up.gcp.googlers.com/114.114.114.114
|
||||
server=/update.crashlytics.com/114.114.114.114
|
||||
server=/update.googleapis.com/114.114.114.114
|
||||
server=/wear.googleapis.com/114.114.114.114
|
||||
server=/www-google-analytics.l.google.com/114.114.114.114
|
||||
server=/www-googletagmanager.l.google.com/114.114.114.114
|
||||
server=/www.destinationurl.com/114.114.114.114
|
||||
server=/www.googleadapis.com/114.114.114.114
|
||||
server=/www.gstatic.com/114.114.114.114
|
||||
server=/www.pxcc.com/114.114.114.114
|
||||
server=/xn--9kr7l.com/114.114.114.114
|
||||
server=/xn--flw351e.com/114.114.114.114
|
||||
@@ -1,55 +0,0 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
WORKDIR="$(mktemp -d)"
|
||||
SERVERS=(114.114.114.114 114.114.115.115 223.5.5.5 119.29.29.29)
|
||||
# Others: 223.6.6.6 119.28.28.28
|
||||
# Not using best possible CDN pop: 1.2.4.8 210.2.4.8
|
||||
# Broken?: 180.76.76.76
|
||||
|
||||
CONF_WITH_SERVERS=(accelerated-domains.china google.china apple.china)
|
||||
CONF_SIMPLE=(bogus-nxdomain.china)
|
||||
|
||||
echo "Downloading latest configurations..."
|
||||
git clone --depth=1 https://gitee.com/felixonmars/dnsmasq-china-list.git "$WORKDIR"
|
||||
#git clone --depth=1 https://pagure.io/dnsmasq-china-list.git "$WORKDIR"
|
||||
#git clone --depth=1 https://github.com/felixonmars/dnsmasq-china-list.git "$WORKDIR"
|
||||
#git clone --depth=1 https://bitbucket.org/felixonmars/dnsmasq-china-list.git "$WORKDIR"
|
||||
#git clone --depth=1 https://gitlab.com/felixonmars/dnsmasq-china-list.git "$WORKDIR"
|
||||
#git clone --depth=1 https://e.coding.net/felixonmars/dnsmasq-china-list.git "$WORKDIR"
|
||||
#git clone --depth=1 https://codehub.devcloud.huaweicloud.com/dnsmasq-china-list00001/dnsmasq-china-list.git "$WORKDIR"
|
||||
#git clone --depth=1 http://repo.or.cz/dnsmasq-china-list.git "$WORKDIR"
|
||||
|
||||
echo "Removing old configurations..."
|
||||
for _conf in "${CONF_WITH_SERVERS[@]}" "${CONF_SIMPLE[@]}"; do
|
||||
rm -f /etc/dnsmasq.d/"$_conf"*.conf
|
||||
done
|
||||
|
||||
echo "Installing new configurations..."
|
||||
for _conf in "${CONF_SIMPLE[@]}"; do
|
||||
cp "$WORKDIR/$_conf.conf" "/etc/dnsmasq.d/$_conf.conf"
|
||||
done
|
||||
|
||||
for _server in "${SERVERS[@]}"; do
|
||||
for _conf in "${CONF_WITH_SERVERS[@]}"; do
|
||||
cp "$WORKDIR/$_conf.conf" "/etc/dnsmasq.d/$_conf.$_server.conf"
|
||||
done
|
||||
|
||||
sed -i "s|^\(server.*\)/[^/]*$|\1/$_server|" /etc/dnsmasq.d/*."$_server".conf
|
||||
done
|
||||
|
||||
echo "Restarting dnsmasq service..."
|
||||
if hash systemctl 2>/dev/null; then
|
||||
systemctl restart dnsmasq
|
||||
elif hash service 2>/dev/null; then
|
||||
service dnsmasq restart
|
||||
elif hash rc-service 2>/dev/null; then
|
||||
rc-service dnsmasq restart
|
||||
elif hash busybox 2>/dev/null && [[ -d "/etc/init.d" ]]; then
|
||||
/etc/init.d/dnsmasq restart
|
||||
else
|
||||
echo "Now please restart dnsmasq since I don't know how to do it."
|
||||
fi
|
||||
|
||||
echo "Cleaning up..."
|
||||
rm -r "$WORKDIR"
|
||||
@@ -1,52 +0,0 @@
|
||||
.ns.cloudflare.com
|
||||
.google.com
|
||||
.akam.net
|
||||
.domaincontrol.com
|
||||
.dreamhost.com
|
||||
.wordpress.com
|
||||
.dynect.net
|
||||
.linode.com
|
||||
.dnsmadeeasy.com
|
||||
.stabletransit.com
|
||||
.qwest.net
|
||||
.registrar-servers.com
|
||||
.dnsimple.com
|
||||
.namebrightdns.com
|
||||
.he.net
|
||||
.googledomains.com
|
||||
.msft.net
|
||||
.akadns.org
|
||||
.apple.com
|
||||
.msedge.net
|
||||
.amazonaws.com
|
||||
.easydns.org
|
||||
.easydns.com
|
||||
.easydns.net
|
||||
.your-server.de
|
||||
.yandex.net
|
||||
.techsmith.com
|
||||
.nsone.net
|
||||
.fastly.net
|
||||
.hosteurope.de
|
||||
.hostmonster.com
|
||||
.automattic.com
|
||||
.sedoparking.com
|
||||
.ztomy.com
|
||||
.parklogic.com
|
||||
.gandi.net
|
||||
.worldnic.com
|
||||
.ftchinese.com
|
||||
.name.com
|
||||
.1-api.org
|
||||
.parkpage.foundationapi.com
|
||||
.expdns.net
|
||||
.domains-hold.com
|
||||
.dnsowl.com
|
||||
.dynadot.com
|
||||
.webnic.cc
|
||||
.exmetis.com
|
||||
.dnsever.com
|
||||
.digitalocean.com
|
||||
.ispapi.net
|
||||
.name-services.com
|
||||
.expirenotification.com
|
||||
@@ -1,117 +0,0 @@
|
||||
.iidns.com
|
||||
.dnspod.com
|
||||
.dnspod.net
|
||||
.hichina.com
|
||||
.xincache.com
|
||||
.dnsv2.com
|
||||
.dnsv3.com
|
||||
.dnsv4.com
|
||||
.dnsv5.com
|
||||
.myhostadmin.net
|
||||
.cnolnic.com
|
||||
.cnolnic.net
|
||||
.dns.com.cn
|
||||
.cnmsn.net
|
||||
.bizcn.com
|
||||
.alidns.com
|
||||
.aliyun.com
|
||||
.bddns.cn
|
||||
.360wzb.com
|
||||
.dnsdun.com
|
||||
.dnsdun.net
|
||||
.chinanetsun-dns.com
|
||||
.xundns.com
|
||||
.jiasule.net
|
||||
.ns.yunjiasu.com
|
||||
.cdncenter.com
|
||||
.anquanbao.com
|
||||
.sina.com.cn
|
||||
.72dns.com
|
||||
.idc1.cn
|
||||
.ezdnscenter.com
|
||||
.01isp.com
|
||||
.01isp.net
|
||||
.enet.com.cn
|
||||
.800hr.net.cn
|
||||
.dns.net.cn
|
||||
.okidc.com
|
||||
.cdnhost.cn
|
||||
.eznowdns.net
|
||||
.ndns.cn
|
||||
.dnsng.net
|
||||
.wanmeilink.com
|
||||
.22.cn
|
||||
.zjdomain.com
|
||||
.zol.com
|
||||
.ce.net.cn
|
||||
.4everdns.com
|
||||
.east.net.cn
|
||||
.zdnscloud.net.cn
|
||||
.51.net
|
||||
.cloudcdns.com
|
||||
.pubyun.com
|
||||
.qq.com
|
||||
.cdeledu.com
|
||||
.myhexin.com
|
||||
.bidns.net
|
||||
.inc365.com
|
||||
.zdnscloud.com
|
||||
.zdnscloud.info
|
||||
.chinanetsun.com
|
||||
.gzidc.com
|
||||
.ns365.net
|
||||
.51dns.com
|
||||
.nease.net
|
||||
.xrnet.cn
|
||||
.cnkuai.cn
|
||||
.cnkuai.com
|
||||
.taobao.com
|
||||
.aoyou365.com
|
||||
.dnspai.com
|
||||
.360safe.com
|
||||
.qycn.net
|
||||
.qycn.cn
|
||||
.sinonets.cn
|
||||
.sfn.cn
|
||||
.yovole.com
|
||||
.duowanns.com
|
||||
.ucweb.co
|
||||
.jcloud.co
|
||||
.eedns.co
|
||||
.maff.co
|
||||
.szhot.com
|
||||
.bigwww.com
|
||||
ns1.oray.net
|
||||
ns2.oray.net
|
||||
.cdnudns.co
|
||||
.zhujiwu.com
|
||||
.jjworld.net.cn
|
||||
.dns-diy.com
|
||||
.iidns.com
|
||||
.dns.com
|
||||
.youku.com
|
||||
.zj01.com
|
||||
.cdns.cn
|
||||
.bdydns.cn
|
||||
.baidu.com
|
||||
.139135.com
|
||||
.hwclouds.net
|
||||
.hwclouds.com
|
||||
.hwclouds.cn
|
||||
.alibabadns.com
|
||||
.iqiyi.com
|
||||
.jdcloud.com
|
||||
.jdcache.com
|
||||
.jd.com
|
||||
.sohu.com
|
||||
.dns234.net
|
||||
.awsdns-cn
|
||||
.hwclouds-dns.com
|
||||
.hwclouds-dns.net
|
||||
.baidubce.com
|
||||
.juming.com
|
||||
.jdjrdns.com
|
||||
.huaweicloud-dns.cn
|
||||
.360anyu.com
|
||||
.zndns.com
|
||||
.ppstream.com
|
||||
@@ -1,203 +0,0 @@
|
||||
1.cms.s81c.com
|
||||
1.www.s81c.com
|
||||
account.htcvive.com
|
||||
achievements.xboxlive.com
|
||||
adfarm.mediaplex.com
|
||||
ad.mediaplex.com
|
||||
ajax.loli.net
|
||||
altfarm.mediaplex.com
|
||||
ark.intel.com
|
||||
assets.adobedtm.com
|
||||
assets-ssl.xbox.com
|
||||
avatarread-ssl.xboxlive.com
|
||||
avatarread.xboxlive.com
|
||||
avatar-ssl.xboxlive.com
|
||||
avatar.xboxlive.com
|
||||
blog.htcvive.com
|
||||
blog.tutorabc.com
|
||||
blog.vive.com
|
||||
cashier.alipay.com.srip.net
|
||||
catalog-cdn.xboxlive.com
|
||||
cdn1.evernote.com
|
||||
cdn.ampproject.org #281
|
||||
cdn.jsdelivr.net
|
||||
cdnjs.loli.net
|
||||
cdn.loli.net
|
||||
china-cdn2.unityads.unity3d.com
|
||||
china-cdn3.unityads.unity3d.com
|
||||
china.msn.com
|
||||
china.nba.com
|
||||
china.uxengine.net
|
||||
cl2.apple.com.edgekey.net.globalredir.akadns.net
|
||||
click.dji.com
|
||||
client-download.steampowered.com
|
||||
clubhub.xboxlive.com
|
||||
cms.ibm.com
|
||||
cn-api.samsungcloud.com
|
||||
cn.coremetrics.com
|
||||
cn.debian.org
|
||||
cn.download.nvidia.com
|
||||
cn.img.stb.s-msn.com
|
||||
cnupgrade.microsoft.com
|
||||
comments.xboxlive.com
|
||||
compass-ssl.xbox.com
|
||||
compass-ssl.xboxlive.com
|
||||
compass.xbox.com
|
||||
compass.xboxlive.com
|
||||
config.unityads.unity3d.com
|
||||
configure.ap.dell.com
|
||||
console-service.halo.xbox.com
|
||||
console-service-ssl.halo.xbox.com
|
||||
content.nike.com
|
||||
contentstore.htcvive.com
|
||||
cortexfx.bnpparibas.com
|
||||
createpoint.qti.qualcomm.com
|
||||
cs-analytics.htcsense.com
|
||||
c.s-microsoft.com
|
||||
developer.htcvive.com
|
||||
dlassets-ssl.xboxlive.com
|
||||
dlassets.xboxlive.com
|
||||
dlcdnets.asus.com
|
||||
download.epicgames.com
|
||||
download.gfe.nvidia.com
|
||||
download.mcafee.com
|
||||
download.parallels.com
|
||||
download-ssl.xbox.com
|
||||
download.xboxlive.com
|
||||
e.admob.com
|
||||
ec4.images-amazon.com
|
||||
ec8.images-amazon.com
|
||||
editorial.xboxlive.com
|
||||
eds.xboxlive.com
|
||||
emdl.ws.microsoft.com
|
||||
emoi-cncdn.bing.com
|
||||
encoding.image-gmkt.com
|
||||
epix-ssl.xbox.com
|
||||
epix.xbox.com
|
||||
fonts.loli.net
|
||||
gameplay.intel.com
|
||||
gateway.craft.moe
|
||||
g-ec4.images-amazon.com
|
||||
gfwsl.geforce.com
|
||||
globalsigncdn.com
|
||||
gravatar.loli.net
|
||||
gsp11-cn.ls.apple.com
|
||||
gsp12-cn.ls.apple.com
|
||||
gstatic.loli.net
|
||||
hdn.xnimg.cn.cdngc.net
|
||||
images-cn-4.ssl-images-amazon.com
|
||||
images-cn-8.ssl-images-amazon.com
|
||||
images-cn.ssl-images-amazon.com
|
||||
images-eds-ssl.xboxlive.com
|
||||
images.nvidia.com
|
||||
image.xboxlive.com
|
||||
img1.wsimg.com
|
||||
img2.wsimg.com
|
||||
img3.wsimg.com
|
||||
img4.wsimg.com
|
||||
img5.wsimg.com
|
||||
img-cdn.mediaplex.com
|
||||
img.mediaplex.com
|
||||
international.download.nvidia.com
|
||||
international-gfe.download.nvidia.com
|
||||
kh.google.com
|
||||
khm0.googleapis.com
|
||||
khm0.google.com
|
||||
khm1.googleapis.com
|
||||
khm1.google.com
|
||||
khm2.googleapis.com
|
||||
khm2.google.com
|
||||
khm3.googleapis.com
|
||||
khm3.google.com
|
||||
khmdb.googleapis.com
|
||||
khmdb.google.com
|
||||
khm.googleapis.com
|
||||
khm.google.com
|
||||
lh3.appinn.net
|
||||
liveupdate01.asus.com
|
||||
lnkd.licdn.com
|
||||
lx2.cok.elexapp.com
|
||||
lx2.cok.elex.com
|
||||
manage.c3edge.com
|
||||
marketplace-xb.xboxlive.com
|
||||
media.admob.com
|
||||
mediaexp-programming.xboxlive.com
|
||||
media.licdn.com
|
||||
mktplassets-ssl.xbox.com
|
||||
msgr.dlservice.microsoft.com
|
||||
msgruser.dlservice.microsoft.com
|
||||
msg.xboxlive.com
|
||||
nxeassets.xbox.com
|
||||
ocsp-data.us.cdnetworks.com
|
||||
olay-cn.cdnpg.com
|
||||
phobos.apple.com
|
||||
platform.linkedin.com
|
||||
plus.djicdn.com
|
||||
plus.dji.com
|
||||
prm.dji.com
|
||||
profile.xboxlive.com
|
||||
res.office365.com
|
||||
res.outlook.com
|
||||
s1.mzstatic.com
|
||||
s2.mzstatic.com
|
||||
s3.mzstatic.com
|
||||
s4.mzstatic.com
|
||||
s5.mzstatic.com
|
||||
safebrowsing-cache.google.com
|
||||
scp-social.s-msn.com
|
||||
script.image-gmkt.com
|
||||
secaz-fota-dn.samsungdm.com
|
||||
secure-nikeplus.nike.com
|
||||
sekong.cn.com
|
||||
settings.crashlytics.com
|
||||
settings.xboxlive.com
|
||||
shop.samsung.com
|
||||
sina.com.hk
|
||||
source.tutorabc.com
|
||||
speedtest.xboxlive.com
|
||||
ssl.travelzoo.com
|
||||
ssl.tzoo-img.com
|
||||
static-exp1.licdn.com
|
||||
static.image-gmkt.com
|
||||
static.licdn.com
|
||||
store-images.microsoft.com
|
||||
store-images.s-microsoft.com
|
||||
store.samsung.com
|
||||
tcl.com.ru
|
||||
tiles.xbox.com
|
||||
titlestorage.xboxlive.com
|
||||
toolbarqueries.google.com
|
||||
topics-cdn.dell.com
|
||||
translate.googleapis.com
|
||||
translation.googleapis.com
|
||||
tse1.mm.bing.net
|
||||
tse2.mm.bing.net
|
||||
tse3.mm.bing.net
|
||||
tse4.mm.bing.net
|
||||
u.djicdn.com
|
||||
userstats.xboxlive.com
|
||||
v2ex.com
|
||||
web-service.halo.xbox.com
|
||||
web-service-ssl.halo.xbox.com
|
||||
webview.unityads.unity3d.com
|
||||
www-05.ibm.com
|
||||
www1-cdn.dell.com
|
||||
www-api.ibm.com
|
||||
www.ericsson.com
|
||||
www.htcvive.com
|
||||
www.ibm.com
|
||||
www.ikea.com
|
||||
www.intel.com
|
||||
www.kaspersky.com
|
||||
www.nvidia.com
|
||||
www.parallels.com
|
||||
www.renren.com.cdngc.net
|
||||
www-ssl.intel.com
|
||||
www.sulwhasoo.com
|
||||
www.travelzoo.com
|
||||
www.tutorabc.com
|
||||
xb.dlservice.microsoft.com
|
||||
x-dash-public.rec.mp.microsoft.com
|
||||
z0.muscache.com
|
||||
z1.muscache.com
|
||||
z2.muscache.com
|
||||
@@ -1,14 +0,0 @@
|
||||
require_relative '../verify'
|
||||
|
||||
let (:lines) { File.readlines("accelerated-domains.china.conf").filter { |line| !line.empty? } }
|
||||
|
||||
it "should find redundant domains" do
|
||||
expect(CheckRedundant(lines, [], 'qq.com')).to be == false
|
||||
expect(CheckRedundant(lines, [], 'www.qq.com')).to be == false
|
||||
expect(CheckRedundant(lines, [], 'qq.cn')).to be == false
|
||||
expect(CheckRedundant(lines, [], 'www.qq.cn')).to be == false
|
||||
end
|
||||
|
||||
it "should add new domains" do
|
||||
expect(CheckRedundant(lines, [], 'what.a.wonderful.domain')).to be == "server=/what.a.wonderful.domain/114.114.114.114\n"
|
||||
end
|
||||
@@ -1,65 +0,0 @@
|
||||
#!/usr/bin/ruby
|
||||
require 'domain_name'
|
||||
require 'optparse'
|
||||
require 'ostruct'
|
||||
require_relative 'verify'
|
||||
|
||||
options = OpenStruct.new
|
||||
options.sort = true
|
||||
options.file = "accelerated-domains.china.conf"
|
||||
options.add = []
|
||||
options.delete = []
|
||||
OptionParser.new do |opts|
|
||||
opts.banner = "dnsmasq-china-list updater"
|
||||
|
||||
opts.on("-s", "--[no-]sort", "Sort the list (default action)") do |s|
|
||||
options.sort = s
|
||||
end
|
||||
|
||||
opts.on("-f", "--file FILE", "Specify the file to update (accelerated-domains.china.conf by default)") do |f|
|
||||
options.file = f
|
||||
end
|
||||
|
||||
opts.on("-a", "--add domain1,domain2", Array, "Add domain(s) to the list (implies -s)") do |a|
|
||||
options.add = a
|
||||
options.sort = true
|
||||
end
|
||||
|
||||
opts.on("-d", "--delete domain1,domain2", Array, "Remove domain(s) from the list (implies -s)") do |d|
|
||||
options.delete = d
|
||||
options.sort = true
|
||||
end
|
||||
end.parse!
|
||||
|
||||
lines = File.readlines(options.file).filter { |line| !line.empty? }
|
||||
disabled_lines = lines.filter { |line| line.start_with?("#") }
|
||||
|
||||
changed = false
|
||||
|
||||
options.add.each do |domain|
|
||||
domain = DomainName.normalize(domain)
|
||||
new_line = CheckRedundant(lines, disabled_lines, domain)
|
||||
if new_line != false
|
||||
puts "New domain added: #{domain}"
|
||||
lines << new_line
|
||||
changed = true
|
||||
end
|
||||
end
|
||||
|
||||
options.delete.each do |domain|
|
||||
domain = DomainName.normalize(domain)
|
||||
target_line = "server=/#{domain}/114.114.114.114\n"
|
||||
unless lines.include? target_line
|
||||
puts "Failed to remove domain #{domain}: not found."
|
||||
else
|
||||
puts "Domain removed: #{domain}"
|
||||
lines.delete(target_line)
|
||||
changed = true
|
||||
end
|
||||
end
|
||||
|
||||
fail "No changes made." if (options.add.length || options.delete.length) && !changed
|
||||
|
||||
lines.sort_by! { |x| x.delete_prefix("#") } if options.sort
|
||||
|
||||
File.write(options.file, lines.join)
|
||||
@@ -1,301 +0,0 @@
|
||||
#!/usr/bin/ruby
|
||||
|
||||
require 'colorize'
|
||||
require 'concurrent'
|
||||
require 'ipaddr'
|
||||
require 'public_suffix'
|
||||
require 'resolv'
|
||||
|
||||
class ChinaListVerify
|
||||
def initialize(
|
||||
dns=nil,
|
||||
whitelist_file: "ns-whitelist.txt",
|
||||
blacklist_file: "ns-blacklist.txt",
|
||||
cdnlist_file: "cdn-testlist.txt",
|
||||
chnroutes_file: "/usr/share/china_ip_list.txt"
|
||||
)
|
||||
@dns = dns
|
||||
@whitelist = load_list whitelist_file
|
||||
@blacklist = load_list blacklist_file
|
||||
@cdnlist = load_list cdnlist_file
|
||||
@tld_ns = Concurrent::Hash.new
|
||||
|
||||
begin
|
||||
@chnroutes = load_list(chnroutes_file).map { |line| IPAddr.new line }
|
||||
rescue Errno::ENOENT
|
||||
puts "Failed to load chnroutes, CDN check disabled".red
|
||||
@chnroutes = nil
|
||||
end
|
||||
end
|
||||
|
||||
def load_list(filename)
|
||||
File.readlines(filename).each do |line|
|
||||
line if !line.chomp!.empty? and !line.start_with?("#")
|
||||
end
|
||||
end
|
||||
|
||||
def test_cn_ip(domain, response: nil)
|
||||
if @chnroutes == nil
|
||||
raise "chnroutes not loaded"
|
||||
end
|
||||
|
||||
answers = nil
|
||||
if response != nil && !response.empty?
|
||||
answers = response.filter_map { |n, r| r if n.to_s == domain && r.class == Resolv::DNS::Resource::IN::A }
|
||||
end
|
||||
|
||||
if answers == nil || answers.empty?
|
||||
answers = resolve(domain, 'A')
|
||||
end
|
||||
|
||||
answers.each do |answer|
|
||||
answer = IPAddr.new answer.address.to_s
|
||||
if @chnroutes.any? { |range| range.include? answer }
|
||||
return true
|
||||
end
|
||||
end
|
||||
|
||||
return false
|
||||
end
|
||||
|
||||
def resolve(domain, rdtype="A", server: nil, with_glue: false)
|
||||
rdtype = Kernel.const_get("Resolv::DNS::Resource::IN::#{rdtype}")
|
||||
if !server
|
||||
if !@dns
|
||||
resolver = Resolv::DNS.new
|
||||
else
|
||||
resolver = Resolv::DNS.new(nameserver: @dns)
|
||||
end
|
||||
else
|
||||
server = [server] unless server.is_a? Array
|
||||
resolver = Resolv::DNS.new(nameserver: server)
|
||||
end
|
||||
if !with_glue
|
||||
resolver.getresources(domain, rdtype)
|
||||
else
|
||||
# Workaround for https://github.com/ruby/resolv/issues/27
|
||||
result = []
|
||||
glue = []
|
||||
n0 = Resolv::DNS::Name.create domain
|
||||
resolver.fetch_resource(domain, rdtype) {|reply, reply_name|
|
||||
reply.each_resource {|n, ttl, data|
|
||||
if n0 == n && data.is_a?(rdtype)
|
||||
result << data
|
||||
else
|
||||
glue << [n, data]
|
||||
end
|
||||
}
|
||||
}
|
||||
return result, glue
|
||||
end
|
||||
end
|
||||
|
||||
def get_ns_for_tld(tld)
|
||||
if !@tld_ns.has_key? tld
|
||||
answers = resolve(tld + ".", "NS")
|
||||
results = []
|
||||
answers.each do |answer|
|
||||
ips = resolve answer.name.to_s
|
||||
ips.each do |ip|
|
||||
results << ip.address.to_s
|
||||
end
|
||||
end
|
||||
@tld_ns[tld] = results
|
||||
end
|
||||
|
||||
@tld_ns[tld]
|
||||
end
|
||||
|
||||
def check_whitelist(nameservers)
|
||||
@whitelist.each { |pattern| nameservers.each {|ns| return pattern if ns.end_with? pattern }}
|
||||
nil
|
||||
end
|
||||
|
||||
def check_blacklist(nameservers)
|
||||
@blacklist.each { |pattern| nameservers.each {|ns| return pattern if ns.end_with? pattern }}
|
||||
nil
|
||||
end
|
||||
|
||||
def check_cdnlist(domain)
|
||||
test_cn_ip domain
|
||||
end
|
||||
|
||||
def check_domain(domain, enable_cdnlist: true)
|
||||
nameservers = []
|
||||
nxdomain = false
|
||||
begin
|
||||
tld_ns = get_ns_for_tld(PublicSuffix.parse(domain, ignore_private: true).tld)
|
||||
rescue PublicSuffix::DomainNotAllowed, PublicSuffix::DomainInvalid
|
||||
yield nil, "Domain #{domain} isn't a valid domain"
|
||||
return nil
|
||||
end
|
||||
response, glue = self.resolve(
|
||||
domain + ".",
|
||||
'NS',
|
||||
server: tld_ns,
|
||||
with_glue: true
|
||||
)
|
||||
response.each do |rdata|
|
||||
begin
|
||||
nameserver = rdata.name.to_s
|
||||
if PublicSuffix.valid?(nameserver, ignore_private: true)
|
||||
nameservers << nameserver
|
||||
end
|
||||
|
||||
if result = check_whitelist(nameservers)
|
||||
yield true, "NS Whitelist #{result} matched for domain #{domain}" if block_given?
|
||||
return true
|
||||
end
|
||||
rescue NoMethodError => e
|
||||
puts "Ignoring error: #{e}"
|
||||
end
|
||||
end
|
||||
|
||||
if enable_cdnlist
|
||||
@cdnlist.each do |testdomain|
|
||||
if testdomain == domain or testdomain.end_with? "." + domain
|
||||
if result = check_cdnlist(testdomain)
|
||||
yield true, "CDN List matched (#{testdomain}) and verified #{result} for domain #{domain}" if block_given?
|
||||
return true
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
# Assuming CDNList for non-TLDs
|
||||
if domain.count(".") > 1 and PublicSuffix.domain(domain, ignore_private: true) != domain
|
||||
if result = check_cdnlist(domain)
|
||||
yield true, "CDN List matched and verified #{result} for domain #{domain}" if block_given?
|
||||
return true if result
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if result = check_blacklist(nameservers)
|
||||
yield false, "NS Blacklist #{result} matched for domain #{domain}" if block_given?
|
||||
return false
|
||||
end
|
||||
|
||||
nameservers.each do |nameserver|
|
||||
if result = test_cn_ip(nameserver, response: glue)
|
||||
yield true, "NS #{nameserver} verified #{result} for domain #{domain}" if block_given?
|
||||
return true
|
||||
end
|
||||
end
|
||||
|
||||
if !nameservers.empty?
|
||||
yield false, "NS #{nameservers[0]} not verified for domain #{domain}" if block_given?
|
||||
return false
|
||||
else
|
||||
yield nil, "Failed to get correct name server for domain #{domain}" if block_given?
|
||||
return nil
|
||||
end
|
||||
end
|
||||
|
||||
def check_domain_verbose(domain, show_green: false, **kwargs)
|
||||
check_domain(domain, **kwargs) do |result, message|
|
||||
if result == true
|
||||
puts message.green if show_green
|
||||
elsif result == false
|
||||
puts message.red
|
||||
else
|
||||
puts message.yellow
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def check_domain_list(domain_list, sample: 30, show_green: false, jobs: Concurrent.processor_count)
|
||||
domains = load_list domain_list
|
||||
if sample > 0
|
||||
domains = domains.sample(sample)
|
||||
else
|
||||
domains.shuffle!
|
||||
end
|
||||
pool = Concurrent::FixedThreadPool.new(jobs)
|
||||
domains.each do |domain|
|
||||
pool.post do
|
||||
if check_domain_verbose(domain, show_green: show_green)
|
||||
yield domain if block_given?
|
||||
end
|
||||
end
|
||||
end
|
||||
pool.shutdown
|
||||
pool.wait_for_termination
|
||||
end
|
||||
end
|
||||
|
||||
# Operates on the raw file to preserve commented out lines
|
||||
def CheckRedundant(lines, disabled_lines, domain)
|
||||
new_line = "server=/#{domain}/114.114.114.114\n"
|
||||
disabled_line = "#server=/#{domain}/114.114.114.114"
|
||||
if lines.include? new_line
|
||||
puts "Domain already exists: #{domain}"
|
||||
return false
|
||||
elsif disabled_lines.any? { |line| line.start_with? disabled_line }
|
||||
puts "Domain already disabled: #{domain}"
|
||||
return false
|
||||
else
|
||||
# Check for duplicates
|
||||
test_domain = domain
|
||||
while test_domain.include? '.'
|
||||
test_domain = test_domain.partition('.').last
|
||||
_new_line = "server=/#{test_domain}/114.114.114.114\n"
|
||||
_disabled_line = "#server=/#{test_domain}/114.114.114.114"
|
||||
if lines.include? _new_line
|
||||
puts "Redundant domain already exists: #{test_domain}"
|
||||
return false
|
||||
elsif disabled_lines.any? { |line| line.start_with? _disabled_line }
|
||||
puts "Redundant domain already disabled: #{test_domain}"
|
||||
return false
|
||||
end
|
||||
end
|
||||
end
|
||||
return new_line
|
||||
end
|
||||
|
||||
if __FILE__ == $0
|
||||
require 'optparse'
|
||||
require 'ostruct'
|
||||
|
||||
options = OpenStruct.new
|
||||
options.file = "accelerated-domains.china.raw.txt"
|
||||
options.sample = 0
|
||||
options.verbose = false
|
||||
options.domain = nil
|
||||
options.dns = nil
|
||||
OptionParser.new do |opts|
|
||||
opts.banner = 'A simple verify library for dnsmasq-china-list'
|
||||
|
||||
opts.on("-f", "--file FILE", "File to check") do |f|
|
||||
options.file = f
|
||||
end
|
||||
|
||||
opts.on("-s", "--sample SAMPLE", Integer, "Verify only a limited sample. Pass 0 to example all entries") do |s|
|
||||
options.sample = s
|
||||
end
|
||||
|
||||
opts.on("-v", "--[no-]verbose", "Show green results") do |v|
|
||||
options.verbose = v
|
||||
end
|
||||
|
||||
opts.on("-d", "--domain DOMAIN", "Verify a domain instead of checking a list. Will ignore the other list options.") do |d|
|
||||
options.domain = d
|
||||
end
|
||||
|
||||
opts.on("-D", "--dns DNS", "Specify a DNS server to use instead of the system default one.") do |d|
|
||||
options.dns = d
|
||||
end
|
||||
|
||||
opts.on_tail("-h", "--help", "Show this message") do
|
||||
puts opts
|
||||
exit
|
||||
end
|
||||
end.parse!
|
||||
|
||||
v = ChinaListVerify.new options.dns
|
||||
|
||||
if options.domain
|
||||
v.check_domain_verbose(options.domain, show_green: options.verbose)
|
||||
else
|
||||
v.check_domain_list(options.file, sample: options.sample, show_green: options.verbose)
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user