From 849594d74fbcfab624702ce422321ac0201ad4a8 Mon Sep 17 00:00:00 2001 From: xiaorouji <60100640+xiaorouji@users.noreply.github.com> Date: Sun, 17 Jan 2021 01:41:40 +0800 Subject: [PATCH 01/20] luci-app-passwall: bump to 4-9 Signed-off-by: CN_SZTL --- package/lienol/luci-app-passwall/Makefile | 9 +- .../luasrc/controller/passwall.lua | 4 +- .../model/cbi/passwall/api/gen_xray.lua | 152 +++- .../model/cbi/passwall/client/global.lua | 57 +- .../model/cbi/passwall/client/node_config.lua | 9 - .../luci-app-passwall/po/zh-cn/passwall.po | 16 +- .../root/etc/config/passwall | 10 +- .../root/usr/share/passwall/app.sh | 137 ++-- .../root/usr/share/passwall/rules/chnlist | 686 ++---------------- .../root/usr/share/passwall/rules/chnroute | 7 + .../root/usr/share/passwall/rules/chnroute6 | 1 + 11 files changed, 320 insertions(+), 768 deletions(-) diff --git a/package/lienol/luci-app-passwall/Makefile b/package/lienol/luci-app-passwall/Makefile index f4e631b6d2..55c2a333e0 100644 --- a/package/lienol/luci-app-passwall/Makefile +++ b/package/lienol/luci-app-passwall/Makefile @@ -7,8 +7,8 @@ include $(TOPDIR)/rules.mk PKG_NAME:=luci-app-passwall PKG_VERSION:=4 -PKG_RELEASE:=7 -PKG_DATE:=20210111 +PKG_RELEASE:=9 +PKG_DATE:=20210119 PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION) @@ -69,10 +69,6 @@ config PACKAGE_$(PKG_NAME)_INCLUDE_ChinaDNS_NG bool "Include ChinaDNS-NG" default n -config PACKAGE_$(PKG_NAME)_INCLUDE_https_dns_proxy - bool "Include Https DNS Proxy(DoH)" - default y - config PACKAGE_$(PKG_NAME)_INCLUDE_dns2socks bool "Include dns2socks" default n @@ -114,7 +110,6 @@ define Package/$(PKG_NAME) +PACKAGE_$(PKG_NAME)_INCLUDE_kcptun:kcptun-client \ +PACKAGE_$(PKG_NAME)_INCLUDE_haproxy:haproxy \ +PACKAGE_$(PKG_NAME)_INCLUDE_ChinaDNS_NG:chinadns-ng \ - +PACKAGE_$(PKG_NAME)_INCLUDE_https_dns_proxy:https-dns-proxy \ +PACKAGE_$(PKG_NAME)_INCLUDE_dns2socks:dns2socks \ +PACKAGE_$(PKG_NAME)_INCLUDE_v2ray-plugin:v2ray-plugin \ +PACKAGE_$(PKG_NAME)_INCLUDE_simple-obfs:simple-obfs diff --git a/package/lienol/luci-app-passwall/luasrc/controller/passwall.lua b/package/lienol/luci-app-passwall/luasrc/controller/passwall.lua index 099dd6a054..d6c19ee988 100644 --- a/package/lienol/luci-app-passwall/luasrc/controller/passwall.lua +++ b/package/lienol/luci-app-passwall/luasrc/controller/passwall.lua @@ -191,12 +191,12 @@ function socks_status() local index = luci.http.formvalue("index") local id = luci.http.formvalue("id") e.index = index - e.socks_status = luci.sys.call(string.format("ps -w | grep -v grep | grep '%s/bin/' | grep 'SOCKS_%s' > /dev/null", appname, id)) == 0 + e.socks_status = luci.sys.call(string.format("ps -w | grep -v grep | grep '%s/bin/' | grep '%s' | grep 'SOCKS_' > /dev/null", appname, id)) == 0 local use_http = ucic:get(appname, id, "http_port") or 0 e.use_http = 0 if tonumber(use_http) > 0 then e.use_http = 1 - e.http_status = luci.sys.call(string.format("ps -w | grep -v grep | grep '%s/bin/' | grep 'SOCKS2HTTP_%s' > /dev/null", appname, id)) == 0 + e.http_status = luci.sys.call(string.format("ps -w | grep -v grep | grep '%s/bin/' | grep '%s' | grep -E 'HTTP_|HTTP2SOCKS' > /dev/null", appname, id)) == 0 end luci.http.prepare_content("application/json") luci.http.write_json(e) diff --git a/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/api/gen_xray.lua b/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/api/gen_xray.lua index 0302032b64..086dbdc46c 100644 --- a/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/api/gen_xray.lua +++ b/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/api/gen_xray.lua @@ -1,15 +1,8 @@ module("luci.model.cbi.passwall.api.gen_xray", package.seeall) local api = require "luci.model.cbi.passwall.api.api" -local ucursor = require"luci.model.uci".cursor() -local sys = require "luci.sys" -local json = require "luci.jsonc" -local appname = "passwall" -local inbounds = {} -local outbounds = {} -local routing = nil local myarg = { - "-node", "-proto", "-redir_port", "-socks_proxy_port", "-loglevel" + "-node", "-proto", "-redir_port", "-socks_proxy_port", "-http_proxy_port", "-dns_listen_port", "-dns_server", "-doh_url", "-doh_host", "-doh_socks_address", "-doh_socks_port", "-loglevel" } local var = api.get_args(arg, myarg) @@ -18,10 +11,26 @@ local node_section = var["-node"] local proto = var["-proto"] local redir_port = var["-redir_port"] local socks_proxy_port = var["-socks_proxy_port"] +local http_proxy_port = var["-http_proxy_port"] +local dns_listen_port = var["-dns_listen_port"] +local dns_server = var["-dns_server"] +local doh_url = var["-doh_url"] +local doh_host = var["-doh_host"] +local doh_socks_address = var["-doh_socks_address"] +local doh_socks_port = var["-doh_socks_port"] local loglevel = var["-loglevel"] or "warning" local network = proto local new_port +local ucursor = require"luci.model.uci".cursor() +local sys = require "luci.sys" +local json = require "luci.jsonc" +local appname = "passwall" +local dns = nil +local inbounds = {} +local outbounds = {} +local routing = nil + local function get_new_port() if new_port then new_port = tonumber(sys.exec(string.format("echo -n $(/usr/share/%s/app.sh get_new_port %s tcp)", appname, new_port + 1))) @@ -142,7 +151,7 @@ function gen_outbound(node, tag, relay_port) { id = node.uuid, alterId = tonumber(node.alter_id), - level = node.level and tonumber(node.level) or 0, + level = 0, security = (node.protocol == "vmess") and node.security or nil, encryption = node.encryption or "none", flow = node.flow or nil @@ -178,6 +187,14 @@ if node_section then }) network = "tcp,udp" end + if http_proxy_port then + table.insert(inbounds, { + listen = "0.0.0.0", + port = tonumber(http_proxy_port), + protocol = "http", + settings = {allowTransparent = false} + }) + end if redir_port then table.insert(inbounds, { @@ -307,21 +324,132 @@ if node_section then local outbound = gen_outbound(node) if outbound then table.insert(outbounds, outbound) end end +end - -- 额外传出连接 - table.insert(outbounds, {protocol = "freedom", tag = "direct", settings = {keep = ""}}) +if dns_server then + local rules = {} + + dns = { + tag = "dns-in1", + servers = { + dns_server + } + } + if doh_url and doh_host then + dns.hosts = { + [doh_host] = dns_server + } + dns.servers = { + doh_url + } + end + + if dns_listen_port then + table.insert(inbounds, { + listen = "127.0.0.1", + port = tonumber(dns_listen_port), + protocol = "dokodemo-door", + tag = "dns-in", + settings = { + address = dns_server, + port = 53, + network = "udp" + } + }) + table.insert(outbounds, { + protocol = "dns", + tag = "dns-out" + }) + end + + table.insert(rules, { + type = "field", + inboundTag = { + "dns-in" + }, + outboundTag = "dns-out" + }) + + if doh_socks_address and doh_socks_port then + table.insert(outbounds, { + tag = "out", + protocol = "socks", + streamSettings = { + network = "tcp", + security = "none" + }, + settings = { + servers = { + { + address = doh_socks_address, + port = tonumber(doh_socks_port) + } + } + } + }) + table.insert(rules, { + type = "field", + inboundTag = { + "dns-in1" + }, + outboundTag = "out" + }) + else + table.insert(rules, { + type = "field", + inboundTag = { + "dns-in1" + }, + outboundTag = "direct" + }) + end + + routing = { + domainStrategy = "IPOnDemand", + rules = rules + } +end + +if inbounds or outbounds then + table.insert(outbounds, { + protocol = "freedom", + tag = "direct", + settings = {domainStrategy = "UseIPv4"} + }) local xray = { log = { -- error = string.format("/var/etc/passwall/%s.log", node[".name"]), loglevel = loglevel }, + -- DNS + dns = dns, -- 传入连接 inbounds = inbounds, -- 传出连接 outbounds = outbounds, -- 路由 - routing = routing + routing = routing, + -- 本地策略 + --[[ + policy = { + levels = { + [0] = { + handshake = 4, + connIdle = 300, + uplinkOnly = 2, + downlinkOnly = 5, + bufferSize = 10240, + statsUserUplink = false, + statsUserDownlink = false + } + }, + system = { + statsInboundUplink = false, + statsInboundDownlink = false + } + } + ]]-- } print(json.stringify(xray, 1)) end diff --git a/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/client/global.lua b/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/client/global.lua index 458a2dda94..6d8f598c2e 100644 --- a/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/client/global.lua +++ b/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/client/global.lua @@ -131,12 +131,12 @@ if api.is_finded("chinadns-ng") then o:depends("chinadns_ng", "1") end -o = s:taboption("DNS", Value, "up_china_dns", translate("Resolver For Local/WhiteList Domains") .. "(UDP)") +o = s:taboption("DNS", Value, "up_china_dns", translate("Local DNS") .. "(UDP)") o.description = translate("IP:Port mode acceptable, multi value split with english comma.") .. "
" .. translate("When the selection is not the default, this DNS is forced to be set to dnsmasq upstream DNS.") o.default = "default" o:value("default", translate("Default")) -if api.is_finded("https-dns-proxy") then - o:value("https-dns-proxy", "https-dns-proxy(DoH)") +if api.is_finded("xray") then + o:value("xray_doh", "Xray DNS(DoH)") end o:value("223.5.5.5", "223.5.5.5 (" .. translate("Ali") .. "DNS)") o:value("223.6.6.6", "223.6.6.6 (" .. translate("Ali") .. "DNS)") @@ -150,24 +150,24 @@ o:value("180.76.76.76", "180.76.76.76 (" .. translate("Baidu") .. "DNS)") ---- DoH o = s:taboption("DNS", Value, "up_china_dns_doh", translate("DoH request address")) -o:value("https://dns.alidns.com/dns-query,223.5.5.5,223.6.6.6", "AliDNS") -o:value("https://doh.pub/dns-query,119.29.29.29,119.28.28.28", "DNSPod") -o.default = "https://dns.alidns.com/dns-query,223.5.5.5,223.6.6.6" +o:value("https://dns.alidns.com/dns-query,223.5.5.5", "AliDNS") +o:value("https://doh.pub/dns-query,119.29.29.29", "DNSPod") +o.default = "https://dns.alidns.com/dns-query,223.5.5.5" o.validate = doh_validate -o:depends("up_china_dns", "https-dns-proxy") +o:depends("up_china_dns", "xray_doh") ---- DNS Forward Mode o = s:taboption("DNS", ListValue, "dns_mode", translate("Filter Mode")) o.rmempty = false o:reset_values() if api.is_finded("pdnsd") then - o:value("pdnsd", "pdnsd") + o:value("pdnsd", "pdnsd " .. translatef("Requery DNS By %s", translate("TCP Node"))) end if api.is_finded("dns2socks") then o:value("dns2socks", "dns2socks") end -if api.is_finded("https-dns-proxy") then - o:value("https-dns-proxy", "https-dns-proxy(DoH)") +if api.is_finded("xray") then + o:value("xray_doh", "Xray DNS(DoH)") end o:value("udp", translatef("Requery DNS By %s", translate("UDP Node"))) o:value("nonuse", translate("No Filter")) @@ -185,17 +185,10 @@ o.validate = function(self, value, t) end o:depends({dns_mode = "custom"}) -o = s:taboption("DNS", ListValue, "up_trust_pdnsd_dns", translate("Resolver For The List Proxied")) --- o.description = translate("You can use other resolving DNS services as trusted DNS, Example: dns2socks, dns-forwarder... 127.0.0.1#5353
Only use two at most, english comma separation, If you do not fill in the # and the following port, you are using port 53.") -o.default = "tcp" -o:value("tcp", translatef("Requery DNS By %s", translate("TCP Node"))) -o:value("udp", translatef("Requery DNS By %s", translate("UDP Node"))) -o:depends("dns_mode", "pdnsd") - o = s:taboption("DNS", ListValue, "up_trust_doh_dns", translate("Resolver For The List Proxied")) o:value("tcp", translatef("Requery DNS By %s", translate("TCP Node"))) o:value("socks", translatef("Requery DNS By %s", translate("Socks Node"))) -o:depends("dns_mode", "https-dns-proxy") +o:depends("dns_mode", "xray_doh") o = s:taboption("DNS", Value, "socks_server", translate("Socks Server"), translate("Make sure socks service is available on this address.")) for k, v in pairs(socks_table) do o:value(v.id, v.remarks) end @@ -206,27 +199,28 @@ o.validate = function(self, value, t) return value end o:depends({dns_mode = "dns2socks"}) -o:depends({dns_mode = "https-dns-proxy", up_trust_doh_dns = "socks"}) +o:depends({dns_mode = "xray_doh", up_trust_doh_dns = "socks"}) ---- DoH o = s:taboption("DNS", Value, "up_trust_doh", translate("DoH request address")) -o:value("https://dns.adguard.com/dns-query,176.103.130.130,176.103.130.131", "AdGuard") -o:value("https://cloudflare-dns.com/dns-query,1.1.1.1,1.0.0.1", "Cloudflare") -o:value("https://security.cloudflare-dns.com/dns-query,1.1.1.2,1.0.0.2", "Cloudflare-Security") -o:value("https://doh.opendns.com/dns-query,208.67.222.222,208.67.220.220", "OpenDNS") -o:value("https://dns.google/dns-query,8.8.8.8,8.8.4.4", "Google") +o:value("https://dns.adguard.com/dns-query,176.103.130.130", "AdGuard") +o:value("https://cloudflare-dns.com/dns-query,1.1.1.1", "Cloudflare") +o:value("https://security.cloudflare-dns.com/dns-query,1.1.1.2", "Cloudflare-Security") +o:value("https://doh.opendns.com/dns-query,208.67.222.222", "OpenDNS") +o:value("https://dns.google/dns-query,8.8.8.8", "Google") o:value("https://doh.libredns.gr/dns-query,116.202.176.26", "LibreDNS") o:value("https://doh.libredns.gr/ads,116.202.176.26", "LibreDNS (No Ads)") -o:value("https://dns.quad9.net/dns-query,9.9.9.9,149.112.112.112", "Quad9-Recommended") -o.default = "https://dns.google/dns-query,8.8.8.8,8.8.4.4" +o:value("https://dns.quad9.net/dns-query,9.9.9.9", "Quad9-Recommended") +o.default = "https://dns.google/dns-query,8.8.8.8" o.validate = doh_validate -o:depends({dns_mode = "https-dns-proxy"}) +o:depends({dns_mode = "xray_doh"}) ---- DNS Forward -o = s:taboption("DNS", Value, "dns_forward", translate("Filtered DNS(For Proxied Domains)"), translate("IP:Port mode acceptable, the 1st for 'dns2socks' if split with english comma.")) -o.default = "8.8.4.4" -o:value("8.8.4.4", "8.8.4.4 (Google DNS)") +o = s:taboption("DNS", Value, "dns_forward", translate("Remote DNS")) +--o.description = translate("IP:Port mode acceptable, multi value split with english comma.") .. " " .. translate("If you use dns2socks, only the first one is valid.") +o.default = "8.8.8.8" o:value("8.8.8.8", "8.8.8.8 (Google DNS)") +o:value("8.8.4.4", "8.8.4.4 (Google DNS)") o:value("208.67.222.222", "208.67.222.222 (Open DNS)") o:value("208.67.220.220", "208.67.220.220 (Open DNS)") o:depends({dns_mode = "dns2socks"}) @@ -240,9 +234,6 @@ o:depends({dns_mode = "dns2socks"}) o:depends({dns_mode = "pdnsd"}) ]]-- -o = s:taboption("DNS", Flag, "use_chnlist", translate("Use ChinaList"), translate("Only useful in non-gfwlist mode.") .. "
" .. translate("When used, the domestic DNS will be used only when the chnlist rule is hit, and the domain name that misses the rule will be resolved by remote DNS.")) -o.default = "0" - o = s:taboption("DNS", Button, "clear_ipset", translate("Clear IPSET"), translate("Try this feature if the rule modification does not take effect.")) o.inputstyle = "remove" function o.write(e, e) diff --git a/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/client/node_config.lua b/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/client/node_config.lua index f11d3f3cf1..6ae46e94c7 100644 --- a/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/client/node_config.lua +++ b/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/client/node_config.lua @@ -417,15 +417,6 @@ uuid:depends({ type = "V2ray", protocol = "vless" }) alter_id = s:option(Value, "alter_id", translate("Alter ID")) alter_id:depends("protocol", "vmess") -level = s:option(Value, "level", translate("User Level")) -level.default = 1 -level:depends({ type = "Xray", protocol = "vmess" }) -level:depends({ type = "Xray", protocol = "vless" }) -level:depends({ type = "Xray", protocol = "trojan" }) -level:depends({ type = "V2ray", protocol = "vmess" }) -level:depends({ type = "V2ray", protocol = "vless" }) -level:depends({ type = "V2ray", protocol = "trojan" }) - tls = s:option(Flag, "tls", translate("TLS")) tls.default = 0 tls.validate = function(self, value, t) diff --git a/package/lienol/luci-app-passwall/po/zh-cn/passwall.po b/package/lienol/luci-app-passwall/po/zh-cn/passwall.po index 792ad5da57..ce450ffb05 100644 --- a/package/lienol/luci-app-passwall/po/zh-cn/passwall.po +++ b/package/lienol/luci-app-passwall/po/zh-cn/passwall.po @@ -160,12 +160,18 @@ msgstr "自定义DNS" msgid "IP:Port mode ecceptable for specify other filtered name services." msgstr "定义接受 IP:Port 形式的输入,以指定其它域名服务的过滤服务。" -msgid "Resolver For Local/WhiteList Domains" -msgstr "解析本地和白名单域名" +msgid "Local DNS" +msgstr "本地DNS" + +msgid "Remote DNS" +msgstr "远程DNS" msgid "IP:Port mode acceptable, multi value split with english comma." msgstr "接受 IP:Port 形式的输入,多个以英文逗号分隔。" +msgid "If you use dns2socks, only the first one is valid." +msgstr "如果使用dns2socks,只有第一个生效。" + msgid "When the selection is not the default, this DNS is forced to be set to dnsmasq upstream DNS." msgstr "当选择的不是默认,则将此DNS强制设置为dnsmasq上游DNS。" @@ -214,9 +220,6 @@ msgstr "请确保此Socks服务可用。" msgid "ChinaDNS-NG Fair Mode" msgstr "ChinaDNS-NG 公平模式" -msgid "Filtered DNS(For Proxied Domains)" -msgstr "域名过滤服务(用于被代理的域名)" - msgid "Format must be:" msgstr "格式必须为:" @@ -229,9 +232,6 @@ msgstr "DoH Bootstrap DNS" msgid "The Bootstrap DNS server is used to resolve the IP address of the DoH resolver you specify as the upstream." msgstr "Bootstrap DNS 服务器用于解析您指定为上游的 DoH 解析器的 IP 地址。" -msgid "IP:Port mode acceptable, the 1st for 'dns2socks' if split with english comma." -msgstr "接受 IP:Port 形式的输入,多个以英文逗号分隔 ,'dns2socks' 模式下仅首个有效。" - msgid "Cache Resolved" msgstr "缓存解析结果" diff --git a/package/lienol/luci-app-passwall/root/etc/config/passwall b/package/lienol/luci-app-passwall/root/etc/config/passwall index c5520da25e..d3b9f49413 100644 --- a/package/lienol/luci-app-passwall/root/etc/config/passwall +++ b/package/lienol/luci-app-passwall/root/etc/config/passwall @@ -6,14 +6,12 @@ config global option udp_node 'nil' option dns_mode 'pdnsd' option up_china_dns 'default' - option dns_forward '8.8.4.4' - option use_chnlist '0' - option use_tcp_node_resolve_dns '1' + option dns_forward '8.8.8.8' option tcp_proxy_mode 'chnroute' option udp_proxy_mode 'chnroute' - option localhost_tcp_proxy_mode 'gfwlist' - option localhost_udp_proxy_mode 'gfwlist' - option socks_server '0.0.0.0:1080' + option localhost_tcp_proxy_mode 'chnroute' + option localhost_udp_proxy_mode 'chnroute' + option socks_server '127.0.0.1:9050' option close_log_tcp '1' option close_log_udp '1' option loglevel 'warning' diff --git a/package/lienol/luci-app-passwall/root/usr/share/passwall/app.sh b/package/lienol/luci-app-passwall/root/usr/share/passwall/app.sh index dda8432330..748ae8a266 100755 --- a/package/lienol/luci-app-passwall/root/usr/share/passwall/app.sh +++ b/package/lienol/luci-app-passwall/root/usr/share/passwall/app.sh @@ -298,7 +298,6 @@ load_config() { DNS_MODE=$(config_t_get global dns_mode pdnsd) DNS_FORWARD=$(config_t_get global dns_forward 8.8.4.4:53 | sed 's/:/#/g') DNS_CACHE=$(config_t_get global dns_cache 1) - USE_CHNLIST=$(config_t_get global use_chnlist 0) process=1 if [ "$(config_t_get global_forwarding process 0)" = "0" ]; then process=$(cat /proc/cpuinfo | grep 'processor' | wc -l) @@ -362,14 +361,14 @@ run_socks() { [ -n "$_username" ] && [ -n "$_password" ] && local _auth="--uname $_username --passwd $_password" ln_start_bin "$(first_type ssocks)" ssocks_SOCKS_$id $log_file --listen $socks_port --socks $server_host:$port $_auth ;; - xray) - lua $API_GEN_XRAY -node $node -socks_proxy_port $socks_port > $config_file + xray|v2ray) + [ "$http_port" != "0" ] && { + local extra_param="-http_proxy_port $http_port" + config_file=$(echo $config_file | sed "s/SOCKS/HTTP_SOCKS/g") + } + lua $API_GEN_XRAY -node $node -socks_proxy_port $socks_port $extra_param > $config_file ln_start_bin "$(first_type $(config_t_get global_app xray_file) xray)" xray $log_file -config="$config_file" ;; - v2ray) - lua $API_GEN_XRAY -node $node -socks_proxy_port $socks_port > $config_file - ln_start_bin "$(first_type $(config_t_get global_app v2ray_file) v2ray)" v2ray $log_file -config="$config_file" - ;; trojan-go) lua $API_GEN_TROJAN -node $node -run_type client -local_addr $bind -local_port $socks_port -server_host $server_host -server_port $port > $config_file ln_start_bin "$(first_type $(config_t_get global_app trojan_go_file) trojan-go)" trojan-go $log_file -config "$config_file" @@ -392,12 +391,12 @@ run_socks() { ;; ss|ssr) lua $API_GEN_SS -node $node -local_addr "0.0.0.0" -local_port $socks_port -server_host $server_host -server_port $port > $config_file - ln_start_bin "$(first_type ${type}-local)" "${type}-local" $log_file -c "$config_file" -b "$bind" -u + ln_start_bin "$(first_type ${type}-local)" "${type}-local" $log_file -c "$config_file" -b "$bind" -u -v ;; esac # socks to http - [ "$http_port" != "0" ] && [ "$http_config_file" != "nil" ] && { + [ "$type" != "xray" -a "$type" != "v2ray" ] && [ "$http_port" != "0" ] && [ "$http_config_file" != "nil" ] && { lua $API_GEN_XRAY_PROTO -local_proto http -local_address "0.0.0.0" -local_port $http_port -server_proto socks -server_address "127.0.0.1" -server_port $socks_port -server_username $_username -server_password $_password > $http_config_file echo lua $API_GEN_XRAY_PROTO -local_proto http -local_address "0.0.0.0" -local_port $http_port -server_proto socks -server_address "127.0.0.1" -server_port $socks_port -server_username $_username -server_password $_password ln_start_bin "$(first_type $(config_t_get global_app xray_file) xray)" xray $log_file -config="$http_config_file" @@ -443,18 +442,13 @@ run_redir() { local server_username=$(config_n_get $node username) local server_password=$(config_n_get $node password) eval port=\$UDP_REDIR_PORT - ln_start_bin "$(first_type ipt2socks)" "ipt2socks_udp" $log_file -U -l "$port" -b 0.0.0.0 -s "$node_address" -p "$node_port" -R + ln_start_bin "$(first_type ipt2socks)" "ipt2socks_udp" $log_file -U -l "$port" -b 0.0.0.0 -s "$node_address" -p "$node_port" -R -v ;; - xray) + xray|v2ray) local loglevel=$(config_t_get global loglevel "warning") lua $API_GEN_XRAY -node $node -proto udp -redir_port $local_port -loglevel $loglevel > $config_file ln_start_bin "$(first_type $(config_t_get global_app xray_file) xray)" xray $log_file -config="$config_file" ;; - v2ray) - local loglevel=$(config_t_get global loglevel "warning") - lua $API_GEN_XRAY -node $node -proto udp -redir_port $local_port -loglevel $loglevel > $config_file - ln_start_bin "$(first_type $(config_t_get global_app v2ray_file) v2ray)" v2ray $log_file -config="$config_file" - ;; trojan-go) local loglevel=$(config_t_get global trojan_loglevel "2") lua $API_GEN_TROJAN -node $node -run_type nat -local_addr "0.0.0.0" -local_port $local_port -loglevel $loglevel > $config_file @@ -478,7 +472,7 @@ run_redir() { ;; ss|ssr) lua $API_GEN_SS -node $node -local_addr "0.0.0.0" -local_port $local_port > $config_file - ln_start_bin "$(first_type ${type}-redir)" "${type}-redir" $log_file -c "$config_file" -U + ln_start_bin "$(first_type ${type}-redir)" "${type}-redir" $log_file -c "$config_file" -U -v ;; esac ;; @@ -571,14 +565,14 @@ run_redir() { [ "$UDP_NODE" == "tcp" ] && extra_param="-u" fi for k in $(seq 1 $process); do - ln_start_bin "$(first_type ${type}-redir)" "${type}-redir" $log_file -c "$config_file" $extra_param + ln_start_bin "$(first_type ${type}-redir)" "${type}-redir" $log_file -c "$config_file" -v $extra_param done ;; esac if [ -n "$_socks_flag" ]; then local extra_param="-T" [ "$UDP_NODE" == "tcp" ] && extra_param="" - ln_start_bin "$(first_type ipt2socks)" "ipt2socks_tcp" $log_file -l "$local_port" -b 0.0.0.0 -s "$_socks_address" -p "$_socks_port" -R $extra_param + ln_start_bin "$(first_type ipt2socks)" "ipt2socks_tcp" $log_file -l "$local_port" -b 0.0.0.0 -s "$_socks_address" -p "$_socks_port" -R -v $extra_param fi unset _socks_flag _socks_address _socks_port _socks_username _socks_password ;; @@ -634,7 +628,7 @@ start_socks() { local config_file=$TMP_PATH/SOCKS_${id}.json local log_file=$TMP_PATH/SOCKS_${id}.log local http_port=$(config_n_get $id http_port 0) - local http_config_file=$TMP_PATH/SOCKS2HTTP_${id}.json + local http_config_file=$TMP_PATH/HTTP2SOCKS_${id}.json run_socks $node "0.0.0.0" $port $config_file $http_port $http_config_file $id done } @@ -718,16 +712,20 @@ stop_crontab() { } start_dns() { - if [ "${LOCAL_DNS}" = "https-dns-proxy" ]; then - _doh=$(config_t_get global up_china_dns_doh "https://dns.alidns.com/dns-query,223.5.5.5,223.6.6.6,2400:3200::1,2400:3200:baba::1") + if [ "${LOCAL_DNS}" = "xray_doh" ]; then + _doh=$(config_t_get global up_china_dns_doh "https://dns.alidns.com/dns-query,223.5.5.5") _doh_url=$(echo $_doh | awk -F ',' '{print $1}') + _doh_host_port=$(echo $_doh_url | sed "s/https:\/\///g" | awk -F '/' '{print $1}') + _doh_host=$(echo $_doh_host_port | awk -F ':' '{print $1}') + _doh_port=$(echo $_doh_host_port | awk -F ':' '{print $2}') _doh_bootstrap=$(echo $_doh | cut -d ',' -sf 2-) - ln_start_bin "$(first_type https-dns-proxy)" https-dns-proxy "/dev/null" -a 127.0.0.1 -p "${LOCAL_DOH_PORT}" -b "${_doh_bootstrap}" -r "${_doh_url}" -4 + lua $API_GEN_XRAY -dns_listen_port "${LOCAL_DOH_PORT}" -dns_server "${_doh_bootstrap}" -doh_url "${_doh_url}" -doh_host "${_doh_host}" > $TMP_PATH/DNS1.json + ln_start_bin "$(first_type $(config_t_get global_app xray_file) xray)" xray $TMP_PATH/DNS1.log -config="$TMP_PATH/DNS1.json" LOCAL_DNS="127.0.0.1#${LOCAL_DOH_PORT}" unset _doh _doh_url _doh_bootstrap fi - local pdnsd_forward other_port up_trust_pdnsd_dns msg + local pdnsd_forward other_port msg local global chnlist returnhome china_ng_chn china_ng_gfw chnlist_param gfwlist_param extra_mode dns_listen_port=${DNS_PORT} pdnsd_forward=${DNS_FORWARD} @@ -741,6 +739,12 @@ start_dns() { sed -n 's/^ipset=\/\.\?\([^/]*\).*$/\1/p' "${RULES_PATH}/gfwlist.conf" | sort -u > "${TMP_PATH}/gfwlist.txt" echolog "过滤服务配置:准备接管域名解析[$?]..." + USE_CHNLIST=1 + if [ ! -f "${RULES_PATH}/chnlist" ]; then + USE_CHNLIST=0 + else + cp -a "${RULES_PATH}/chnlist" "${TMP_PATH}/chnlist" + fi [ "$CHINADNS_NG" = "1" ] && { echolog " | - (chinadns-ng) 只支持2~4级的域名过滤..." [ -z "${global}${chnlist}" ] && echolog " | - (chinadns-ng) 此模式下,列表外的域名查询会同时发送给本地DNS(可切换到Pdnsd + TCP节点模式解决)..." @@ -752,8 +756,8 @@ start_dns() { elif [ "$DNS_MODE" = "dns2socks" ]; then #[ -n "${global}${chnlist}" ] && TUN_DNS=${china_ng_gfw} msg="dns2socks" - elif [ "$DNS_MODE" = "https-dns-proxy" ]; then - msg="https-dns-proxy(DoH)" + elif [ "$DNS_MODE" = "xray_doh" ]; then + msg="Xray DNS(DoH)" elif [ "$DNS_MODE" = "udp" ]; then use_udp_node_resolve_dns=1 if [ -z "${returnhome}" ]; then @@ -767,27 +771,27 @@ start_dns() { china_ng_gfw="$(echo ${custom_dns} | sed 's/:/#/g')" msg="自定义DNS" fi - chnlist_param= - [ "$USE_CHNLIST" = "1" ] && { - cp -a "${RULES_PATH}/chnlist" "${TMP_PATH}/chnlist" - if [ -z "${returnhome}" ]; then - cat "${RULES_PATH}/direct_host" >> "${TMP_PATH}/chnlist" - echolog " | - [$?](chinadns-ng) 域名白名单合并到中国域名表" - cat "${RULES_PATH}/proxy_host" >> "${TMP_PATH}/gfwlist.txt" - [ -f "${RULES_PATH}/proxy_host2" ] && cat "${RULES_PATH}/proxy_host2" >> "${TMP_PATH}/gfwlist.txt" - [ -f "${RULES_PATH}/proxy_host3" ] && cat "${RULES_PATH}/proxy_host3" >> "${TMP_PATH}/gfwlist.txt" - echolog " | - [$?](chinadns-ng) 代理域名表合并到防火墙域名表" - gfwlist_param="${TMP_PATH}/gfwlist.txt" - else - echolog " | - (chinadns-ng) 白名单不与中国域名表合并" - cat "${RULES_PATH}/proxy_host" >> "${TMP_PATH}/chnlist" - [ -f "${RULES_PATH}/proxy_host2" ] && cat "${RULES_PATH}/proxy_host2" >> "${TMP_PATH}/chnlist" - [ -f "${RULES_PATH}/proxy_host3" ] && cat "${RULES_PATH}/proxy_host3" >> "${TMP_PATH}/chnlist" + + chnlist_param="${TMP_PATH}/chnlist" + if [ -n "${returnhome}" ]; then + echolog " | - (chinadns-ng) 白名单不与中国域名表合并" + [ -f "${RULES_PATH}/proxy_host" ] && { + cat "${RULES_PATH}/proxy_host" >> "${chnlist_param}" echolog " | - [$?](chinadns-ng) 忽略防火墙域名表,代理域名表合并到中国域名表" - fi - chnlist_param="${TMP_PATH}/chnlist" - chnlist_param=${chnlist_param:+-m "${chnlist_param}" -M} - } + } + else + [ -f "${RULES_PATH}/direct_host" ] && { + cat "${RULES_PATH}/direct_host" >> "${chnlist_param}" + echolog " | - [$?](chinadns-ng) 域名白名单合并到中国域名表" + } + [ -f "${RULES_PATH}/proxy_host" ] && { + gfwlist_param="${TMP_PATH}/gfwlist.txt" + cat "${RULES_PATH}/proxy_host" >> "${gfwlist_param}" + echolog " | - [$?](chinadns-ng) 代理域名表合并到防火墙域名表" + } + fi + chnlist_param=${chnlist_param:+-m "${chnlist_param}" -M} + [ "$(config_t_get global fair_mode 1)" = "1" ] && extra_mode="-f" ln_start_bin "$(first_type chinadns-ng)" chinadns-ng "/dev/null" -l "${dns_listen_port}" ${china_ng_chn:+-c "${china_ng_chn}"} ${chnlist_param} ${china_ng_gfw:+-t "${china_ng_gfw}"} ${gfwlist_param:+-g "${gfwlist_param}"} $extra_mode echolog " + 过滤服务:ChinaDNS-NG(:${dns_listen_port}${extra_mode}) + ${msg}:中国域名列表:${china_ng_chn:-D114.114.114.114},防火墙域名列表:${china_ng_gfw:-D8.8.8.8}" @@ -803,7 +807,7 @@ start_dns() { dns2socks) echolog " - 域名解析:dns2socks..." ;; - https-dns-proxy) + xray_doh) up_trust_doh_dns=$(config_t_get global up_trust_doh_dns "tcp") if [ "$up_trust_doh_dns" = "socks" ]; then use_tcp_node_resolve_dns=0 @@ -812,17 +816,10 @@ start_dns() { use_tcp_node_resolve_dns=1 msg="TCP节点" fi - echolog " - 域名解析 https-dns-proxy(DOH)..." + echolog " - 域名解析 Xray DNS(DOH)..." ;; pdnsd) - up_trust_pdnsd_dns=$(config_t_get global up_trust_pdnsd_dns "nil") - if [ "$up_trust_pdnsd_dns" = "udp" ]; then - use_udp_node_resolve_dns=1 - msg="UDP节点" - elif [ "${up_trust_pdnsd_dns}" = "nil" ]; then - msg="TCP节点" - fi - echolog " - 域名解析:pdnsd + 使用(${msg})解析域名..." + echolog " - 域名解析:pdnsd + 使用(TCP节点)解析域名..." ;; udp) use_udp_node_resolve_dns=1 @@ -841,16 +838,21 @@ start_dns() { gen_pdnsd_config "${dns_listen_port}" "${pdnsd_forward}" ln_start_bin "$(first_type pdnsd)" pdnsd "/dev/null" --daemon -c "${TMP_PATH}/pdnsd/pdnsd.conf" -d fi - if [ -n "$(echo ${DNS_MODE} | grep 'https-dns-proxy')" ]; then - up_trust_doh=$(config_t_get global up_trust_doh "https://dns.google/dns-query,8.8.8.8,8.8.4.4") + if [ -n "$(echo ${DNS_MODE} | grep 'xray_doh')" ]; then + up_trust_doh=$(config_t_get global up_trust_doh "https://dns.google/dns-query,8.8.4.4") _doh_url=$(echo $up_trust_doh | awk -F ',' '{print $1}') - _doh_port=$(echo $_doh_url | sed "s/:\/\///g" | awk -F ':' '{print $2}'| awk -F '/' '{print $1}') + _doh_host_port=$(echo $_doh_url | sed "s/https:\/\///g" | awk -F '/' '{print $1}') + _doh_host=$(echo $_doh_host_port | awk -F ':' '{print $1}') + _doh_port=$(echo $_doh_host_port | awk -F ':' '{print $2}') _doh_bootstrap=$(echo $up_trust_doh | cut -d ',' -sf 2-) up_trust_doh_dns=$(config_t_get global up_trust_doh_dns "tcp") if [ "$up_trust_doh_dns" = "socks" ]; then socks_server=$(echo $(config_t_get global socks_server 127.0.0.1:9050) | sed "s/#/:/g") - ln_start_bin "$(first_type https-dns-proxy)" https-dns-proxy "/dev/null" -a 127.0.0.1 -p "${dns_listen_port}" -b "${_doh_bootstrap}" -r "${_doh_url}" -4 -t socks5h://${socks_server} + socks_address=$(echo $socks_server | awk -F ':' '{print $1}') + socks_port=$(echo $socks_server | awk -F ':' '{print $2}') + lua $API_GEN_XRAY -dns_listen_port "${dns_listen_port}" -dns_server "${_doh_bootstrap}" -doh_url "${_doh_url}" -doh_host "${_doh_host}" -doh_socks_address "${socks_address}" -doh_socks_port "${socks_port}" > $TMP_PATH/DNS.json + ln_start_bin "$(first_type $(config_t_get global_app xray_file) xray)" xray $TMP_PATH/DNS.log -config="$TMP_PATH/DNS.json" elif [ "${up_trust_doh_dns}" = "tcp" ]; then DNS_FORWARD="" _doh_bootstrap_dns=$(echo $_doh_bootstrap | sed "s/,/ /g") @@ -858,19 +860,12 @@ start_dns() { _dns=$(echo $_dns | awk -F ':' '{print $1}'):${_doh_port:-443} [ -n "$DNS_FORWARD" ] && DNS_FORWARD=${DNS_FORWARD},${_dns} || DNS_FORWARD=${_dns} done - ln_start_bin "$(first_type https-dns-proxy)" https-dns-proxy "/dev/null" -a 127.0.0.1 -p "${dns_listen_port}" -b "${_doh_bootstrap}" -r "${_doh_url}" -4 + lua $API_GEN_XRAY -dns_listen_port "${dns_listen_port}" -dns_server "${_doh_bootstrap}" -doh_url "${_doh_url}" -doh_host "${_doh_host}" > $TMP_PATH/DNS.json + ln_start_bin "$(first_type $(config_t_get global_app xray_file) xray)" xray $TMP_PATH/DNS.log -config="$TMP_PATH/DNS.json" unset _dns _doh_bootstrap_dns fi unset _doh_url _doh_port _doh_bootstrap fi - if [ -n "$(echo ${DNS_MODE}${up_trust_pdnsd_dns} | grep dns2socks)" ]; then - local dns2socks_socks_server=$(echo $(config_t_get global socks_server 127.0.0.1:9050) | sed "s/#/:/g") - local dns2socks_forward=$(get_first_dns DNS_FORWARD 53 | sed 's/#/:/g') - [ "$DNS_CACHE" == "0" ] && local dns2sock_cache="/d" - ln_start_bin "$(first_type dns2socks)" dns2socks "/dev/null" "$dns2socks_socks_server" "$dns2socks_forward" "127.0.0.1:$dns_listen_port" $dns2sock_cache - echolog " - dns2sock(127.0.0.1:${dns_listen_port}${dns2sock_cache}),${dns2socks_socks_server:-127.0.0.1:9050} -> ${dns2socks_forward-D46.182.19.48:53}" - #[ "$CHINADNS_NG" = "1" ] && [ -n "${global}${chnlist}" ] && [ -z "${returnhome}" ] && TUN_DNS=$(echo "${dns_listen_port}" | sed 's/:/#/g') - fi [ "${use_udp_node_resolve_dns}" = "1" ] && echolog " * 要求代理 DNS 请求,如上游 DNS 非直连地址,确保 UDP 代理打开,并且已经正确转发!" [ "${use_tcp_node_resolve_dns}" = "1" ] && echolog " * 请确认上游 DNS 支持 TCP 查询,如非直连地址,确保 TCP 代理打开,并且已经正确转发!" } @@ -904,10 +899,6 @@ add_dnsmasq() { #始终用国内DNS解析直连(白名单)列表 fwd_dns="${LOCAL_DNS}" - #如果使用ChinaDNS-NG则直接交给它处理 - [ "$CHINADNS_NG" = "1" ] && unset fwd_dns - #如果没使用chnlist直接使用默认DNS - [ "${USE_CHNLIST}" = "0" ] && unset fwd_dns sort -u "${RULES_PATH}/direct_host" | gen_dnsmasq_items "whitelist" "${fwd_dns}" "${TMP_DNSMASQ_PATH}/00-direct_host.conf" echolog " - [$?]域名白名单(whitelist):${fwd_dns:-默认}" diff --git a/package/lienol/luci-app-passwall/root/usr/share/passwall/rules/chnlist b/package/lienol/luci-app-passwall/root/usr/share/passwall/rules/chnlist index 3c20879d03..7a9484f06e 100644 --- a/package/lienol/luci-app-passwall/root/usr/share/passwall/rules/chnlist +++ b/package/lienol/luci-app-passwall/root/usr/share/passwall/rules/chnlist @@ -132,7 +132,6 @@ 01jzw.com 01ke.com 01ki.com -01lmsc.com 01p.com 01retail.com 01rv.com @@ -227,7 +226,6 @@ 023gmdk.com 023lvyou.com 023sm.com -023style.com 023up.com 023wg.com 023yts.com @@ -442,7 +440,6 @@ 0513.net 0513.org 0513011.com -0513qh.com 0513syedu.com 0513zs.com 0514.com @@ -847,6 +844,7 @@ 0y856.com 1-111-1.com 1-123.com +1-b.tc 1-cs.net 1-dt.com 1-du.net @@ -937,7 +935,6 @@ 100how.com 100ip.net 100jiapu.com -100ke.wang 100kk.com 100ksw.com 100lcrc.com @@ -1025,7 +1022,6 @@ 1024sj.com 1024ss.com 1024tools.com -1024wan.com 10260.com 102cw.com 102no.com @@ -1562,7 +1558,6 @@ 151.hk 15111223344.com 15153.com -1515bh.com 15166.com 151733.com 1518.com @@ -2006,7 +2001,6 @@ 17xie.com 17xlm.com 17xsj.com -17xtv.info 17xueba.com 17xxl.com 17ya.com @@ -2413,7 +2407,6 @@ 2019zjj.com 202030.com 202096e.com -2020mh.com 2020zjj.com 2029.cc 202m.com @@ -2496,7 +2489,6 @@ 21ic.org 21icsearch.com 21ido.com -21itjob.com 21jingji.com 21jrr.com 21js.com @@ -2552,7 +2544,6 @@ 21znw.com 22-30.com 22-dns.com -22-qp.com 22.com 221234.xyz 2213.com @@ -2691,8 +2682,8 @@ 23xsba.cc 23xsw.cc 23yy.com -23zhuiju.com 240yx.com +243ty.com 2455000.com 246546.com 246ys.com @@ -2772,7 +2763,6 @@ 25yi.com 25yz.com 260.net -260pk.com 261340.com 263.com 263.net @@ -2886,6 +2876,7 @@ 29dnue.com 29gl.com 29kaoshi.com +29xf.com 29yx.com 2abc8.com 2av7.com @@ -2946,7 +2937,6 @@ 2liang.net 2lieqi.com 2m2j.com -2manhua.cc 2manhua.com 2mdn.net 2mjob.com @@ -2983,7 +2973,6 @@ 2weima.com 2xbinh.com 2xiazai.com -2y2r.org 2y9y.com 2yuanma.com 2yun.com @@ -3077,7 +3066,6 @@ 315zw.com 315zww.com 31609.com -3171688.com 317608.com 317hu.com 3188.la @@ -3725,7 +3713,6 @@ 3bwx.com 3c2p.com 3c3ww.com -3cai888.com 3cjob.com 3conline.com 3cpp.org @@ -3819,6 +3806,7 @@ 3hbox.com 3hgui.com 3j4.com +3jdh.com 3jidi.com 3jke.com 3jrx.com @@ -3863,7 +3851,6 @@ 3renhe.net 3rkr.com 3rxing.org -3rzw.com 3s.work 3s001.com 3s3w.com @@ -4139,7 +4126,6 @@ 48905.com 48hao.net 48iuz.com -49.com 49008e.com 49321.com 49358.com @@ -4157,7 +4143,6 @@ 49ivb.org 49jie.com 49pic.com -49syw.com 49w.cc 49wanwan.com 49you.com @@ -4323,7 +4308,6 @@ 51386.com 513c51.com 513hjs.com -513hot.com 513zg.com 514193.com 514200.com @@ -4969,7 +4953,6 @@ 5200e.com 5200wx.com 520101.com -5205.cc 520520520520520.com 520730.com 5207758.com @@ -5041,7 +5024,6 @@ 523touzi.com 523us.com 523xs.com -5243dian.com 525.life 5251.net 5252cha.com @@ -5156,7 +5138,6 @@ 52jying.com 52kfly.com 52khs.com -52klz.com 52laodong.com 52liaoshen.com 52lieshou.com @@ -5186,6 +5167,7 @@ 52ph.com 52pi.com 52pi.net +52pjb.net 52pk.com 52pk.net 52pkvr.com @@ -5234,6 +5216,7 @@ 52toys.com 52tps.com 52tq.net +52tql.com 52tt.com 52tt.vip 52udl.com @@ -5731,7 +5714,6 @@ 5cms.com 5cocoi.com 5coser.com -5cwm.com 5d2ede2.com 5d6d.com 5d6d.net @@ -5829,7 +5811,6 @@ 5izt.net 5j.com 5j5k.com -5jdai.com 5jianghai88.vip 5jin.org 5jjc.net @@ -5845,7 +5826,6 @@ 5kcrm.net 5kda.com 5khouse.com -5kym.com 5lanren.com 5lejob.com 5lewen.com @@ -6044,7 +6024,6 @@ 62a.net 62game.com 62ma.com -62r5.com 63.com 630book.cc 630book.com @@ -6086,7 +6065,6 @@ 651700.com 6522111.com 6528.com -6531555.com 6533.org 654320.com 6543210.com @@ -6192,7 +6170,6 @@ 66ip.com 66jiedai.com 66js.info -66jsk.com 66kk.com 66liu.com 66mobi.com @@ -6344,7 +6321,6 @@ 6eys.com 6fcsj.com 6fok.com -6funs.com 6fwq.com 6g5fd1a.com 6gdown.com @@ -6639,7 +6615,6 @@ 777524.com 777684a.com 77773657.com -777edu.com 777fc15.icu 777kuu.com 777moban.com @@ -6773,7 +6748,6 @@ 7dapei.com 7dianw.com 7didc.com -7dl7.com 7do.net 7down.com 7down.net @@ -7198,7 +7172,6 @@ 872y.com 87311111.com 87535353.com -87594989.com 876326.com 87666666.net 876web.com @@ -7210,7 +7183,6 @@ 87870.com 87994.com 87box.com -87dy.tv 87g.com 87ma.com 87money.com @@ -7613,7 +7585,6 @@ 91jiafang.com 91jianguo.com 91jin.com -91jingzhuang.com 91jinrong.com 91jinshu.com 91jkj.com @@ -8165,7 +8136,6 @@ 999brain.com 999d.com 999dns.net -999jk.com 999kan.com 999rj.com 999tea.com @@ -8450,7 +8420,6 @@ a8v5.com a8z8.com a9188.com a9377j.com -a9377x.com a963.com a9cdn.com a9vg.com @@ -8466,7 +8435,6 @@ aacheji.com aad.tw aadongman.com aads-cng.net -aafangz.com aamachina.org aaniao.com aapig.com @@ -9017,7 +8985,6 @@ ahuo5.com ahuyi.com ahwwfn.com ahwwnews.com -ahxczxmm.com ahydnet.com ahydwy.com ahyessoft.com @@ -9069,11 +9036,9 @@ aicdn.com aicdn2.com aicdn4.com aichaicp.com -aichao521.com aichaoxing.com aichatu.com aichawu.com -aichengxu.com aicheren.com aichunjing.com aicili.pw @@ -9242,7 +9207,6 @@ aiodt.com aiotvoice.com aiouportal.com aipai.com -aipaiju.com aipark.com aipear.com aipenglai.com @@ -9449,7 +9413,6 @@ akbe.com akbkgame.com akdanji.com akdcar.com -akelectro.com akerp.com akey.im akey.me @@ -9712,7 +9675,6 @@ allyes.com allyes.net allyfirst.com allystar.com -allzhaopin.com alma-intl.com almtlakes.org aloha-ukulele.com @@ -9817,7 +9779,6 @@ amz520.com amzcaptain.com an-ran.com an9.name -anabshanab.com analysysdata.com analytics-china.com analyticskey.com @@ -10144,6 +10105,7 @@ aolaiw.com aolei520.com aoliday.com aolylcd.com +aomeng.net aomenyule.net aomoxo.com aomygod.com @@ -10212,7 +10174,6 @@ apetdog.com apex100.com apexmic.com apexyun.com -apfdc.net apgblogs.com apgoview.com aphidic.com @@ -10312,7 +10273,6 @@ appgole.com appgz.com appicplay.com appimm.com -appisbest.com appjiagu.com appjzy.com appkai.com @@ -10706,7 +10666,6 @@ atpanel.com atpapapa.com atq8.com atriumlee.com -atsmart.net atstudy.com att1999.com attakids.com @@ -10714,7 +10673,6 @@ attri.mobi attyou.com atuoyi.com atwasoft.com -atwhcb.com atwtech.net atxwm.com atyun.net @@ -10943,12 +10901,10 @@ azhimalayanvh.com azhituo.com azhjt.com azhu.de -azme-contractors.com azonvo.com azooo.com azoyacdn.com azoyagroup.com -azteccup.com azurew.com azureyun.com azycjd.com @@ -11163,7 +11119,6 @@ baifumeiba.com baigepo.com baigm.com baigo.net -baiguancn.com baihao56.com baihe.com baiheee.com @@ -11198,7 +11153,6 @@ baiked.com baikemy.com baikemy.net baikezh.com -baili-wu.com bailiaijia.com bailiangroup.com bailitech.com @@ -11323,7 +11277,6 @@ bakbitionb.com bakuaiwu.com bakumon.me bala.cc -balawoffice.com baldc.com baletu.com balijieji.com @@ -11338,7 +11291,6 @@ bamayigou.com bamaying.com bamboo18.com bamenzhushou.com -bamudi.com bamuyu.com bananalighter.com bananau.com @@ -11433,13 +11385,13 @@ banyuetan.org banyuetanxcx.com banzhuren365.com banzou.name +banzouku.com bao-cun.com bao-fang.com bao-hulu.com bao-jian.net bao100.com bao12333.com -bao132.com bao21.com bao315.com bao369.com @@ -11490,7 +11442,6 @@ baohebao.com baohejr.com baohuagroup.com baoimg.net -baoji168.com baojia.com baojiazhijia.com baojidaily.com @@ -11569,7 +11520,6 @@ baozy.com baping.com baqima.com baqiu.com -baquge.cc baquge.com baquge.tw barlowarl.com @@ -11578,7 +11528,6 @@ barnettarn.com baron-bj.com barretlee.com barstowcollege.net -bartelhall.com bartender.cc bartholomewart.com bartmoney.com @@ -11689,7 +11638,6 @@ bbtcaster.com bbtree.com bbtw.net bbugifts.com -bbw868.com bbwfish.com bbwxbbs.com bbxinwen.com @@ -11702,6 +11650,7 @@ bc797.com bcactc.com bcadx.com bcb5.com +bcbanzou.com bcbm55555.com bcbm66666.com bcbm688.com @@ -11725,7 +11674,6 @@ bcelive.com bcevod.com bcfans.com bcitb.com -bcjk888.com bcjy123.com bclsw.com bcmcdn.com @@ -11775,7 +11723,6 @@ bdgslb.com bdhaoye.com bdhuakan.com bdi.pub -bdicd.com bdimg.com bdinfo.net bding.net @@ -11792,7 +11739,6 @@ bds-cn.com bdsgps.com bdshuang.com bdsimg.com -bdsmearth.com bdsmluntan16.com bdstatic.com bdsye.com @@ -11861,7 +11807,6 @@ bego.cc begoto.com begowin.com begup.com -begzkj.com behake.com behance.ltd behe.com @@ -12003,14 +11948,12 @@ benimg.com benkua.com benlai.com benlailife.com -benmingnian68.com benmu-health.com benmuyuan.net bensedl.com benseshijue.com benshouji.com benwu.vip -benxi0414.com benyh.com benyht.com benyouhui.com @@ -12021,7 +11964,6 @@ benztu.com bequgew.com bequgezw.com berlinix.com -berlintco.com berqin.com berrl.com berrycn.com @@ -12061,13 +12003,11 @@ besticity.com bestinwo.com bestjimmy.com bestlee.net -bestmemorymaster.net bestmephoto.com bestopview.com bestpeng.com bestqliang.com bestsapchina.com -bestsdk.com bestshinhwa.com bestsign.info bestsign.tech @@ -12124,7 +12064,6 @@ bfgame.com bfimg.com bfjjw.com bfjr.com -bfkty.com bfqh.com bfqifu.com bfsu-artery.net @@ -12312,6 +12251,7 @@ bigma.cc bigniu.com bignox.com bigops.com +bigplayers.com bigqiao.com bigsec.com bigsec.net @@ -12333,13 +12273,11 @@ bihu-static.com bihu.com bihubao.com bihuitianxia.com -bihuwo.com bii-erg.com biikan.com biiquan.com biji.io biji13.com -bijianet.com bijiao.org bijiaocheng.com bijiasso.com @@ -12388,6 +12326,7 @@ bim-times.com bim99.org bimcn.org bimo.cc +binance.org binbinyl.com bincailiuxue.com binfen.tv @@ -12463,7 +12402,6 @@ biquan.be biquan.link biqubao.com biqubu.com -biqudd.com biqudie.com biqudu.com biqudu.net @@ -12578,14 +12516,12 @@ bitsde.com bitse.com bitshuo.com bitsqa.com -bitsquan.com bitu360.com bitvip.com biuapp.im biubiu.tv biubiu001.com biubiubiu.org -bivdu.com bivean.com biwanshequ.com bixia.org @@ -12628,7 +12564,6 @@ bizhi360.com bizhicool.com bizhidaquan.com bizhimi.com -bizhipic.com bizhiquan.com bizhitupian.com bizhongchou.com @@ -12644,7 +12579,6 @@ bj-apc.com bj-big.com bj-dianxintong.net bj-dsmzyy.com -bj-fd.com bj-kpn.com bj-sagtar.com bj-saite.com @@ -12705,7 +12639,6 @@ bjcta.net bjcurio.com bjcxdf.com bjcyzg.com -bjdabache.com bjdachi.com bjdbrc.com bjdcfy.com @@ -12772,7 +12705,6 @@ bjjabc.com bjjap.com bjjbsj.com bjjchf.com -bjjcult.com bjjdwx.com bjjf.cc bjjfsd.com @@ -12798,7 +12730,6 @@ bjkqj.com bjkrtwl.com bjl777.com bjlcs-tech.com -bjledu.com bjlemon.com bjlevsoft.com bjlkhd.net @@ -12818,6 +12749,7 @@ bjmeikao.com bjmeileju.com bjmepin.com bjmeri.org +bjmingdi.com bjmjm.com bjmslp.com bjmti.com @@ -12930,7 +12862,6 @@ bjximei.com bjxinku.com bjxinyou.com bjxjyy666.com -bjxwsng.com bjxwx.com bjxx8.com bjxxw.com @@ -12941,7 +12872,6 @@ bjyaoyang.com bjyczb.com bjyestar.com bjyggc.com -bjyh8.com bjyhwy.com bjykk.com bjyqsj.com @@ -13115,7 +13045,6 @@ blxxsx.net blxyy.com blyol.com blyun.com -blzsbb.icu bm001.com bm023.com bm024.com @@ -13253,11 +13182,9 @@ bolanjr.com boldseas.com bole.me bolead.com -boledir.com bolejiang.com bolianpro.com bolijob.com -bolingseo.com boliquan.com boll.me bolo.me @@ -13451,7 +13378,6 @@ breakingnewsireland.com breakyizhan.com brentron.com brfaka.com -brhthg.com bricktou.com bridgee.net bridgetiger.com @@ -13478,7 +13404,6 @@ bruceit.com brushes8.com bryonypie.com brzhang.club -brzzb.com bs-dolfin.net bs008.com bs56.net @@ -13505,11 +13430,9 @@ bsidu.com bsjhhzs.com bsjquanwu.com bsjuhui.com -bsjx.org bskk.com bskrt.com bskuav.com -bsl168.com bspapp.com bspeizi.com bspia.com @@ -13558,7 +13481,6 @@ btcchina.com btcfans.com btcha.com btckan.com -btckj.net btcsearch.com btcside.com btcsos.com @@ -13576,11 +13498,9 @@ bthhotels.com bthlt.com bthuifu.com bthyhz.com -bthzh.com btime.com btiyu.com btjia.com -btjyjs.com btkiller.com btmao.cc btmeiju.com @@ -13647,7 +13567,6 @@ budueba.com bufan.com buffst.com bug200.com -bugahome1.net bugcreater.com bughd.com bugjia.net @@ -13721,11 +13640,9 @@ buy360.vip buyanshufa.com buyaor.cc buybieshu.com -buyblogreviews.com buycarcn.com buychuan.com buycolle.com -buyerscellars.com buyfine.net buyigang.com buyihao.com @@ -13739,7 +13656,6 @@ buysun.net buysweet.com buytips.site buyu46.com -buyujiyxj.com buzhi5.com buzhibushi.com buzzads.com @@ -13780,11 +13696,9 @@ bxb2b.com bxd365.com bxdaka.com bxdlkj.com -bxdoctor.com bxfaka.com bxgfw.com bxgjyc.com -bxglobal.com bxgtd.com bxhaibao.com bxjob.net @@ -13800,7 +13714,6 @@ bxrfund.com bxsnews.com bxsychina.com bxwcn.net -bxwhx.com bxwst.com bxwx.la bxwx.org @@ -13846,7 +13759,6 @@ byjgxy.com byjsjxy.com byjzwh.com byjzxy.com -bykarizma.com byksgs.com byloue.com bylwcc.com @@ -13867,7 +13779,6 @@ byshr.com bysj999.com bysocket.com bysxfz.com -byt2011.com byte.online byte2100.com bytebye.com @@ -14024,7 +13935,6 @@ cableabc.com cabling-system.com cablingteam.com cabontek.com -cabotway.com cabplink.com cabxgw.com cacfo.com @@ -14067,7 +13977,6 @@ cageystone.com cago365.com cagoe.com cahkms.org -cahrt.com cahuo.com cai188.com cai8.net @@ -14293,7 +14202,6 @@ caoxudong.info caoyudong.com capillarytech-cn.com capitalcloud.net -capitalfarmer.com capitalonline.net capjoy.com cappchem.com @@ -14379,7 +14287,6 @@ catalog-tj.com catfish-cms.com catfun.tv catguo.com -cathaycentury.com cathayfund.com catjc.com cato-travel.com @@ -14405,7 +14312,6 @@ cbdjrsh.org cbe21.com cbea.com cbec365.com -cbecforum.com cbes21.com cbevent.com cbex.com @@ -14430,7 +14336,6 @@ cbnri.org cbnweek.com cboad.com cbos3d.com -cbpjw.net cbqyw.net cbrex.com cbskc.com @@ -14633,7 +14538,6 @@ ccrgt.com ccrjw.com ccshao.com ccshell.com -ccshzs.com ccsph.com cct08.com cct365.net @@ -14758,7 +14662,6 @@ cdgjbus.com cdgjlxs.com cdgmgd.com cdgtw.net -cdgyjs.com cdh3c.com cdhaiguang.com cdhfund.com @@ -14766,7 +14669,6 @@ cdhongfu.com cdhr.net cdhtnews.com cdhulan.com -cdili.com cditv.tv cdjingfeng.com cdjinpeng.com @@ -14904,7 +14806,6 @@ cds.apple.com cds.apple.com.akadns.net cdsb.com cdsb.mobi -cdsbf.com cdscjd.com cdsenfa.com cdsglxx.com @@ -14978,6 +14879,7 @@ cechoice.com cecisp.com cecloud.com cecmath.com +cecom.cc ceconline.com ceconlinebbs.com cecport.cc @@ -15199,7 +15101,6 @@ cgsfusion.com cgsoft.net cgspread.com cgstartup.com -cgt8.net cgtblog.com cgtime.net cgtn.com @@ -15215,7 +15116,6 @@ cgvoo.com cgvxingx-zhongjie.com cgwang.com cgwell.com -cgwfx.com cgwic.com cgws.com cgxc.cc @@ -15337,7 +15237,6 @@ changkunet.com changliuliang.com changlongyingshi.com changning.net -changpeiguoji.com changpingquzhongxiyijieheyiyuan.com changpu3d.com changqingshu.net @@ -15404,7 +15303,6 @@ chaojizuowen.com chaolady.com chaolean.com chaolen.com -chaoli8.com chaoliutai.com chaolongbus.com chaomengdata.com @@ -15606,6 +15504,7 @@ chengtour.com chengtu.com chenguangblog.com chengxiangqian.com +chengxinyouxuan.com chengxuan.com chengxuyuans.com chengyangnews.com @@ -15673,7 +15572,6 @@ cherishhealth.net cherongzi.com cherriespie.com cherry101.com -cherrytips.com cherymanuals.com chese.co chese.online @@ -15701,12 +15599,10 @@ chexiaopang.com chexin.cc chexinwen.com chexiu.com -chexiw.com chexun.com chexun.net cheyaoshi.com cheyian.com -cheyima.com cheyipai.com cheyishang.com cheyisou.com @@ -15825,7 +15721,6 @@ china-huaxue.com china-huazhou.com china-hzd.com china-insurance.com -china-intellect.com china-invests.net china-isotope.com china-jm.org @@ -15877,7 +15772,6 @@ china-wanlin.com china-waste.com china-wss.com china-xinbiao.com -china-yingkouyu.com china-zbycg.com china-zikao.com china.com @@ -16015,7 +15909,6 @@ chinacxgd.com chinacxjs.org chinacyzf.org chinadafen.com -chinadagui.com chinadailyglobal.com chinadance.com chinadart.com @@ -16081,7 +15974,6 @@ chinaforklift.com chinafpd.net chinafph.com chinafpma.org -chinafs120.com chinaftat.org chinafudaoban.com chinagames.net @@ -16114,7 +16006,6 @@ chinahao.com chinaharp.com chinahazelnut.com chinahbnet.com -chinahhmm.com chinahightech.com chinahighway.com chinahkidc.net @@ -16122,7 +16013,6 @@ chinahlwyy.com chinahnjob.com chinahnjs.com chinahorse.org -chinahosin.com chinahost.org chinahotel.com chinahpa.org @@ -16255,7 +16145,6 @@ chinaoct.com chinaonward.net chinaopc.org chinaopen.com -chinaopple.com chinaops.org chinaopticsvalley.com chinaore.com @@ -16367,7 +16256,6 @@ chinatet.com chinatex.com chinatex.net chinatex.org -chinatianshen.com chinatibetnews.com chinaticket.com chinatietong.com @@ -16858,7 +16746,6 @@ ciciec.com cicmag.com cicphoto.com cict.com -cicty.net cicw.org cidgroup.com cidi.ai @@ -16993,7 +16880,6 @@ cityup.org citywo.com cityy.com ciurcetcity.com -ciux.org civclub.net civilcn.com civilness.com @@ -17009,7 +16895,6 @@ ciwork.net cixibank.com ciyocon.com ciyuan.men -ciyuange.net ciyuanshequ.com cj-elec.com cjavapy.com @@ -17042,7 +16927,6 @@ cjol.com cjolimg.com cjrcsc.com cjsc.com -cjsdxz.com cjssy.com cjting.me cjty.net @@ -17126,13 +17010,10 @@ cleey.com clewm.net clf.red clfile.com -clgg1688.com -clhcable.com cli.im click-v.com click369.com clickclaro.xyz -clickearnbtc.com clickserve.dartsearch.net clickstyle.net clicksun.net @@ -17343,7 +17224,6 @@ cmzyk.com cn-api.samsungcloud.com cn-bowei.com cn-c114.net -cn-diaoyu.com cn-em.com cn-fe.com cn-healthcare.com @@ -17425,7 +17305,6 @@ cnaidc.com cnaifm.com cnair.com cnal.com -cnalls.com cname-cdn.com cname-url.com cname.co @@ -17517,7 +17396,6 @@ cndae.com cndao.com cndata.com cndatacom.com -cndbgys.com cndds.com cndesign.com cndfilm.com @@ -17699,7 +17577,6 @@ cnjingchu.com cnjiwang.com cnjiyin.com cnjj.com -cnjjjczk.com cnjjl.com cnjjwb.com cnjlc.com @@ -17791,7 +17668,6 @@ cnnetsec.com cnnewss.com cnnfootballclub.com cnnmol.com -cnnongmin.com cnnorip.org cnnot.com cnnovels.com @@ -17909,12 +17785,10 @@ cnsoftbei.com cnsoftnews.com cnsolomo.com cnsourcing.org -cnsowa.com cnspeed.com cnspeedtest.com cnspeedtest.net cnsphoto.com -cnssuestc.org cnssz.com cnstea.com cnstock.com @@ -17995,7 +17869,6 @@ cnxklm.com cnxnmy.com cnxuntu.com cny9.com -cnyandou.com cnyanglao.com cnygf.net cnyicheng.com @@ -18085,7 +17958,6 @@ codedefault.com codedocs.net codedq.net codedream.xin -codefalling.com codeforge.com codehy.com codeisbug.com @@ -18169,7 +18041,6 @@ cofess.com cofface.com coffee-script.org coffee08.com -coffeejy.com cofly.com cofool.com cofoolfx.com @@ -18207,7 +18078,6 @@ coldfunction.com coldlar.com colipu.com collectionmebel.com -colnect.com colobu.com color365.com colorbird.com @@ -18289,7 +18159,6 @@ commchina.net comment.moe communicatte.com comocloud.net -comosofa.com companydns.com companyxx.com compassedu.hk @@ -18348,7 +18217,6 @@ cookbookchina.com cookcai.com cookie4you.com cookietang.com -cookseo.com cool-admin.com cool-de.com cool80.com @@ -18370,7 +18238,6 @@ coolfd.com coolgamebox.com coolgua.net coolguang.com -coolirand.com coolkit.cc coolling.net coolnull.com @@ -18412,7 +18279,6 @@ corachic.com coralsec.com corebai.com coreldrawchina.com -cornapp.com corp.google.com corpautohome.com corpease.net @@ -18426,7 +18292,6 @@ coscon.com coscoshipping.com cose.space cosedm.com -cosesvip.com cosfund.com coshelper.com coshi.cc @@ -18452,6 +18317,7 @@ covcec.com coventrynv.com coverweb.cc covinda.com +covtv.com cow.black cowarobot.com cowlevel.net @@ -18478,7 +18344,6 @@ cpgzh.com cphd68.com cphoto.net cphoto.org -cphseo.com cpiano.com cpiaoju.com cpiccdn.com @@ -18657,7 +18522,6 @@ cqvip.com cqvip.vip cqwangwo.com cqwav.club -cqweilin.com cqwin.com cqwufangzhai.com cqwulong.net @@ -18668,7 +18532,6 @@ cqxingyun.com cqxxzwj.com cqxyfl.com cqyc.net -cqydby.com cqyestar.com cqyeze.com cqyfgs.com @@ -18800,7 +18663,6 @@ csaspx.com csau.com csbabao.com csbdfyy.net -csbdfyy999.com csbdkj.com csbidding.com csbly.net @@ -18832,7 +18694,6 @@ csdxcw.com csdyx.com csea767.com csebank.com -cseyzx.com csflgg.com csfqw.com csftyy.com @@ -18952,7 +18813,6 @@ csxtedu.com csxww.com csyangchen.com csyangsheng.com -csydlp.com csyestar.com csyeye.com csytv.com @@ -19024,7 +18884,6 @@ ctobsnssdk.com ctocio.com ctoclub.com ctohome.com -ctolib.com ctoutiao.com ctquan.com ctrip-lvyou.com @@ -19164,7 +19023,6 @@ cwebgame.com cwebgl.com cwems.com cwestc.com -cwiif.com cwmining.com cwq.com cwqu.com @@ -19269,7 +19127,6 @@ cyegushi.com cyepai.com cyfeng.com cyfengchao.com -cyggcygg.com cygglm.com cyhd.net cyhm.com @@ -19370,7 +19227,6 @@ czopen.com czpoly.com czqfsl.com czqsyyey.com -czrgyb.net czrj.com czrxw.com czry888.com @@ -19390,7 +19246,6 @@ czwlzx.com czwsg5.com czwyz.com czxixi.com -czxsdl.com czxsss.com czxy.com czyhq.com @@ -19456,12 +19311,10 @@ d7ol.com d7vg.com d8th.com d8tv.com -d8wed.com d9soft.com da-fan-shu.com da-qian.com da-quan.net -da550.com da88.net daai99.com daanbar.com @@ -19739,7 +19592,6 @@ danhuaer.com danhw.com daniao.org daniate.com -danielazulay.com daningcenter.com daningdaning.com daniu.io @@ -19832,7 +19684,6 @@ daozhao.com dapaizixun.com dapan.com dapei.cc -dapeitang.com dapengjiaoyu.com dapenti.com dapiniu.com @@ -20006,7 +19857,6 @@ dazhaiwang.com dazhan123.com dazhangfang.com dazhaoad.com -dazhaogong.com dazhaopeibang.com dazhe114.com dazhe5.com @@ -20062,7 +19912,6 @@ dbscar.com dbshop.net dbt-coin.com dbyb.org -dbylptkhd.com dbytwl.com dbzgia.com dbzyz.com @@ -20082,7 +19931,6 @@ dcloud.io dcloudlive.com dcloudstc.com dcmagcn.com -dcs-cleaning.com dcsapi.com dcsdn.com dcsjw.com @@ -20121,7 +19969,6 @@ dddwan.com ddepin.com ddfans.com ddfchina.com -ddgbank.com ddgg123.com ddgjjj.com ddiaas.com @@ -20130,6 +19977,7 @@ ddianshang.com ddimg.mobi ddimg.net dding.net +ddiworld.com ddjjzz.com ddjk.com ddk-alink.com @@ -20162,7 +20010,6 @@ ddpai.com ddport.com ddqcw.com ddr.kim -ddrhhh.com ddsaas.com ddske.com ddsoucai.com @@ -20197,7 +20044,6 @@ de518.com deaconhousewuxi.com deadnine.com deahu.com -deaiday.com dealiser.com dealsmake.com deansys.com @@ -20271,7 +20117,6 @@ defu189.com deheheng.com deheng.com dehsm.com -dehua.la dehua.net dehuaca.com deifei.com @@ -20340,7 +20185,6 @@ deqingbank.com deqinglaw.com derekchou.com derenbs.com -derenpaper.com dermau.com derwer.com derzh.com @@ -20435,7 +20279,6 @@ dfkcgs.com dfkhgj.com dfmcastrol.com dfmingya.com -dfpiaoliu.com dfpk.com dfrcb.com dfs800.com @@ -20465,7 +20308,6 @@ dg-car.net dg-hanxin.com dg-huixin.com dg-mall.com -dg-xsy.com dg11185.com dg114.com dg121.com @@ -20473,7 +20315,6 @@ dgchangan.com dgd2018.com dgddh.xyz dgdxs.com -dgforlok.com dgg.net dggdf.com dggdk.com @@ -20649,6 +20490,7 @@ dianru.com dianru.net diansan.com dianshang.com +dianshanghy.com dianshi.com dianshihome.com dianshijia.com @@ -21003,7 +20845,6 @@ dju8.com djw51.com djwcp.com djwins.com -djwxs.com djwxw.com djxww.com djye.com @@ -21111,9 +20952,6 @@ dm190.com dm300.com dm321.net dm5.com -dm530.cc -dm530.com -dm530.net dm77.com dm789.com dm9.com @@ -21591,6 +21429,7 @@ douyapu.com douyar.com douyin.com douyincdn.com +douyinpic.com douyinvideo.net douyinvod.com douyou100.com @@ -21636,7 +21475,6 @@ download.visualstudio.microsoft.com download.windowsupdate.com download05.com downloadcenter.samsung.com -downnovel.com downok.com downol.com downos.com @@ -21660,6 +21498,7 @@ doyoudo.com doyouhike.net dozer.cc dozview.com +dp.image-gmkt.com dp2px.com dp2u.com dpaot.com @@ -21722,7 +21561,6 @@ drasy.net draveness.me drawyoo.com drcact.com -drceefu.com drcg8.com drclvs.com drcuiyutao.com @@ -21745,7 +21583,6 @@ dreamofchinese.com dreamore.com dreampiggy.com dreams-travel.com -dreamsdown.com dreamsky.me dreamswood.com dreamsz.net @@ -21771,7 +21608,6 @@ drm-x.com drm-x.net drmhmhi.tokyo drmj.org -drofid.com droi.com droibaas.com dropboxchina.com @@ -21847,7 +21683,6 @@ dtime.com dtletao.com dtmao.cc dtmuban.com -dtp-tio2.com dtqiufa.com dtrcb.com dts007.com @@ -22078,7 +21913,6 @@ duxiu.com duyandb.com duyao001.com duyidu.com -duyidu.net duyixing.com duzelong.com duzhe.com @@ -22136,7 +21970,6 @@ dxf6.com dxias.com dxjs.com dxlfile.com -dxlz.wang dxm.so dxmpay.com dxmstatic.com @@ -22366,9 +22199,7 @@ e-ruikd.com e-sleb.com e-sscard.com e-tiller.com -e-toub.com e-tui.net -e01885.com e0514.com e0575.com e0734.com @@ -22459,6 +22290,7 @@ eastcom.com eastcompeace.com eastcoms.com eastday.com +eastdesign.net eastdigit.com easteat.com eastent.com @@ -22848,7 +22680,6 @@ eecnt.com eecourse.com eecso.com eedns.com -eeds065.com eeduol.com eee-eee.com eee114.com @@ -23769,7 +23600,6 @@ eyeshenzhen.com eyeuc.com eyexp.com eyhsj.com -eyo-laser.com eyoodns.com eyou.com eyou.net @@ -24231,6 +24061,7 @@ fawjlqx.com fawulu.com fawuzaixian.com fax52.com +faxdns.com faxeye.com faxindai.com faxingchina.com @@ -24286,7 +24117,6 @@ fcnes.com fcpiao.com fcrc114.com fcsjw.com -fcstsy.com fcvvip.com fcxjiuyuan.com fcxxh.org @@ -24343,6 +24173,7 @@ feehi.com feekr.com feelcars.com feelchat.net +feelcode.net feelec.net feeliu.com feemoo.vip @@ -24484,6 +24315,7 @@ fengchj.com fengchuanba.com fengchusheng.com fengcms.com +fengcx.com fengdu.com fengdzq.com fengedu.com @@ -24749,7 +24581,6 @@ firekylin.org firemail.wang firetry.com firhq.com -firnabulking.com firoyang.org firstdrs.com firstfood-cn.com @@ -24785,7 +24616,6 @@ fivestarsolar.com fixdown.com fixsub.net fiyta.com -fizz5.com fj-atfz.com fj-ci.com fj-jm.com @@ -24843,7 +24673,6 @@ fjsen.com fjsfa.org fjsjs.com fjsnhd.org -fjst119.com fjtelecom.com fjtgyxa.vip fjtn.com @@ -24857,7 +24686,6 @@ fjybt.com fjycw.com fjyy.org fjzfrc.com -fjzg.org fjzixun.com fjzol.com fjzprx.com @@ -24865,7 +24693,6 @@ fk100.com fk2019.com fkblog.org fkcaijing.com -fkcug.com fkdmg.com fkdxg.com fkjie.com @@ -24908,7 +24735,6 @@ flduo.com flexifont.com fleyun.com flgwx.com -flhs1688.com flidc.net fliggy.com fliggy.hk @@ -24992,7 +24818,6 @@ fmcoprc.gov.mo fmeibao.com fminers.com fmketang.com -fmmm2h.com fmpan.com fmsh.com fmtol.com @@ -25284,7 +25109,6 @@ fs.microsoft.com fs0757.com fs121.com fs12330.org -fs189gqkd.com fs23.com fs234.com fs31.com @@ -25295,10 +25119,8 @@ fsaligzf.com fsbankonline.com fsbeisuda.com fsbus.com -fsbywj.com fsc555.com fsccsi.com -fschaobang.com fscinda.com fsclzs.com fsdhub.com @@ -25334,7 +25156,6 @@ fswdgc.com fswl66.com fsxchina.com fsxdwy.com -fsylqj.com fsymltc.com fsysb.com fsyule.net @@ -25536,7 +25357,6 @@ fwdq.net fwdqw.com fwjia.com fwmob.com -fwq.kr fwqbdn.com fwqtg.net fwqzx.com @@ -25561,7 +25381,6 @@ fxcccbbs.com fxclass.net fxcns.com fxcsxb.com -fxcyds.com fxdiv.com fxdm.net fxdp.com @@ -25749,7 +25568,6 @@ gainet.com gaingreat.com gaini.net gainscha.com -gaipaiqi.com gaitu.com gaitu8.com gaituba.com @@ -25951,8 +25769,6 @@ gaomon.net gaonengfun.com gaopaiwood.com gaopeng.com -gaoqing.fm -gaoqing.la gaoqing500.com gaoqingpai.com gaoqiwenda.com @@ -26078,11 +25894,11 @@ gd165.com gd2000.org gd32.com gd3n.com +gd520520.com gda086.com gdadjs.com gdadri.com gdajie.com -gdaojie.com gdatacube.net gdbljd.com gdbyhtl.net @@ -26129,7 +25945,6 @@ gdkszx.com gdkz88.com gdlins.com gdlppow.com -gdlszz.com gdmappress.com gdmingshizx.com gdmm.com @@ -26439,7 +26254,6 @@ gg-lb.com gg1994.com gg8828.com ggac.net -ggbomcase.com ggcida.com ggcj.com ggcykf.com @@ -26512,7 +26326,6 @@ ghpym.com ghrlib.com ghs.net ghsmpwalmart.com -ghszyy.com ght.me ghui.me ghzhushou.com @@ -26618,7 +26431,6 @@ gjpdh.com gjtjjp.com gjw.com gjw123.com -gjwtech.com gjxh.org gjyoulun.com gjyys.com @@ -26768,6 +26580,7 @@ gn00.com gn168.com gn666.com gnaixx.cc +gname-dns.com gndaily.com gnehr.com gnetis.com @@ -27077,7 +26890,6 @@ gotooback.com gotoubi.com gotozhuan.com gotran.com -gotu.cc gotvg.com gou.com gou898.com @@ -27149,7 +26961,6 @@ gplayspace.com gplqdb.com gpnewtech.com gppapp.com -gps345.com gps8.com gpshk.cc gpslook.net @@ -27242,7 +27053,6 @@ grieom.com grikin.com grinm.com grirem.com -grmrf.com grmxdy.com gro2004.com gro2005.com @@ -27345,7 +27155,6 @@ gtdstudy.com gter.net gtfund.com gtgres.com -gthln.com gtibee.com gtimg.com gtja-allianz.com @@ -27629,8 +27438,6 @@ guoluonews.com guoluzaiju.com guolv.com guomai.cc -guoman8.cc -guoman8.net guomii.com guopc.com guopeiwang.com @@ -27808,7 +27615,6 @@ gxshuairun.com gxskm.com gxsky.com gxssgw.com -gxstyzc.com gxtodo.com gxtstatic.com gxw98.com @@ -27854,7 +27660,6 @@ gysq.org gystatic.com gytcwb.com gytjz.com -gytok.com gytsjk.com gytsm.com gytyz.com @@ -27872,7 +27677,6 @@ gz-data.com gz-forever.com gz-gz.com gz-lodihair.com -gz-miyue.com gz-notary.com gz-oe.com gz-station.com @@ -27882,7 +27686,6 @@ gz007.net gz121.com gz12301.com gz12333.com -gz2004.com gz300.com gz360.com gz4399.com @@ -27900,7 +27703,6 @@ gzbfqx.com gzbio.net gzbmw.com gzbpi.com -gzbzy888.com gzcankao.com gzcdns.com gzchupai.com @@ -27914,7 +27716,6 @@ gzdbx.com gzdingyu.com gzdinuan.com gzdirect.com -gzdrh.com gzdsw.com gzenxx.com gzexpo.com @@ -27922,7 +27723,6 @@ gzfangs.com gzfga.cc gzfilm.com gzfsnet.com -gzfuhui.com gzfxkwl.com gzgc120.com gzgdwl.com @@ -27953,7 +27753,6 @@ gzhzgwyw.com gzidc.com gzif.net gzittc.net -gzitw.net gzj568.com gzjab.com gzjcyuanlin.com @@ -27995,7 +27794,6 @@ gzpeite.com gzpinda.com gzpma.com gzpts.com -gzpublicbike.com gzqiche.com gzqiyuan.com gzqunsheng.com @@ -28045,7 +27843,6 @@ gzweicai.com gzweix.com gzwot.com gzwrit.com -gzwsdzj.com gzxcwsp.com gzxdf.com gzxf35.com @@ -28053,7 +27850,6 @@ gzxftz.com gzxhdyc.com gzxiaopeng.com gzxict.com -gzxingnan.com gzxszf.com gzxtsg.com gzxwtjy.com @@ -28073,7 +27869,6 @@ gzzg.org gzzhitu.com gzzkzsw.com gzzlfw.com -gzzmhb.com gzzoc.com gzzongsi.com gzzoo.com @@ -28206,7 +28001,6 @@ hahawen.com hahayouxi.com hahour.com hai0.com -hai120.com haiall.com haiana.com haianbank.com @@ -28247,7 +28041,6 @@ haige.com haigeek.com haigui001.com haiguime.com -haiguotuzhi.com haihaipin.com haijia.org haijiangzx.com @@ -28338,7 +28131,6 @@ haitunwx.com haituoqi.com haitutech.com haiwailoushi.com -haiwailoushi.net haiwaimoney.com haiwaituiguang.com haiwaiyoujia.com @@ -28374,7 +28166,6 @@ haizhoumo.com haizihe.com haizitong.com hajjjc.com -hajyj.com halade.com halaha.com halffashion.com @@ -28414,11 +28205,8 @@ handfunds.com handian027.com handikj.com handone.com -handpi.net handu.com handuyishe.com -hanefu.com -hanencg.com hanergy.com hanergymobileenergy.com hanfan.cc @@ -28567,7 +28355,6 @@ haochang.tv haochangyou.com haocheedai.com haochi123.com -haochilin.com haochu.com haodaibao.com haodanku.com @@ -28705,7 +28492,6 @@ haoshipin123.com haoshiqi.net haoshsh.com haoshunjx.com -haoshuzs.com haosijia.com haosijia.vip haosix.com @@ -29036,7 +28822,6 @@ hbshgzx.com hbshls.com hbshuzhou.com hbsia.org -hbsjz110.com hbskw.com hbslncy.com hbslndx.com @@ -29065,7 +28850,6 @@ hbtcw.com hbtengniu.com hbtlsd.com hbtobacco.com -hbtouhuai.com hbtxbaidu.com hbtybio.com hbtycp.com @@ -29082,7 +28866,6 @@ hbww.org hbxdf.com hbxhxkj.com hbxiyuan.com -hbxsrsm.com hbxtzy.com hbxyairport.com hbxytc.com @@ -29107,7 +28890,6 @@ hbzkzxw.com hbzlw.com hbzncz.com hbzqzx.com -hbzrtx.com hbzsb.com hbzuojia.com hbzxr.com @@ -29198,7 +28980,6 @@ hdj.me hdjay.com hdjr.org hdjwww.com -hdjxqh.com hdkjc.wang hdlchina.com hdletv.com @@ -29423,7 +29204,6 @@ hellojava.info hellokang.net hellokid.com hellokidvip.com -helloklick.com hellokvm.com hellomeowlab.com helloradio.org @@ -29485,7 +29265,6 @@ hengqijy.com hengqikuaiji.com hengshenggongyi.net hengshuilaobaigan.net -hengtian.org hengtiansoft.com hengtianyun.com hengwenzhendangqi.com @@ -29498,7 +29277,6 @@ hengyidai.com hengyoux.com henhaoji.com henjay724.com -henkexue.com henkuai.com henmimang.com henri.ren @@ -29601,7 +29379,6 @@ hezxs.com hf-iflysse.com hf10000.com hf12345.vip -hf26.com hf365.com hf3bk.shop hf777.com @@ -29633,7 +29410,6 @@ hfrcbc.com hfrqh.com hfrsggff.com hfsava.com -hfsbpf.com hfsid.com hfssw.com hfswcz.com @@ -29725,7 +29501,6 @@ hhrcard.com hhrdc.com hhrhl.vip hhrtu.com -hhrtzbv.com hhsjtyn.com hhtravel.com hhvv.com @@ -29777,11 +29552,9 @@ hicp.net hicss.net hiczp.com hidesigncloud.com -hidg.net hiditie.com hidva.com hienshi.com -hierlighting.com hiersun-hdp.com hiersun-ido.com hiersun-zuanjindian.com @@ -29834,7 +29607,6 @@ hilarryxu.com hilistentome.com hillstonenet.com hillyton.com -hilojack.com hiloong.com hilunwen.com himaker.com @@ -29901,7 +29673,6 @@ hitachi-helc.com hitalk.com hitalkers.com hitao.com -hitaoj.com hitevision-solution.com hitfmfans.com hitgk.com @@ -30184,7 +29955,6 @@ hnjkw.net hnjn.net hnjobw.com hnjshzy.com -hnkckj.com hnkeji999.com hnkljnxh.com hnks.com @@ -30213,7 +29983,6 @@ hnquxing.com hnquyou.com hnrcsc.com hnrcsc.net -hnrcsy.com hnrich.net hnrledu.com hnrmb.com @@ -30230,7 +29999,6 @@ hnstguolu.net hnsy386.com hnsyda.com hnsyu.net -hnszztg.com hnteacher.net hntengn.com hntianduo.com @@ -30346,7 +30114,6 @@ homylogistics.com honda-sundiro.com hondooy.com hondsen.com -honestdq.com hong-lawfirm.com hongbao.show hongbaorili.com @@ -30494,12 +30261,9 @@ hostelxian.com hostker.com hostkvm.com hostloc.com -hostmonstercn.com hostmsu.ru hostspaces.net hostxen.com -hot316.com -hot5tech.com hotalk.com hotcbit.org hotdb.com @@ -30564,7 +30328,6 @@ howbuy.com howelllighting.com howjingcai.com howjoin.com -howkuai.com howsci.com howsoftworks.net howtoing.com @@ -30610,7 +30373,6 @@ hqcft.com hqchip.com hqck.net hqcr.com -hqcsgz.com hqepay.com hqew.com hqew.net @@ -30736,7 +30498,6 @@ hshy.net hshymbp.com hsigus.com hsiii.com -hsingapore.com hsjingcheng.com hslj.net hsltv.com @@ -30762,7 +30523,6 @@ hssyxx.com hsszfx.com hst.com hst1966.net -hstceqft.com hstechsz.com hstong.com hsutimes.com @@ -30801,7 +30561,6 @@ htc-media.com htcbbs.net htcis.net htciy.com -htcui.com htcxfund.com htd2000.com htdata.com @@ -30838,7 +30597,6 @@ htmlsucai.com htnice.com htouhui.com htpc1.com -htpcw.com htqyy.com htr-mold.com htranslate.com @@ -30950,7 +30708,6 @@ huakai.me huake-weixin.com huake360.com huakebosi.com -huakejishu.com huakeyun.com hualady.com hualala.com @@ -30974,7 +30731,6 @@ huananxinwen.com huanaotong.com huanbao-world.com huanbao.com -huanbaolqt.com huanbaoscx.com huanbeiloan.com huancaicp.com @@ -30994,7 +30750,6 @@ huanggao.net huanggaofang.com huangh.com huanghaicollege.com -huanghaipress.com huanghanlian.com huanghecaifu.com huangheidc.com @@ -31181,7 +30936,6 @@ huazhongcnc.com huazhonghua.com huazhongtimes.com huazhu.com -hub-prius.com hubao.cc hubcyts.com hubei-design.com @@ -31449,7 +31203,6 @@ huntic.com huntkey.com huntkeydiy.com hunuo.com -hunyin666.com hunyinyiyuan.com huo-cun.com huo119.com @@ -31580,7 +31333,6 @@ huweishen.com huxi.cc huxiaofan.com huxiaoshi.com -huxiaotz.com huxinqk.com huxiu.com huxiu.link @@ -31710,13 +31462,11 @@ hxsme.org hxt-semitech.com hxthjy.com hxtk.com -hxtn006.com hxttcp.com hxwglm.com hxxdsb.com hxxkw.org hxxl6.com -hxy-dc.com hxyg.org hxyjw.com hxys.com @@ -31805,7 +31555,6 @@ hyzm.cc hyzqxsb.com hz-etest.com hz-gn.com -hz-nsgg.com hz-xin.com hz100msh.com hz155.com @@ -31847,7 +31596,6 @@ hzguojiao.com hzgxr.com hzh1.com hzhaoyi.com -hzhbjx.com hzhfzx.com hzhike.com hzhmktwx.com @@ -31868,7 +31616,6 @@ hzjxy.net hzjyxzyy.com hzlcyd.com hzlhf.com -hzlscl.com hzlug.org hzlyun.com hzmama.net @@ -31896,7 +31643,6 @@ hzsaso.com hzsbz.com hzsgjj.com hzsjnxh.org -hzsyxx.com hztalk.com hzti.com hztosz.com @@ -31912,14 +31658,12 @@ hzwyh.com hzxiangda.com hzxiyuege.com hzxsjgxx.com -hzxsp88.com hzxyns.com hzyestar.com hzyhzp.com hzylpco.com hzyoka.com hzypro.com -hzyttz.com hzyuanshan.com hzyuedu.com hzyuewan.com @@ -31959,7 +31703,6 @@ i-shu.com i-size.com i-tongfang.com i-tv.com -i-uc.net i-uya.com i-xinnuo.com i-xoron.com @@ -32015,7 +31758,6 @@ i9star.com i9wang.com ia-shenzhen.com ia22.com -iaacat.com iac-i.org iacblog.com iadmob.com @@ -32043,6 +31785,7 @@ iamwr.com iamxiaoming.net iamxk.com ian.wang +ianalysis.xyz ianvisa.com iaoso.com iaoyou.com @@ -32176,6 +31919,7 @@ iccemt.org iccessh.org iccgame.com iccgame.net +icchaoren.com iccidchaxun.com iccircle.com iccsmart.com @@ -32184,7 +31928,6 @@ icdn2.com icdol.com icdream.com icdt-conf.com -ice-shexpo.com ice.work ice1000.org iceasy.com @@ -32202,6 +31945,7 @@ icewingcc.com icfans.com icfcc.com icfqs.com +icfusions.com icgecm.com icgoo.net icgu.com @@ -32267,7 +32011,6 @@ icloudnews.net iclouds.work icmade.com icme14.org -icmginc.com icminer.com icmoto.com icmsdev.com @@ -32293,7 +32036,6 @@ icoderobot.com icom5g.com iconfans.com iconfans.org -iconpng.com icoolen.com icoolxue.com icoou.com @@ -32342,7 +32084,6 @@ icy-capital.com icyif.com icyip.com icylife.net -iczhijia.com iczhiku.com iczhiyu.com iczoom.com @@ -32667,7 +32408,6 @@ iguoplay.com iguowan.com igushuo.com iguxuan.com -iguzal.com igwfmc.com ih5games.com ihacksoft.com @@ -33089,7 +32829,6 @@ imomoe.com imomoe.in imomoe.io imomoe.jp -imomoe.tv imooc.com imoocc.com imoodou.com @@ -33155,7 +32894,6 @@ in001.com in189.com in66.com in6way.com -in7000.com in800.com inabr.com inad.com @@ -33231,7 +32969,6 @@ inforbus.com inforguard.net informrack.com inforsec.org -infosec-wiki.com infoshow.net infosoft.cc infotorch.net @@ -33430,8 +33167,6 @@ ip285.com ip33.com ip518.com ip87.com -ip998.com -ipadjiesuo.com ipadown.com ipadview.com ipadyx.com @@ -33444,11 +33179,9 @@ ipampas.com ipanda.com ipandao.com ipandata.com -ipanocloud.com ipanshi.com ipaomi.com ipaotuan.com -iparche.com ipason.com ipay.so ipaylike.com @@ -33508,7 +33241,6 @@ ipr66.com iprchn.com iprdaily.com ipresst.com -iproaero.com iprun.com iprzj.com ipsir.net @@ -33635,7 +33367,6 @@ ish168.com ishaanxi.com ishala.com ishang.net -ishangai.com ishangman.com ishangtong.com ishangu.com @@ -33770,7 +33501,6 @@ itanhang.com itanlian.com itanzi.com itao.com -itaofe.info itaoke.org itaokecms.com itaotm.com @@ -33798,7 +33528,6 @@ itcpn.net itczh.com itdaan.com itdabao.com -itdadao.com itdcw.com itdhz.com itdiffer.com @@ -33849,7 +33578,6 @@ ithezhon.com ithml.com ithome.com ithome.net -ithomer.net ithor.com ithor.net ithothub.com @@ -34013,7 +33741,6 @@ iuvision.com iuynfg.com ivali.com ivan.xin -ivayy.com ivemusic.net ivideostar.com iviewui.com @@ -34091,9 +33818,9 @@ iwumeiti.com iwwwwwi.com iwxapi.com iwyv.com +iwyvi.com iwzwy.com iwzxi.com -ix66.com ixarea.com ixbd.net ixbren.net @@ -34109,7 +33836,6 @@ ixiao9.com ixiaochengxu.cc ixiaolu.com ixiaomiyun.com -ixiaomo.net ixiaoyuanzhi.com ixiatxt.com ixibeiren.com @@ -34139,7 +33865,6 @@ ixsch.com ixu.me ixueshu.com ixueyi.com -ixwebhosting.bz ixx-youku.com ixxm.com ixxplayer.com @@ -34162,7 +33887,6 @@ iyeeda.com iyeele.com iyenei.com iyewu.club -iyi8.com iyingdi.com iyingji.com iyinxun.com @@ -34247,7 +33971,6 @@ j1.com j1health.com j1sc.com j3pz.com -j4bgrants.com j66.net j9p.com jaadee.com @@ -34268,7 +33991,6 @@ jaeapp.com jaeosc.com jafcjj.com jafeney.com -jaguardigital.net jakegame.com jakehu.me jakting.com @@ -34308,7 +34030,6 @@ javabloger.com javaboy.org javacui.com javadoop.com -javady.com javaear.com javaeye.com javafreer.com @@ -34414,7 +34135,6 @@ jcu.cc jcwcn.com jcwgk.com jcwxiao.com -jcydz.com jcyedan.com jcyx2019.com jczhijia.com @@ -34593,8 +34313,6 @@ jfinal.com jfinfo.com jfocus.net jfq.com -jfrft.com -jfrft.net jfrogchina.com jfshare.com jfsky.com @@ -34665,7 +34383,6 @@ jhwl444.com jhwrsq.com jhxms.com jhyongyou.com -jhzhaoming.com ji36.net ji7.com jia-he-jia.com @@ -34738,6 +34455,7 @@ jianada-qianzheng.com jianai360.com jianbaizhan.com jianbaolife.com +jianbh.com jianbihua.cc jianbihua.org jianbihua360.com @@ -34800,7 +34518,6 @@ jiangxiz.com jiangyuesong.me jiangzi.com jianhaobao.com -jianhe.tk jianhen.net jianhui.org jianhui666.com @@ -35079,7 +34796,6 @@ jikemac.com jikexiu.com jikexueyuan.com jikipedia.com -jiku8.com jikzy.com jilailawyer.com jileniao.net @@ -35095,6 +34811,7 @@ jilong-chem.com jilupianzhijia.com jimeng.mobi jimi168.com +jimicn.com jimifashion.com jimistore.com jimmylv.info @@ -35143,7 +34860,6 @@ jinfangka.com jinfengkou.com jinfengpaint.com jinfengwine.com -jinfenwu.com jinfooo.com jinfuzi.com jingbotech.com @@ -35343,7 +35059,6 @@ jinxiu8.com jinxuliang.com jinxun.cc jinyaco.com -jinyanpm.com jinyi2008.com jinyindao.com jinyinyouhui.com @@ -35463,7 +35178,6 @@ jiuhuajob.com jiuhuang.com jiuhuar.com jiuhuashan.cc -jiujcsw.com jiujhzp.com jiujiange.com jiujiui.com @@ -35507,6 +35221,7 @@ jiuyan.info jiuyao666.com jiuyehb.com jiuyi2005.com +jiuyiliebian.com jiuyingnet.com jiuyingwangluo.com jiuys.com @@ -35676,7 +35391,6 @@ jkcsjd.com jkdpw.com jkdsz.com jkeabc.com -jkgame9009.com jkgood.com jkidc.com jkimg.net @@ -35791,14 +35505,12 @@ jncarw.com jncjqgs.com jncqj.com jncyx.com -jndehang.com jndssd.com jndwyy.com jnesc.com jnhouse.com jnj-group.com jnjj.com -jnjybs.com jnjylh.com jnky.com jnlab.com @@ -35828,7 +35540,6 @@ jnwb.net jnxiuchuan.com jnxmycnc.com jnxsddc.com -jnxtlwpq.com jnyestar.com jnzcsyj.com jnzfwz.com @@ -35918,7 +35629,6 @@ jooyoo.net jooyuu.com joozone.com joqoo.com -josen365.com josephcz.win joshuais.me josncdn.com @@ -36131,7 +35841,6 @@ jsgbds.com jsgblog.com jsgc168.com jsgcbank.com -jsgdmovie.com jsgh.org jsgho.net jsgjksl.com @@ -36185,9 +35894,7 @@ jsmian.com jsmjys.com jsmo.xin jsmsg.com -jsmw377.com jsmxw.com -jsmyhg.com jsncke.com jsneco.com jsningyi.com @@ -36401,7 +36108,6 @@ juliancj.com juliang8.com julianhd.net julihun.com -julilife.com julive.com julucn.com julur.com @@ -36502,7 +36208,6 @@ junzhuan.com junziboxue.com junzimen.com junziqian.com -junztang.net juooo.com jupindai.com jupiterscdn.com @@ -36551,7 +36256,6 @@ jutingshop.com jutoudang.com jutuilian.com juturn.com -jutuw.com juvefans.com juwa.net juwan.com @@ -36564,7 +36268,6 @@ juxinfu.com juxing-edu.com juxingyi.com juxinhuizhi.com -juxinjt.com juyanbao.com juyoufan.net juyouqian.com @@ -36622,7 +36325,6 @@ jx3mogu.com jx3pve.com jx3tong.com jx3yymj.com -jx612345.com jxage.com jxal.net jxaxs.com @@ -36706,7 +36408,6 @@ jxxfzx.com jxxhdn.com jxxhsd.com jxxyqm.com -jxycrcw.com jxycw.com jxyqm.com jxyrzdh.com @@ -36730,7 +36431,6 @@ jycbank.com jycinema.com jycloudgslb.com jycloudgslb.net -jycxhg.com jydc.com jydoc.com jydspg.com @@ -36766,7 +36466,6 @@ jyqxz2015.com jyrd.com jyrlzy.com jysd.com -jysdance.com jyshhlxx.com jysld.com jysq.net @@ -36842,7 +36541,6 @@ jztvxmt.com jztylxx.com jztzw.net jzwcom.com -jzx2.com jzxs.com jzxue.com jzyx.com @@ -36852,7 +36550,6 @@ jzzxlm.com k-day.com k-kbox.com k-res.net -k-wisdom.com k-xian.com k0898.com k0rz3n.com @@ -36900,7 +36597,6 @@ k8w.wang k8ym.com k913.com k99.wang -ka-foom.com ka114.net ka20.com ka5188.com @@ -36908,7 +36604,6 @@ kaadas.com kaayou.com kaba365.com kabasiji.com -kabgjyl.com kabitu.com kaboy.net kada.com @@ -36921,7 +36616,6 @@ kagirl.net kagneen.com kai-ying.com kaiba315.com -kaibet.cc kaibo5888.com kaiboda.org kaiboer.com @@ -36995,7 +36689,6 @@ kaka3.com kakadm.com kakalili.com kakamobi.com -kakasoft.com kakayeyou.com kakazy-yun.com kalading.com @@ -37418,7 +37111,6 @@ kexinyun.org kexn.net kexue.com kexue.fm -kexuehan.com kexuelife.com kexuexia.com kexuezixunzzs.com @@ -37462,11 +37154,9 @@ kflpump.com kfqrc.com kfrsrcw.com kfw001.com -kfwang.net kfxinyuan.com kfxxgc.com kfyao.com -kfyes.com kfyou.com kfzimg.com kg-gold.com @@ -37477,29 +37167,13 @@ kgimg.com kgogame.com kgula.com kguowai.com -kh.google.com -khanarabia.com -kharvasa.com khbj.net khdatasolutions.com khdmw.com khesport.com khews.com khlysc.com -khm.google.com -khm.googleapis.com -khm0.google.com -khm0.googleapis.com -khm1.google.com -khm1.googleapis.com khm123.com -khm2.google.com -khm2.googleapis.com -khm3.google.com -khm3.googleapis.com -khmdb.google.com -khmdb.googleapis.com -khonshop.com khotyn.com khqihuo.com khriss.com @@ -37624,7 +37298,6 @@ kiujq.com kiwa-tech.com kiwenlau.com kiwisec.com -kixfnwt.com kj-hospital.com kj-pcb.com kj1487.com @@ -37681,7 +37354,6 @@ kkcha.com kkcodes.com kkcoo.com kkdict.com -kkdj8.com kkdownload.com kkeju.com kkeye.com @@ -37747,7 +37419,6 @@ klmygjj.com klmyssn.com klniu.com klqian.com -klqqx.com klshou.com kltdo.com kltong.com @@ -37767,7 +37438,6 @@ kmcaishui.com kmcenter.org kmcits.com kmcits0655.com -kmcits420.com kmcxedu.com kmdn.net kmeecc.com @@ -37814,7 +37484,6 @@ koal.com koalacam.net koaladoit.com koalareading.com -koboforum.com koboldgame.com kobox.tv kocla.com @@ -37943,12 +37612,12 @@ kowa-dental.com koyuki.cc kpbgw.com kpblw.com -kpitjy.com kpjushi.com kpkpw.com kplanet.vip kpp974.com kpqtw.com +kprepublic.com kpsfloor.com kpxsjz.com kpzip.com @@ -38009,7 +37678,6 @@ ksdown.com ksense.com ksfang.com kshitachi.com -kshmdz.com kshot.com ksjgs.com ksjlsw.wang @@ -38045,7 +37713,6 @@ kt007.com kt11.net kt250.com kt286.com -kt365.net kt40.com kt5u.com ktanx.com @@ -38062,7 +37729,6 @@ ktplay.com ktsee.com kttbtc.com kttpdq.com -ktunions.com ktvc8.com ktvdaren.com ktvme.com @@ -38507,13 +38173,11 @@ ladyyu.com lafaso.com lafhzx.com lafoo.net -lagelle.com lagou.com lagouevents.com lagoujobs.com lagowang.com lai-ai.com -lai18.com laibxw.com laichou.com laichuanfeng.com @@ -38751,7 +38415,6 @@ lanzoui.com lanzous.com lanzoux.com lanzun.net -lao10.com lao9.org lao9123.com laob.me @@ -38838,7 +38501,6 @@ laozu.com laozuo.org lapin365.com lapland.name -laputachen.com laqddc.com laqddcc.com laqiangu.com @@ -38849,8 +38511,6 @@ larksuite.com larmb.com laruence.com laryoo.com -lasallesurdemande.com -laseinehotel.com laser-cnc.com laser4skin.com laser568.com @@ -38879,7 +38539,6 @@ law-lib.com law-star.com lawbridge.org lawbus.net -lawerdoc.com lawinfochina.com lawlingyun.com lawnewscn.com @@ -38897,14 +38556,17 @@ lawyermr.com lawyerqx.com lawyershanghai.net lawyersuperman.com -lawzc.com layabox.com layui-inc.com layui.com layuicdn.com +lazada.co.id +lazada.co.th lazada.com +lazada.com.my lazada.com.ph lazada.sg +lazada.vn lazonga.com lazpit.com lazybios.com @@ -38918,14 +38580,12 @@ lbd99.com lbddd.com lbdyzj.com lbdz.cc -lbeec.com lbesec.com lbgoo.com lbinin.com lbl520.com lboyue.com lbrbis.com -lbsheng.com lbwbw.com lbx.cc lbx777.com @@ -38936,7 +38596,6 @@ lbyczf.com lbzuo.com lc-cn-n1-npxfk.com lc-cn-n1-thovg.com -lc-model.com lc-news.com lc123.net lc787.com @@ -38948,7 +38607,6 @@ lccdn.net lcchn.com lccmw.com lccz.com -lcd-miro.com lcddjm.com lcdhome.net lcdushi.com @@ -38984,12 +38642,10 @@ ldd.me lddengine.com lddgo.net ldeng.com -ldgmc.com ldmap.net ldmnq.com ldmxxz.com ldnovel.com -ldnusf.com ldplayer.net ldqxn.com ldrisk.com @@ -39023,7 +38679,6 @@ leaforbook.com leafword.com leagcard.com leagsoft.com -leakdeals.com leangoo.com leanlan.com leanote.com @@ -39043,7 +38698,6 @@ learning-archive.org learnku.com learnku.net learsun.com -leaug.com leb-china.com lebang.com lebang.net @@ -39178,7 +38832,6 @@ lekannews.com lekevr.com lekoukou.com lekpass.com -lekucake.com lelai.com lele1688.com leleda.com @@ -39241,7 +38894,6 @@ leoao.com leobian.com leoboard.com leocode.net -leon-ren.com leonblog.net leonshadow.com leosirius.fun @@ -39265,7 +38917,6 @@ lers123.com lers168.com lers168.net lerye.com -leshan110.com leshanvc.com leshi123.cc leshi123.com @@ -39294,7 +38945,6 @@ letoom.com letou8.com letouqp.com lets-study.com -letsbbs.com letsebuy.com letsfilm.org lettercloud.net @@ -39319,7 +38969,6 @@ leviding.com levy.work lewaila.com lewaimai.com -lewanfang.com lewang.ltd leweicn.com lewen.la @@ -39373,6 +39022,7 @@ lezai.com lezf.com lezhi.com lezhi.me +lezhi99.com lezhibo.com lezhieducation.com lezhiot.com @@ -39392,7 +39042,6 @@ lfcmw.com lfengw.com lfex.com lfhacks.com -lfhsgc.com lfhygl.com lfidc.net lfkjgh.com @@ -39420,7 +39069,6 @@ lgctshanghai.com lgdisplayproduct.com lgdlife.com lgexam.com -lgi123.com lgmjg.com lgo100.com lgoing.com @@ -39441,8 +39089,6 @@ lhdyfc.com lhezedu.com lhflh.com lhggjd.org -lhgrh.com -lhhy999.com lhidc.net lhlqw.com lhm8.com @@ -39749,6 +39395,7 @@ lilisi.com lilithgame.com lilithgames.com lilosrv.com +liluotech.com lilvb.com lily-collection.com lilyenglish.com @@ -39769,7 +39416,6 @@ liminwang.com limless.com limoer.cc limufang.com -lin-php.com linakesi.com linban.com linchen.me @@ -39878,7 +39524,6 @@ linkedin-event.com linkedkeeper.com linkedme.cc linkedsee.com -linken987.com linker.cc linkernetworks.com linkfinancier.com @@ -40032,7 +39677,6 @@ lishibu.com lishichunqiu.com lishiip.com lishiming.net -lishiqw.com lishiren.com lishixinzhi.com lishizhishi.com @@ -40295,7 +39939,6 @@ lkme.cc lkong.net lkxianglong.net lkyou.com -lkzltc.com ll-hao123.com ll11.com llbetter.com @@ -40345,7 +39988,6 @@ lmlphp.com lmlym.com lmm8.com lmoskernel.org -lmpulsefashion.net lmsail.com lmth2013.com lmtw.com @@ -40369,7 +40011,6 @@ lnemci.com lnest.com lnfw.net lnfzb.com -lngamxw.com lngqt.com lnicc-dl.com lnicp.com @@ -40571,7 +40212,6 @@ longtengwang.com longtugame.com longtuohy.com longwang.cc -longwangbt.com longwenedu.com longwiki.net longwiki.org @@ -40764,7 +40404,6 @@ lqhigo.com lqhualang.com lqjob88.com lqjuwuwang.com -lqlxjx.com lqpsj.com lqqm.com lqrcb.com @@ -40853,7 +40492,6 @@ ltaaa.com ltaaa.net ltd.com ltdcr.hk -ltdjt.com ltesting.net ltgj7.com lthack.com @@ -41085,7 +40723,6 @@ luyouqi.com luyouxia.com luyuanqj.com luzexi.com -lv-ams.com lv74.com lv96.com lvanol.com @@ -41106,10 +40743,8 @@ lvhezi.com lvhuadai.com lvjihong.com lvjinsuo.com -lvjrua.com lvkun.site lvlian5.com -lvliao58.com lvluowang.com lvlvlvyou.com lvmae.com @@ -41172,7 +40807,6 @@ lwen.org lwfengji.net lwfjmj.com lwfree.com -lwgod.xyz lwgsw.com lwhouse.com lwinfo.com @@ -41202,7 +40836,6 @@ lx.cok.elexapp.com lx.pub lx138.com lx167.com -lx2.cok.elexapp.com lx3.cok.elexapp.com lx598.com lxall.net @@ -41225,7 +40858,6 @@ lxly168.com lxmiyu.com lxs123.com lxsales.com -lxsx168.com lxw1234.com lxway.com lxway.net @@ -41236,8 +40868,6 @@ lxy.me lxy520.net lxybaike.com lxyes.com -lxzhwl.com -lxzpf.com lxzzs.com ly-sky.com ly-wz.com @@ -41631,7 +41261,6 @@ makaidong.com makaiqian.com make8.com makeapp.co -makebi199.com makebizeasy.com makecn.net makedie.me @@ -41916,7 +41545,6 @@ matt33.com mattge.com mattressmachinery.net matwav.com -maujeh.com mauu.me mavuz.com mawei.live @@ -42009,8 +41637,6 @@ mbgo.com mbinary.xyz mbokee.com mboxone.com -mbscss.com -mbsimg.com mbsky.com mbulanna.com mbz64.com @@ -42060,6 +41686,7 @@ mcufan.com mcujl.com mculover.com mcumonitor.com +mcusky.com mcuzone.com mcuzx.net mcwshop.com @@ -42077,16 +41704,13 @@ mdbimg.com mdckj.com mdcui.com mdddy.com -mddmm.com mdeasydiagnosis.com mdeditor.com mdeer.com mdfull.com mdinjn.com mditie.com -mdjdljs.com mdjhxgjyc.com -mdjhz.com mdjyadi.com mdjyouth.com mdmmm.com @@ -42188,7 +41812,6 @@ meidaojia.com meidebi.com meideng.net meidoumall.com -meiduan.net meierbei.com meifajie.com meifang8.com @@ -42254,6 +41877,7 @@ meiku123.com meilanfangdajuyuan.org meilele.com meili-inc.com +meili1123.com meilibaobao.com meilides.com meilijia.com @@ -43044,7 +42668,6 @@ mjju.net mjkqj.com mjl388.com mjlong.com -mjlyw.com mjmj8.net mjmjm.com mjmobi.com @@ -43168,7 +42791,6 @@ mmmono.com mmmtea.net mmonly.cc mmosite.com -mmrub.com mmscoo.com mmsfw.com mmsk.com @@ -43368,7 +42990,6 @@ moheqq.com mohou.com mohu.org mohuanhua.com -mohuishou.com moihu.com moimg.net moioi.com @@ -43537,7 +43158,6 @@ motisky.com moto-one.com.hk moto2s.com moto8.com -motocache.com motong.wang motou.com motrix.app @@ -43755,7 +43375,6 @@ mtmos.com mtmss.com mtmssdn.com mtmssdn0.com -mtncharge.com mtnets.com mtnets.net mtoilet.com @@ -43949,7 +43568,6 @@ my3w.com my419.com my4399.com my51a.com -my51life.com my5m.com my5v.com my607.com @@ -44057,7 +43675,6 @@ mygobatv.com mygolbs.com myguancha.com mygx.net -mygyq.com mygzb.com myhack58.com myhaowai.com @@ -44203,7 +43820,6 @@ myuclass.com myun.tv myunderseaworld.com myunke.com -myusanet.com myushan.com myvoyo.com mywakao.com @@ -44316,6 +43932,7 @@ nakedsail.com nakevip.com nalanxi.com nalichi.com +name1688.com name2012.com name5566.com namedq.com @@ -44394,7 +44011,6 @@ naolifanghealth.com naonaola.com naozhong.net napiantian.com -naplech.com naquan.com naracn.com narkii.com @@ -44672,7 +44288,6 @@ neutrontek.com neuwill.com neuzs.com nev-battery.org -nevomw.com new-mobi.com new-more.com new-thread.com @@ -44960,7 +44575,6 @@ nipic.com nirgame.com nisang.pw nishuoa.com -nisipulin.com nisure.net nitaitag.com nitianxieshen.com @@ -45064,14 +44678,12 @@ njgxq.org njhaiwai.com njhengyou.com njhgame.com -njhjwl.com njhwsk.com njhzmxx.com njibhu.com njjsyy.com njjuntong.com njkefayuan.com -njkzhtl.com njl114.com njliaohua.com njlike.com @@ -45144,7 +44756,6 @@ nmggyy.com nmgjzjn.com nmgkjzx.com nmglawyer.com -nmglbaf.com nmgmjml.com nmgxwhz.com nmgycyl.com @@ -45172,7 +44783,6 @@ nncgs.com nnchangyi.com nncj.com nndims.com -nndsl.com nnduyi.com nnera.com nnfzsx.com @@ -45470,7 +45080,6 @@ nvcong.com nvdiao.com nvidia-china.com nvliren.com -nvlis.net nvloo.com nvren.com nvren55.com @@ -45571,7 +45180,6 @@ o31re.buzz o37o.net o3brown.com o3ndix.com -o43c.com o6222.com o7h.net oa025.com @@ -45728,7 +45336,6 @@ oigps.com oilchem.net oilepay.com oilhr.com -oinkyeeky.com oipapio.com oiuwe.com ok-meeting.com @@ -45924,6 +45531,7 @@ onethingcloud.com onethingpcs.com onetog.com onetwo.ren +oneuos.com onev.cat onevcat.com oneway.mobi @@ -45988,6 +45596,7 @@ ooopn.com ooppoo.com oouee.com ooxx.me +ooxxc.com op86.net opahnet.com opark.com @@ -46107,6 +45716,7 @@ ordosbank.com orgcc.com orgleaf.com orgnitu.net +orient-fund.com orient-safety.com orientalpatek.com orientalpearltower.com @@ -46342,7 +45952,6 @@ oyqcmc.com oyxdwx.com oyyj-oys.org oz138.com -ozb2060.com ozhibao.com ozrot.com ozzyad.com @@ -46390,7 +45999,6 @@ paat.com pacdn.com paceroom.net pacgatelaw.com -pacificidc.com package-design.net packtom.com packty.com @@ -46535,7 +46143,6 @@ pansoso.com pansoso.org pansou.com pansyta.com -panteraxxx.com pantianxia.com pantosafety.com pantrysbest.com @@ -46663,7 +46270,6 @@ pc141.com pc18.net pc34.com pc3w.com -pc426.com pc51.com pc5210.com pc6.com @@ -46769,7 +46375,6 @@ pdfzj.com pdgzf.com pdidc.com pdim.gs -pdkj22.com pdm.so pdosgk.com pdown.org @@ -46869,17 +46474,14 @@ peopleart.tv peopledailypress.com peoplenews.eu peoplerail.com -peopleyun.com peopleyuqing.com pepresource.com -peqww.com perfect-input.com perfect-is-shit.com perfect99.com perfectdiary.com perfectonlive.com peropero.net -perropatan.com peryi.net pes-china.com pesiv.com @@ -47202,7 +46804,6 @@ pingpingw.com pingpingze.com pingplusplus.com pingpongx.com -pingshopping.com pingshu8.com pingshuku.com pingshuocoal.com @@ -47240,7 +46841,6 @@ pinpaidadao.com pinpailiu.com pinpailun.com pinpaiv.com -pinpinhang.com pinshan.com pinshanghe.com pinshiwen.com @@ -47310,6 +46910,7 @@ pjjs2.com pjjyzx.com pjnoi.com pjob.net +pjrcn.com pjtime.com pjtx.net pjylw.net @@ -47522,7 +47123,6 @@ pook.com poolgpu.com poolin.com pooluo.com -poolwebtrain.com poorren.com pooy.net pop-bags.com @@ -47930,7 +47530,6 @@ putian508.com putiandai.com putonsoft.com putop.net -putty.ws puusa.net puwenlong.com puworld.com @@ -48070,7 +47669,6 @@ q6u.com q77777777.com q8q7.com qacn.net -qajypx.com qalex.com qaqgame.com qast.com @@ -48228,7 +47826,6 @@ qdwght.com qdwsb.com qdxfgy.com qdxiaojiaoya.com -qdxlly.com qdxtcw.com qdyijiamei.com qdymjy.com @@ -48237,7 +47834,6 @@ qdyxbyy.com qdyyjj.com qdzhengkang.com qdzhongli.com -qdzhouyuan.com qdzmm.com qdznjt.com qdzxyy.com @@ -48261,7 +47857,6 @@ qfeiche.com qfgolang.com qfpay.com qfq.me -qfr662.com qfrxyl.com qfschl.com qfsyj.com @@ -48305,7 +47900,6 @@ qhdfxkj.com qhdgjj.com qhdjcbj.com qhdnews.com -qhdzx8.com qhea.com qhee-ma.com qhee.com @@ -48406,7 +48000,6 @@ qianjia.com qianjiayue.com qianjin5.com qianjing.com -qianjingtai.com qianjins.com qianju.org qianka.com @@ -48796,7 +48389,6 @@ qiongliangjt.com qiongming.com qiongri.com qipacao.com -qipachufang.com qipaifan.com qipamaijia.com qipeiren.com @@ -48870,8 +48462,6 @@ qiutianaimeili.com qiuweili.com qiuwen.org qiuwu.net -qiuxiaoshuo.com -qiuxiaoshuo.org qiuxiazx.com qiuxue360.com qiuyexitong.com @@ -49130,7 +48720,6 @@ qqbiaoqing.com qqbiaoqing8.com qqbibile.com qqbite.com -qqblb.com qqbqg.com qqcedsrc.com qqcf.com @@ -49152,7 +48741,6 @@ qqeo.com qqershou.com qqevd.com qqfangke.com -qqfe.org qqgb.com qqgd.com qqgexing.com @@ -49213,7 +48801,6 @@ qqread.com qqride.com qqrizhi.com qqro.com -qqsexygirl.com qqshark.com qqshidao.com qqshuoshuo.com @@ -49250,7 +48837,6 @@ qqwmx.com qqwtb.com qqwwr.com qqwxmail.com -qqxbt.com qqxiazai.com qqxifan.com qqxmail.com @@ -49283,7 +48869,6 @@ qqzuankuo.com qqzzz.net qr25.com qrcpu.com -qreenmaple.com qrmanhua.com qrtest.com qrx.cc @@ -49355,8 +48940,6 @@ qtluyuan.com qtmlhs.com qtmojo.com qtonghua.com -qtpis.com -qtqsgt.com qtrun.com qtshe.com qtshu.com @@ -49628,7 +49211,6 @@ quzhuanxiang.com quzz88.com quzzgames.com qv25i.xyz -qvbuy.com qvip.net qvkanwen.com qvlz.com @@ -49766,7 +49348,6 @@ qzhhj.com qzhlkj.net qzhmzx.com qzhne.com -qzhuji.com qzhyxx.com qzjkw.net qzjlw.com @@ -49803,7 +49384,6 @@ r1y.com r2g.net r2yx.com r337iz6.com -r3vis.com r51.net r5k.com r5tao.com @@ -49998,7 +49578,6 @@ readzq.com reaer.com reai120.com reaicomic.com -realcin.com realclouds.org realdatamed.com realforcechina.com @@ -50189,7 +49768,6 @@ rerezy10.com rerezy6.com res0w.com resclassaction.com -rescup.com reserve-prime.apple.com resheji.com resistor.today @@ -50247,7 +49825,6 @@ rfmwave.com rfsister.com rfthunder.com rg950.com -rg959.com rgb128.com rgfc.net rgoo.com @@ -50503,7 +50080,6 @@ rootopen.com rootzhushou.com roov.org ror-game.com -ros-l.com ros-lab.com rosabc.com rosaryshelties.com @@ -50695,7 +50271,6 @@ ruijienetworks.com ruijiery.com ruikesearch.com ruilvtu.com -ruioushang.com ruiqicanyin.com ruiruigeblog.com ruiscz.com @@ -50842,22 +50417,17 @@ s-reader.com s-sgames.com s-ts.net s.mzstatic.com -s1.mzstatic.com s135.com s163.com s1905.com s1979.com s1craft.com s1s2-028.com -s2.mzstatic.com s2cinc.com -s3.mzstatic.com s365w2.com s3graphics.com -s4.mzstatic.com s4g5.com s4yd.com -s5.mzstatic.com s5217.net s575.com s5tx.com @@ -51238,6 +50808,7 @@ scitycase.com sciyard.com sciyon.com scjimiao.com +scjjrb.com scjtaq.com scjyzb.net scjzjyjc.com @@ -51386,7 +50957,6 @@ sdhsie.com sdhtmy.com sdhtws.com sdhuxiji.com -sdhxfh.com sdhxnykj.com sdiandian.com sdiborn.com @@ -51622,7 +51192,6 @@ sem123.com semgg.com semgz.com semicic.com -semiconductortransistor.com semidata.info semiee.com semielite.com @@ -51827,14 +51396,12 @@ sh-investment.net sh-kaiyi.com sh-ryjx.com sh-service.com -sh-shuituo.com sh-surface.com sh-syh.org sh-tangfeng.com sh-warwick.com sh-xinao.com sh-yajia.com -sh-yanxi.com sh-ybxhz.com sh-yuy.com sh-zbfm.com @@ -51859,7 +51426,6 @@ sha7000.com sha990.com shaanxirk.com shabc.net -shabcd.com shaca.net shachong8.com shacumox.com @@ -52110,7 +51676,6 @@ shdjg.net shdjg.org shdjt.com shdsd.com -shdxbgjj.com shdzbcgs.cc shdzby168.com shdzfp.com @@ -52184,7 +51749,6 @@ shengdan.com shengdianhuadg.com shengdianhuadk.com shengfanwang.com -shengguo.net shenghan.org shenghefilms.com shengheplastic.com @@ -52319,7 +51883,6 @@ shhglj.com shhgzf.com shhonghu.com shhorse.com -shhpfw.com shhssts.com shhuangding.com shhuayi.com @@ -52429,7 +51992,6 @@ shingle.me shinguang.com shinianonline.com shiningmidas.com -shinjilove.com shinsoukun.com shinybbs.com shinybbs.info @@ -52564,6 +52126,7 @@ shnczq.org shneweye.com shnosbbs.com shnsyh.com +shnti.com shnupps.com shoasis.net shobserver.com @@ -52680,7 +52243,6 @@ showmebug.com showppt.com showself.com showstart.com -showstone.net showxiu.com showxue.com showxue.org @@ -52719,7 +52281,6 @@ shscxh.net shsczs.com shsee.com shshilin.com -shshuoshu.com shsihua.com shsipo.com shsixun.com @@ -52784,7 +52345,6 @@ shuangzheng.org shuanshu.com shuanyue.tech shuashuaapp.com -shuavr.com shuazhibo.com shubao201.com shubao29.com @@ -52914,7 +52474,6 @@ shunvzhi.com shunwang.com shunye.com shunyiqu.com -shunyuzuche.com shuo6.com shuo66.com shuoba.org @@ -52993,7 +52552,6 @@ shxwcb.com shy99.com shyacz.com shyanke.com -shyb3.com shydjscl.com shyestar.com shyfci.com @@ -53004,6 +52562,7 @@ shyjad.com shykx.com shykz123456.com shymte.com +shyonghui.xyz shyouai.com shyouth.net shyqxxy.com @@ -53030,7 +52589,6 @@ shzhanmeng.com shzhiyingedu.com shzhyx.com shzixu.com -shzongwei.com shzongzhan.com shzq.com shzsun.com @@ -53141,12 +52699,10 @@ simiki.org simingtang.com simon96.online simope.com -simovs.com simp.red simperfect.com simple-is-better.com simpledatas.com -simplesurberevents.com simplexue.com simplezs.com simu800.com @@ -53387,7 +52943,6 @@ sjqkd.com sjrwzz.com sjsbk.com sjshw.net -sjsjw.com sjsydq.com sjtiantang.com sjtickettech.com @@ -53433,7 +52988,6 @@ sjzqcrl.com sjzsidadianji.com sjztd.com sjzwww.com -sjzxfjd.com sjzxinhua.com sjzxtsh.com sjzyu.com @@ -53454,11 +53008,9 @@ sketchupbar.com sketchupbbs.com skg.com skieer.com -skiftuns.com skight.com skinme.cc skinpp.com -skinstotal.com skip-links.com skiy.net skjcsc.com @@ -53467,7 +53019,6 @@ sklinux.com skllmd.com sklse.org sklxsj.com -skomall.com skomart.com skongmx.com skrshop.tech @@ -53555,12 +53106,10 @@ slink8.com slinli.com slinuxer.com sliu.info -sljkm.com sljypt.com slkj.org slksy.com sllai.com -slljcx.com slmbio.com slmwp.com slogra.com @@ -53726,7 +53275,6 @@ sncdental.com sncoda.com sndhr.com sndo.com -sndoemail.com sneac.com sneakerhz.com sneia.org @@ -53821,7 +53369,6 @@ sodocloud.com sodocs.net sodu.cc sody123.com -sodyy.com soeasysdk.com soeol.com sofabiao.com @@ -54250,7 +53797,6 @@ springcocoon.com springtour.com spriteapp.com sprzny.com -spsqk.com spswc.com sptcc.com sptccn.com @@ -54322,7 +53868,6 @@ ss0.me ss6.co ss6456.com ss8899888.com -ssadaya.com ssart.net ssaxx.com ssay.net @@ -54339,9 +53884,9 @@ sseinfo.com ssf.cc ssggg.com ssgushi.com +ssine.cc ssine.ink ssipex.com -ssjee.com ssjjss.com ssjjtt.com ssjlicai.com @@ -54746,7 +54291,6 @@ sumsz.com sumygg.com sun-ada.net sun-lion.com -sun-tribe.com sun-wish.com sun0769.com sun0816.com @@ -54760,7 +54304,6 @@ sunboyu.com suncafe.cc suncco.com suncityad.com -suncnn.com sundabao.com sundan.com sundanimg.com @@ -54895,7 +54438,6 @@ supesite.com supesoft.com supfast.net supfree.net -suplaz.com supmil.com supmil.net supoin.com @@ -55064,7 +54606,6 @@ sxccb.com sxcm.net sxcntv.com sxcqzyc.com -sxctby.com sxcwit.com sxcyts.com sxcywy.com @@ -55084,7 +54625,6 @@ sxglpx.com sxgoo.com sxgs.com sxhctv.com -sxhjylqx.com sxhlxy.com sxhm.com sxhr.net @@ -55094,7 +54634,6 @@ sxhxbank.com sxiaoshuo.com sxjagc.com sxjcylbx.com -sxjinfang.com sxjzxww.com sxkzxt.com sxlcdn.com @@ -55176,6 +54715,7 @@ sydjwl.com sydm.hk sydw8.com sydwzp.com +sydzconn.com sydzdiy.com syebh.com syf.ink @@ -55392,7 +54932,6 @@ szhmo.com szhome.com szhomeimg.com szhot.com -szhrqy.com szhtp.com szhuace.com szhuangchao.com @@ -55439,7 +54978,6 @@ szmama.net szmc.net szmctc.com szmdfs.com -szmhgd.com szmil.com szminiao.com szmsheng.com @@ -55536,7 +55074,6 @@ szxlga.com szxqsx.com szxsdmy.com szxxbq.com -szxxnk.com szxxtx.com szydsxy.com szyfdz.net @@ -55550,7 +55087,6 @@ szyixiu.net szyjedu.com szymweb.com szyouyizf.net -szypiao.com szyran.com szysfxx.com szysmpay.com @@ -55684,7 +55220,6 @@ taikangzhijia.com taikeji.com taikongmedia.com taikr.com -taim168.com taiqigame.com tairan.com taishangshiwu.com @@ -55783,7 +55318,6 @@ tangsuanradio.com tangtang.org tangtangbk.com tangtanghr.com -tangtheme.com tanguan.net tangux.com tangwumo.com @@ -56177,12 +55711,10 @@ tech1024.com tech110.net tech126.com tech2ipo.com -tech88.biz techan.com techantong.net techaxiang.net techbrood.com -techedgemag.com techeme.net techenergize.com techflow520.com @@ -56191,7 +55723,6 @@ techgogogo.com techieliang.com techkedu.com techmiao.com -technewcode.site technode.com techoke.com techparty.org @@ -56213,6 +55744,7 @@ teemm.com teemmm.com teencn.com teeqee.com +tefl-china.net tegjlxs.com tegongji.com tegoushe.com @@ -56464,7 +55996,6 @@ theofficegal.com theonemusic.net theorychina.org thepast.cc -therepenny.com thestack.net thethirdmedia.com thetigerhood.com @@ -56578,7 +56109,6 @@ tianjiegame.com tianjieleather.com tianjigame.com tianjihr.com -tianjikuaidu.com tianjimedia.com tianjin-air.com tianjingrong.com @@ -57049,6 +56579,7 @@ tmuyun.com tmwcn.com tmxmall.com tmxxw.com +tn2000.com tn597.com tnbz.com tnccdn.com @@ -57169,7 +56700,6 @@ tongji.com tongji.net tongjitong.com tongjiwo.com -tongk.net tongleer.com tongli-hrcc.net tongliangrc.com @@ -57245,7 +56775,6 @@ top-iot.com top100summit.com top147.com top1food.com -top21cn.com top263.net top2fun.com top301.com @@ -57360,7 +56889,6 @@ toumiao.com toupiaoapp.com touqikan.com tour110.com -tourcheng.com tourhr.com tourjob.net tourongjia.com @@ -57466,7 +56994,6 @@ trackingio.com trackingmore.com tracup.com tracyclass.com -tradalela.com trade-plug.net trade2cn.com tradeask.com @@ -57552,6 +57079,7 @@ trndtg.com troila.com trojantesting.com trojx.me +tronixin.com trpcdn.net trsoft.vip trsoft.xin @@ -58104,7 +57632,6 @@ twdm.net tweakcube.com twguozao.com twh5.com -twhp8.com twinasia.com twinkleunion.com twinsenliang.net @@ -58263,7 +57790,6 @@ tz911.com tzbank.com tzbank.net tzbao.com -tzcnnk.com tzcul.com tzdjzu.com tzdkjr.com @@ -58277,7 +57803,6 @@ tzhealth.com tzhwcc.com tzidc.com tzidt.com -tzjlbs.com tzjxl.com tzkameng.com tzlib.net @@ -58310,7 +57835,6 @@ u193.com u21a.com u22e.com u2j2ha.com -u3-nail.com u38sn2a.com u3dc.com u3dol.com @@ -58496,7 +58020,6 @@ ufojia.com ufojoy.com ufotm.com ufovps.com -ufstone.net ug888.com ugainian.com ugapi.com @@ -58557,6 +58080,7 @@ uishijie.com uisnetwork.com uisrc.com uiste.com +uiu.cc uiwed.com ujian.cc ujifu.com @@ -58755,9 +58279,9 @@ uooss.com uooyoo.com uoozi.com uoschina.com +uoser.org uouo123.com uovz.com -uoyrsd.com up360.com up4dev.com up71.com @@ -58804,7 +58328,6 @@ ups-huawei.net ups.ksmobile.net ups001.com upsapp.com -upshiwa.com upst86.com upsunet.com uptougu.com @@ -59241,7 +58764,6 @@ vecentek.com vechain.com vechain.org vedamobi.com -vedeh.com vedeng.com veding.com veedrin.com @@ -59303,7 +58825,6 @@ veryweibo.com verywind.com veryys.com veryzhun.com -vesense.com vesystem.com vetchile.com vexcdn.net @@ -59732,7 +59253,6 @@ vspk.net vsppt.com vspsa.com vsread.com -vst.cc vst5.com vstab.com vstart.net @@ -60076,7 +59596,6 @@ wangjie.org wangjinle.com wangjubao.com wangjunwei.com -wangkuai.net wangkx.xyz wangle.com wangleipeng.com @@ -60258,7 +59777,6 @@ wanxiangqihang.com wanxm.com wanyan.com wanye.cc -wanye68.com wanyiwang.com wanyixincheng.com wanyol.com @@ -60331,7 +59849,6 @@ wavky.com wawa.fm wawa114.com wawayaya.net -wawayule.com waxrain.com waxxh.me way4ever.com @@ -60374,13 +59891,12 @@ wbxgl.com wbxs8.com wbyweb.com wbzol.com -wc-nono.com wc44.com wcaqq.com wcarn.com wcd.im wcfang.com -wcfps.com +wch-ic.com wcjbb.com wcloud.com wcloudpay.com @@ -60472,7 +59988,6 @@ weaverdream.com weaversoftware.com weavi.com weaview.com -web-feifei.com web-tinker.com web0518.com web0898.net @@ -60608,7 +60123,6 @@ weica.net weicaifu.com weicanting.cc weicewang.com -weiceyan.com weichaishi.com weichangdong.com weiche.me @@ -60704,7 +60218,6 @@ weimeifan.net weimeihuo.com weimeitu.cc weimeixi.com -weimeiyuju.com weimiaocaishang.com weimingcq.com weimingedu.com @@ -60923,7 +60436,6 @@ wenfangnet.com wenfu.net wenfuxiang.com wengbi.com -wengett.com wengkui.com wenguang.com wenguangta.com @@ -60967,7 +60479,6 @@ wenlc.com wenliku.com wenmeng.com wenneart.com -weno.cc wenpie.com wenrouge.com wenryxu.com @@ -61154,7 +60665,6 @@ wh2work.com wh50.com wh6z.com wh702g.ren -whabnhq.com whadexpo.com whairport.com whale8.com @@ -61759,7 +61269,6 @@ wjdhcms.com wjdiy.com wjdiy.net wjdr.net -wjfchina.com wjgnet.com wjgslb.com wjhenglin.net @@ -62066,7 +61575,6 @@ woodenrobot.me woodnn.com wooee.net wooffice.net -wookb.com woola.net woolteam.com wooolab.com @@ -62180,10 +61688,8 @@ woyao998.com woyaobaoliang.com woyaofanyi.com woyaogexing.com -woyaommm.com woyaoqingjia.com woyaoqiudai.com -woyaowanwan.com woyaozhan.com woying.com woyo365.com @@ -62606,9 +62112,7 @@ wuzhouqianzheng.com wuziya.com wuzongping.com wvshare.com -wvuspf.com ww2bbs.net -ww9aafe.com wwaaffxx.com wwe008.com wwe1964.com @@ -62724,13 +62228,11 @@ wxaokai.com wxapp-union.com wxappclub.com wxaqq.com -wxasset.com wxatech.com wxavu.com wxb.com wxbady.com wxbdfm.com -wxbid.com wxblockchain.com wxbrandway.com wxbsgc.com @@ -62780,6 +62282,7 @@ wxshake.com wxsky.net wxsteed.com wxsyedu.net +wxsywh.com wxtj10086.com wxtpb.com wxtree.com @@ -62844,7 +62347,6 @@ wyzhifu.com wyzlvyou.com wyzsp.com wyzxsd.com -wyzxsx.com wyzxwk.com wz01.com wz120.cc @@ -62884,7 +62386,6 @@ wzktys.com wzlscf.com wzlt8.com wzms.com -wzms.net wzplc.com wzpo.net wzpod.com @@ -63106,7 +62607,6 @@ xcbank.com xccbank.com xcczgm.com xcdesign.net -xcestudio.com xcexe.com xcfee.com xcfunds.com @@ -63549,6 +63049,7 @@ xianxia.pro xianxiadao.com xianxiadao.net xianxiajie.com +xianyang888.com xianyin.net xianyu.mobi xianyuange.com @@ -63842,7 +63343,6 @@ xiaoweizhibo.com xiaowiba.com xiaowm.com xiaoxiaapi.com -xiaoxiang.com xiaoxiangbz.com xiaoxianggame.com xiaoxiangxueyuan.com @@ -63850,6 +63350,7 @@ xiaoxiangyoupin.com xiaoxiansheng.com xiaoxiao.com xiaoxiao517.com +xiaoxiaohuajia.com xiaoxiaoketang.com xiaoxiaomo.com xiaoxiaotong.org @@ -63936,7 +63437,6 @@ xiawu.com xiaxiab8.com xiayige.org xiayiqu.com -xiayizhe.xyz xiayx.com xiazai.com xiazai163.com @@ -64070,6 +63570,7 @@ xilaiping.com xilexuan.com xileyougame.com xilidou.com +xilin.com xilinglong.net xilinjie.com xilinsi.org @@ -64108,6 +63609,7 @@ xincaiguan.com xincailiao.com xincainet.com xincaitong.net +xincanshu.com xinceyq.com xincg.com xincha.com @@ -64227,7 +63729,6 @@ xingzuo8.com xingzuo8090.com xingzuoshu.com xingzuowu.com -xinhaobuyi.com xinhaolian.com xinhaoqi.net xinhay.com @@ -64376,7 +63877,6 @@ xinxifabu.net xinxilai.net xinxinapp.net xinxindai.com -xinxinfzc.com xinxing.org xinxing001.com xinxing100.com @@ -64551,7 +64051,6 @@ xixing168.com xixinv.com xixipan.com xixisys.com -xixitv.cc xixiwg.com xiyijiang.com xiyiqq.com @@ -64570,7 +64069,6 @@ xiyouquan.com xiyousdk.com xiyouwebgame.com xiyow.com -xiyu6.com xiyuan.tv xiyuchou.com xiyuege.com @@ -64668,7 +64166,6 @@ xjyaxin.com xjyqly.com xjysq.com xjytjt.com -xjyyys.com xjzdjx.com xjzkzx.com xjzlyy.com @@ -64719,7 +64216,6 @@ xlp2.com xlpan.com xlpz6.com xlrocket.com -xlsdoors.com xlshou.com xltkwj.com xltrip.com @@ -64934,7 +64430,6 @@ xoliao.com xolle1.com xooooa.com xorpay.com -xotata.com xoxknct.com xoxv.net xoyo.com @@ -64961,7 +64456,6 @@ xpccdn.com xpcha.com xpgod.com xpj-baidu.com -xpj00228.com xpjcs7.com xpjedu.com xpjj.net @@ -65034,7 +64528,6 @@ xsbashi.net xsbiquge.com xsbiqugew.com xsbjw.com -xsbook.cc xscbs.com xschu.com xsdwk.com @@ -65188,7 +64681,6 @@ xuanzhoubian.com xuanzhuanwawa.com xubei.com xubo.cc -xuchanghuacai.com xuchuang.com xudan123.com xudankeji.com @@ -65256,6 +64748,7 @@ xueshen.net xueshiboke.com xueshiyun.com xueshu.com +xueshu5.com xueshuda.com xuetangonline.com xuetangx.com @@ -65334,6 +64827,7 @@ xundupdf.com xunerjie.com xunfang.com xungou.com +xunhuoyi.com xunhupay.com xunjiecad.com xunjiepdf.com @@ -65551,7 +65045,6 @@ xycareer.com xycdn.com xycloud.com xyclouds.com -xyctzs.com xyczero.com xydcname.com xydcname.net @@ -65616,7 +65109,6 @@ xywxs.com xywy.com xywyfw.com xywzs.com -xywztyd.com xyx234.com xyx521.com xyxcables.com @@ -65668,7 +65160,6 @@ xzking.com xzlkja.com xzlogo.com xzlres.com -xzlsoft.com xzltzc.com xzlyt.com xzm56.com @@ -65689,13 +65180,11 @@ xzwwxn.com xzx.com xzxiaoshuo.com xzxw.com -xzycmy.com xzyhealth.com xzymoe.com xzz.me xzzanggong.com xzzp.net -xzzycq.com y-os.net y.to y007.com @@ -65776,7 +65265,6 @@ yanboguoji.com yanboyuan.com yanche315.com yanchebang.com -yanchengjia.com yanchengzx.com yandianying.com yandui.com @@ -65917,6 +65405,7 @@ yanxin8.com yanxintong.com yanxishe.com yanxiu.com +yanxuezhang.net yanyib2b.com yanyijingling.com yanyiquan.com @@ -65958,7 +65447,6 @@ yaopinnet.com yaoqingwo.com yaoqmh.com yaosai.com -yaoshenqi.com yaowan.com yaowei.info yaoxianwu.com @@ -66025,7 +65513,6 @@ ybjasb.com ybjk.com ybjtds.net ybm100.com -ybmh100.com ybren.com ybrxl.com ybs120.com @@ -66081,6 +65568,7 @@ yclh6.com yclunwen.com ycmbcd.com ycnuli.com +ycool.com ycpack.net ycpai.com ycqedu.net @@ -66422,7 +65910,6 @@ yibei.com yibencaijing.com yibenmanhua.com yibianxueyuan.com -yibiaok.com yibite.com yiboard.com yibuzhiyao.com @@ -66534,7 +66021,6 @@ yihong001.com yihongmenye.com yihu.com yihuacomputer.com -yihuiinfo.com yihuimg.com yihun.com yii-china.com @@ -66652,7 +66138,6 @@ yinduabc.com yindudigital.com yinduzx.com yineitong.com -yinenggg.com yinfeiy.com yinfos.com ying-ji.com @@ -66839,7 +66324,6 @@ yiqubook123.com yiquhai.com yiqujing.com yiquxapp.com -yiranboli.com yiren001.com yirendai.com yirentong.com @@ -66887,7 +66371,6 @@ yitianshidai.com yitianxinda.com yitongjiayou.com yitongmedia.com -yitongywj.com yitopapp.com yitoutiao163.com yitubao.com @@ -67137,7 +66620,6 @@ ymars.com ymatou.com ymatou.hk ymcall.com -ymcb.net ymcn.org ymd88.com ymeme.com @@ -67219,11 +66701,9 @@ ynmec.com ynmz.net ynpxrz.com ynrayy.com -ynrdba.com ynshangji.com ynshf.com ynshijian.com -ynshucai.com ynsjg.com ynteng.com yntlgs.com @@ -67648,7 +67128,6 @@ youyilm.com youyiqi.com youyiqiaogou.com youyirun.com -youyiyun.vip youyizhidao.com youyo88.com youyou234.com @@ -67758,7 +67237,6 @@ yqhhy.cc yqhlm.com yqhy.org yqie.com -yqjajx.com yqjsj.com yqjtgs.com yqjuejin.com @@ -67768,7 +67246,6 @@ yqmb001.com yqmh.com yqphh.com yqptzx.com -yqqch.com yqsbz.com yqscpt.com yqsns.com @@ -67778,7 +67255,6 @@ yqwyx.xyz yqxhl.com yqxs.cc yqyanhong.com -yqyxgt.com yqzww.la yqzww.net yr-info.com @@ -67877,7 +67353,6 @@ ytaomb.com ytaotao.net ytb.io ytbbs.com -ytcbbb.com ytcbh.com ytcj.com ytcm.net @@ -68336,7 +67811,6 @@ yunqishi.net yunque360.com yunque365.com yunrg.com -yunrong360.com yunrouter.com yunsd.net yunser.com @@ -68357,7 +67831,6 @@ yunstu.net yunsuan.org yunsuanzi.com yunsuo.com -yunsyb.com yunsys.net yuntaigo.com yuntask.com @@ -68479,7 +67952,6 @@ yuyanpingce.com yuyicai.com yuyin.tv yuyiya.com -yuyouge.com yuyoutuan.com yuyu.com yuyue111.com @@ -68550,7 +68022,6 @@ yx74.com yx8u.com yxad.com yxadv.com -yxarm.net yxbao.com yxbhhbkj.com yxbox91.com @@ -68577,7 +68048,6 @@ yxhenan.com yxhhdl.com yxhi.com yxhqj.com -yxhuying.com yxi.cc yximgs.com yxin18.com @@ -68710,7 +68180,6 @@ yysweb.com yysycn.com yytcdn.com yytd66.com -yytejg.com yytek.com yytgjjk.com yytingli.com @@ -68735,7 +68204,6 @@ yyxx100.com yyxxgameyw.com yyy85.com yyyeee.com -yyynykj.com yyzai.com yyzhuishu.com yyzsoft.com @@ -68743,7 +68211,6 @@ yyzu.com yyzw.com yyzyytj.com yyzzsem.com -yz-dzkj.com yz-iot.com yz-show.com yz061.com @@ -68970,7 +68437,6 @@ zbuhe.com zbusa.com zbwbbs.com zbwg.cc -zbwowo.com zbxsoft.com zby365.com zbyongcheng.com @@ -68991,7 +68457,6 @@ zcaijing.com zcbjs.com zcccc.com zccssz.com -zcdmxj.com zcdog.com zcdsp.com zcfc.com @@ -69225,7 +68690,6 @@ zgcswhcbw.com zgcups.com zgddmx.com zgdlbgg.com -zgdrsy.com zgdwzp.com zgdxhbkf.com zgdykeji.com @@ -69384,7 +68848,6 @@ zgyizw.com zgylqy.com zgyongxin.com zgys.net -zgysrt.com zgyssyxh.com zgyuwen.com zgyxlzzs.com @@ -69624,8 +69087,6 @@ zhazhi.com zhbit.com zhblawyer.com zhcf001.com -zhcngbk.com -zhcomz.com zhcpic.com zhcw.com zhdba.com @@ -69913,7 +69374,6 @@ zhiruyi.com zhisanzhao.com zhisheji.com zhishichong.com -zhishiduo.com zhishifenzi.com zhishihao.com zhishilin.com @@ -70350,7 +69810,6 @@ zhuniu.com zhunniao.com zhuo.com zhuobufan.com -zhuoda.org zhuodown.com zhuofan.net zhuofansoft.com @@ -70461,9 +69920,7 @@ zibosky.com zicaitou.com zichabaogao.com zichanzhihuan.com -zichaob.com zichenit.com -ziconauto.com zidan.chat zidanduanxin.com zidanduanxin.net @@ -70497,6 +69954,7 @@ ziiyan.com ziji.cc zijiayouly.com zijie.com +zijiecdn.com zijieimg.com zijinfx.com zijing.org @@ -70547,7 +70005,6 @@ zingke.com zingqi.com ziniao.com ziningmeng.com -ziniucaifu.com ziniusoft.com zinmin01.wang zintao.com @@ -70694,7 +70151,6 @@ zjgt.com zjguji.com zjgwy.org zjgwyw.org -zjgxsh.com zjgxy.org zjgzcpa.com zjgzhaopin.com @@ -70703,7 +70159,6 @@ zjhee.com zjhejiang.com zjhim.com zjhnrb.com -zjhrwy.com zjhuajian.com zjhui.net zjhx520.com @@ -70807,7 +70262,6 @@ zjygz.org zjyiot.com zjyiqiao.com zjypw.com -zjysqbpj.com zjyunsha.com zjyygy.com zjzdgj.com @@ -71019,6 +70473,7 @@ zoneker.com zonemore.com zonen-tech.com zonepp.com +zoneve.com zongcaidarentilihaoya.com zonghangsl.com zongheng.com @@ -71138,7 +70593,6 @@ zrthink.com zrway.com zrwjk.com zrxss.com -zry8181.com zry97.com zrzyb.net zs-e.com @@ -71213,7 +70667,6 @@ zswcn.com zsweai.club zsxq.com zsxt91.com -zsyoulo.com zsythink.net zszq.com zt-express.com @@ -71419,7 +70872,6 @@ zutianke.com zutiyu.com zuulee.com zuxcgames.com -zuyou123.com zuyunfei.com zuyushop.com zuzheyong.com @@ -71567,7 +71019,6 @@ zybang1.com zybfs.com zybhw.com zybird.com -zybnjy.com zybuluo.com zyc918.com zycdnimg.com @@ -71726,7 +71177,6 @@ zzqklm.com zzqxs.com zzrbl.com zzrseng.com -zzsbzyy.com zzsf.com zzsggzy.com zzsgjj.com diff --git a/package/lienol/luci-app-passwall/root/usr/share/passwall/rules/chnroute b/package/lienol/luci-app-passwall/root/usr/share/passwall/rules/chnroute index 2eb07981b6..4ac069dce0 100644 --- a/package/lienol/luci-app-passwall/root/usr/share/passwall/rules/chnroute +++ b/package/lienol/luci-app-passwall/root/usr/share/passwall/rules/chnroute @@ -426,6 +426,8 @@ 43.228.148.0/22 43.228.152.0/22 43.228.188.0/22 +43.228.204.0/22 +43.228.240.0/22 43.229.40.0/22 43.229.48.0/22 43.229.56.0/22 @@ -2538,6 +2540,7 @@ 103.41.0.0/22 103.41.16.0/22 103.41.52.0/22 +103.41.116.0/22 103.41.140.0/22 103.41.148.0/22 103.41.152.0/22 @@ -2818,6 +2821,8 @@ 103.56.60.0/22 103.56.72.0/22 103.56.76.0/22 +103.56.100.0/22 +103.56.104.0/22 103.56.140.0/22 103.56.152.0/22 103.56.184.0/22 @@ -4116,6 +4121,8 @@ 103.161.14.0/23 103.161.102.0/23 103.161.138.0/23 +103.161.208.0/23 +103.161.220.0/23 103.192.0.0/22 103.192.4.0/22 103.192.8.0/22 diff --git a/package/lienol/luci-app-passwall/root/usr/share/passwall/rules/chnroute6 b/package/lienol/luci-app-passwall/root/usr/share/passwall/rules/chnroute6 index cc93c668ef..d73a65db39 100644 --- a/package/lienol/luci-app-passwall/root/usr/share/passwall/rules/chnroute6 +++ b/package/lienol/luci-app-passwall/root/usr/share/passwall/rules/chnroute6 @@ -1895,6 +1895,7 @@ 2409:8000::/20 240a:2000::/24 240a:4000::/21 +240a:6000::/24 240a:8000::/21 240a:c000::/20 240b:8000::/21 From 38d81ee45768d5ee411365a3738dadc4fddc81f4 Mon Sep 17 00:00:00 2001 From: CN_SZTL Date: Thu, 21 Jan 2021 23:45:26 +0800 Subject: [PATCH 02/20] feeds: packages: sync with OpenWrt snapshot Signed-off-by: CN_SZTL --- package/lean/default-settings/files/zzz-default-settings | 1 - 1 file changed, 1 deletion(-) diff --git a/package/lean/default-settings/files/zzz-default-settings b/package/lean/default-settings/files/zzz-default-settings index 863f81f921..9ba13df5d1 100755 --- a/package/lean/default-settings/files/zzz-default-settings +++ b/package/lean/default-settings/files/zzz-default-settings @@ -31,7 +31,6 @@ ln -sf /sbin/ip /usr/bin/ip sed -i 's#https://downloads.openwrt.org#https://mirrors.cloud.tencent.com/lede#g' /etc/opkg/distfeeds.conf sed -i '/openwrt_luci/ { s/snapshots/releases\/18.06.9/g; }' /etc/opkg/distfeeds.conf -sed -i '/openwrt_packages/ { s/snapshots/releases\/19.07.5/g; }' /etc/opkg/distfeeds.conf sed -i "s/# //g" /etc/opkg/distfeeds.conf sed -i 's/root::0:0:99999:7:::/root:$1$V4UetPzk$CYXluq4wUazHjmCDBCqXF.:0:0:99999:7:::/g' /etc/shadow From e392642bdd49893b243d2549815b771ba3cd175b Mon Sep 17 00:00:00 2001 From: hue715 Date: Thu, 21 Jan 2021 23:52:56 +0800 Subject: [PATCH 03/20] luci-app-speederv2: fix bin check Signed-off-by: CN_SZTL --- .../luci-app-speederv2/luasrc/model/cbi/speederv2/general.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package/ntlf9t/luci-app-speederv2/luasrc/model/cbi/speederv2/general.lua b/package/ntlf9t/luci-app-speederv2/luasrc/model/cbi/speederv2/general.lua index 6f429c006a..8b0b0c28f4 100644 --- a/package/ntlf9t/luci-app-speederv2/luasrc/model/cbi/speederv2/general.lua +++ b/package/ntlf9t/luci-app-speederv2/luasrc/model/cbi/speederv2/general.lua @@ -6,7 +6,7 @@ local function has_bin(name) return luci.sys.call("command -v %s >/dev/null" %{name}) == 0 end -if has_bin("speederv2") then +if has_bin("udpspeeder") then uci:foreach("speederv2", "servers", function(s) if s.server_port and s.listen_port then servers[#servers+1] = {name = s[".name"], alias = s.alias or "%s:%s" %{s.server_port, s.listen_port}} From 77f6cfb52dfda4b739c4aa3f2875520953d635ee Mon Sep 17 00:00:00 2001 From: ardanzhu <31897806+ardanzhu@users.noreply.github.com> Date: Sat, 23 Jan 2021 12:02:04 +0800 Subject: [PATCH 04/20] dnsmasq: place 'OPT_FILTER_AAAA' before 'OPT_LAST' --- .../dnsmasq/patches/911-dnsmasq-filter-aaaa.patch | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/package/network/services/dnsmasq/patches/911-dnsmasq-filter-aaaa.patch b/package/network/services/dnsmasq/patches/911-dnsmasq-filter-aaaa.patch index 19363c6d35..8e8af93820 100644 --- a/package/network/services/dnsmasq/patches/911-dnsmasq-filter-aaaa.patch +++ b/package/network/services/dnsmasq/patches/911-dnsmasq-filter-aaaa.patch @@ -11,11 +11,13 @@ Subject: [PATCH] add filter-aaaa option --- a/src/dnsmasq.h +++ b/src/dnsmasq.h -@@ -270,6 +270,7 @@ struct event_desc { +@@ -269,7 +269,8 @@ + #define OPT_IGNORE_CLID 59 #define OPT_SINGLE_PORT 60 #define OPT_LEASE_RENEW 61 - #define OPT_LAST 62 -+#define OPT_FILTER_AAAA 63 +-#define OPT_LAST 62 ++#define OPT_FILTER_AAAA 62 ++#define OPT_LAST 63 #define OPTION_BITS (sizeof(unsigned int)*8) #define OPTION_SIZE ( (OPT_LAST/OPTION_BITS)+((OPT_LAST%OPTION_BITS)!=0) ) From 296e65d8903f6cae4bd0f834261a4b73f86bf2e8 Mon Sep 17 00:00:00 2001 From: jerrykuku Date: Tue, 19 Jan 2021 19:20:44 +0800 Subject: [PATCH 05/20] luci-app-vssr: bump to v1.22 Signed-off-by: CN_SZTL --- package/ctcgfw/luci-app-vssr/Makefile | 6 +- .../luci-app-vssr/luasrc/controller/vssr.lua | 27 +- .../luasrc/model/cbi/vssr/advanced.lua | 53 -- .../luasrc/model/cbi/vssr/client.lua | 10 +- .../luasrc/model/cbi/vssr/log.lua | 3 +- .../luasrc/model/cbi/vssr/router.lua | 32 +- .../model/cbi/vssr/subscribe-config.lua | 77 +++ .../luci-app-vssr/luasrc/view/vssr/ssrurl.htm | 559 +++++++++--------- .../luasrc/view/vssr/status_bottom.htm | 3 + .../luasrc/view/vssr/status_top.htm | 4 +- .../luasrc/view/vssr/tblsection.htm | 193 +++--- .../luasrc/view/vssr/update_subscribe.htm | 11 +- package/ctcgfw/luci-app-vssr/po/zh-cn/vssr.po | 18 +- .../ctcgfw/luci-app-vssr/root/etc/init.d/vssr | 1 + .../root/etc/vssr/custom_ip.list | 0 .../root/etc/vssr/disney_ip.list | 0 .../root/etc/vssr/netflix_ip.list | 0 .../luci-app-vssr/root/etc/vssr/prime_ip.list | 0 .../luci-app-vssr/root/etc/vssr/tvb_ip.list | 0 .../root/etc/vssr/tw_video_ip.list | 0 .../root/etc/vssr/youtube_ip.list | 0 .../root/usr/share/vssr/genconfig_v2ray.lua | 52 +- .../root/usr/share/vssr/subscribe.lua | 101 +++- .../root/usr/share/vssr/update.lua | 16 +- .../root/www/luci-static/vssr/css/pure.css | 232 ++++++++ .../root/www/luci-static/vssr/css/vssr.css | 554 ++++++----------- 26 files changed, 1099 insertions(+), 853 deletions(-) create mode 100644 package/ctcgfw/luci-app-vssr/luasrc/model/cbi/vssr/subscribe-config.lua create mode 100644 package/ctcgfw/luci-app-vssr/root/etc/vssr/custom_ip.list create mode 100644 package/ctcgfw/luci-app-vssr/root/etc/vssr/disney_ip.list create mode 100644 package/ctcgfw/luci-app-vssr/root/etc/vssr/netflix_ip.list create mode 100644 package/ctcgfw/luci-app-vssr/root/etc/vssr/prime_ip.list create mode 100644 package/ctcgfw/luci-app-vssr/root/etc/vssr/tvb_ip.list create mode 100644 package/ctcgfw/luci-app-vssr/root/etc/vssr/tw_video_ip.list create mode 100644 package/ctcgfw/luci-app-vssr/root/etc/vssr/youtube_ip.list create mode 100644 package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/css/pure.css diff --git a/package/ctcgfw/luci-app-vssr/Makefile b/package/ctcgfw/luci-app-vssr/Makefile index b68b9cf547..b27cfdc19f 100644 --- a/package/ctcgfw/luci-app-vssr/Makefile +++ b/package/ctcgfw/luci-app-vssr/Makefile @@ -1,8 +1,8 @@ include $(TOPDIR)/rules.mk PKG_NAME:=luci-app-vssr -PKG_VERSION:=1.21 -PKG_RELEASE:=20210114 +PKG_VERSION:=1.22 +PKG_RELEASE:=20210119 include $(INCLUDE_DIR)/package.mk @@ -46,7 +46,7 @@ define Package/luci-app-vssr SUBMENU:=3. Applications TITLE:=A New SS/SSR/V2Ray/Trojan LuCI interface PKGARCH:=all - DEPENDS:=+shadowsocksr-libev-alt +ipset +ip-full +iptables-mod-tproxy +dnsmasq-full +coreutils +coreutils-base64 +bash +pdnsd-alt +wget-ssl +luasocket +lua-maxminddb \ + DEPENDS:=+shadowsocksr-libev-alt +ipset +ip-full +iptables-mod-tproxy +dnsmasq-full +coreutils +coreutils-base64 +bash +pdnsd-alt +wget-ssl +lua +luasocket +lua-maxminddb \ +shadowsocks-libev-ss-local +shadowsocksr-libev-ssr-local +shadowsocks-libev-ss-redir +simple-obfs \ +PACKAGE_$(PKG_NAME)_INCLUDE_V2ray_plugin:v2ray-plugin \ +PACKAGE_$(PKG_NAME)_INCLUDE_V2ray:v2ray \ diff --git a/package/ctcgfw/luci-app-vssr/luasrc/controller/vssr.lua b/package/ctcgfw/luci-app-vssr/luasrc/controller/vssr.lua index 55c4eef4fe..303d6062f5 100644 --- a/package/ctcgfw/luci-app-vssr/luasrc/controller/vssr.lua +++ b/package/ctcgfw/luci-app-vssr/luasrc/controller/vssr.lua @@ -12,12 +12,13 @@ function index() entry({'admin', 'services', 'vssr', 'client'}, cbi('vssr/client'), _('SSR Client'), 10).leaf = true -- 基本设置 entry({'admin', 'services', 'vssr', 'servers'}, cbi('vssr/servers'), _('Severs Nodes'), 11).leaf = true -- 服务器节点 entry({'admin', 'services', 'vssr', 'servers'}, arcombine(cbi('vssr/servers'), cbi('vssr/client-config')), _('Severs Nodes'), 11).leaf = true -- 编辑节点 - entry({'admin', 'services', 'vssr', 'control'}, cbi('vssr/control'), _('Access Control'), 12).leaf = true -- 访问控制 - entry({'admin', 'services', 'vssr', 'router'}, cbi('vssr/router'), _('Router Config'), 13).leaf = true -- 访问控制 + entry({'admin', 'services', 'vssr', 'subscribe_config'}, cbi('vssr/subscribe-config', {hideapplybtn = true, hidesavebtn = true, hideresetbtn = true}), _('Subscribe'), 12).leaf = true -- 订阅设置 + entry({'admin', 'services', 'vssr', 'control'}, cbi('vssr/control'), _('Access Control'), 13).leaf = true -- 访问控制 + entry({'admin', 'services', 'vssr', 'router'}, cbi('vssr/router'), _('Router Config'), 14).leaf = true -- 访问控制 if nixio.fs.access('/usr/bin/v2ray/v2ray') or nixio.fs.access('/usr/bin/v2ray') or nixio.fs.access('/usr/bin/xray') or nixio.fs.access('/usr/bin/xray/xray') then - entry({'admin', 'services', 'vssr', 'socks5'}, cbi('vssr/socks5'), _('Socks5'), 14).leaf = true -- Socks5代理 + entry({'admin', 'services', 'vssr', 'socks5'}, cbi('vssr/socks5'), _('Local Proxy'), 15).leaf = true -- Socks5代理 end - entry({'admin', 'services', 'vssr', 'advanced'}, cbi('vssr/advanced'), _('Advanced Settings'), 15).leaf = true -- 高级设置 + entry({'admin', 'services', 'vssr', 'advanced'}, cbi('vssr/advanced'), _('Advanced Settings'), 16).leaf = true -- 高级设置 elseif nixio.fs.access('/usr/bin/ssr-server') then entry({'admin', 'services', 'vssr'}, alias('admin', 'services', 'vssr', 'server'), _('vssr'), 10).dependent = true else @@ -240,11 +241,7 @@ function refresh_data() local icount = 0 if set == 'gfw_data' then - if nixio.fs.access('/usr/bin/wget-ssl') then - refresh_cmd = 'wget-ssl --no-check-certificate https://cdn.jsdelivr.net/gh/gfwlist/gfwlist/gfwlist.txt -O /tmp/gfw.b64' - else - refresh_cmd = 'wget -O /tmp/gfw.b64 http://iytc.net/tools/list.b64' - end + refresh_cmd = 'wget-ssl --no-check-certificate https://cdn.jsdelivr.net/gh/gfwlist/gfwlist/gfwlist.txt -O /tmp/gfw.b64' sret = luci.sys.call(refresh_cmd .. ' 2>/dev/null') if sret == 0 then luci.sys.call('/usr/bin/vssr-gfw') @@ -265,7 +262,7 @@ function refresh_data() retstring = '-1' end elseif set == 'ip_data' then - refresh_cmd ="wget -O- 'https://ispip.clang.cn/all_cn.txt' > /tmp/china_ssr.txt 2>/dev/null" + refresh_cmd = "wget-ssl -O- 'https://ispip.clang.cn/all_cn.txt' > /tmp/china_ssr.txt 2>/dev/null" sret = luci.sys.call(refresh_cmd) icount = luci.sys.exec('cat /tmp/china_ssr.txt | wc -l') if sret == 0 and tonumber(icount) > 1000 then @@ -282,12 +279,8 @@ function refresh_data() luci.sys.exec('rm -f /tmp/china_ssr.txt ') else local need_process = 0 - if nixio.fs.access('/usr/bin/wget-ssl') then - refresh_cmd = 'wget-ssl --no-check-certificate -O - https://easylist-downloads.adblockplus.org/easylistchina+easylist.txt > /tmp/adnew.conf' - need_process = 1 - else - refresh_cmd = 'wget -O /tmp/ad.conf http://iytc.net/tools/ad.conf' - end + refresh_cmd = 'wget-ssl --no-check-certificate -O - https://easylist-downloads.adblockplus.org/easylistchina+easylist.txt > /tmp/adnew.conf' + need_process = 1 sret = luci.sys.call(refresh_cmd .. ' 2>/dev/null') if sret == 0 then if need_process == 1 then @@ -319,4 +312,4 @@ function refresh_data() end luci.http.prepare_content('application/json') luci.http.write_json({ret = retstring, retcount = icount}) -end \ No newline at end of file +end diff --git a/package/ctcgfw/luci-app-vssr/luasrc/model/cbi/vssr/advanced.lua b/package/ctcgfw/luci-app-vssr/luasrc/model/cbi/vssr/advanced.lua index 6b63bb8e7b..1489811092 100644 --- a/package/ctcgfw/luci-app-vssr/luasrc/model/cbi/vssr/advanced.lua +++ b/package/ctcgfw/luci-app-vssr/luasrc/model/cbi/vssr/advanced.lua @@ -61,59 +61,6 @@ o.datatype = 'uinteger' o:depends('enable_switch', '1') o.default = 3 --- [[ 节点订阅 ]]-- - -s = m:section(TypedSection, 'server_subscribe', translate('Servers subscription and manage')) -s.anonymous = true - -o = s:option(Flag, 'auto_update', translate('Auto Update')) -o.rmempty = false -o.description = translate('Auto Update Server subscription, GFW list and CHN route') - -o = s:option(ListValue, 'auto_update_time', translate('Update time (every day)')) -for t = 0, 23 do - o:value(t, t .. ':00') -end -o.default = 2 -o.rmempty = false - -o = s:option(DynamicList, 'subscribe_url', translate('Subscribe URL')) -o.rmempty = true -o.description = translate('You can manually add group names in front of the URL, splited by ,') - -o = s:option(Value, "filter_words", translate("Subscribe Filter Words")) -o.rmempty = true -o.description = translate("Filter Words splited by /") - -o = s:option(Flag, 'proxy', translate('Through proxy update')) -o.rmempty = false -o.description = translate('Through proxy update list, Not Recommended ') - -o = s:option(DummyValue, '', '') -o.rawhtml = true -o.template = 'vssr/update_subscribe' - -o = s:option(Button, 'delete', translate('Delete All Subscribe Severs')) -o.inputstyle = 'reset' -o.description = string.format(translate('Server Count') .. ': %d', server_count) -o.write = function() - uci:delete_all( - 'vssr', - 'servers', - function(s) - if s.hashkey or s.isSubscribe then - return true - else - return false - end - end - ) - uci:save('vssr') - uci:commit('vssr') - luci.sys.exec('/etc/init.d/vssr restart') - luci.http.redirect(luci.dispatcher.build_url('admin', 'services', 'vssr', 'servers')) - return -end -- [[ adblock ]]-- s = m:section(TypedSection, 'global', translate('adblock settings')) diff --git a/package/ctcgfw/luci-app-vssr/luasrc/model/cbi/vssr/client.lua b/package/ctcgfw/luci-app-vssr/luasrc/model/cbi/vssr/client.lua index 9d77400f59..2a70cd38a8 100644 --- a/package/ctcgfw/luci-app-vssr/luasrc/model/cbi/vssr/client.lua +++ b/package/ctcgfw/luci-app-vssr/luasrc/model/cbi/vssr/client.lua @@ -93,15 +93,7 @@ for i, v in pairs(route_name) do o = s:option(ListValue, v, translate(route_label[i])) o:value('nil', translate('Same as Main Server')) for _, key in pairs(server_table) do - if(v == 'tw_video_server' and key.flag == "tw") then - o:value(key.name, key.gname) - end - if(v == 'tvb_server' and key.flag == "hk") then - o:value(key.name, key.gname) - end - if(v ~= 'tvb_server' and v ~= 'tw_video_server') then - o:value(key.name, key.gname) - end + o:value(key.name, key.gname) end o:depends('v2ray_flow', '1') o.default = 'nil' diff --git a/package/ctcgfw/luci-app-vssr/luasrc/model/cbi/vssr/log.lua b/package/ctcgfw/luci-app-vssr/luasrc/model/cbi/vssr/log.lua index f3e30fd5aa..e56eb1be77 100644 --- a/package/ctcgfw/luci-app-vssr/luasrc/model/cbi/vssr/log.lua +++ b/package/ctcgfw/luci-app-vssr/luasrc/model/cbi/vssr/log.lua @@ -2,7 +2,8 @@ local fs = require 'nixio.fs' local conffile = '/tmp/ssrpro.log' f = SimpleForm('logview') - +f.submit = false +f.reset = false t = f:field(TextValue, 'conf') t.rmempty = true t.rows = 20 diff --git a/package/ctcgfw/luci-app-vssr/luasrc/model/cbi/vssr/router.lua b/package/ctcgfw/luci-app-vssr/luasrc/model/cbi/vssr/router.lua index 3ac396f22b..9d5d162085 100644 --- a/package/ctcgfw/luci-app-vssr/luasrc/model/cbi/vssr/router.lua +++ b/package/ctcgfw/luci-app-vssr/luasrc/model/cbi/vssr/router.lua @@ -1,31 +1,31 @@ local m, s, o local NXFS = require 'nixio.fs' local router_table = { - yotube = { + a1 = { name = 'youtube', des = 'Youtube Domain' }, - tw_video = { + a2 = { name = 'tw_video', des = 'Tw Video Domain' }, - netflix = { + a3 = { name = 'netflix', des = 'Netflix Domain' }, - disney = { + a4 = { name = 'disney', des = 'Disney+ Domain' }, - prime = { + a5 = { name = 'prime', des = 'Prime Video Domain' }, - tvb = { + a6 = { name = 'tvb', des = 'TVB Domain' }, - custom = { + a7 = { name = 'custom', des = 'Custom Domain' } @@ -39,6 +39,7 @@ for _, v in pairs(router_table) do local conf = '/etc/vssr/'.. v.name ..'_domain.list' o = s:taboption(v.name, TextValue, v.name ..'conf') o.rows = 13 + o.description = translate('↑ Put your domain list here') o.wrap = 'off' o.rmempty = true o.cfgvalue = function(self, section) @@ -50,6 +51,23 @@ for _, v in pairs(router_table) do o.remove = function(self, section, value) NXFS.writefile(conf, '') end + + + local conf1 = '/etc/vssr/'.. v.name ..'_ip.list' + o = s:taboption(v.name, TextValue, v.name ..'conf1') + o.rows = 13 + o.wrap = 'off' + o.description = translate('↑ Put your IP list here') + o.rmempty = true + o.cfgvalue = function(self, section) + return NXFS.readfile(conf1) or ' ' + end + o.write = function(self, section, value) + NXFS.writefile(conf1, value:gsub('\r\n', '\n')) + end + o.remove = function(self, section, value) + NXFS.writefile(conf1, '') + end end return m diff --git a/package/ctcgfw/luci-app-vssr/luasrc/model/cbi/vssr/subscribe-config.lua b/package/ctcgfw/luci-app-vssr/luasrc/model/cbi/vssr/subscribe-config.lua new file mode 100644 index 0000000000..9b8d5eb5a9 --- /dev/null +++ b/package/ctcgfw/luci-app-vssr/luasrc/model/cbi/vssr/subscribe-config.lua @@ -0,0 +1,77 @@ +local vssr = 'vssr' +local uci = luci.model.uci.cursor() +local server_table = {} + +local gfwmode = 0 +local gfw_count = 0 +local ip_count = 0 +local ad_count = 0 +local server_count = 0 + +local sys = require 'luci.sys' + +uci:foreach( + 'vssr', + 'servers', + function(s) + server_count = server_count + 1 + end +) + +m = Map(vssr) + +-- [[ 节点订阅 ]]-- + +s = m:section(TypedSection, 'server_subscribe', translate('Servers subscription and manage')) +s.anonymous = true + +o = s:option(Flag, 'auto_update', translate('Auto Update')) +o.rmempty = false +o.description = translate('Auto Update Server subscription, GFW list and CHN route') + +o = s:option(ListValue, 'auto_update_time', translate('Update time (every day)')) +for t = 0, 23 do + o:value(t, t .. ':00') +end +o.default = 2 +o.rmempty = false + +o = s:option(DynamicList, 'subscribe_url', translate('Subscribe URL')) +o.rmempty = true +o.description = translate('You can manually add group names in front of the URL, splited by ,') + +o = s:option(Value, 'filter_words', translate('Subscribe Filter Words')) +o.rmempty = true +o.description = translate('Filter Words splited by /') + +o = s:option(Flag, 'proxy', translate('Through proxy update')) +o.rmempty = false +o.description = translate('Through proxy update list, Not Recommended ') + +o = s:option(DummyValue, '', '') +o.rawhtml = true +o.template = 'vssr/update_subscribe' + +o = s:option(Button, 'delete', translate('Delete All Subscribe Severs')) +o.inputstyle = 'reset' +o.description = string.format(translate('Server Count') .. ': %d', server_count) +o.write = function() + uci:delete_all( + 'vssr', + 'servers', + function(s) + if s.hashkey or s.isSubscribe then + return true + else + return false + end + end + ) + uci:save('vssr') + uci:commit('vssr') + luci.sys.exec('/etc/init.d/vssr restart') + luci.http.redirect(luci.dispatcher.build_url('admin', 'services', 'vssr', 'servers')) + return +end + +return m diff --git a/package/ctcgfw/luci-app-vssr/luasrc/view/vssr/ssrurl.htm b/package/ctcgfw/luci-app-vssr/luasrc/view/vssr/ssrurl.htm index 6ee2b76ed4..d8db64c56e 100644 --- a/package/ctcgfw/luci-app-vssr/luasrc/view/vssr/ssrurl.htm +++ b/package/ctcgfw/luci-app-vssr/luasrc/view/vssr/ssrurl.htm @@ -2,304 +2,305 @@ - - +
diff --git a/package/ctcgfw/luci-app-vssr/luasrc/view/vssr/tblsection.htm b/package/ctcgfw/luci-app-vssr/luasrc/view/vssr/tblsection.htm index c77c412093..289cb6b9bf 100644 --- a/package/ctcgfw/luci-app-vssr/luasrc/view/vssr/tblsection.htm +++ b/package/ctcgfw/luci-app-vssr/luasrc/view/vssr/tblsection.htm @@ -3,87 +3,113 @@
- 总计 - <%- print(self.des)-%>个节点 +
+ 总计 + <%- print(self.des)-%>个节点 + +
+
+
- <%- local count = 0 -%> -
+ <%- local count=0 -%> + +
+ + <%- local isempty=true for i, k in ipairs(self.serverTable) do section=k isempty=false local + fc=(section.name==self.current) and "fast" or "" local flag_icon=(section.flag ~=nil) + and "flag-icon-" .. section.flag or "flag-icon-un" local switch_enable=(section.switch_enable=="1" ) + and "" or "hidden" scope={ valueheader="cbi/cell_valueheader" , valuefooter="cbi/cell_valuefooter" } + -%> - <%- local isempty = true - for i, k in ipairs(self.serverTable) do - section = k - isempty = false - local fc = (section.name == self.current) and "fast" or "" - local flag_icon = (section.flag ~= nil) and "flag-icon-" .. section.flag or "flag-icon-un" - local switch_enable = (section.switch_enable == "1") and "" or "hidden" - scope = { valueheader = "cbi/cell_valueheader", valuefooter = "cbi/cell_valuefooter" } - -%> - -
-
-
-
- -
<%=section.type%>
-
-
<%=section.alias%>
- <%- if self.extedit or self.addremove then -%> -
-
- <%:Apply%> - <%- if self.extedit then -%> - onclick="location.href='<%=self.extedit:format(section.name)%>'" <%- elseif type(self.extedit) == "function" then - %> onclick="location.href='<%=self:extedit(section.name)%>'" <%- end - %> alt="<%:Edit%>" title="<%:Edit%>"> <%:Edit%> - <%- end; if self.addremove then %> - <%:Delete%> - <%- end -%> +
+
+
+
+ +
+ <%=section.type%> +
+
+
+ <%=section.alias%> +
+ <%- if self.extedit or self.addremove then -%> + + <%- end -%> +
<%- end -%> + + <%- if isempty then -%> +
+

+ <%:This section contains no values yet%> +
+
+ <%- end -%> +
+ + <% if self.error then %> +
+
    + <% for _, c in pairs(self.error) do for _, e in ipairs(c) do -%> +
  • + <%=pcdata(e):gsub("\n","
    ")%> +
  • + <%- end end %> +
-
- <%- end -%> + <% end %> - <%- if isempty then -%> -
-

<%:This section contains no values yet%>
-
- <%- end -%> -
- - <% if self.error then %> -
-
    <% for _, c in pairs(self.error) do for _, e in ipairs(c) do -%> -
  • <%=pcdata(e):gsub("\n","
    ")%>
  • - <%- end end %>
-
- <% end %> - - <%- if self.addremove then -%> - <% if self.template_addremove then include(self.template_addremove) else -%> -
- <% if self.anonymous then %> - - <% else %> - <% if self.invalid_cts then -%>
<% end %> - - - <% if self.invalid_cts then -%> -
<%:Invalid%>
- <%- end %> - <% end %> -
- <%- end %> - <%- end -%> + <%- if self.addremove then -%> + <% if self.template_addremove then include(self.template_addremove) else -%> +
+ <% if self.anonymous then %> + + <% else %> + <% if self.invalid_cts then -%> +
+ <% end %> + + + <% if self.invalid_cts then -%> +
+ <%:Invalid%> +
+ <%- end %> + <% end %> +
+ <%- end %> + <%- end -%>
@@ -120,15 +146,15 @@ $html += '
'; $html += '
'; $html += '
'; - if ($('#cbi-' + CONFIG + '-' + node).attr("data-flag") == "tw") { + //if ($('#cbi-' + CONFIG + '-' + node).attr("data-flag") == "tw") { $html += '
'; - } + //} $html += '
'; $html += '
'; $html += '
'; - if ($('#cbi-' + CONFIG + '-' + node).attr("data-flag") == "hk") { + //if ($('#cbi-' + CONFIG + '-' + node).attr("data-flag") == "hk") { $html += '
'; - } + //} $html += '
'; $html += '
'; Swal.fire({ @@ -165,9 +191,9 @@ } }) } - + //删除节点 - function delete_node(node){ + function delete_node(node) { XHR.halt(); $.each(ajaxArray, function (n, value) { value.abort(); }) //中断所有的ajax请求 $.get(DELETE_NODE_URL, { node: node }, @@ -223,10 +249,7 @@ function (data, status) { currentCheckCount++ var host_con = $(target).find(".host_con"); - host_con.removeClass("fast"); - host_con.removeClass("middle"); - host_con.removeClass("slow"); - host_con.removeClass("nopass"); + host_con.removeClass("fast middle slow nopass"); if (data.ret == 1) { if (data.used == "") { host_con.addClass("nopass"); diff --git a/package/ctcgfw/luci-app-vssr/luasrc/view/vssr/update_subscribe.htm b/package/ctcgfw/luci-app-vssr/luasrc/view/vssr/update_subscribe.htm index 412d6916b2..ae787ab59f 100644 --- a/package/ctcgfw/luci-app-vssr/luasrc/view/vssr/update_subscribe.htm +++ b/package/ctcgfw/luci-app-vssr/luasrc/view/vssr/update_subscribe.htm @@ -1,5 +1,6 @@ <%+cbi/valueheader%> +
<%+cbi/valuefooter%> diff --git a/package/ctcgfw/luci-app-vssr/po/zh-cn/vssr.po b/package/ctcgfw/luci-app-vssr/po/zh-cn/vssr.po index d39453b898..bfebab30af 100644 --- a/package/ctcgfw/luci-app-vssr/po/zh-cn/vssr.po +++ b/package/ctcgfw/luci-app-vssr/po/zh-cn/vssr.po @@ -128,13 +128,13 @@ msgid "SSR Server" msgstr "服务端" msgid "vssr Server" -msgstr "vssr 服务端" +msgstr "Hello World 服务端" msgid "vssr Server is running" -msgstr "vssr 服务端运行中" +msgstr "Hello World 服务端运行中" msgid "vssr Server is not running" -msgstr "vssr 服务端未运行" +msgstr "Hello World 服务端未运行" msgid "Enable Server" msgstr "启动服务端" @@ -710,3 +710,15 @@ msgstr "TVB 域名" msgid "Custom Domain" msgstr "自定义域名" + +msgid "Subscribe" +msgstr "订阅设置" + +msgid "Local Proxy" +msgstr "本地代理" + +msgid "↑ Put your IP list here" +msgstr "↑ 在上面放置你需要分流的IP列表" + +msgid "↑ Put your domain list here" +msgstr "↑ 在上面放置你需要分流的域名列表" diff --git a/package/ctcgfw/luci-app-vssr/root/etc/init.d/vssr b/package/ctcgfw/luci-app-vssr/root/etc/init.d/vssr index b8175707e0..dd75665473 100755 --- a/package/ctcgfw/luci-app-vssr/root/etc/init.d/vssr +++ b/package/ctcgfw/luci-app-vssr/root/etc/init.d/vssr @@ -609,6 +609,7 @@ EOF /etc/init.d/dnsmasq restart >/dev/null 2>&1 start_server start_local + scount=$(count_shunt) if [ $scount != "0" ]; then start_shunt fi diff --git a/package/ctcgfw/luci-app-vssr/root/etc/vssr/custom_ip.list b/package/ctcgfw/luci-app-vssr/root/etc/vssr/custom_ip.list new file mode 100644 index 0000000000..e69de29bb2 diff --git a/package/ctcgfw/luci-app-vssr/root/etc/vssr/disney_ip.list b/package/ctcgfw/luci-app-vssr/root/etc/vssr/disney_ip.list new file mode 100644 index 0000000000..e69de29bb2 diff --git a/package/ctcgfw/luci-app-vssr/root/etc/vssr/netflix_ip.list b/package/ctcgfw/luci-app-vssr/root/etc/vssr/netflix_ip.list new file mode 100644 index 0000000000..e69de29bb2 diff --git a/package/ctcgfw/luci-app-vssr/root/etc/vssr/prime_ip.list b/package/ctcgfw/luci-app-vssr/root/etc/vssr/prime_ip.list new file mode 100644 index 0000000000..e69de29bb2 diff --git a/package/ctcgfw/luci-app-vssr/root/etc/vssr/tvb_ip.list b/package/ctcgfw/luci-app-vssr/root/etc/vssr/tvb_ip.list new file mode 100644 index 0000000000..e69de29bb2 diff --git a/package/ctcgfw/luci-app-vssr/root/etc/vssr/tw_video_ip.list b/package/ctcgfw/luci-app-vssr/root/etc/vssr/tw_video_ip.list new file mode 100644 index 0000000000..e69de29bb2 diff --git a/package/ctcgfw/luci-app-vssr/root/etc/vssr/youtube_ip.list b/package/ctcgfw/luci-app-vssr/root/etc/vssr/youtube_ip.list new file mode 100644 index 0000000000..e69de29bb2 diff --git a/package/ctcgfw/luci-app-vssr/root/usr/share/vssr/genconfig_v2ray.lua b/package/ctcgfw/luci-app-vssr/root/usr/share/vssr/genconfig_v2ray.lua index c1c8ccdc1b..53e80ae4b8 100755 --- a/package/ctcgfw/luci-app-vssr/root/usr/share/vssr/genconfig_v2ray.lua +++ b/package/ctcgfw/luci-app-vssr/root/usr/share/vssr/genconfig_v2ray.lua @@ -1,6 +1,7 @@ local ucursor = require 'luci.model.uci'.cursor() local name = 'vssr' local json = require 'luci.jsonc' +local nixio = require 'nixio' local server_section = arg[1] local proto = arg[2] local local_port = arg[3] @@ -8,6 +9,9 @@ local outbounds_table = {} local rules_table = {} function read_conf(file) + if not nixio.fs.access(file) then + return nil + end local rfile = io.open(file, "r") local ltable = {} for line in rfile:lines() do @@ -18,15 +22,30 @@ function read_conf(file) return rtable end + local v2ray_flow = ucursor:get_first(name, 'global', 'v2ray_flow', '0') local custom_domain = read_conf("/etc/vssr/custom_domain.list") +local custom_ip = read_conf("/etc/vssr/custom_ip.list") + local youtube_domain = read_conf("/etc/vssr/youtube_domain.list") +local youtube_ip = read_conf("/etc/vssr/youtube_ip.list") + local tw_video_domain = read_conf("/etc/vssr/tw_video_domain.list") +local tw_video_ip = read_conf("/etc/vssr/tw_video_ip.list") + local netflix_domain = read_conf("/etc/vssr/netflix_domain.list") +local netflix_ip = read_conf("/etc/vssr/netflix_ip.list") + local disney_domain = read_conf("/etc/vssr/disney_domain.list") +local disney_ip = read_conf("/etc/vssr/disney_ip.list") + local prime_domain = read_conf("/etc/vssr/prime_domain.list") +local prime_ip = read_conf("/etc/vssr/prime_ip.list") + local tvb_domain = read_conf("/etc/vssr/tvb_domain.list") +local tvb_ip = read_conf("/etc/vssr/tvb_ip.list") + local flow_table = { yotube = { @@ -35,6 +54,7 @@ local flow_table = { rules = { type = 'field', domain = youtube_domain, + ip = youtube_ip, outboundTag = 'youtube' } }, @@ -44,6 +64,7 @@ local flow_table = { rules = { type = 'field', domain = tw_video_domain, + ip = tw_video_ip, outboundTag = 'tw_video' } }, @@ -53,6 +74,7 @@ local flow_table = { rules = { type = 'field', domain = netflix_domain, + ip = netflix_ip, outboundTag = 'netflix' } }, @@ -62,6 +84,7 @@ local flow_table = { rules = { type = 'field', domain = disney_domain, + ip = disney_ip, outboundTag = 'disney' } }, @@ -71,6 +94,7 @@ local flow_table = { rules = { type = 'field', domain = prime_domain, + ip = prime_ip, outboundTag = 'prime' } }, @@ -80,6 +104,7 @@ local flow_table = { rules = { type = 'field', domain = tvb_domain, + ip = tvb_ip, outboundTag = 'tvb' } }, @@ -89,6 +114,7 @@ local flow_table = { rules = { type = 'field', domain = custom_domain, + ip = custom_ip, outboundTag = 'custom' } } @@ -113,7 +139,7 @@ local bt_rules1 = { 'BitTorrent', 'announce_peer', 'announce.php?passkey=' - }, + } } function gen_outbound(server_node, tags, local_ports) @@ -210,12 +236,30 @@ function gen_bt_outbounds() end if v2ray_flow == '1' then + table.insert(outbounds_table, gen_outbound(server_section, 'global', 2080)) for _, v in pairs(flow_table) do - if(v.rules.domain ~= nil) then + if(v.rules.domain ~= nil or v.rules.ip ~= nil) then local server = ucursor:get_first(name, 'global', v.name .. '_server') table.insert(outbounds_table, gen_outbound(server, v.name, v.port)) - table.insert(rules_table, (server ~= nil and server ~= 'nil' ) and v.rules or nil) + + if(v.rules.domain ~= nil) then + domain_rules = { + type = 'field', + domain = v.rules.domain, + outboundTag = v.rules.outboundTag + } + table.insert(rules_table, (server ~= nil and server ~= 'nil' ) and domain_rules or nil) + end + + if(v.rules.ip ~= nil) then + ip_rules = { + type = 'field', + ip = v.rules.ip, + outboundTag = v.rules.outboundTag + } + table.insert(rules_table, (server ~= nil and server ~= 'nil' ) and ip_rules or nil) + end end end else @@ -246,6 +290,6 @@ local v2ray = { }, -- 传出连接 outbounds = outbounds_table, - routing = {domainStrategy = 'AsIs', rules = rules_table} + routing = {domainStrategy = 'IPIfNonMatch', rules = rules_table} } print(json.stringify(v2ray, 1)) diff --git a/package/ctcgfw/luci-app-vssr/root/usr/share/vssr/subscribe.lua b/package/ctcgfw/luci-app-vssr/root/usr/share/vssr/subscribe.lua index 6397a5b543..5a7e00c2cc 100644 --- a/package/ctcgfw/luci-app-vssr/root/usr/share/vssr/subscribe.lua +++ b/package/ctcgfw/luci-app-vssr/root/usr/share/vssr/subscribe.lua @@ -33,6 +33,40 @@ local switch = '0' local subscribe_url = ucic:get_first(name, 'server_subscribe', 'subscribe_url', {}) local filter_words = ucic:get_first(name, 'server_subscribe', 'filter_words', '过期时间/剩余流量') +function print_r ( t ) + local print_r_cache={} + local function sub_print_r(t,indent) + if (print_r_cache[tostring(t)]) then + print(indent.."*"..tostring(t)) + else + print_r_cache[tostring(t)]=true + if (type(t)=="table") then + for pos,val in pairs(t) do + if (type(val)=="table") then + print(indent.."["..pos.."] => "..tostring(t).." {") + sub_print_r(val,indent..string.rep(" ",string.len(pos)+8)) + print(indent..string.rep(" ",string.len(pos)+6).."}") + elseif (type(val)=="string") then + print(indent.."["..pos..'] => "'..val..'"') + else + print(indent.."["..pos.."] => "..tostring(val)) + end + end + else + print(indent..tostring(t)) + end + end + end + if (type(t)=="table") then + print(tostring(t).." {") + sub_print_r(t," ") + print("}") + else + sub_print_r(t," ") + end + print() +end + local log = function(...) print(os.date('%Y-%m-%d %H:%M:%S ') .. table.concat({...}, ' ')) end @@ -55,6 +89,43 @@ local function split(full, sep) end return result end + +--table去重 + +local function clone( object ) + local lookup_table = {} + local function copyObj( object ) + if type( object ) ~= "table" then + return object + elseif lookup_table[object] then + return lookup_table[object] + end + + local new_table = {} + lookup_table[object] = new_table + for key, value in pairs( object ) do + new_table[copyObj( key )] = copyObj( value ) + end + return setmetatable( new_table, getmetatable( object ) ) + end + return copyObj( object ) +end + +local function table_unique(list) + local temp1 = clone(list) + local temp2 = clone(list) + for k1, v1 in ipairs(temp1) do + for k2, v2 in ipairs(temp2) do + if v1.alias ~= v2.alias and v1.hashkey == v2.hashkey then + table.remove(temp1, k1) + table.remove(temp2, k1) + + end + end + end + return temp1 +end + -- urlencode local function get_urlencode(c) return sformat('%%%02X', sbyte(c)) @@ -385,12 +456,21 @@ local execute = function() end end log('成功解析节点数量: ' .. #nodes) - end + else + log(url .. ': 获取内容为空') + end end end -- diff do - assert(next(nodeResult), '获取不到节点信息,请检查路由器是否能够访问网络,或者订阅链接是否正确') + if next(nodeResult) == nil then + log("更新失败,没有可用的节点信息") + if proxy == '0' then + luci.sys.init.start(name) + log('订阅失败, 恢复服务') + end + return + end local add, del = 0, 0 ucic:foreach( name, @@ -407,17 +487,24 @@ local execute = function() setmetatable(nodeResult[old.grouphashkey][old.hashkey], {__index = {_ignore = true}}) end else - if (old.alias ~= nil) then - log('忽略手动添加的节点: ' .. old.alias) + if not old.alias then + if not old.server or old.server_port then + ucic:delete(name, old['.name']) + else + old.alias = old.server .. ':' .. old.server_port + log('忽略手动添加的节点: ' .. old.alias) + end else - log('忽略手动添加的无效节点') + log('忽略手动添加的节点: ' .. old.alias) end end end ) - + for k, v in ipairs(nodeResult) do - for kk, vv in ipairs(v) do + -- 如果订阅节点中有相同的节点信息 需要先去重。 + new_nodes = table_unique(v) + for kk, vv in ipairs(new_nodes) do if not vv._ignore then local section = ucic:add(name, uciType) ucic:tset(name, section, vv) diff --git a/package/ctcgfw/luci-app-vssr/root/usr/share/vssr/update.lua b/package/ctcgfw/luci-app-vssr/root/usr/share/vssr/update.lua index 525970a7c8..94bcf307a2 100644 --- a/package/ctcgfw/luci-app-vssr/root/usr/share/vssr/update.lua +++ b/package/ctcgfw/luci-app-vssr/root/usr/share/vssr/update.lua @@ -16,11 +16,7 @@ local log = function(...) end log('正在更新【GFW列表】数据库') -if nixio.fs.access('/usr/bin/wget-ssl') then - refresh_cmd = 'wget-ssl --no-check-certificate https://cdn.jsdelivr.net/gh/gfwlist/gfwlist/gfwlist.txt -O /tmp/gfw.b64' -else - refresh_cmd = 'wget -O /tmp/gfw.b64 http://iytc.net/tools/list.b64' -end +refresh_cmd = 'wget-ssl --no-check-certificate https://cdn.jsdelivr.net/gh/gfwlist/gfwlist/gfwlist.txt -O /tmp/gfw.b64' sret = luci.sys.call(refresh_cmd .. ' 2>/dev/null') if sret == 0 then luci.sys.call('/usr/bin/vssr-gfw') @@ -43,7 +39,7 @@ else end log('正在更新【国内IP段】数据库') -refresh_cmd ="wget -O- 'https://ispip.clang.cn/all_cn.txt' > /tmp/china_ssr.txt 2>/dev/null" +refresh_cmd ="wget-ssl -O- 'https://ispip.clang.cn/all_cn.txt' > /tmp/china_ssr.txt 2>/dev/null" sret = luci.sys.call(refresh_cmd) icount = luci.sys.exec('cat /tmp/china_ssr.txt | wc -l') if sret == 0 then @@ -69,12 +65,8 @@ end if ucic:get_first('vssr', 'global', 'adblock', '') == '1' then log('正在更新【广告屏蔽】数据库') local need_process = 0 - if nixio.fs.access('/usr/bin/wget-ssl') then - refresh_cmd = 'wget-ssl --no-check-certificate -O - https://easylist-downloads.adblockplus.org/easylistchina+easylist.txt > /tmp/adnew.conf' - need_process = 1 - else - refresh_cmd = 'wget -O /tmp/ad.conf http://iytc.net/tools/ad.conf' - end + refresh_cmd = 'wget-ssl --no-check-certificate -O - https://easylist-downloads.adblockplus.org/easylistchina+easylist.txt > /tmp/adnew.conf' + need_process = 1 sret = luci.sys.call(refresh_cmd .. ' 2>/dev/null') if sret == 0 then if need_process == 1 then diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/css/pure.css b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/css/pure.css new file mode 100644 index 0000000000..530341299d --- /dev/null +++ b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/css/pure.css @@ -0,0 +1,232 @@ +/*! +Pure v1.0.1 +Copyright 2013 Yahoo! +Licensed under the BSD License. +https://github.com/pure-css/pure/blob/master/LICENSE.md +*/ +.pure-g { + letter-spacing: -.31em; + text-rendering: optimizespeed; + font-family: FreeSans, Arimo, "Droid Sans", Helvetica, Arial, sans-serif; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -webkit-flex-flow: row wrap; + -ms-flex-flow: row wrap; + flex-flow: row wrap; + -webkit-align-content: flex-start; + -ms-flex-line-pack: start; + align-content: flex-start +} + +@media all and (-ms-high-contrast:none), +(-ms-high-contrast:active) { + table .pure-g { + display: block + } +} + +.opera-only :-o-prefocus, +.pure-g { + word-spacing: -.43em +} + +.pure-u { + display: inline-block; + zoom: 1; + letter-spacing: normal; + word-spacing: normal; + vertical-align: top; + text-rendering: auto +} + +.pure-g [class*=pure-u] { + font-family: sans-serif +} + +.pure-u-1, +.pure-u-1-1, +.pure-u-1-12, +.pure-u-1-2, +.pure-u-1-24, +.pure-u-1-3, +.pure-u-1-4, +.pure-u-1-5, +.pure-u-1-6, +.pure-u-1-8, +.pure-u-10-24, +.pure-u-11-12, +.pure-u-11-24, +.pure-u-12-24, +.pure-u-13-24, +.pure-u-14-24, +.pure-u-15-24, +.pure-u-16-24, +.pure-u-17-24, +.pure-u-18-24, +.pure-u-19-24, +.pure-u-2-24, +.pure-u-2-3, +.pure-u-2-5, +.pure-u-20-24, +.pure-u-21-24, +.pure-u-22-24, +.pure-u-23-24, +.pure-u-24-24, +.pure-u-3-24, +.pure-u-3-4, +.pure-u-3-5, +.pure-u-3-8, +.pure-u-4-24, +.pure-u-4-5, +.pure-u-5-12, +.pure-u-5-24, +.pure-u-5-5, +.pure-u-5-6, +.pure-u-5-8, +.pure-u-6-24, +.pure-u-7-12, +.pure-u-7-24, +.pure-u-7-8, +.pure-u-8-24, +.pure-u-9-24 { + display: inline-block; + zoom: 1; + letter-spacing: normal; + word-spacing: normal; + vertical-align: top; + text-rendering: auto +} + +.pure-u-1-24 { + width: 4.1667% +} + +.pure-u-1-12, +.pure-u-2-24 { + width: 8.3333% +} + +.pure-u-1-8, +.pure-u-3-24 { + width: 12.5% +} + +.pure-u-1-6, +.pure-u-4-24 { + width: 16.6667% +} + +.pure-u-1-5 { + width: 20% +} + +.pure-u-5-24 { + width: 20.8333% +} + +.pure-u-1-4, +.pure-u-6-24 { + width: 25% +} + +.pure-u-7-24 { + width: 29.1667% +} + +.pure-u-1-3, +.pure-u-8-24 { + width: 33.3333% +} + +.pure-u-3-8, +.pure-u-9-24 { + width: 37.5% +} + +.pure-u-2-5 { + width: 40% +} + +.pure-u-10-24, +.pure-u-5-12 { + width: 41.6667% +} + +.pure-u-11-24 { + width: 45.8333% +} + +.pure-u-1-2, +.pure-u-12-24 { + width: 50% +} + +.pure-u-13-24 { + width: 54.1667% +} + +.pure-u-14-24, +.pure-u-7-12 { + width: 58.3333% +} + +.pure-u-3-5 { + width: 60% +} + +.pure-u-15-24, +.pure-u-5-8 { + width: 62.5% +} + +.pure-u-16-24, +.pure-u-2-3 { + width: 66.6667% +} + +.pure-u-17-24 { + width: 70.8333% +} + +.pure-u-18-24, +.pure-u-3-4 { + width: 75% +} + +.pure-u-19-24 { + width: 79.1667% +} + +.pure-u-4-5 { + width: 80% +} + +.pure-u-20-24, +.pure-u-5-6 { + width: 83.3333% +} + +.pure-u-21-24, +.pure-u-7-8 { + width: 87.5% +} + +.pure-u-11-12, +.pure-u-22-24 { + width: 91.6667% +} + +.pure-u-23-24 { + width: 95.8333% +} + +.pure-u-1, +.pure-u-1-1, +.pure-u-24-24, +.pure-u-5-5 { + width: 100% +} \ No newline at end of file diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/css/vssr.css b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/css/vssr.css index 394ed97a77..b696f7e5f0 100644 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/css/vssr.css +++ b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/css/vssr.css @@ -1,245 +1,73 @@ @import url("flag-icon.min.css?v=1.16"); @import url("sweetalert2.css?v=1.16"); -/*! -Pure v1.0.1 -Copyright 2013 Yahoo! -Licensed under the BSD License. -https://github.com/pure-css/pure/blob/master/LICENSE.md -*/ +@import url("pure.css?v=1.16"); - -.pure-g { - letter-spacing: -.31em; - text-rendering: optimizespeed; - font-family: FreeSans, Arimo, "Droid Sans", Helvetica, Arial, sans-serif; - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - -webkit-flex-flow: row wrap; - -ms-flex-flow: row wrap; - flex-flow: row wrap; - -webkit-align-content: flex-start; - -ms-flex-line-pack: start; - align-content: flex-start +/** Common **/ +.pure-img { + max-height: 100%; + width: auto; } -@media all and (-ms-high-contrast:none), -(-ms-high-contrast:active) { - table .pure-g { - display: block - } +.pure-imgw { + max-width: 100%; + height: auto; } -.opera-only :-o-prefocus, -.pure-g { - word-spacing: -.43em -} - -.pure-u { - display: inline-block; - zoom: 1; - letter-spacing: normal; - word-spacing: normal; - vertical-align: top; - text-rendering: auto -} - -.pure-g [class*=pure-u] { - font-family: sans-serif -} - -.pure-u-1, -.pure-u-1-1, -.pure-u-1-12, -.pure-u-1-2, -.pure-u-1-24, -.pure-u-1-3, -.pure-u-1-4, -.pure-u-1-5, -.pure-u-1-6, -.pure-u-1-8, -.pure-u-10-24, -.pure-u-11-12, -.pure-u-11-24, -.pure-u-12-24, -.pure-u-13-24, -.pure-u-14-24, -.pure-u-15-24, -.pure-u-16-24, -.pure-u-17-24, -.pure-u-18-24, -.pure-u-19-24, -.pure-u-2-24, -.pure-u-2-3, -.pure-u-2-5, -.pure-u-20-24, -.pure-u-21-24, -.pure-u-22-24, -.pure-u-23-24, -.pure-u-24-24, -.pure-u-3-24, -.pure-u-3-4, -.pure-u-3-5, -.pure-u-3-8, -.pure-u-4-24, -.pure-u-4-5, -.pure-u-5-12, -.pure-u-5-24, -.pure-u-5-5, -.pure-u-5-6, -.pure-u-5-8, -.pure-u-6-24, -.pure-u-7-12, -.pure-u-7-24, -.pure-u-7-8, -.pure-u-8-24, -.pure-u-9-24 { - display: inline-block; - zoom: 1; - letter-spacing: normal; - word-spacing: normal; - vertical-align: top; - text-rendering: auto -} - -.pure-u-1-24 { - width: 4.1667% -} - -.pure-u-1-12, -.pure-u-2-24 { - width: 8.3333% -} - -.pure-u-1-8, -.pure-u-3-24 { - width: 12.5% -} - -.pure-u-1-6, -.pure-u-4-24 { - width: 16.6667% -} - -.pure-u-1-5 { - width: 20% -} - -.pure-u-5-24 { - width: 20.8333% -} - -.pure-u-1-4, -.pure-u-6-24 { - width: 25% -} - -.pure-u-7-24 { - width: 29.1667% -} - -.pure-u-1-3, -.pure-u-8-24 { - width: 33.3333% -} - -.pure-u-3-8, -.pure-u-9-24 { - width: 37.5% -} - -.pure-u-2-5 { - width: 40% -} - -.pure-u-10-24, -.pure-u-5-12 { - width: 41.6667% -} - -.pure-u-11-24 { - width: 45.8333% -} - -.pure-u-1-2, -.pure-u-12-24 { - width: 50% -} - -.pure-u-13-24 { - width: 54.1667% -} - -.pure-u-14-24, -.pure-u-7-12 { - width: 58.3333% -} - -.pure-u-3-5 { - width: 60% -} - -.pure-u-15-24, .pure-u-5-8 { - width: 62.5% + display: flex; + align-items: center; + } -.pure-u-16-24, -.pure-u-2-3 { - width: 66.6667% +.gap { + margin-right: 0.5rem; } -.pure-u-17-24 { - width: 70.8333% + +/** 复写theme **/ + +.cbi-section { + + border: 0; + border-radius: .375rem; + + overflow-x: auto; + overflow-y: hidden; } -.pure-u-18-24, -.pure-u-3-4 { - width: 75% +.cbi-section-node { + + border: 0; + border-radius: .375rem; + margin-bottom: 0px; + overflow-x: auto; + overflow-y: hidden; + padding: 0rem 0; } -.pure-u-19-24 { - width: 79.1667% +#cbi-vssr { + overflow-x: hidden; } -.pure-u-4-5 { - width: 80% -} - -.pure-u-20-24, -.pure-u-5-6 { - width: 83.3333% -} - -.pure-u-21-24, -.pure-u-7-8 { - width: 87.5% -} - -.pure-u-11-12, -.pure-u-22-24 { - width: 91.6667% -} - -.pure-u-23-24 { - width: 95.8333% -} - -.pure-u-1, -.pure-u-1-1, -.pure-u-24-24, -.pure-u-5-5 { - width: 100% +#cbi-vssr .panel-title { + width: 100%; + display: block; + margin-bottom: 0; + padding: .8755rem 1.5rem; + + margin-bottom: 0rem; + letter-spacing: .1rem; + + font-weight: 600; + box-sizing: border-box; } +/** Top StatusBar **/ .status { - margin: 1rem -0.5rem 1rem -0.5rem; + margin: 0.5rem -0.5rem 1rem -0.5rem; } -.block { +.status .block { margin: 0.5rem 0.5rem; padding: 0; font-weight: normal; @@ -255,56 +83,28 @@ https://github.com/pure-css/pure/blob/master/LICENSE.md box-shadow: 0 0 2rem 0 rgba(136, 152, 170, .15); } -.img-con { +.status .block .img-con { margin: 1rem; } -.pure-img { - max-height: 100%; - width: auto; -} - -.pure-imgw { - max-width: 100%; - height: auto; -} - -.green { +.status .block .green { font-size: 1.25rem; color: #2dce89; } -.red { +.status .block .red { font-size: 1.25rem; color: #fb6340; } -.sk-text-success { - color: #2dce89; -} - -.sk-text-error { - color: #fb6340; -} - -.gap { - margin-right: 0.5rem; -} - -.block img { +.status .block img { width: 48px; height: auto; float: right; } -.pure-u-5-8 { - display: flex; - align-items: center; - -} - -.block h4 { +.status .block h4 { font-size: .8125rem; font-weight: 600; margin: 1rem; @@ -312,12 +112,10 @@ https://github.com/pure-css/pure/blob/master/LICENSE.md line-height: 1.8em; } -.p-in5 { - padding: 8px; -} +/** Server List **/ -.flag-icon:before { - position: absolute; +.p-in5 { + margin: 8px !important; } .cbi-section-table-row { @@ -346,6 +144,17 @@ https://github.com/pure-css/pure/blob/master/LICENSE.md color: #fff; } +.ssr-button:link, +.ssr-button:hover, +.ssr-button:focus, +.ssr-button:visited, +.ssr-button:active { + + outline: 0; + text-decoration: none; + box-shadow: none; +} + .cbi-section-table-row.fast .ssr-button { color: #fff; } @@ -363,6 +172,15 @@ https://github.com/pure-css/pure/blob/master/LICENSE.md color: #fff !important; } +.host_con { + position: absolute; + left: 0; + width: 70px; + text-align: left; + height: 22px; + font-weight: bold; +} + .host_con.fast { color: #6f9a37; } @@ -379,7 +197,19 @@ https://github.com/pure-css/pure/blob/master/LICENSE.md color: #fb6340; } +.host_ok { + color: #fff; + background: #2dce89; + padding: 0.1rem 0.5rem; + border-radius: 0.2rem; +} +.host_error { + color: #fff; + background: #f5365c; + padding: 0.1rem 0.5rem; + border-radius: 0.2rem; +} .loadings.hide { opacity: 0; @@ -392,20 +222,20 @@ https://github.com/pure-css/pure/blob/master/LICENSE.md height: 30px; } +.flag-icon:before { + position: absolute; +} .alias { margin-bottom: 1px; + padding-left: 0px; + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; } .incon { cursor: pointer; -} - -.incon .pure-imgw { - transition: all 0.2s; -} - -.incon:nth-child(2) { position: absolute; left: 0; top: 0; @@ -414,10 +244,13 @@ https://github.com/pure-css/pure/blob/master/LICENSE.md border: 0; border-right: #d1dfed 1px solid; background-position: top; - } -.incon:nth-child(2) .tp { +.incon .pure-imgw { + transition: all 0.2s; +} + +.incon .tp { position: absolute; left: 0; bottom: 0; @@ -430,34 +263,29 @@ https://github.com/pure-css/pure/blob/master/LICENSE.md background: #525f7f; } -.incon:nth-child(3) { - padding-left: 0px; - text-overflow: ellipsis; - overflow: hidden; - white-space: nowrap; -} - -.incon:nth-child(5), -.incon:nth-child(6) { - display: none; -} .cbi-section-table-cell { text-align: right; + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; + position: relative; } .ssr-button { background: none; + border: none; color: #525f7f; - padding: 0 0 0 0; + padding: 0 0.2rem 0 0; height: auto; line-height: 1.5em; + box-shadow: none; } .ssr-button:hover, .ssr-button:focus, .ssr-button:active { - color: #525f7f; + outline: 0; text-decoration: none; box-shadow: none; @@ -472,37 +300,18 @@ https://github.com/pure-css/pure/blob/master/LICENSE.md color: #fff !important; background-color: #337ab7 !important; border-color: #2e6da4 !important; + background-image: none; float: right; margin-right: 18px; - margin-top: 1rem; + margin-top: .25rem !important; + outline: none; } -.cbi-section-table-cell { - position: relative; +.cbi-button-check:focus { + outline: none; } -.host_con { - position: absolute; - left: 0; - width: 70px; - text-align: left; - height: 22px; - font-weight: bold; -} - -.host_ok { - color: #fff; - background: #2dce89; - padding: 0.1rem 0.5rem; - border-radius: 0.2rem; -} - -.host_error { - color: #fff; - background: #f5365c; - padding: 0.1rem 0.5rem; - border-radius: 0.2rem; -} +/** Bottom StatusBar **/ footer.mobile-hide { display: block; @@ -537,6 +346,7 @@ footer.mobile-hide { .status-bar .inner .status-info { font-weight: bold; + line-height: 1.5em; } .status-bar .icon-con { @@ -544,6 +354,8 @@ footer.mobile-hide { text-align: right; } +/** Node choose panel **/ + .choose_node .gap { margin: 0.5rem 1rem; position: relative; @@ -553,66 +365,8 @@ footer.mobile-hide { width: 100% !important; } -@media screen and (max-width: 2000px) { - .pure-u-1-5 { - width: 25%; - } -} -@media screen and (max-width: 1600px) { - .pure-u-1-5 { - width: 33.33333333%; - } -} - -@media screen and (max-width: 1200px) { - .pure-u-1-5 { - width: 50%; - } - - .status .pure-u-1-5 { - width: 33.333%; - } -} - -@media screen and (max-width: 700px) { - .pure-u-1-4 { - width: 50%; - } - - .pure-u-1-2 { - width: 100%; - } - - .pure-u-1-5 { - width: 100%; - font-size: 14px; - } - - .status .pure-u-1-5 { - width: 50%; - } - - .cbi-button-add { - position: fixed; - padding: 0.3rem 0.5rem; - z-index: 1000; - width: 50px !important; - height: 50px; - bottom: 90px; - right: 5px; - font-size: 16px; - border-radius: 50%; - display: block; - background-color: #fb6340 !important; - border-color: #fb6340 !important; - box-shadow: 0 0 1rem 0 rgba(136, 152, 170, .75); - } - - .choose_node .pure-u-1-2 { - width: 50%; - } -} +/** Subscribe panel **/ .modals-bg { position: fixed; @@ -625,7 +379,7 @@ footer.mobile-hide { transition: all 0.2s; } -.modals-bg.hide{ +.modals-bg.hide { visibility: hidden; opacity: 0; } @@ -651,7 +405,7 @@ footer.mobile-hide { transform: scale(1); } -.modals.hide{ +.modals.hide { visibility: hidden; opacity: 0; transform: scale(0.5); @@ -688,7 +442,27 @@ footer.mobile-hide { overflow: hidden } -@media screen and (max-width: 1024px) { +@media screen and (max-width: 2000px) { + .pure-u-1-5 { + width: 25%; + } +} + +@media screen and (max-width: 1600px) { + .pure-u-1-5 { + width: 33.33333333%; + } +} + +@media screen and (max-width: 1200px) { + .pure-u-1-5 { + width: 50%; + } + + .status .pure-u-1-5 { + width: 33.333%; + } + .modals { position: fixed; z-index: 100; @@ -704,6 +478,45 @@ footer.mobile-hide { } @media screen and (max-width: 700px) { + .pure-u-1-4 { + width: 50%; + } + + .pure-u-1-2 { + width: 100%; + } + + .pure-u-1-5 { + width: 100%; + font-size: 14px; + } + + .status .pure-u-1-5 { + width: 50%; + } + + .cbi-button-add { + position: fixed; + padding: 0.3rem 0.5rem; + z-index: 1000; + width: 50px !important; + height: 50px !important; + bottom: 90px; + color: #fff; + right: 5px; + font-size: 16px; + border-radius: 50%; + display: block; + background-color: #fb6340 !important; + border-color: #fb6340 !important; + box-shadow: 0 0 1rem 0 rgba(136, 152, 170, .75); + background-image: none; + } + + .choose_node .pure-u-1-2 { + width: 50%; + } + .modals-bg { position: fixed; z-index: 100000; @@ -732,6 +545,14 @@ footer.mobile-hide { height: 2.5em; text-align: right; } + + .p-in5 { + padding-bottom: 3rem; + } + + .cbi-page-actions { + padding-bottom: 4rem !important; + } } @media (prefers-color-scheme: dark) { @@ -753,4 +574,5 @@ footer.mobile-hide { .ssr-button { color: #ccc; } + } \ No newline at end of file From d2d2a0d6cb957caed2c81c61b1582e75393e0788 Mon Sep 17 00:00:00 2001 From: vernesong <42875168+vernesong@users.noreply.github.com> Date: Fri, 22 Jan 2021 17:44:26 +0800 Subject: [PATCH 06/20] OpenClash: add auto restart support Signed-off-by: CN_SZTL --- .../model/cbi/openclash/other-rules-edit.lua | 4 +++ .../luasrc/model/cbi/openclash/settings.lua | 27 +++++++++++++++++++ .../po/zh-cn/openclash.zh-cn.po | 15 +++++++++++ .../root/etc/init.d/openclash | 27 +++++++++---------- .../usr/share/openclash/yml_proxys_set.sh | 2 +- 5 files changed, 60 insertions(+), 15 deletions(-) diff --git a/package/ctcgfw/luci-app-openclash/luasrc/model/cbi/openclash/other-rules-edit.lua b/package/ctcgfw/luci-app-openclash/luasrc/model/cbi/openclash/other-rules-edit.lua index 9e2f35fd98..b66002523d 100644 --- a/package/ctcgfw/luci-app-openclash/luasrc/model/cbi/openclash/other-rules-edit.lua +++ b/package/ctcgfw/luci-app-openclash/luasrc/model/cbi/openclash/other-rules-edit.lua @@ -36,6 +36,10 @@ s = m:section(NamedSection, sid, "other_rules") s.anonymous = true s.addremove = false +o = s:option(Value, "Note", translate("Note")) +o.default = "default" +o.rmempty = false + o = s:option(ListValue, "config", translate("Config File")) local e,a={} local groupnames,filename diff --git a/package/ctcgfw/luci-app-openclash/luasrc/model/cbi/openclash/settings.lua b/package/ctcgfw/luci-app-openclash/luasrc/model/cbi/openclash/settings.lua index f12c59e065..57b333c31f 100644 --- a/package/ctcgfw/luci-app-openclash/luasrc/model/cbi/openclash/settings.lua +++ b/package/ctcgfw/luci-app-openclash/luasrc/model/cbi/openclash/settings.lua @@ -34,6 +34,7 @@ s:tab("dashboard", translate("Dashboard Settings")) s:tab("rules_update", translate("Rules Update")) s:tab("geo_update", translate("GEOIP Update")) s:tab("chnr_update", translate("Chnroute Update")) +s:tab("auto_restart", translate("Auto Restart")) s:tab("version_update", translate("Version Update")) s:tab("debug", translate("Debug Logs")) @@ -469,6 +470,27 @@ o.write = function() end end +o = s:taboption("auto_restart", Flag, "auto_restart", translate("Auto Restart")) +o.description = translate("Auto Restart OpenClash") +o.default=0 + +o = s:taboption("auto_restart", ListValue, "auto_restart_week_time", translate("Restart Time (Every Week)")) +o:value("*", translate("Every Day")) +o:value("1", translate("Every Monday")) +o:value("2", translate("Every Tuesday")) +o:value("3", translate("Every Wednesday")) +o:value("4", translate("Every Thursday")) +o:value("5", translate("Every Friday")) +o:value("6", translate("Every Saturday")) +o:value("0", translate("Every Sunday")) +o.default=1 + +o = s:taboption("auto_restart", ListValue, "auto_restart_day_time", translate("Restart time (every day)")) +for t = 0,23 do +o:value(t, t..":00") +end +o.default=0 + ---- Dashboard Settings local lan_ip=SYS.exec("uci get network.lan.ipaddr 2>/dev/null |awk -F '/' '{print $1}' 2>/dev/null |tr -d '\n'") local cn_port=SYS.exec("uci get openclash.config.cn_port 2>/dev/null |tr -d '\n'") @@ -593,6 +615,11 @@ function o.cfgvalue(...) end end +o = ss:option(DummyValue, "Note", translate("Note")) +function o.cfgvalue(...) + return Value.cfgvalue(...) or translate("None") +end + -- [[ Edit Authentication ]] -- s = m:section(TypedSection, "authentication", translate("Set Authentication of SOCKS5/HTTP(S)")) s.anonymous = true diff --git a/package/ctcgfw/luci-app-openclash/po/zh-cn/openclash.zh-cn.po b/package/ctcgfw/luci-app-openclash/po/zh-cn/openclash.zh-cn.po index 0fb33bd8b3..02a7727ecd 100644 --- a/package/ctcgfw/luci-app-openclash/po/zh-cn/openclash.zh-cn.po +++ b/package/ctcgfw/luci-app-openclash/po/zh-cn/openclash.zh-cn.po @@ -1424,3 +1424,18 @@ msgstr "选择配置文件后请点击以获取对应的策略组" msgid "Other Rules Name" msgstr "第三方规则" + +msgid "Note" +msgstr "备注" + +msgid "Auto Restart" +msgstr "定时重启" + +msgid "Auto Restart OpenClash" +msgstr "定时重启插件" + +msgid "Restart Time (Every Week)" +msgstr "重启时间(每周)" + +msgid "Restart time (every day)" +msgstr "重启时间(每天)" \ No newline at end of file diff --git a/package/ctcgfw/luci-app-openclash/root/etc/init.d/openclash b/package/ctcgfw/luci-app-openclash/root/etc/init.d/openclash index 01cca803da..21fad97232 100755 --- a/package/ctcgfw/luci-app-openclash/root/etc/init.d/openclash +++ b/package/ctcgfw/luci-app-openclash/root/etc/init.d/openclash @@ -48,6 +48,9 @@ add_cron() [ -z "$(grep "openclash_chnroute.sh" "$CRON_FILE" 2>/dev/null)" ] && { [ "$(uci get openclash.config.chnr_auto_update 2>/dev/null)" -eq 1 ] && echo "0 $(uci get openclash.config.chnr_update_day_time 2>/dev/null) * * $(uci get openclash.config.chnr_update_week_time 2>/dev/null) /usr/share/openclash/openclash_chnroute.sh" >> $CRON_FILE } + [ -z "$(grep "/etc/init.d/openclash" "$CRON_FILE" 2>/dev/null)" ] && { + [ "$(uci get openclash.config.auto_restart 2>/dev/null)" -eq 1 ] && echo "0 $(uci get openclash.config.auto_restart_day_time 2>/dev/null) * * $(uci get openclash.config.auto_restart_week_time 2>/dev/null) /etc/init.d/openclash restart 2>/dev/null" >> $CRON_FILE + } crontab $CRON_FILE nohup /usr/share/openclash/openclash_watchdog.sh & } @@ -1291,11 +1294,13 @@ fi fi #common ports -common_port="21 22 23 53 80 123 143 194 443 465 587 853 993 995 998 2052 2053 2082 2083 2086 2095 2096 5222 5228 5229 5230 8080 8443 8880 8888 8889" -ipset create common_ports bitmap:port range 0-65535 -for i in $common_port; do - ipset add common_ports $i -done +if [ "$common_ports" = "1" ]; then + common_port="21 22 23 53 80 123 143 194 443 465 587 853 993 995 998 2052 2053 2082 2083 2086 2095 2096 5222 5228 5229 5230 8080 8443 8880 8888 8889" + ipset create common_ports bitmap:port range 0-65535 + for i in $common_port; do + ipset add common_ports $i + done +fi if [ -z "$en_mode_tun" ] || [ "$en_mode_tun" -eq 3 ]; then #tcp @@ -1308,9 +1313,7 @@ if [ -z "$en_mode_tun" ] || [ "$en_mode_tun" -eq 3 ]; then iptables -t nat -A openclash -m set ! --match-set lan_ac_white_macs src -j RETURN >/dev/null 2>&1 iptables -t nat -A openclash -m set ! --match-set lan_ac_white_ips src -j RETURN >/dev/null 2>&1 if [ "$en_mode" = "redir-host" ]; then - if [ "$common_ports" = "1" ]; then - iptables -t nat -A openclash -m set ! --match-set common_ports dst -j RETURN >/dev/null 2>&1 - fi + iptables -t nat -A openclash -m set ! --match-set common_ports dst -j RETURN >/dev/null 2>&1 iptables -t nat -A openclash -m set --match-set china_ip_route dst -j RETURN >/dev/null 2>&1 fi iptables -t nat -A openclash -p tcp -j REDIRECT --to-ports "$proxy_port" @@ -1333,9 +1336,7 @@ if [ -z "$en_mode_tun" ] || [ "$en_mode_tun" -eq 3 ]; then iptables -t mangle -A openclash -m set ! --match-set lan_ac_white_ips src -j RETURN >/dev/null 2>&1 iptables -t mangle -A openclash -m set ! --match-set lan_ac_white_macs src -j RETURN >/dev/null 2>&1 if [ "$en_mode" = "redir-host" ]; then - if [ "$common_ports" = "1" ]; then - iptables -t mangle -A openclash -m set ! --match-set common_ports dst -j RETURN >/dev/null 2>&1 - fi + iptables -t mangle -A openclash -m set ! --match-set common_ports dst -j RETURN >/dev/null 2>&1 iptables -t mangle -A openclash -m set --match-set china_ip_route dst -j RETURN >/dev/null 2>&1 fi iptables -t mangle -A openclash -p udp --dport 53 -j RETURN >/dev/null 2>&1 @@ -1444,9 +1445,7 @@ if [ -n "$en_mode_tun" ]; then iptables -t mangle -A openclash -m set ! --match-set lan_ac_white_ips src -j RETURN >/dev/null 2>&1 iptables -t mangle -A openclash -m set ! --match-set lan_ac_white_macs src -j RETURN >/dev/null 2>&1 if [ "$en_mode" = "redir-host" ]; then - if [ "$common_ports" = "1" ]; then - iptables -t mangle -A openclash -m set ! --match-set common_ports dst -j RETURN >/dev/null 2>&1 - fi + iptables -t mangle -A openclash -m set ! --match-set common_ports dst -j RETURN >/dev/null 2>&1 iptables -t mangle -A openclash -m set --match-set china_ip_route dst -j RETURN >/dev/null 2>&1 fi iptables -t mangle -A openclash -j MARK --set-mark "$PROXY_FWMARK" diff --git a/package/ctcgfw/luci-app-openclash/root/usr/share/openclash/yml_proxys_set.sh b/package/ctcgfw/luci-app-openclash/root/usr/share/openclash/yml_proxys_set.sh index a2d76b39ea..4827a1af70 100755 --- a/package/ctcgfw/luci-app-openclash/root/usr/share/openclash/yml_proxys_set.sh +++ b/package/ctcgfw/luci-app-openclash/root/usr/share/openclash/yml_proxys_set.sh @@ -48,7 +48,7 @@ yml_other_rules_del() if [ "$enabled" = "0" ] || [ "$config" != "$2" ] || [ "$rule_name" != "$3" ]; then return else - uci delete openclash."$section" 2>/dev/null + uci set openclash."$section".enabled=0 2>/dev/null fi } #写入代理集到配置文件 From e988e529b815c0ea5cf83959c74bd3098eccfa88 Mon Sep 17 00:00:00 2001 From: jerrykuku Date: Sat, 23 Jan 2021 16:09:32 +0800 Subject: [PATCH 07/20] luci-app-jd-dailybonus: bump to 1.0.1 Signed-off-by: CN_SZTL --- .../ctcgfw/luci-app-jd-dailybonus/Makefile | 7 +- .../htdocs/jd-dailybonus/JDCookie.zip | Bin 20108 -> 0 bytes .../htdocs/jd-dailybonus/qrcode.min.js | 1 + .../luasrc/controller/jd-dailybonus.lua | 134 +++++--- .../luasrc/model/cbi/jd-dailybonus/client.lua | 112 ++++--- .../view/jd-dailybonus/cookie_tools.htm | 20 +- .../view/jd-dailybonus/update_service.htm | 316 +++++++++++++----- .../po/zh-cn/jd-dailybonus.po | 111 ------ .../root/etc/config/jd-dailybonus | 19 +- .../usr/share/jd-dailybonus/JD_DailyBonus.js | 123 +------ .../usr/share/jd-dailybonus/jd_cookie.lua | 168 ++++++++++ .../root/usr/share/jd-dailybonus/newapp.sh | 89 ++--- .../root/usr/share/jd-dailybonus/requests.lua | 303 +++++++++++++++++ 13 files changed, 925 insertions(+), 478 deletions(-) delete mode 100644 package/ctcgfw/luci-app-jd-dailybonus/htdocs/jd-dailybonus/JDCookie.zip create mode 100644 package/ctcgfw/luci-app-jd-dailybonus/htdocs/jd-dailybonus/qrcode.min.js delete mode 100644 package/ctcgfw/luci-app-jd-dailybonus/po/zh-cn/jd-dailybonus.po create mode 100644 package/ctcgfw/luci-app-jd-dailybonus/root/usr/share/jd-dailybonus/jd_cookie.lua create mode 100644 package/ctcgfw/luci-app-jd-dailybonus/root/usr/share/jd-dailybonus/requests.lua diff --git a/package/ctcgfw/luci-app-jd-dailybonus/Makefile b/package/ctcgfw/luci-app-jd-dailybonus/Makefile index b8a76bbd41..406342eeed 100644 --- a/package/ctcgfw/luci-app-jd-dailybonus/Makefile +++ b/package/ctcgfw/luci-app-jd-dailybonus/Makefile @@ -8,12 +8,13 @@ include $(TOPDIR)/rules.mk LUCI_TITLE:=Luci for JD dailybonus Script -LUCI_DEPENDS:=+node +node-request +coreutils +coreutils-nohup +wget +LUCI_DEPENDS:=+coreutils +coreutils-nohup +node +node-request \ + +lua +luasocket +lua-cjson +lua-md5 +luasec +wget-ssl LUCI_PKGARCH:=all PKG_NAME:=luci-app-jd-dailybonus -PKG_VERSION:=0.8.9 -PKG_RELEASE:=20201230 +PKG_VERSION:=1.0.1 +PKG_RELEASE:=20210123 include $(TOPDIR)/feeds/luci/luci.mk diff --git a/package/ctcgfw/luci-app-jd-dailybonus/htdocs/jd-dailybonus/JDCookie.zip b/package/ctcgfw/luci-app-jd-dailybonus/htdocs/jd-dailybonus/JDCookie.zip deleted file mode 100644 index 54bcf0cd5cbf8c89b0b335508eb1f17ff0c753c5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20108 zcmYJ4Q;aZLux8t~ZQHhO+qP}nwr$(CZQK2~=gees@56qn$DP!ws$_i%(!d}n0000G z0M@E`iV3=A>`=e}08Zcl0I>g6jSP*g&7JIB?M&#boO4y>t&s&$`oW)Y@w_d}BsbQM z1hJGW6a^EARqj>w2%?q~6r6#HT^Ej209zB^ba5Z-PT zD~^~f;5#EG@MzL{&VW3_PTrW}xea~yK?zd2ApGn}sN4(rN=Id+>y&C6gn(FIjV9OyfrgXieU`e269Jgxg`sj%K6caR=h*?~_ zTX*>6oHL5|B9e#@$4?dS!!x89b((Pim;y?*4xto4W6(cu$NOFzZgU*uOb+b}4 z&w4b)Vpe2|mi`Rr=kddcP}aI+nmqMDh{`Gbi1-7o@IOss9$u>8)_BN~0}2381NML0 z2mrv+*xruL!Oq-Q8CpTc5Jj)PqCp9fY_}6u>2}X|UAJ`e%`U2~DV2$;ZP!}6)w{j7 z-A&sjPc#fGo=E6~^=YFA-}5AK4NHV@J|yI%mS;*A%Gkl|?&r_>>}!tm@1x(}QDmdT z&rSH20!6An!9YZ)E^e(p9`<8h?1AQlDFk5@DRIL^ha|$GD`2WZgGdc$D&3H(YbC1iS`{m5^&98~tC9wjG(be9P~|I_c3dtfK9Y0T4f9?xc~E;Rdz=LqsCE7E=iW3nih5 zE44JGfOP+>UHPjdS=fTbA2hL~QjrZI_$9zBoKAJ}BNz?`ABKsmmmn}=5)BdnR3~@| zMbv<3?v&9tLuVI>MOJEsxjmxtcij9teG1i5kuun#fRVoJ>Wv_Y8F(O(0fr#<3=oe| zq8)enXK`)8%`MtG<)VUDGO9B0zWI>qUkOjFlQAd?)Cp9VP&1D_fCEN!0@4)3!4ncr zU_h?^d*12q82Wc2WWv0Fk8TU=S~cGFL#e&=LFuC+Tcs;K#kI`$!|#RyCut6J2$kXJ2G1Ytz+4xm8Fw=7I(&=0!h+b%61=azm7(&Owmk=z4h68#(IC zPS>V7-YLVAtUBU+WtYEvZFoD~it zq4T%t^gfZ|;Q1N8CHU!9S#LP7n#>uCpWJ^kYMbRxY$&JoyjKf{8?Q6_>K%2KpMhKG z@w$RI>v_ey+2VM)aNB*<&Vru9*Ok)PkZvr02bQzjZL7T3IBV*VIZAx0Iklb6s!tA@ z|1MqCU|l6SV0wB=rktp-hJ=k;v_-j1#mDZ9$RN>Ft0@M}9^EeM$x z`8Z~Ry!~dt7pW@QV0sTBJkh%yW#ztOINOFrJ$E938derOrX8OI-Lfq`M2~`T7iV_# zJc8{qQ+f#6O;lXUcs$l=eS(iTE0iG5y5bEu_n97} zw@M2AR3j-D3uRbOnEuFhosQQ9!N&VW1F^t1-bSO9%r<{?v#F-FbjJBq6U6$-I)g#X zgZxmzxi_ngP|JK6FP4hR=jlEx>PC%Mi+5T^dehzMxG0kKU$f+8TgKqIk+N;2$3GDH z{Hjy?tspEglYU`%U5HtPj7AwZ_ms^5m;W@*ol^2SeP0AhbXhlYc3;FD1d>*06{N2uPUk` zw7Iw&Gyk!MFODvNUmg)sADtPRn_8ZVnOd6xIU|;HTU{0v18GJqT|QMgRdh>g?S`QI z?9{Y;tcjudJ)wytF`*o(74d)Vfa28f%vAW|;N5Wo8>qj%f6ZCJVOR7B@ZSFw zz)H(M^Q5*mXQQIxbMt3|qSNE01R`>y^TX98B2uHWlcf`al@o%a!(*fMGt!kava_%3 zgU{O8*`=)wWidPZKR#(A7dN~-Iv|`KJiNV|y`LMnyEh#iAR!?g9h{sUoST2d8altY zJTpETI6IercY|V5yF;-zMuBf`L|)A|XLdH1g=50b>dpReYOAjJVYoa0XchaF#}19p zh6YFHCJ!$r9^G5I!^=`%|HQh3eROL$SZa52d3R}Q{Dv+6MpysJe!+e@u?#WIq2BvY8MF4W+@u>y8xm;ZTWV@bY7XuvM@gwEC*QSE5>igikdl&4Q%^p))fXpshi4{- zuI_an_&b^YlBsEK%}mb@Z@`?~-2Q!C_O`peIk>gEx)mm^9hDocfO2bcd3Q7aaJKqK zuS~(-n3__apWR5jrtd%m|0Vll@)64MVN&+($N7Jqr=uL5rX-%F9;F?hrXQv!7Jgu_ zKkfg0GQ|5I%15A{dsOI^OVa{tm@D_<-6Z%LOfDvBYQ zI6s#pkizP%JJ)(Z)E++>vdPWGp-l&5?8r;20~*Au1H+X6#%BJJ=p}K~C;I?rtj1WgX_utyz1POD6Ki zork>t@$^5YO7?90xv9K1aBzhELmVgA}dYAQ@lU_Q?ID~QRLtt zwLch);<@R3$0@7AZTpC|4E`X4Vy(S_sI;;9MP>bq_&PggTqs_ZhaqpWx8k?(|rXbnssV zm9ky9Qh;Y9uK%j8WwI?5-n2D$m>VfIrT4BIaaZ=9UpT8{qUNm;n$djpG zj38=OI)*Q3q=CEQtx4*0o_z(klt5$QZ(nEDo<; zyN|6?4z9F$D>T)AD|)4NzBA;iOF^kLM6|sC9&X>TJZ-d$Bg}t1tYP<&X;Iqv1^W4j z)g|}ft-_32@SAGi>%H$W%E#j)H#CC#p!@0}>&g8aXSjb8Pkr-Ubp{x#c0feqUV<$q zi>N2x3aC1?_~_la!6#b^5KScs-&HDcncjP5{eh%_gnRwhgAJWG%ROI-eP>_aByDT2 zxuhp;2hKg${vKCu6lcPt0$8`r7C!5bEvfQz0 zMKFg*IB?c;m($|!20QBWl6k$hYiG@w8yDu#XmsP18ZewgQT2cc2~eo?d%k$ct6E}f zz6C#SEljEFR;p}CeqDZ4^hwg3gKU5ySmmFNjU zW?$9x}zn}%P(v3imOP5{5_%G;yYl>4yEgz zp8p0+Hs~hk_Nnp4b=xp&D?Y||>}-4k4kMM?e?R?l(V_B-;dHDsI_DMInm9fm2My3Z z;RRrtq0Z*ei@nnjg;Ufm2EwcMS7>tk`FA1Vx}aFH+U0cF7+MTl&Y!pe@-l(CWj{OS6sm}w9O?M}J#6)efLNBJ=U$#ERADln`T_ z5Z0G6>WXXw3Iz?gIJPX&$4HkD%uex>94uwS5Eb^0>JnEuka_E3~ zj9jLgx-kgfKM(K5e^|}@OHUtb@U(*X5zbUNj?3SO*Nc+01M)5zhWO%nnH}+M?6p$8 zGraq#ny!fS685BbH@J%3&T+r`^eor9o0$vPrA+73j?@cdL}f}vhsto{hcUN(k+tnh zo@bB)>urSi74yenlEeW=sc~~c;fX;+u4`?t?VIyxWQ52!P z>OJEaba1f3^!H-g;`iT5Z;X2Qk+L(tfnJ)N3wrLeI-~A;Vlhx~vzhKkP+F4f@SUz4 zQfGqJk|X=up)~dW^%MLgJDVATL(BUqHXri?Wd5Df9zwyvY*tq3NS{i99GUj2dv(_y zH5xhECt`enm(SWeBxPvj59Jgeq~1Ib7pGH9PCWE#yrJf|@!wPl!Qx0k{wt-1s%3mk zWPqs<#5&jYddjeK=1r#SJzjXS@jbU2qf||^dDz@^ zytE(bh&qPMcnc6J#9-7@D9FNy1d$8Jf=A2qrqs<10mt5|IQl}$x)t)OhK+U?|qL`G& zw5Ugsbg0Yc>BP!!AdVa%-UwvLOr%fmX}ld)d-js!d<9binhCejHKw3LHUv|^JH9(< z$KiS1XNgJdYQ6pBBaAUh=viV1>qjwH`9BI;Ztoe_GX;Y~YQZpyHa_mF@hPQ}+I%mvr1GM5Gqrm^S% zsjxfMMM~4ga+%pNDlmfq*Dz_UPA>@-B(d+g^SKy^Su>1J8 zl4boVuXCeMHPRQuR^N&agwNup0yPwT+1Lh@Pm${m1*h6u7_pQ}USpI#IyqW;s|1ac zGO2O^LDhrLCO`7ZiC#}tZODyhx9XnjbUJJ!Or1j*$j3damOE|Yr6uxPNH@L&$Q!vebV!P5N%##OV zZqP;A@{(3E9QSZ%+^a!n)rjl*?C)f#CYHU7U#h}tI3;U}GY~KZbaki2eJC-bvvsS| z{pZC;bqmgqYNnzhcHnY69NP)gH)I>n>U{ErY^@Rh^qlDk@-0h$Xc9M{c*{Apg@CUr z*^=0_dUS4*jy6+cwO_s%T!3E$NBjL$cl@K{6Z^yaW~9{FJYL+mhud?wn^l zs^Q%73}^h#E!T4ITy#GBalnf5a z>lxLz7&A9aTy4^G5|{HPRyn(}y@dWg(>s>x$gK;h8=gq9jWSX(@smnZBH3s2zXOz& z?yF6TJn6|&;9bk*rR+tu+TBM-c=x02fMC1jT+*y@rf0qz%Z|f(vg*3X7tP=@7ciDO znGdYgpJOV#wQcZBgXdhRy&>PQH<0D%8B_nalv78KAxI4!@n?;hdJkNpm3BEB%MFCz z&TrPH^*v>kOFj{7pbJ{G59!4?xNso_fti3MhMGO*gY`(-*Yjzcq9x9Itxnr~8-g_W ztwdHiw{zIr#CtU0`l%y0te2Ytv=fKpWvVkdHLIO-F$i!nwD^@T`~B<851ar6Egk|n z^yC9q&s`oP9Zs1aQ8GtDsWS=sl(zn0P1b8Jk7(q%r+*Ud2i|7lANg8M&oAyrFjpOeucU zJcTL*Zx{xZ1n~$$nzb;gwF!ElLOLaex9Jp3V&a3Z9>8@?2s+05StSLwOL@amIDJG9 z$dRSq=fC-0EEIFg)b`#XVhOW72>v0iP3*@BYrmj4+?)kNkz+j=^tWQJo(i9?#~~Ml zRQAwhY+2-4e_EUnJfeO4Rga!c8+BCAka!?gT{v!;oTNg#*CE)aEymPCM};_m3?&r1 z95XzwB;lVcMeTH{072DG3>JCDDC*U0n^JTuDemf@enj*ZD%qg#c#k}XRv#a!O|wX&G$I1g$G}yBrbp_a^Eful;AkUA>hWcHIPnn z>if92%#K!&di35*{^~7{o-3=#*liT2TLhB)C+iWehSV0#21EwJi#J(vJ+c*ucu39* z+(5M4^j+DNY9JAZMymP4`#`J^gId+<|ATr^19Gv@Xelcyi2Hbu=M(n)JX1%TjC4^& zo&;B8GY9)Ke7oR#1SQ(i^oeFygfM}X?NtIo^8 z=0bBJ2uw7>u4;R4{p|Sg!$PzPNr^$#X=U~!95Mr@U0WhTSa}eyVWl~jKT75!uuLQa z+zdU5g4WyBj0<{VuQ-~o@tm?jOP9OCy>ec~5l2jqHs-=M7j{BlR(92C{+H2*igOX8 zU-uQY^Qz!N)q!1WyRKlTA6WC0M=Rl8Dv-!c)ag^@&T_V!xyk!j-3vExBx^k|XKQI8^}mO6}~uQId>}S*EHjg2EXpT-ps2BTBzCxSGUc8BI#D z=qldKq`Ms7WSj%5^>*b<)@;jFeDSyIdb3Y8jPRo8 zNWE}hWTHrUQ@;!sL-8y#MPTC9S9CykwM)2ZDq&#B_nOt<4+F6ZwT9}P?C?;mU1V(;zsY!5BvwstmRmoJfpt>6GlG^ zrX-(D=XGk4uSPX->}Tk#JmIS)onQJu7NfXknj5&*#N10Sd%$?kAdz>EqC5R`R@k>g z?o1@_UTXyr+0t*AVj$IaE#OpJ`xW?oL!18 zcv;3+xxZ+riM*|$B#5(17pwMIE}7YM;#%?F@m>y#bpb&9r@m*rGN=BHM17QbCt&kOkl$Q2)zHMKx;f|lLfu<0pHk6~(QPDX$w0fVft@ARZ5$&cJwuXGk3pNLQ|ZJ5_!K0IjRymP z;fY=LKQE8R^dW0dS?PR+O*-n7syT8>v8`m@k#o;fpa%4%{XV(uzwu2 zZXHL;KtFbrOiH;u@Mft(b5R6yCchs1^cX}hg=QDjNU~kCpg2zwLG1`~5Jd;jN2(RW*R?J(`t=!jk=r{-t z7WwMnJhJ2M+4pl`j7k#AGEK-z4^KlM7;0mmF)tZE;TdSjB?W=1DV4jkzi-HXSqCN3 zl(xG;#Rd0UsaldghoL(?bHlYx4DpJoFL7ZWGE!e=`-8RKSf4Td6kS3bYI%lR`c}_d zKj>`I2HaeGdR>uRfaKJ&*mQL7Y)%IQUer9i zcs!R4-|c0LZ_0rF55wm)GpMs(Rj@fv;V!*31P*|xd9=}_OGfoWQs-gbPE5V1ymo;s z6b6!4RXn|&xH^fEo9_gU9YDYNR0gziV3yY!TdT38cy3D+DD-W zeQa7o6^DEURM(2eb*$lO!YxIM(96LCET7X5T5;!czfYutJ_86=P#4xJ$P|A7jFEKc z8t|=i{^kBiV@mt8Ucpo!BZdL-9tdqLsuAbG5sc8Xw#k-I&m(xDO`kv}jjJDyWO;{@ zi$$;jUapZ}MNoCq)ZBIzY7GZd_okbQkHn-P`+YV#M!oNpAFl?%M=ZguZs^-**%T@tUGPH{EH64yWDQoIvws zu_}b>)=3hj%Az_1iO|C^i~;QlxAgDICjLQ+l&?{fpoJn(y5>o}SHiK*7-ZcmXRrVt z0(@QITMdWVQ?{{G>V}k@_>vm9vMW2GD)36zI*9pJH#-!NzsqepC03!3Z42;mR zk5G$j+6Sg*DJn-y^ZMi9WK){>I4#O*V}@)cOSPd6fc%=WghotN{!*LDUaOfcc=^)E z^45!O6r&7c$KWAQin*0`1cP1}3Bk9Hgy8(Bi-hb%!?kHqXCmrh>JmS>OOoqA>?;9} zO7VN}FPzM=C$`_hDM~b$KO$gL65M>SE+n5U|^4f{&*b$uE5-9N-#{$S(-XRUWaVngH+4m{CN!;Gl{`Ueq>l4jl zNeBOBX73&!J)K8fy6I0R$ZVj;i*& zX9bZXpy<_f={fP8iygQwqpN8VCanE*V}`AUQW+mhXL}K%FIuNaks~ljHT#{bWP%tB ztQW>0gZ9hVDwgxhT;QBRsvMk(oYCH=`(>LcGx7*}7vC#idVOVDht*1`VjF`eGjq`hA!?yZu)7{agjA@Q1wq+sFM2tjwr zl~JjFuM`2FZ&;Z!cu9=^;-0K$6TQs`N><2jARgFGpmIog+6HnT2vo;~Xeyq{u$sY# z%=zt$O^|`dU0Y}D74Z$gy%8_j?^p0msxW)^BN@=}j zWv|#Zx){v+Cz{z=QWCaE=;W(6%K5bc;bqAuxc772txCj1RKV~e1s&(AxF~fXmFh?) zp?v)C3X7?Sn+hnG9G4_>R%KeSz2b|9t^xOdLWmGUFrL)WNCqExtmkF+qf-@kOOBT)S-xL&(TQn&yaN74M5hN}Q@fhC;ppNfxF> z*ZJ;c-w2F|&b}Kk;Ws1lC;`=(k8%yB!gt{BgzhXZteIUwI6)n2vsyf3lqnGJB{}?h)OPX@ zax0bJHr&A^B?~9_JF5F8w;}1Ac)n0qWFT@=Eqj?s(tk$g-9x(O9}TLq3;)P|#iDCBnYiN(2s8sI72K zEOM8cXl48EVqrf3a{cy?YW>ILc*~a&sXhJ?{;RD_6UQ7eaDSQt{^3CvMyKZy!s&&9 zgIwXQh7cU1qt<=8=?dMsr|gl(m2qv6END#ffhVDl>2mGS(qAU;$*SngUgi#rE_sNK zXtj_WFY1|KQ%Gl*3e6&|agw#f4kp`K`{40^JkA_KdQY9!e1y#-h6)(NUjDB~`WSjl z7>w%6f%giI1ZwUPG5;6=k-hN7Unc1ySj>d0irfqRs!EJG1>fCOV+WmyMJKkIj+7P5P6`V~JD= z;!usgsqL=t8p=$&T#wDadjr9V5F!cybo=o_MvQD~E-2Bmj}`M&PjgAAz}Qwzw65Ca znaa-MPuYL1q+0A&;O@z(rsfyf8#RN7i8cVsTWr`@P-D>mtAKsuhQo9vU!ykdpMocg^xJS)I z#wEmMAXpfzyzx~LjE4DKY}jCl?irA|2TFhPU2=D#H_*Y-CB+`OeV#nufQCr#3Gq9K>TSxQMwC$Q&0bb z4H+hrfb2`PPupH(mgb=f!h=(S!mBL=8MmQH%MKNE!NKf-}VRcE@ePdXKj; zGB~g_bf-z-LolsKsNJMb?Rv=pm?n-NM2~`bIo>ft9ej|s5px#e zWhVA;>Dn8?RrZ87r2P&K0(%ungE2r@__L|y#iui(!VOX*0qZKqVpXx;T|dsG!+XV7 zsH-@H+waW+G)O9a8=K*ja4EDPM2L$klIc0b>H^jO%vzSNLAH)WkmCaOqs==pQFYvewDOp z6kkcVe>IVaqS7Xgv$pE*iXsc`YtZGkm>`VwGpv^A!1mA-JR8#Rq2+sOLkxN83A5D6 zOBX%A6kyy%;6`HFpo2~nYa%sj#)VT;pdX#k3eH(|&#mhnuIUf7f}Qagp{wbG7Uz$_ zyx?QB&=E&02cgQ9=&VCE*Ppv^n#l z!|VuRUC>+Iq`0T;$h}fCvhM2DLU})-1K&aFvTN~l@_;`)6OVUbTe6S}LB^Vt02=yV zIoUuzAS8=0;T+Vj^tkHmBh7yLBW+xV*o1*=%w%iDJ51Q9O=|bAMK3h2Xqf`W$a_;X z%=udxYPkyOfEtm5y!nub^5pEz!bw6cuH6pAQ~@l(KdsM|xT*8i+0Eqnzdi&fvs_@v zhe}{S%~7_@tT4wet?x$rZ5GMdCrebRPOI>gTMWXUc4vA}xG5bykmh8%NxU13)I%E_-@$h-cLfF$-_Nh6ha3(u)j zTS}m79T*N$by@`R18hKLt}^qk-@#F<9nS|}SaC~aMVXmhrQK|^sY5i_X(b82dvY&h z@!U`8KZ)IO>&OeyATxVhgF~?ajQGUcYS3rpz!7h$9OqZH5vMY&BQ`z$;%bYD+~-vVq&YrtC(`(}>1W zM*CT2g}NwOaTL3nz#GQj!fuNg0^v(XR*_<6RB2@kT_|Q=+E}32@lgC|tnIkbg(VU2 zFBvND<-o#}~!E}VF^ zU83jMNUTwUZ*C(R`kkNi`Z5Dp95hHBwTRV(HzUVuPb!1(k2!a z=2(XHyGw?Dc^7VAu5c3M1BuErElj5RU^t2&no@FaT)_@Lbded z(FOrp&MS{~G~;qOKGiq(#tMv?3qsRCe>jYn^KgQM<{&`CTk|oE=q*0HzF3A9 z&XSy=$H7%@+FeeDgaxDVEa$F5sw(0|UA3rA{5Xo&rrj-4o2I~d*B$oF;vyzk@?!Tc z+!tK5graN=Q0rI1`v>%Aq>jr|d)$=^9F?f1{IVXH!B$}@2kp9-BX)Uait~H?o4yeM zch<`s8kR$?@?eiMyWPw;Pi?%cScfyQVUN+N@O>oYy`0Hz-Qm2V^ zs9>A+XBW9EMCj5^60RgzBF4t)xwl?(!{U%9_}U8OQ;ikR4);^JqRk!cA+7ME+cohi zO}e1659*vkRd^+vT`>Qoc|i=Y1gO=p^ux9 z!Nlz;e}6EZMxy>@7F=95>O@U$fMO3D$s|>1c?N02`gN~S1)OWiER>*4i=2Wh7_=T% zhCCP3y}z#Fhn?jbOaGvzRHAV_EjJ#L(#SUY^*I;L7b^^U%O z<6b-flsAgfbp*6EhHX5IY+6GI5c%2Ddi3o>k0%84Y#@wL=jktNMv$~>8R=T#mOA6H zuI3#pN|!gVm1X7YW@C*Ns4yl-y7I-jDz0@)MDW^|^t9&bUTf`v67;{0aE~siUt=gB zP0Tc{dM8PUxA(PK-fJB+36@O9H%|yXBEact1e`J`C+`J-P^KERFgn}>3LtG(=w`o6 z*TPF95m;?(Ip6W_QW{(pN#COB{z(zk$md~WP(@!!*TumF5|B6Fi`>4G9x)Cx_TW@V zRv%oVa!dF+;?HU+^B~+LXB2NcIHXG)^s<(@Y zz+E~+O`gX;QH_q^ucGnC_&5&D>VAO?&ol#0944Wq_?|!j-1}AMlZID5?Rw5Q4&1(x ztpX^7G1g=a66=0O>SpilZejmXx&uc1$_y)9rzU_%bbHWk1J0W+8;4oKAGVu2Jkyy~ zNV(JIo_7*);b9EfUmz7S7i%Cjoz*^R37mur7?k@LqY$MYX>BtNc5!QVnGgR_KLF%KZ+;!u zAIQWJd7It05D(h=LZ_wP7A50F33K>7`x0oZk+nHQ)S{mwlOdI*mP zOlwQFicTv#2<`px2LuDq!EbdglbJF3PZbA{6qOUH6EX<;U!&amKcjrQR!$uGKkb|L zzf2JH{}|9B6blgEy89;pc7(fPmX$6u+Bpbpi z+iD>XwnZ^T8cNWdAy?X6W=9VNITqF+WiGV(0>P!$0Y$cYgLX`I8&tf^{VyHkQc61qn zT73B9NB!zg1q}dI#agJV}iI~RS@YFB}6(S!>2)!X}|a`+l-zCso5 zD890~3}Ouc9M!eyvH4k$zVpuIUN!J(p!ytq@5}6!QS>vi?RVIhZx0OmSqJwVhMI+U z*O`y|eEK*igf92AtaV)3Hh&mTE$&F8n3H1 zZW?a^A<^+$;fuF?sntA;riz2#DLDQ^4euii(+Z{3J)NWOG@P;`;z6$ny<#xqCN4pL zQmt6ut|qP*GdIV_%)v%6y%uz?=V_<;6}C?x`h1LNdtsvkI=?PXKE93$wq<9fzOGBQ zo;KD!Lw5@mfH0w{Q0Ti42w`XCy8GlwzK`uLyTN%2VeM*QA?fsWSFO(*+L-x*_@M0q-Vi*%N0NwIMj#kh( z$=CUyk5t(z&y9mrLRAM>VQczmb&cV6cl0?NaVGd(I+_|Y*M0gv(zuA7lviz{T!z=UQA~77InkRA~QJYIn#u+y!SA~RZ!E> zliS!y_Ah>^Ft>d-p8dXJ%x7B6$8n^`D}qeTO=Fe)Wib;&^pc3g=GH^kcztb?_Nq+= zOQWK)c6pPHo>u!)?k(n$|1nI}-*a~^(o_6!B0c#WML)}~#~Y=@WeMK)P6lYUW~-@O z6np>9yz#v3RKC5X>SA}{-qi7Tt-?FK>o7Xem@3@~5~C?c^V0;s7}eN>_k4@md!F;Y z&wHkS&%5t_|9$@}qM4C#391xn{@>T-0Q2S~(i!NoNNnS`<_<(l zkOzGC@=UU%^uzsY@2R-`lEZ)k`vEKTz6kKQpSnu{g^(^p61+lyH8taPeR=nJ+s6Y`s7{H)H zh;ju=ffFerWJsleih61r!bBS&L;jCC*^@Ux) zd|SEvS4O7n2V>=JqTmWs<|FLQHFi&GN7Fp0X+#Csu+%4#3&I90yqW`$1Xr{$k8gyibFLdunG$; zaO8WCm2CL}q>1?vp6-&q?(@${QG+T`pj@Gr0%e}xZ+<9NsC;3EVvpbk6E-1;Hu6Tu zZ~?_#?5kLrDD_0#g|S4bN1%TeO!PDTQzC~8sVr_;eZ0cB{o2|f!HNM#O;&$YK^C|? za5&K4LH9qr_IGUj7r1QC4*WeXb{FDbX?FfmZrh&AA0kg`UzOWUYh|b~!vZ*PW*;-G z`QD$&Ieq4l=Rx|mb1dDtf2M8{_D`zcBUYYklM;7ajqB|$g2P9-A-2SD^qX0eXFoZS z>zJk_CZ^v<+{5bgPq$(z*V4AW=qvki+nXbWFP}E|_WrSISF$*7R%;0>Z^KyDn~%fj z_RW;tm(uTH>Cs!}Z>%#X&3SFaOJLQvpF? zF=U*5B_bv7GZy_JXnQfSlrJdZU58C{GcSX$6Z=m+>S)qyH@*llDX+UrA1pZz`*^b| z`JSj!0A(mxJJfp3To%p=^&qc!s5t?|nFV$u*7)Y?hUM=Dg_7rRYt-bZTzYkV|8MRO zm!B|B0&Q@~MrYBZq9>R0zW5bguYL5QHdDXu^hDWc-|w|w+vUrvTU;x`J1kO)T7aH8-WyUXf?izhO&B9@0WkaFg`u;lv3ot zI*6lH!dR8wCrKQA<(->P=4F)#C+WVbxB#n1yt)1k8wZRM)&7|ZLmlZ;O+ILzI|%Ua zMG;0LaE9fF8qxL7=_y0<7kmQ86`X4L(prZfbm)uGN6t9{_ZzdYq~LJ3UGG72aV~3E z8&Oi`@x}GF`-{%(Jb^c+t0@x!%H9OL;+Ld3VTi@@3dC7S>-a@fOaOY->mSY(n&OJ# zIS8x@zjWtR)M8q?l?=#PQF#nGUe`g&^MR?KG;13o&4Y4V)gVnk~ zAcNqOmQ&fe@QF39aoHV8^r2B6_98&BEN509c8QT0i41Y%nNk>S1$w=*L6@@#T%lR^GvM#AWjq7_?s zF|LD~37%rn!WSjFT++}(OpRY-J{KDG^vA*zq0y_Sm zecxh+v}%;Ur)`%ES%lXyr?9H)Uv5#ec;$Pw4S8UdEH=rLoyGglnC{z)2=(jJ8?=w6 zZ=7#YaSP)8q%>>iY!!?fSl}=2dK5z^3lm?!Waz#BEc0#Ahi4yG-y=;gCM9=D+C7N? z6-eom^3I^sjbyXn)k<@TQd4D`W4%hq{QF0ZY**8K9r!JP;~~Dn;yp=t*?^SIA+1AQ zJq=`>Tcvry(YhvnY|VSC{f}w(Eg{B6jCRrGQlpG#S#}I$6TML99qhi4$d#=;r64JO z-&(duO4T{4p^xCq{-kPM92OM>OOn#KaT(d>;pABygj-?aLaMChHY+cklKZCKY51~X ztdh%vet~UR980rYJZCyB$f3ATlwM&~=s#UlFB5rJE~J@_?R>;S8qdt|B~h>!Qc59b z572R?a;)A!SkvVxH7C#9h)L;BH3oUWHz($o@JKz(r>8}}Z1p?IM2 zkyB>d$mk(r$Y`>aZWrs`xtJ6%FuSg&(F57A90(yQDz7>ZiTEUwiDs2^-$QrMrye5C zuBd?YKJBTutedxsdRw&fb>Y?3@D9VuueGJ9s|5dwy)UxtM__Ro*8CLZS%%@X*6&wq+Sx!o2)L0=y*LtFQONkfc}fj=;TDcot-aTDzzV7-U{{ zS$GVcPdM`Z;cqCZ%>@T&83ohSC{48FEn-VCi77IK= zu8FNMD#gzb#P{)>_-`DF_jbgPbGdfB3eftE9jy6_R*O^M*PP2i;jEPv86nSoXUnK^lIOC2r;2$G;TnyXnmepLKlJl|a!q)AJ z8lwpAm&Zku?4<|?C%1hJNs3nAMX`Uxqb(yE&7S?dG4ZsP**`>>cjK_@9>~)0QqjN0 zTx}urQFdE42bZCM>HQ$Mb4Ss-8CB54c(t4=M?jB~&3>e%5fi|>o3R+|+5`!v-;^P@ zckzzoo-oP(^hy!s>(;~HOuk*fOEj|&8-as;nLpr)Ugp`tYy`vDY%Ez-#MKln!1k-a ziAk07Wv444$3N;x;cx!8pxy z!%8sRx7o#5V<5uV&@N_E@GOt@!XUu+wV5I;(h%A(05{d%O0{8+XOS2XUPz1j#+#H= zL>kSGCBxgdRaM25RlCK|1j=~%(7P~VFNk%!scyPZv(H%CW}T8**Sloi#{KzN%a7hZ zdP+maSuQUZl(xI%{snsoXfGxR)WZV>U$r*Qn$$< z+pLea4#4d{fb;v|icjq_(^w=g(<>jFf#*gCpF6>-gUV2uu09E?BOcJ6pD{LV)}y=B zK6S|c+8iEf_E^f4(sl=|!uP~uJw{Wfxgk|TjCsZT8S+EL%uY)p1JQU_vjoc{@Wla2 z6MUXO(jx41eX9w1Bqc~@ymVD`%~0J-3B6Q};dB9@%A-vB^R*V;#lC)X*EIFV4z+3@ z9k2$6x}AY+3$XS0wT{Os;nb}9h?NyR)3fEJuWV^tb%*NZ5Y7e(;?3mYQ>?(HLAt^> zyUXHKj}MvEwp`ZT%xyRM@VJyOkP_4uMNS#VOvgM`*fo5TIC(X>$Ycp7v`;NtI(Sv@ zoc*LGzVXfdoa1k{;W-@N{IuC~_14o5LllYM0JL$zz%N$)aW3B`Js^Rg%t0znxDO2U z3Ka!=G*WG-2TeZ3#+`z;|B^54y63EIMKDfge1>522UM^aEhFeLjOH6`OeHwm#Xaq` zf8Bb(qNp^0fH=jGGMTILm??8-o1XQn$9HeU@F+tF(Uxl|B!hu)=ICe>;@^n@ zh9-Y{pE5%i%{_Z4V`E3bt?Q0CoH+C zk|Z1kbNKdM!@xEZkQI9tj`Kc%KdkO+TLtJWPiHp3zDJjEYj#3swc=?=69pfp4G&E7 z`Ug?pg`J%kDO%%~98^Ji_(h~=)*yaj@YJxNm=PaM>MY^3ty9+YQzO-^t2Ub-o-t#g zoPKt)#iyZ(6qcuBkr>w&0AIN^c4Unxsi;)%?7Q-#D7%*#H0kdJp}s(t2_Rd+Nq6jW z3>RbsMjZh~B+o`*OQsJxd%M+RMv3-f_Rh#>;>*@|+iOF0O=mP^J`-Z%>kYF!iz8VN zaTO5e{ZfB&Xx)kN-}PenwX|xM(HYYL9S!Zp^&;*@TIFi(=Hy`S>2*>hZ}@u^1>b|nPsYJQ3W?;}R4L$1?=<$7KR5H^%6 z!axNl^ev@kfC2@(G@z`-v!0%`082L}CW@bPH}1*7WNGPMED=MC!8oA5?kzwfhT}vB z;xAa#)E_nTn8TpLjo~Ul1t@6P{ldhsTvK_wQvdNo{OWa>UHV^gA? zpl>e{-WsP!qo5`}6hANBaqu#O(WFG^;udQUT6c~v?VJ3+=b+TD(6m(1F{IG`pGS=O zCMUf<=>NL@k5vr+pU3EElxTwKzhd;4;pjgd`&(}A<6ne6v@*icZ{zP8mu};QuH|L_ z`j>8#!4^UuHzXM1Z!)`t@E!796Uc4y>9yMFhWxJ=SKXeBB6sL_ zQ{mfmWs!gBe`UnC;qBaQJ~!~3{J-JFmUm0P8=KsQM*{wV{~e;-h7;B;JKToHOy7my w?XlbNCYAr`xZC*Vnx&$fiA>o0yLRi>|Gt=e*TFa%8usAQYB!_*0RL;0F8}}l diff --git a/package/ctcgfw/luci-app-jd-dailybonus/htdocs/jd-dailybonus/qrcode.min.js b/package/ctcgfw/luci-app-jd-dailybonus/htdocs/jd-dailybonus/qrcode.min.js new file mode 100644 index 0000000000..993e88f396 --- /dev/null +++ b/package/ctcgfw/luci-app-jd-dailybonus/htdocs/jd-dailybonus/qrcode.min.js @@ -0,0 +1 @@ +var QRCode;!function(){function a(a){this.mode=c.MODE_8BIT_BYTE,this.data=a,this.parsedData=[];for(var b=[],d=0,e=this.data.length;e>d;d++){var f=this.data.charCodeAt(d);f>65536?(b[0]=240|(1835008&f)>>>18,b[1]=128|(258048&f)>>>12,b[2]=128|(4032&f)>>>6,b[3]=128|63&f):f>2048?(b[0]=224|(61440&f)>>>12,b[1]=128|(4032&f)>>>6,b[2]=128|63&f):f>128?(b[0]=192|(1984&f)>>>6,b[1]=128|63&f):b[0]=f,this.parsedData=this.parsedData.concat(b)}this.parsedData.length!=this.data.length&&(this.parsedData.unshift(191),this.parsedData.unshift(187),this.parsedData.unshift(239))}function b(a,b){this.typeNumber=a,this.errorCorrectLevel=b,this.modules=null,this.moduleCount=0,this.dataCache=null,this.dataList=[]}function i(a,b){if(void 0==a.length)throw new Error(a.length+"/"+b);for(var c=0;c=f;f++){var h=0;switch(b){case d.L:h=l[f][0];break;case d.M:h=l[f][1];break;case d.Q:h=l[f][2];break;case d.H:h=l[f][3]}if(h>=e)break;c++}if(c>l.length)throw new Error("Too long data");return c}function s(a){var b=encodeURI(a).toString().replace(/\%[0-9a-fA-F]{2}/g,"a");return b.length+(b.length!=a?3:0)}a.prototype={getLength:function(){return this.parsedData.length},write:function(a){for(var b=0,c=this.parsedData.length;c>b;b++)a.put(this.parsedData[b],8)}},b.prototype={addData:function(b){var c=new a(b);this.dataList.push(c),this.dataCache=null},isDark:function(a,b){if(0>a||this.moduleCount<=a||0>b||this.moduleCount<=b)throw new Error(a+","+b);return this.modules[a][b]},getModuleCount:function(){return this.moduleCount},make:function(){this.makeImpl(!1,this.getBestMaskPattern())},makeImpl:function(a,c){this.moduleCount=4*this.typeNumber+17,this.modules=new Array(this.moduleCount);for(var d=0;d=7&&this.setupTypeNumber(a),null==this.dataCache&&(this.dataCache=b.createData(this.typeNumber,this.errorCorrectLevel,this.dataList)),this.mapData(this.dataCache,c)},setupPositionProbePattern:function(a,b){for(var c=-1;7>=c;c++)if(!(-1>=a+c||this.moduleCount<=a+c))for(var d=-1;7>=d;d++)-1>=b+d||this.moduleCount<=b+d||(this.modules[a+c][b+d]=c>=0&&6>=c&&(0==d||6==d)||d>=0&&6>=d&&(0==c||6==c)||c>=2&&4>=c&&d>=2&&4>=d?!0:!1)},getBestMaskPattern:function(){for(var a=0,b=0,c=0;8>c;c++){this.makeImpl(!0,c);var d=f.getLostPoint(this);(0==c||a>d)&&(a=d,b=c)}return b},createMovieClip:function(a,b,c){var d=a.createEmptyMovieClip(b,c),e=1;this.make();for(var f=0;f=g;g++)for(var h=-2;2>=h;h++)this.modules[d+g][e+h]=-2==g||2==g||-2==h||2==h||0==g&&0==h?!0:!1}},setupTypeNumber:function(a){for(var b=f.getBCHTypeNumber(this.typeNumber),c=0;18>c;c++){var d=!a&&1==(1&b>>c);this.modules[Math.floor(c/3)][c%3+this.moduleCount-8-3]=d}for(var c=0;18>c;c++){var d=!a&&1==(1&b>>c);this.modules[c%3+this.moduleCount-8-3][Math.floor(c/3)]=d}},setupTypeInfo:function(a,b){for(var c=this.errorCorrectLevel<<3|b,d=f.getBCHTypeInfo(c),e=0;15>e;e++){var g=!a&&1==(1&d>>e);6>e?this.modules[e][8]=g:8>e?this.modules[e+1][8]=g:this.modules[this.moduleCount-15+e][8]=g}for(var e=0;15>e;e++){var g=!a&&1==(1&d>>e);8>e?this.modules[8][this.moduleCount-e-1]=g:9>e?this.modules[8][15-e-1+1]=g:this.modules[8][15-e-1]=g}this.modules[this.moduleCount-8][8]=!a},mapData:function(a,b){for(var c=-1,d=this.moduleCount-1,e=7,g=0,h=this.moduleCount-1;h>0;h-=2)for(6==h&&h--;;){for(var i=0;2>i;i++)if(null==this.modules[d][h-i]){var j=!1;g>>e));var k=f.getMask(b,d,h-i);k&&(j=!j),this.modules[d][h-i]=j,e--,-1==e&&(g++,e=7)}if(d+=c,0>d||this.moduleCount<=d){d-=c,c=-c;break}}}},b.PAD0=236,b.PAD1=17,b.createData=function(a,c,d){for(var e=j.getRSBlocks(a,c),g=new k,h=0;h8*l)throw new Error("code length overflow. ("+g.getLengthInBits()+">"+8*l+")");for(g.getLengthInBits()+4<=8*l&&g.put(0,4);0!=g.getLengthInBits()%8;)g.putBit(!1);for(;;){if(g.getLengthInBits()>=8*l)break;if(g.put(b.PAD0,8),g.getLengthInBits()>=8*l)break;g.put(b.PAD1,8)}return b.createBytes(g,e)},b.createBytes=function(a,b){for(var c=0,d=0,e=0,g=new Array(b.length),h=new Array(b.length),j=0;j=0?p.get(q):0}}for(var r=0,m=0;mm;m++)for(var j=0;jm;m++)for(var j=0;j=0;)b^=f.G15<=0;)b^=f.G18<>>=1;return b},getPatternPosition:function(a){return f.PATTERN_POSITION_TABLE[a-1]},getMask:function(a,b,c){switch(a){case e.PATTERN000:return 0==(b+c)%2;case e.PATTERN001:return 0==b%2;case e.PATTERN010:return 0==c%3;case e.PATTERN011:return 0==(b+c)%3;case e.PATTERN100:return 0==(Math.floor(b/2)+Math.floor(c/3))%2;case e.PATTERN101:return 0==b*c%2+b*c%3;case e.PATTERN110:return 0==(b*c%2+b*c%3)%2;case e.PATTERN111:return 0==(b*c%3+(b+c)%2)%2;default:throw new Error("bad maskPattern:"+a)}},getErrorCorrectPolynomial:function(a){for(var b=new i([1],0),c=0;a>c;c++)b=b.multiply(new i([1,g.gexp(c)],0));return b},getLengthInBits:function(a,b){if(b>=1&&10>b)switch(a){case c.MODE_NUMBER:return 10;case c.MODE_ALPHA_NUM:return 9;case c.MODE_8BIT_BYTE:return 8;case c.MODE_KANJI:return 8;default:throw new Error("mode:"+a)}else if(27>b)switch(a){case c.MODE_NUMBER:return 12;case c.MODE_ALPHA_NUM:return 11;case c.MODE_8BIT_BYTE:return 16;case c.MODE_KANJI:return 10;default:throw new Error("mode:"+a)}else{if(!(41>b))throw new Error("type:"+b);switch(a){case c.MODE_NUMBER:return 14;case c.MODE_ALPHA_NUM:return 13;case c.MODE_8BIT_BYTE:return 16;case c.MODE_KANJI:return 12;default:throw new Error("mode:"+a)}}},getLostPoint:function(a){for(var b=a.getModuleCount(),c=0,d=0;b>d;d++)for(var e=0;b>e;e++){for(var f=0,g=a.isDark(d,e),h=-1;1>=h;h++)if(!(0>d+h||d+h>=b))for(var i=-1;1>=i;i++)0>e+i||e+i>=b||(0!=h||0!=i)&&g==a.isDark(d+h,e+i)&&f++;f>5&&(c+=3+f-5)}for(var d=0;b-1>d;d++)for(var e=0;b-1>e;e++){var j=0;a.isDark(d,e)&&j++,a.isDark(d+1,e)&&j++,a.isDark(d,e+1)&&j++,a.isDark(d+1,e+1)&&j++,(0==j||4==j)&&(c+=3)}for(var d=0;b>d;d++)for(var e=0;b-6>e;e++)a.isDark(d,e)&&!a.isDark(d,e+1)&&a.isDark(d,e+2)&&a.isDark(d,e+3)&&a.isDark(d,e+4)&&!a.isDark(d,e+5)&&a.isDark(d,e+6)&&(c+=40);for(var e=0;b>e;e++)for(var d=0;b-6>d;d++)a.isDark(d,e)&&!a.isDark(d+1,e)&&a.isDark(d+2,e)&&a.isDark(d+3,e)&&a.isDark(d+4,e)&&!a.isDark(d+5,e)&&a.isDark(d+6,e)&&(c+=40);for(var k=0,e=0;b>e;e++)for(var d=0;b>d;d++)a.isDark(d,e)&&k++;var l=Math.abs(100*k/b/b-50)/5;return c+=10*l}},g={glog:function(a){if(1>a)throw new Error("glog("+a+")");return g.LOG_TABLE[a]},gexp:function(a){for(;0>a;)a+=255;for(;a>=256;)a-=255;return g.EXP_TABLE[a]},EXP_TABLE:new Array(256),LOG_TABLE:new Array(256)},h=0;8>h;h++)g.EXP_TABLE[h]=1<h;h++)g.EXP_TABLE[h]=g.EXP_TABLE[h-4]^g.EXP_TABLE[h-5]^g.EXP_TABLE[h-6]^g.EXP_TABLE[h-8];for(var h=0;255>h;h++)g.LOG_TABLE[g.EXP_TABLE[h]]=h;i.prototype={get:function(a){return this.num[a]},getLength:function(){return this.num.length},multiply:function(a){for(var b=new Array(this.getLength()+a.getLength()-1),c=0;cf;f++)for(var g=c[3*f+0],h=c[3*f+1],i=c[3*f+2],k=0;g>k;k++)e.push(new j(h,i));return e},j.getRsBlockTable=function(a,b){switch(b){case d.L:return j.RS_BLOCK_TABLE[4*(a-1)+0];case d.M:return j.RS_BLOCK_TABLE[4*(a-1)+1];case d.Q:return j.RS_BLOCK_TABLE[4*(a-1)+2];case d.H:return j.RS_BLOCK_TABLE[4*(a-1)+3];default:return void 0}},k.prototype={get:function(a){var b=Math.floor(a/8);return 1==(1&this.buffer[b]>>>7-a%8)},put:function(a,b){for(var c=0;b>c;c++)this.putBit(1==(1&a>>>b-c-1))},getLengthInBits:function(){return this.length},putBit:function(a){var b=Math.floor(this.length/8);this.buffer.length<=b&&this.buffer.push(0),a&&(this.buffer[b]|=128>>>this.length%8),this.length++}};var l=[[17,14,11,7],[32,26,20,14],[53,42,32,24],[78,62,46,34],[106,84,60,44],[134,106,74,58],[154,122,86,64],[192,152,108,84],[230,180,130,98],[271,213,151,119],[321,251,177,137],[367,287,203,155],[425,331,241,177],[458,362,258,194],[520,412,292,220],[586,450,322,250],[644,504,364,280],[718,560,394,310],[792,624,442,338],[858,666,482,382],[929,711,509,403],[1003,779,565,439],[1091,857,611,461],[1171,911,661,511],[1273,997,715,535],[1367,1059,751,593],[1465,1125,805,625],[1528,1190,868,658],[1628,1264,908,698],[1732,1370,982,742],[1840,1452,1030,790],[1952,1538,1112,842],[2068,1628,1168,898],[2188,1722,1228,958],[2303,1809,1283,983],[2431,1911,1351,1051],[2563,1989,1423,1093],[2699,2099,1499,1139],[2809,2213,1579,1219],[2953,2331,1663,1273]],o=function(){var a=function(a,b){this._el=a,this._htOption=b};return a.prototype.draw=function(a){function g(a,b){var c=document.createElementNS("http://www.w3.org/2000/svg",a);for(var d in b)b.hasOwnProperty(d)&&c.setAttribute(d,b[d]);return c}var b=this._htOption,c=this._el,d=a.getModuleCount();Math.floor(b.width/d),Math.floor(b.height/d),this.clear();var h=g("svg",{viewBox:"0 0 "+String(d)+" "+String(d),width:"100%",height:"100%",fill:b.colorLight});h.setAttributeNS("http://www.w3.org/2000/xmlns/","xmlns:xlink","http://www.w3.org/1999/xlink"),c.appendChild(h),h.appendChild(g("rect",{fill:b.colorDark,width:"1",height:"1",id:"template"}));for(var i=0;d>i;i++)for(var j=0;d>j;j++)if(a.isDark(i,j)){var k=g("use",{x:String(i),y:String(j)});k.setAttributeNS("http://www.w3.org/1999/xlink","href","#template"),h.appendChild(k)}},a.prototype.clear=function(){for(;this._el.hasChildNodes();)this._el.removeChild(this._el.lastChild)},a}(),p="svg"===document.documentElement.tagName.toLowerCase(),q=p?o:m()?function(){function a(){this._elImage.src=this._elCanvas.toDataURL("image/png"),this._elImage.style.display="block",this._elCanvas.style.display="none"}function d(a,b){var c=this;if(c._fFail=b,c._fSuccess=a,null===c._bSupportDataURI){var d=document.createElement("img"),e=function(){c._bSupportDataURI=!1,c._fFail&&_fFail.call(c)},f=function(){c._bSupportDataURI=!0,c._fSuccess&&c._fSuccess.call(c)};return d.onabort=e,d.onerror=e,d.onload=f,d.src="data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==",void 0}c._bSupportDataURI===!0&&c._fSuccess?c._fSuccess.call(c):c._bSupportDataURI===!1&&c._fFail&&c._fFail.call(c)}if(this._android&&this._android<=2.1){var b=1/window.devicePixelRatio,c=CanvasRenderingContext2D.prototype.drawImage;CanvasRenderingContext2D.prototype.drawImage=function(a,d,e,f,g,h,i,j){if("nodeName"in a&&/img/i.test(a.nodeName))for(var l=arguments.length-1;l>=1;l--)arguments[l]=arguments[l]*b;else"undefined"==typeof j&&(arguments[1]*=b,arguments[2]*=b,arguments[3]*=b,arguments[4]*=b);c.apply(this,arguments)}}var e=function(a,b){this._bIsPainted=!1,this._android=n(),this._htOption=b,this._elCanvas=document.createElement("canvas"),this._elCanvas.width=b.width,this._elCanvas.height=b.height,a.appendChild(this._elCanvas),this._el=a,this._oContext=this._elCanvas.getContext("2d"),this._bIsPainted=!1,this._elImage=document.createElement("img"),this._elImage.style.display="none",this._el.appendChild(this._elImage),this._bSupportDataURI=null};return e.prototype.draw=function(a){var b=this._elImage,c=this._oContext,d=this._htOption,e=a.getModuleCount(),f=d.width/e,g=d.height/e,h=Math.round(f),i=Math.round(g);b.style.display="none",this.clear();for(var j=0;e>j;j++)for(var k=0;e>k;k++){var l=a.isDark(j,k),m=k*f,n=j*g;c.strokeStyle=l?d.colorDark:d.colorLight,c.lineWidth=1,c.fillStyle=l?d.colorDark:d.colorLight,c.fillRect(m,n,f,g),c.strokeRect(Math.floor(m)+.5,Math.floor(n)+.5,h,i),c.strokeRect(Math.ceil(m)-.5,Math.ceil(n)-.5,h,i)}this._bIsPainted=!0},e.prototype.makeImage=function(){this._bIsPainted&&d.call(this,a)},e.prototype.isPainted=function(){return this._bIsPainted},e.prototype.clear=function(){this._oContext.clearRect(0,0,this._elCanvas.width,this._elCanvas.height),this._bIsPainted=!1},e.prototype.round=function(a){return a?Math.floor(1e3*a)/1e3:a},e}():function(){var a=function(a,b){this._el=a,this._htOption=b};return a.prototype.draw=function(a){for(var b=this._htOption,c=this._el,d=a.getModuleCount(),e=Math.floor(b.width/d),f=Math.floor(b.height/d),g=[''],h=0;d>h;h++){g.push("");for(var i=0;d>i;i++)g.push('');g.push("")}g.push("
"),c.innerHTML=g.join("");var j=c.childNodes[0],k=(b.width-j.offsetWidth)/2,l=(b.height-j.offsetHeight)/2;k>0&&l>0&&(j.style.margin=l+"px "+k+"px")},a.prototype.clear=function(){this._el.innerHTML=""},a}();QRCode=function(a,b){if(this._htOption={width:256,height:256,typeNumber:4,colorDark:"#000000",colorLight:"#ffffff",correctLevel:d.H},"string"==typeof b&&(b={text:b}),b)for(var c in b)this._htOption[c]=b[c];"string"==typeof a&&(a=document.getElementById(a)),this._android=n(),this._el=a,this._oQRCode=null,this._oDrawing=new q(this._el,this._htOption),this._htOption.text&&this.makeCode(this._htOption.text)},QRCode.prototype.makeCode=function(a){this._oQRCode=new b(r(a,this._htOption.correctLevel),this._htOption.correctLevel),this._oQRCode.addData(a),this._oQRCode.make(),this._el.title=a,this._oDrawing.draw(this._oQRCode),this.makeImage()},QRCode.prototype.makeImage=function(){"function"==typeof this._oDrawing.makeImage&&(!this._android||this._android>=3)&&this._oDrawing.makeImage()},QRCode.prototype.clear=function(){this._oDrawing.clear()},QRCode.CorrectLevel=d}(); \ No newline at end of file diff --git a/package/ctcgfw/luci-app-jd-dailybonus/luasrc/controller/jd-dailybonus.lua b/package/ctcgfw/luci-app-jd-dailybonus/luasrc/controller/jd-dailybonus.lua index 38914fe751..f284836d32 100644 --- a/package/ctcgfw/luci-app-jd-dailybonus/luasrc/controller/jd-dailybonus.lua +++ b/package/ctcgfw/luci-app-jd-dailybonus/luasrc/controller/jd-dailybonus.lua @@ -1,82 +1,112 @@ -- Copyright (C) 2020 jerrykuku -- Licensed to the public under the GNU General Public License v3. -module("luci.controller.jd-dailybonus", package.seeall) -function index() - if not nixio.fs.access("/etc/config/jd-dailybonus") then - return +module('luci.controller.jd-dailybonus', package.seeall) +package.path = package.path .. ';/usr/share/jd-dailybonus/?.lua' +function index() + if not nixio.fs.access('/etc/config/jd-dailybonus') then + return end - entry({"admin", "services", "jd-dailybonus"}, alias("admin", "services", "jd-dailybonus", "client"), _("JD-DailyBonus"), 10).dependent = true -- 首页 - entry({"admin", "services", "jd-dailybonus", "client"}, cbi("jd-dailybonus/client"),_("Client"), 10).leaf = true -- 基本设置 - entry({"admin", "services", "jd-dailybonus", "log"},form("jd-dailybonus/log"),_("Log"), 30).leaf = true -- 日志页面 - entry({"admin", "services", "jd-dailybonus", "script"},form("jd-dailybonus/script"),_("Script"), 20).leaf = true -- 直接配置脚本 - entry({"admin", "services", "jd-dailybonus", "run"}, call("run")) -- 执行程序 - entry({"admin", "services", "jd-dailybonus", "update"}, call("update")) -- 执行更新 - entry({"admin", "services", "jd-dailybonus", "check_update"}, call("check_update")) -- 检查更新 + entry({'admin', 'services', 'jd-dailybonus'}, alias('admin', 'services', 'jd-dailybonus', 'client'), _('京东签到服务'), 10).dependent = true -- 首页 + entry({'admin', 'services', 'jd-dailybonus', 'client'}, cbi('jd-dailybonus/client', {hidesavebtn = true, hideresetbtn = true}), _('客户端'), 10).leaf = true -- 基本设置 + entry({'admin', 'services', 'jd-dailybonus', 'log'}, form('jd-dailybonus/log'), _('日志'), 30).leaf = true -- 日志页面 + entry({'admin', 'services', 'jd-dailybonus', 'script'}, form('jd-dailybonus/script'), _('脚本查看'), 20).leaf = true -- 直接配置脚本 + entry({'admin', 'services', 'jd-dailybonus', 'run'}, call('run')) -- 执行程序 + entry({'admin', 'services', 'jd-dailybonus', 'update'}, call('update')) -- 执行更新 + entry({'admin', 'services', 'jd-dailybonus', 'check_update'}, call('check_update')) -- 检查更新 + entry({'admin', 'services', 'jd-dailybonus', 'qrcode'}, call('qrcode')) -- 获取二维码 + entry({'admin', 'services', 'jd-dailybonus', 'check_login'}, call('check_login')) -- 获取二维码 end - +-- 写入配置 +function write_json(file, content) + local json = require 'luci.jsonc' + local f = assert(io.open(file, 'w')) + f:write(json.stringify(content, 1)) + f:close() +end -- 执行程序 - function run() local e = {} local uci = luci.model.uci.cursor() - local cookie = luci.http.formvalue("cookies") - local cookie2 = luci.http.formvalue("cookies2") - local auto_update = luci.http.formvalue("auto_update") - local auto_update_time = luci.http.formvalue("auto_update_time") - local auto_run = luci.http.formvalue("auto_run") - local auto_run_time = luci.http.formvalue("auto_run_time") - local stop = luci.http.formvalue("stop") - local serverchan = luci.http.formvalue("serverchan") - local failed = luci.http.formvalue("failed") - local name = "" - uci:foreach("vssr", "global", function(s) name = s[".name"] end) + local data = luci.http.formvalue() - if cookie ~= " " then - uci:set("jd-dailybonus", '@global[0]', 'auto_update', auto_update) - uci:set("jd-dailybonus", '@global[0]', 'auto_update_time', auto_update_time) - uci:set("jd-dailybonus", '@global[0]', 'auto_run', auto_run) - uci:set("jd-dailybonus", '@global[0]', 'auto_run_time', auto_run_time) - uci:set("jd-dailybonus", '@global[0]', 'stop', stop) - uci:set("jd-dailybonus", '@global[0]', 'cookie', cookie) - uci:set("jd-dailybonus", '@global[0]', 'cookie2', cookie2) - uci:set("jd-dailybonus", '@global[0]', 'serverchan', serverchan) - uci:set("jd-dailybonus", '@global[0]', 'failed', failed) - uci:save("jd-dailybonus") - uci:commit("jd-dailybonus") - luci.sys.call("/usr/share/jd-dailybonus/newapp.sh -r") - luci.sys.call("/usr/share/jd-dailybonus/newapp.sh -a") - e.error = 0 - else - e.error = 1 - end + data.auto_run = data.auto_run ~= nil and data.auto_run or 0 + data.auto_update = data.auto_update ~= nil and data.auto_update or 0 + uci:tset('jd-dailybonus', '@global[0]', data) + uci:commit('jd-dailybonus') + local json_data = { + CookieJD = data.cookie, + CookieJD2 = data.cookie2:len() == 0 and nil or data.cookie2, + JD_DailyBonusDelay = data.stop, + JD_DailyBonusTimeOut = data.out + } + write_json('/root/CookieSet.json', json_data) + write_json('/www/CookieSet.json', json_data) + luci.sys.call('/usr/share/jd-dailybonus/newapp.sh -r') + luci.sys.call('/usr/share/jd-dailybonus/newapp.sh -a') + e.error = 0 - luci.http.prepare_content("application/json") + luci.http.prepare_content('application/json') luci.http.write_json(e) - end --检查更新 function check_update() - local jd = "jd-dailybonus" + local jd = 'jd-dailybonus' local e = {} - local new_version = luci.sys.exec("/usr/share/jd-dailybonus/newapp.sh -n") + local new_version = luci.sys.exec('/usr/share/jd-dailybonus/newapp.sh -n') e.new_version = new_version e.error = 0 - luci.http.prepare_content("application/json") + luci.http.prepare_content('application/json') luci.http.write_json(e) end --执行更新 function update() - local jd = "jd-dailybonus" + local jd = 'jd-dailybonus' local e = {} local uci = luci.model.uci.cursor() - local version = luci.http.formvalue("version") + local version = luci.http.formvalue('version') --下载脚本 - local code = luci.sys.exec("/usr/share/jd-dailybonus/newapp.sh -u") + local code = luci.sys.exec('/usr/share/jd-dailybonus/newapp.sh -u') e.error = code - luci.http.prepare_content("application/json") + luci.http.prepare_content('application/json') luci.http.write_json(e) -end \ No newline at end of file +end + +--获取二维码 +function qrcode() + local jd_cookie = require 'jd_cookie' + local e = {} + e.error = 0 + e.data = jd_cookie.get_qrcode() + luci.http.prepare_content('application/json') + luci.http.write_json(e) +end + +--检测登录 +function check_login() + local jd_cookie = require 'jd_cookie' + local uci = luci.model.uci.cursor() + local data = luci.http.formvalue() + local id = data.id + local e = jd_cookie.checkLogin(data.check_url, data.cookies) + if e.error == 0 then + local cookieStr = 'pt_key=' .. e.cookie.pt_key .. ';pt_pin=' .. e.cookie.pt_pin .. ';' + uci:set('jd-dailybonus', '@global[0]', id, cookieStr) + local json_data = { + CookieJD = uci:get('jd-dailybonus', '@global[0]', 'cookie'), + CookieJD2 = uci:get('jd-dailybonus', '@global[0]', 'cookie2'), + JD_DailyBonusDelay = uci:get('jd-dailybonus', '@global[0]', 'stop'), + JD_DailyBonusTimeOut = uci:get('jd-dailybonus', '@global[0]', 'out') + } + write_json('/root/CookieSet.json', json_data) + write_json('/www/CookieSet.json', json_data) + uci:commit('jd-dailybonus') + e.cstr = cookieStr + end + + luci.http.prepare_content('application/json') + luci.http.write_json(e) +end diff --git a/package/ctcgfw/luci-app-jd-dailybonus/luasrc/model/cbi/jd-dailybonus/client.lua b/package/ctcgfw/luci-app-jd-dailybonus/luasrc/model/cbi/jd-dailybonus/client.lua index 72a252472f..d1cf607662 100644 --- a/package/ctcgfw/luci-app-jd-dailybonus/luasrc/model/cbi/jd-dailybonus/client.lua +++ b/package/ctcgfw/luci-app-jd-dailybonus/luasrc/model/cbi/jd-dailybonus/client.lua @@ -1,75 +1,101 @@ -local jd = "jd-dailybonus" +local jd = 'jd-dailybonus' local uci = luci.model.uci.cursor() -local sys = require "luci.sys" +local sys = require 'luci.sys' m = Map(jd) -- [[ 基本设置 ]]-- -s = m:section(TypedSection, "global", - translate("Base Config")) +s = m:section(TypedSection, 'global', translate('基本设置')) s.anonymous = true -o = s:option(DummyValue, "", "") +o = s:option(DummyValue, '', '') o.rawhtml = true -o.template = "jd-dailybonus/cookie_tools" +o.template = 'jd-dailybonus/cookie_tools' -o = s:option(ListValue, "remote_url", translate("Source Update Url")) -o:value("https://cdn.jsdelivr.net/gh/NobyDa/Script/JD-DailyBonus/JD_DailyBonus.js", translate("GitHub")) -o:value("https://gitee.com/jerrykuku/staff/raw/master/JD_DailyBonus.js", translate("Gitee")) -o.default = "nil" -o.rmempty = false -o.description = translate('当GitHub源无法更新时,可以选择使用国内Gitee源') - -o = s:option(Value, "cookie", translate("First Cookie")) +o = s:option(Value, 'cookie', translate('第一账号Cookie')) o.rmempty = false -o = s:option(Value, "cookie2", translate("Second Cookie")) +o = s:option(Value, 'cookie2', translate('第二账号Cookie')) o.rmempty = true -o.description = translate('双账号用户抓取"账号1"Cookie后, 请勿点击退出账号(可能会导致Cookie失效), 需清除浏览器资料或更换浏览器登录"账号2"抓取.') -o = s:option(Value, "stop", translate("Execute Delay")) +o = s:option(Value, 'stop', translate('延迟签到')) o.rmempty = false o.default = 0 o.datatype = integer -o.description = translate("自定义延迟签到,单位毫秒. 默认分批并发无延迟. (延迟作用于每个签到接口, 如填入延迟则切换顺序签到. ) ") +o.description = translate('自定义延迟签到,单位毫秒. 默认分批并发无延迟. (延迟作用于每个签到接口, 如填入延迟则切换顺序签到. ) ') -o = s:option(ListValue, "serverurl", translate("ServerURL")) -o:value("scu", translate("SCU")) -o:value("sct", translate("SCT")) -o.default = "scu" +o = s:option(Value, 'out', translate('接口超时')) +o.rmempty = false +o.default = 0 +o.datatype = integer +o.description = translate('接口超时退出,单位毫秒 用于可能发生的网络不稳定, 0则关闭.') + +-- server chan +o = s:option(ListValue, 'serverurl', translate('Server酱的推送接口地址')) +o:value('scu', translate('SCU')) +o:value('sct', translate('SCT')) +o.default = 'scu' o.rmempty = false o.description = translate('选择Server酱的推送接口') -o = s:option(Value, "serverchan", translate("ServerChan SCKEY")) +o = s:option(Value, 'serverchan', translate('Server酱 SCKEY')) o.rmempty = true -o.description = translate("微信推送,基于Server酱服务,请自行登录 http://sc.ftqq.com/ 绑定并获取 SCKEY (仅在自动签到时推送)") +o.description = translate('微信推送,基于Server酱服务,请自行登录 http://sc.ftqq.com/ 绑定并获取 SCKEY。') -o = s:option(Flag, "failed", translate("Failed Push")) +-- telegram + +o = s:option(Value, 'tg_token', translate('Telegram Bot Token')) +o.rmempty = true +o.description = translate('首先在Telegram上搜索BotFather机器人,创建一个属于自己的通知机器人,并获取Token。') + +o = s:option(Value, 'tg_userid', translate('Telegram UserID')) +o.rmempty = true +o.description = translate('在Telegram上搜索getuserIDbot机器人,获取UserID。') + +--Auto Run Script Service + +o = s:option(Flag, 'auto_run', translate('自动签到')) o.rmempty = false -o.description = translate("仅当cookie失效时推送") -o = s:option(Flag, "auto_update", translate("Auto Update")) -o.rmempty = false -o.description = translate("Auto Update Script Service") - -o =s:option(ListValue, "auto_update_time", translate("Update time (every day)")) -for t = 0, 23 do o:value(t, t .. ":01") end +o = s:option(ListValue, 'auto_run_time_h', translate('每天签到时间(小时)')) +for t = 0, 23 do + o:value(t, t) +end o.default = 1 o.rmempty = true -o:depends("auto_update", "1") - -o = s:option(Flag, "auto_run", translate("Auto Run")) -o.rmempty = false -o.description = translate("Auto Run Script Service") - -o =s:option(ListValue, "auto_run_time", translate("Run time (every day)")) -for t = 0, 23 do o:value(t, t .. ":05") end +o:depends('auto_run', '1') +o = s:option(ListValue, 'auto_run_time_m', translate('每天签到时间(分钟)')) +for t = 0, 59 do + o:value(t, t) +end o.default = 1 o.rmempty = true -o:depends("auto_run", "1") +o:depends('auto_run', '1') -o = s:option(DummyValue, "", "") +-- Auto Update Script Service + +o = s:option(Flag, 'auto_update', translate('自动更新')) +o.rmempty = false + +o = s:option(ListValue, 'auto_update_time', translate('每天更新时间')) +for t = 0, 23 do + o:value(t, t .. ':01') +end +o.default = 1 +o.rmempty = true +o:depends('auto_update', '1') + +o = s:option(Value, 'remote_url', translate('更新源地址')) +o:value('https://raw.githubusercontent.com/NobyDa/Script/master/JD-DailyBonus/JD_DailyBonus.js', translate('GitHub')) +o:value('https://cdn.jsdelivr.net/gh/NobyDa/Script/JD-DailyBonus/JD_DailyBonus.js', translate('GitHub CDN')) +o:value('https://gitee.com/jerrykuku/staff/raw/master/JD_DailyBonus.js', translate('Gitee')) +o.default = 'nil' +o.rmempty = false +o.description = translate('当GitHub源无法更新时,可以选择使用国内Gitee源,GitHub CDN可能比原地址更晚更新,但速度快') + +o = s:option(DummyValue, '', '') o.rawhtml = true o.version = sys.exec('uci get jd-dailybonus.@global[0].version') -o.template = "jd-dailybonus/update_service" +o.template = 'jd-dailybonus/update_service' + return m diff --git a/package/ctcgfw/luci-app-jd-dailybonus/luasrc/view/jd-dailybonus/cookie_tools.htm b/package/ctcgfw/luci-app-jd-dailybonus/luasrc/view/jd-dailybonus/cookie_tools.htm index a88d8248be..bb00927d86 100644 --- a/package/ctcgfw/luci-app-jd-dailybonus/luasrc/view/jd-dailybonus/cookie_tools.htm +++ b/package/ctcgfw/luci-app-jd-dailybonus/luasrc/view/jd-dailybonus/cookie_tools.htm @@ -1,25 +1,13 @@ <%+cbi/valueheader%> - +
- + +
帮助 - <%= translate("Click to download the JDCookie.zip,unzip it,and use load Unpacked extensions to install.link:[chrome://extensions/]")%> -
-
- -<%+cbi/valuefooter%> -<%+cbi/valueheader%> - - -
- -
-
- 帮助 - <%= translate("Sign in ,then click JDCookie button.you will copy JD cookies, paste the cookie below.")%> + <%= translate("点击上面按钮使用京东手机app扫码获取Cookie")%>
diff --git a/package/ctcgfw/luci-app-jd-dailybonus/luasrc/view/jd-dailybonus/update_service.htm b/package/ctcgfw/luci-app-jd-dailybonus/luasrc/view/jd-dailybonus/update_service.htm index 947f9d5057..6ef9b0ff9c 100644 --- a/package/ctcgfw/luci-app-jd-dailybonus/luasrc/view/jd-dailybonus/update_service.htm +++ b/package/ctcgfw/luci-app-jd-dailybonus/luasrc/view/jd-dailybonus/update_service.htm @@ -1,5 +1,9 @@ <%+cbi/valueheader%> + + - +
"> + value="<%= translate("保存Cookie,并马上进行签到") %>">
-<%+cbi/valuefooter%> -<%+cbi/valueheader%> - -
-
- v<%=self.version%> -
- -
<%+cbi/valuefooter%> <%+cbi/valueheader%> - +
"> - + value="<%= translate("手动检查脚本更新,当前版本:v")..self.version %>">
<%+cbi/valuefooter%> + + diff --git a/package/ctcgfw/luci-app-jd-dailybonus/po/zh-cn/jd-dailybonus.po b/package/ctcgfw/luci-app-jd-dailybonus/po/zh-cn/jd-dailybonus.po deleted file mode 100644 index 22daa12df6..0000000000 --- a/package/ctcgfw/luci-app-jd-dailybonus/po/zh-cn/jd-dailybonus.po +++ /dev/null @@ -1,111 +0,0 @@ -msgid "" -msgstr "Content-Type: text/plain; charset=UTF-8\n" - -msgid "JD-DailyBonus" -msgstr "京东签到服务" - -msgid "Enable" -msgstr "启用" - -msgid "Disable" -msgstr "停用" - -msgid "Log" -msgstr "日志" - -msgid "Script" -msgstr "脚本" - -msgid "Base Config" -msgstr "基本设置" - -msgid "Cookie Tools" -msgstr "Cookie 工具" - -msgid "JDCookie Tools" -msgstr "获取京东cookie扩展工具" - -msgid "Source Update Url" -msgstr "更新源地址" - -msgid "First Cookie" -msgstr "主账号Cookie" - -msgid "Second Cookie" -msgstr "第二账号Cookie" - -msgid "Click to download the JDCookie.zip,unzip it,and use load Unpacked extensions to install.link:[chrome://extensions/]")" -msgstr "点击上面的按钮安装下载JDCookie.zip(获取京东cookie扩展工具),解压后在[chrome://extensions/]中使用加载已解压的扩展程序进行安装。 " - -msgid "JD Url" -msgstr "京东链接" - -msgid "Sign in ,then click JDCookie button.you will copy JD cookies, paste the cookie below." -msgstr "登录后点击JDCookie 扩展工具复制cookie,然后粘贴到下面输入框中。(请使用F12调试工具,进入模拟手机浏览器模式)" - -msgid "Auto Update Script Service" -msgstr "自动更新脚本服务" - -msgid "Update time (every day)" -msgstr "更新时间 (每天)" - -msgid "Update Script" -msgstr "更新脚本" - -msgid "Execute Delay" -msgstr "延迟签到" - -msgid "ServerChan SCKEY" -msgstr "Server酱 SCKEY" - -msgid "ServerURL" -msgstr "Server酱的推送接口地址" - -msgid "SCT" -msgstr "测试版推送接口地址" - -msgid "SCU" -msgstr "原版推送接口地址" - -msgid "Failed Push" -msgstr "失效时推送" - -msgid "Auto Run" -msgstr "自动签到" - -msgid "Run" -msgstr "执行" - -msgid "Auto Run Script Service" -msgstr "自动签到服务" - -msgid "Run time (every day)" -msgstr "签到时间 (每天)" - -msgid "Save Cookies And Run Service" -msgstr "保存Cookie并签到" - -msgid "Sign in info" -msgstr "签到信息" - -msgid "Service is running,Please do not refresh!" -msgstr "服务正在执行中,请勿刷新!" - -msgid "Updating script,please wait ..." -msgstr "正在更新脚本,请稍候 ..." - -msgid "Is currently the latest version" -msgstr "当前已是最新版本。" - -msgid "There is a new version, click to update" -msgstr "有新的版本,请点击更新" - -msgid "Checking the New Version ..." -msgstr "正在检查是否存在新的版本 ..." - -msgid "Check Script Version" -msgstr "手动检查脚本更新" - -msgid "Current Script Version" -msgstr "当前脚本版本" - diff --git a/package/ctcgfw/luci-app-jd-dailybonus/root/etc/config/jd-dailybonus b/package/ctcgfw/luci-app-jd-dailybonus/root/etc/config/jd-dailybonus index 14a038cb7c..8002200ac1 100644 --- a/package/ctcgfw/luci-app-jd-dailybonus/root/etc/config/jd-dailybonus +++ b/package/ctcgfw/luci-app-jd-dailybonus/root/etc/config/jd-dailybonus @@ -1,9 +1,14 @@ config global - option version '1.87' - option auto_run_time '1' - option auto_run '1' - option auto_update_time '1' + option version '1.90' + option out '0' + option stop '100' + option serverchan '' + option remote_url 'https://raw.githubusercontent.com/NobyDa/Script/master/JD-DailyBonus/JD_DailyBonus.js' + option serverurl 'scu' option auto_update '1' - option stop '0' - option failed '0' - option remote_url 'https://cdn.jsdelivr.net/gh/NobyDa/Script/JD-DailyBonus/JD_DailyBonus.js' \ No newline at end of file + option auto_update_time '23' + option auto_run '1' + option auto_run_time '0' + option auto_run_time_m '1' + option auto_run_time_h '1' + option cookie '' \ No newline at end of file diff --git a/package/ctcgfw/luci-app-jd-dailybonus/root/usr/share/jd-dailybonus/JD_DailyBonus.js b/package/ctcgfw/luci-app-jd-dailybonus/root/usr/share/jd-dailybonus/JD_DailyBonus.js index c6d411f1fc..467ff87d1b 100644 --- a/package/ctcgfw/luci-app-jd-dailybonus/root/usr/share/jd-dailybonus/JD_DailyBonus.js +++ b/package/ctcgfw/luci-app-jd-dailybonus/root/usr/share/jd-dailybonus/JD_DailyBonus.js @@ -2,7 +2,7 @@ 京东多合一签到脚本 -更新时间: 2020.12.25 17:50 v1.89 +更新时间: 2021.01.07 17:00 v1.90 有效接口: 40+ 脚本兼容: QuantumultX, Surge, Loon, JSBox, Node.js 电报频道: @NobyDa @@ -13,7 +13,7 @@ 【 JSbox, Node.js 说明 】 : ************************* -开启抓包app后, Safari浏览器登录 https://bean.m.jd.com 点击签到并且出现签到日历后, 返回抓包app搜索关键字 functionId=signBean 复制请求头Cookie填入以下Key处的单引号内即可 */ +开启抓包app后, Safari浏览器登录 https://bean.m.jd.com/bean/signIndex.action 点击签到并且出现签到日历后, 返回抓包app搜索关键字 functionId=signBean 复制请求头Cookie填入以下Key处的单引号内即可 */ var Key = ''; //单引号内自行填写您抓取的Cookie @@ -30,7 +30,7 @@ var DualKey = ''; //如需双账号签到,此处单引号内填写抓取的"账 【 QX, Surge, Loon 说明 】 : ************************* -初次使用时, app配置文件添加脚本配置,并启用Mitm后, Safari浏览器打开登录 https://bean.m.jd.com ,点击签到并且出现签到日历后, 如果通知获得cookie成功, 则可以使用此签到脚本。 注: 请勿在京东APP内获取!!! +初次使用时, app配置文件添加脚本配置,并启用Mitm后, Safari浏览器打开登录 https://bean.m.jd.com/bean/signIndex.action ,点击签到并且出现签到日历后, 如果通知获得cookie成功, 则可以使用此签到脚本。 注: 请勿在京东APP内获取!!! 由于cookie的有效性(经测试网页Cookie有效周期最长31天),如果脚本后续弹出cookie无效的通知,则需要重复上述步骤。 签到脚本将在每天的凌晨0:05执行, 您可以修改执行时间。 因部分接口京豆限量领取, 建议调整为凌晨签到。 @@ -108,14 +108,12 @@ async function all() { case 0: await Promise.all([ JingDongBean(stop), //京东京豆 - JDTakeaLook(stop), //京东发现-看一看 JingDongStore(stop), //京东超市 JingDongWebcasts(stop), //京东直播 JingRongBean(stop), //金融简单赚钱 JingRongSteel(stop), //金融钢镚 JingDongTurn(stop), //京东转盘 JDFlashSale(stop), //京东闪购 - JDOverseas(stop), //京东国际 JingDongCash(stop), //京东现金红包 JDMagicCube(stop, 2), //京东小魔方 JingDongSubsidy(stop), //京东金贴 @@ -131,15 +129,13 @@ async function all() { JingRongDoll(stop, 'JRFiveDoll', '京东金融-签伍', '1D06AA3B0F') ]); await Promise.all([ - JDUserSignPre(stop, 'JDClothing', '京东商城-服饰', '4RBT3H9jmgYg1k2kBnHF8NAHm7m8'), //京东服饰 - JDUserSignPre(stop, 'JDUnderwear', '京东商城-内衣', '4PgpL1xqPSW1sVXCJ3xopDbB1f69'), //京东内衣馆 JDUserSignPre(stop, 'JDShoes', '京东商城-鞋靴', '4RXyb1W4Y986LJW8ToqMK14BdTD'), //京东鞋靴 JDUserSignPre(stop, 'JDCalendar', '京东日历-翻牌', '36V2Qw59VPNsuLxY84vCFtxFzrFs'), //京东日历翻牌 JDUserSignPre(stop, 'JDChild', '京东商城-童装', '3Af6mZNcf5m795T8dtDVfDwWVNhJ'), //京东童装馆 JDUserSignPre(stop, 'JDBaby', '京东商城-母婴', '3BbAVGQPDd6vTyHYjmAutXrKAos6'), //京东母婴馆 JDUserSignPre(stop, 'JD3C', '京东商城-数码', '4SWjnZSCTHPYjE5T7j35rxxuMTb6'), //京东数码电器馆 - JDUserSignPre(stop, 'JDSubsidy', '京东晚市-补贴', 'xK148m4kWj5hBcTPuJUNNXH3AkJ'), //京东晚市补贴金 - JDUserSignPre(stop, 'JDDrug', '京东商城-医药', '3tqTG5sF1xCUyC6vgEF5CLCxGn7w'), //京东医药馆 + // JDUserSignPre(stop, 'JDSubsidy', '京东晚市-补贴', 'xK148m4kWj5hBcTPuJUNNXH3AkJ'), //京东晚市补贴金 + // JDUserSignPre(stop, 'JDDrug', '京东商城-医药', '3tqTG5sF1xCUyC6vgEF5CLCxGn7w'), //京东医药馆 JDUserSignPre(stop, 'JDWomen', '京东商城-女装', 'DpSh7ma8JV7QAxSE2gJNro8Q2h9'), //京东女装馆 JDUserSignPre(stop, 'JDFineWine', '京东商城-酒饮', 'zGwAUzL3pVGjptBBGeYfpKjYdtX'), //京东酒饮馆 JDUserSignPre(stop, 'JDBook', '京东商城-图书', '3SC6rw5iBg66qrXPGmZMqFDwcyXi'), //京东图书 @@ -147,15 +143,17 @@ async function all() { JingRongDoll(stop, 'XJDouble', '金融现金-双签', 'F68B2C3E71', '', '', '', 'xianjin') //京东金融 现金双签 ]); await Promise.all([ + JDUserSignPre(stop, 'JDClothing', '京东商城-服饰', '4RBT3H9jmgYg1k2kBnHF8NAHm7m8'), //京东服饰 + JDUserSignPre(stop, 'JDUnderwear', '京东商城-内衣', '4PgpL1xqPSW1sVXCJ3xopDbB1f69'), //京东内衣馆 JDUserSignPre(stop, 'JDSuitcase', '京东商城-箱包', 'ZrH7gGAcEkY2gH8wXqyAPoQgk6t'), //京东箱包馆 JDUserSignPre(stop, 'JDSchool', '京东商城-校园', '4812pn2PAcUyfNdWr7Cvpww5MCyW'), //京东校园 JDUserSignPre(stop, 'JDHealth', '京东商城-健康', 'w2oeK5yLdHqHvwef7SMMy4PL8LF'), //京东健康 - JDUserSignPre(stop, 'JDPet', '京东商城-宠物', '37ta5sh5ocrMZF3Fz5UMJbTsL42'), //京东宠物馆 - JDUserSignPre(stop, 'JDShand', '京东拍拍-二手', '3S28janPLYmtFxypu37AYAGgivfp'), //京东拍拍二手 + // JDUserSignPre(stop, 'JDPet', '京东商城-宠物', '37ta5sh5ocrMZF3Fz5UMJbTsL42'), //京东宠物馆 + // JDUserSignPre(stop, 'JDShand', '京东拍拍-二手', '3S28janPLYmtFxypu37AYAGgivfp'), //京东拍拍二手 JDUserSignPre(stop, 'JDClean', '京东商城-清洁', '2Tjm6ay1ZbZ3v7UbriTj6kHy9dn6'), //京东清洁馆 JDUserSignPre(stop, 'JDCare', '京东商城-个护', 'NJ1kd1PJWhwvhtim73VPsD1HwY3'), //京东个人护理馆 JDUserSignPre(stop, 'JDJewels', '京东商城-珠宝', 'zHUHpTHNTaztSRfNBFNVZscyFZU'), //京东珠宝馆 - JDUserSignPre(stop, 'JDClocks', '京东商城-钟表', '2BcJPCVVzMEtMUynXkPscCSsx68W'), //京东钟表馆 + // JDUserSignPre(stop, 'JDClocks', '京东商城-钟表', '2BcJPCVVzMEtMUynXkPscCSsx68W'), //京东钟表馆 JDUserSignPre(stop, 'JDMakeup', '京东商城-美妆', '2smCxzLNuam5L14zNJHYu43ovbAP'), //京东美妆馆 JDUserSignPre(stop, 'JDVege', '京东商城-菜场', 'Wcu2LVCFMkBP3HraRvb7pgSpt64') //京东菜场 ]); @@ -164,14 +162,12 @@ async function all() { break; default: await JingDongBean(stop); //京东京豆 - await JDTakeaLook(stop); //京东发现-看一看 await JingDongStore(stop); //京东超市 await JingDongWebcasts(stop); //京东直播 await JingRongBean(stop); //金融简单赚钱 await JingRongSteel(stop); //金融钢镚 await JingDongTurn(stop); //京东转盘 await JDFlashSale(stop); //京东闪购 - await JDOverseas(stop); //京东国际 await JingDongCash(stop); //京东现金红包 await JDMagicCube(stop, 2); //京东小魔方 await JingDongGetCash(stop); //京东领现金 @@ -197,13 +193,13 @@ async function all() { await JDUserSignPre(stop, 'JDChild', '京东商城-童装', '3Af6mZNcf5m795T8dtDVfDwWVNhJ'); //京东童装馆 await JDUserSignPre(stop, 'JDBaby', '京东商城-母婴', '3BbAVGQPDd6vTyHYjmAutXrKAos6'); //京东母婴馆 await JDUserSignPre(stop, 'JD3C', '京东商城-数码', '4SWjnZSCTHPYjE5T7j35rxxuMTb6'); //京东数码电器馆 - await JDUserSignPre(stop, 'JDSubsidy', '京东晚市-补贴', 'xK148m4kWj5hBcTPuJUNNXH3AkJ'); //京东晚市补贴金 - await JDUserSignPre(stop, 'JDClocks', '京东商城-钟表', '2BcJPCVVzMEtMUynXkPscCSsx68W'); //京东钟表馆 - await JDUserSignPre(stop, 'JDDrug', '京东商城-医药', '3tqTG5sF1xCUyC6vgEF5CLCxGn7w'); //京东医药馆 + // await JDUserSignPre(stop, 'JDSubsidy', '京东晚市-补贴', 'xK148m4kWj5hBcTPuJUNNXH3AkJ'); //京东晚市补贴金 + // await JDUserSignPre(stop, 'JDClocks', '京东商城-钟表', '2BcJPCVVzMEtMUynXkPscCSsx68W'); //京东钟表馆 + // await JDUserSignPre(stop, 'JDDrug', '京东商城-医药', '3tqTG5sF1xCUyC6vgEF5CLCxGn7w'); //京东医药馆 await JDUserSignPre(stop, 'JDWomen', '京东商城-女装', 'DpSh7ma8JV7QAxSE2gJNro8Q2h9'); //京东女装馆 - await JDUserSignPre(stop, 'JDPet', '京东商城-宠物', '37ta5sh5ocrMZF3Fz5UMJbTsL42'); //京东宠物馆 + // await JDUserSignPre(stop, 'JDPet', '京东商城-宠物', '37ta5sh5ocrMZF3Fz5UMJbTsL42'); //京东宠物馆 await JDUserSignPre(stop, 'JDBook', '京东商城-图书', '3SC6rw5iBg66qrXPGmZMqFDwcyXi'); //京东图书 - await JDUserSignPre(stop, 'JDShand', '京东拍拍-二手', '3S28janPLYmtFxypu37AYAGgivfp'); //京东拍拍二手 + // await JDUserSignPre(stop, 'JDShand', '京东拍拍-二手', '3S28janPLYmtFxypu37AYAGgivfp'); //京东拍拍二手 await JDUserSignPre(stop, 'JDMakeup', '京东商城-美妆', '2smCxzLNuam5L14zNJHYu43ovbAP'); //京东美妆馆 await JDUserSignPre(stop, 'JDFineWine', '京东商城-酒饮', 'zGwAUzL3pVGjptBBGeYfpKjYdtX'); //京东酒饮馆 await JDUserSignPre(stop, 'JDVege', '京东商城-菜场', 'Wcu2LVCFMkBP3HraRvb7pgSpt64'); //京东菜场 @@ -1700,56 +1696,6 @@ function JingRongDoll(s, key, title, code, type, num, award, belong) { }); } -function JDOverseas(s) { - merge.Overseas = {}; - return new Promise(resolve => { - if (disable("Overseas")) return resolve() - setTimeout(() => { - const OverseasUrl = { - url: 'https://api.m.jd.com/client.action?functionId=checkin', - headers: { - Cookie: KEY - }, - body: "body=%7B%7D&build=167237&client=apple&clientVersion=9.0.0&openudid=1fce88cd05c42fe2b054e846f11bdf33f016d676&partner=apple&scope=11&sign=e27f8b904040a0e3c99b87fc27e09c87&st=1591730990449&sv=101" - }; - $nobyda.post(OverseasUrl, function(error, response, data) { - try { - if (error) { - throw new Error(error) - } else { - const Details = LogDetails ? "response:\n" + data : ''; - if (data.match(/\"type\":\d+?,/)) { - console.log("\n" + "京东商城-国际签到成功 " + Details) - merge.Overseas.success = 1 - if (data.match(/\"jdBeanAmount\":[1-9]+/)) { - merge.Overseas.bean = data.match(/\"jdBeanAmount\":(\d+)/)[1] - merge.Overseas.notify = "京东商城-国际: 成功, 明细: " + merge.Overseas.bean + "京豆 🐶" - } else { - merge.Overseas.notify = "京东商城-国际: 成功, 明细: 无京豆 🐶" - } - } else { - console.log("\n" + "京东商城-国际签到失败 " + Details) - merge.Overseas.fail = 1 - if (data.match(/(\"code\":\"13\"|重复签到)/)) { - merge.Overseas.notify = "京东商城-国际: 失败, 原因: 已签过 ⚠️" - } else if (data.match(/\"code\":\"(-1|3)\"/)) { - merge.Overseas.notify = "京东商城-国际: 失败, 原因: Cookie失效‼️" - } else { - merge.Overseas.notify = "京东商城-国际: 失败, 原因: 未知 ⚠️" - } - } - } - } catch (eor) { - $nobyda.AnError("京东商城-国际", "Overseas", eor, response, data) - } finally { - resolve() - } - }) - }, s) - if (out) setTimeout(resolve, out + s) - }); -} - function JingDongGetCash(s) { merge.JDGetCash = {}; return new Promise(resolve => { @@ -1834,45 +1780,6 @@ function JingDongWebcasts(s) { }); } -function JDTakeaLook(s) { - merge.TakeaLook = {}; - return new Promise(resolve => { - if (disable("TakeaLook")) return resolve() - setTimeout(() => { - $nobyda.get({ - url: 'https://api.m.jd.com/client.action?functionId=discTaskList&body=%7B%22bizType%22%3A1%2C%22referPageId%22%3A%22discRecommend%22%7D&client=apple&clientVersion=9.1.6&openudid=1fce88cd05c42fe2b054e846f11bdf33f016d676&sign=17061147fe8e0eb10edfe8d9968b6d66&st=1601138337675&sv=102', - headers: { - Cookie: KEY - } - }, (error, response, data) => { - try { - if (error) throw new Error(error); - const cc = JSON.parse(data); - const Details = LogDetails ? "response:\n" + data : ''; - const tm = parseInt((Date.now() + 28800000) / 86400000) * 86400000 - 28800000 - if (data.match(/签到成功/) && !data.match(tm)) { - console.log(`\n京东发现-看看签到成功 ${Details}`) - const aw = data.match(/\"签到成功,获得(\d+)京豆\"/) - merge.TakeaLook.success = 1 - merge.TakeaLook.bean = aw ? aw[1] : 0 - merge.TakeaLook.notify = `京东发现-看看: 成功, 明细: ${merge.TakeaLook.bean||`无`}京豆 🐶` - } else { - console.log(`\n京东发现-看看签到失败 ${Details}`) - const tp = data.match(tm) ? `已签过` : cc.busiCode == 2001 ? `Cookie失效` : `${cc.message||`未知`}` - merge.TakeaLook.notify = `京东发现-看看: 失败, 原因: ${tp}${cc.busiCode==2001?`‼️`:` ⚠️`}` - merge.TakeaLook.fail = 1 - } - } catch (eor) { - $nobyda.AnError("京东发现-看看", "TakeaLook", eor, response, data) - } finally { - resolve() - } - }) - }, s) - if (out) setTimeout(resolve, out + s) - }); -} - function JingDongStore(s) { merge.JDGStore = {}; return new Promise(resolve => { diff --git a/package/ctcgfw/luci-app-jd-dailybonus/root/usr/share/jd-dailybonus/jd_cookie.lua b/package/ctcgfw/luci-app-jd-dailybonus/root/usr/share/jd-dailybonus/jd_cookie.lua new file mode 100644 index 0000000000..a1ddffac18 --- /dev/null +++ b/package/ctcgfw/luci-app-jd-dailybonus/root/usr/share/jd-dailybonus/jd_cookie.lua @@ -0,0 +1,168 @@ +-- Copyright (C) 2021 jerrykuku +-- Licensed to the public under the GNU General Public License v3. + +local uci = require 'luci.model.uci'.cursor() +local config = 'jd-dailybonus' +package.path = package.path .. ';/usr/share/jd-dailybonus/?.lua' +local requests = require 'requests' +local socket = require 'socket' +local tinsert = table.insert +local ssub, slen, schar, sbyte, sformat, sgsub = string.sub, string.len, string.char, string.byte, string.format, string.gsub +local User_Agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36' +local Host = 'plogin.m.jd.com' +local jd_cookie = {} + +--打印table +function print_r(t) + local print_r_cache = {} + local function sub_print_r(t, indent) + if (print_r_cache[tostring(t)]) then + print(indent .. '*' .. tostring(t)) + else + print_r_cache[tostring(t)] = true + if (type(t) == 'table') then + for pos, val in pairs(t) do + if (type(val) == 'table') then + print(indent .. '[' .. pos .. '] => ' .. tostring(t) .. ' {') + sub_print_r(val, indent .. string.rep(' ', string.len(pos) + 8)) + print(indent .. string.rep(' ', string.len(pos) + 6) .. '}') + elseif (type(val) == 'string') then + print(indent .. '[' .. pos .. '] => "' .. val .. '"') + else + print(indent .. '[' .. pos .. '] => ' .. tostring(val)) + end + end + else + print(indent .. tostring(t)) + end + end + end + if (type(t) == 'table') then + print(tostring(t) .. ' {') + sub_print_r(t, ' ') + print('}') + else + sub_print_r(t, ' ') + end + print() +end + +-- 分割字符串 +local function split(full, sep) + full = full:gsub('%z', '') -- 这里不是很清楚 有时候结尾带个\0 + local off, result = 1, {} + while true do + local nStart, nEnd = full:find(sep, off) + if not nEnd then + local res = ssub(full, off, slen(full)) + if #res > 0 then -- 过滤掉 \0 + tinsert(result, res) + end + break + else + tinsert(result, ssub(full, off, nStart - 1)) + off = nEnd + 1 + end + end + return result +end + +--获取unix时间戳 +function jd_cookie.timestamp() + return math.floor(socket.gettime() * 1000) +end + +--延时函数 +function sleep(n) + os.execute('sleep ' .. n) +end + +--解析cookie +function praseSetCookies(rcookie) + local tbl = {} + for k, v in rcookie:gmatch('([^;%s]+)=([^;]+)') do + tbl[k] = v + end + return tbl +end + +--获取二维码链接和检测URL +function jd_cookie.get_qrcode() + local timeStamp = jd_cookie.timestamp() + local url = + 'https://plogin.m.jd.com/cgi-bin/mm/new_login_entrance?lang=chs&appid=300&returnurl=https://wq.jd.com/passport/LoginRedirect?state=' .. + timeStamp .. '&returnurl=https://home.m.jd.com/myJd/newhome.action?sceneval=2&ufc=&/myJd/home.action&source=wq_passport' + local xformHeaders = { + ['Content-Type'] = 'application/x-www-form-urlencoded', + ['Connection'] = 'Keep-Alive', + ['Accept'] = 'application/json, text/plain, */*', + ['Accept-Language'] = 'zh-cn', + ['Referer'] = 'https://plogin.m.jd.com/login/login?appid=300&returnurl=https://wq.jd.com/passport/LoginRedirect?state=' .. + timeStamp .. '&returnurl=https://home.m.jd.com/myJd/newhome.action?sceneval=2&ufc=&/myJd/home.action&source=wq_passport', + ['User-Agent'] = User_Agent, + ['Host'] = Host + } + local response = requests.get {url, headers = xformHeaders} + local s_token = response.json().s_token + local dat = split(string.gsub(response.headers['set-cookie'], ' DOMAIN=.plogin.m.jd.com', ''), ';') + local cookies = string.gsub(dat[1] .. dat[4] .. dat[6] .. dat[8], ',', ';') .. ';' + + local timeStamp = jd_cookie.timestamp() + local url = 'https://plogin.m.jd.com/cgi-bin/m/tmauthreflogurl?s_token=' .. s_token .. '&v=' .. timeStamp .. '&remember=true' + local xformHeaders = { + ['Content-Type'] = 'application/x-www-form-urlencoded', + ['Connection'] = 'Keep-Alive', + ['Accept'] = 'application/json, text/plain, */*', + ['Accept-Language'] = 'zh-cn', + ['Referer'] = 'https://plogin.m.jd.com/login/login?appid=300&returnurl=https://wq.jd.com/passport/LoginRedirect?state=' .. + timeStamp .. '&returnurl=https://home.m.jd.com/myJd/newhome.action?sceneval=2&ufc=&/myJd/home.action&source=wq_passport', + ['User-Agent'] = User_Agent, + ['Host'] = Host + } + local response = requests.post {url, cookies = cookies, headers = xformHeaders} + local json_body, error = response.json() + local token = json_body['token'] + local ou_state = json_body['ou_state'] + local okl_token = praseSetCookies(response.headers['set-cookie']).okl_token + local return_json = { + qrcode_url = 'https://plogin.m.jd.com/cgi-bin/m/tmauth?appid=300&client_type=m&token=' .. token, + check_url = 'https://plogin.m.jd.com/cgi-bin/m/tmauthchecktoken?&token=' .. token .. '&ou_state=' .. ou_state .. '&okl_token=' .. okl_token, + cookies = cookies + } + return return_json +end + +--检测扫码状态 并返回cookie +function jd_cookie.checkLogin(url, cookies) + local xformHeaders = { + ['Content-Type'] = 'application/x-www-form-urlencoded', + ['Connection'] = 'Keep-Alive', + ['Accept'] = 'application/json, text/plain, */*', + ['Accept-Language'] = 'zh-cn', + ['Referer'] = 'https://plogin.m.jd.com/login/login?appid=300&returnurl=https://wqlogin2.jd.com/passport/LoginRedirect?state=', + ['User-Agent'] = User_Agent, + ['Host'] = Host + } + local data = + 'lang=chs&appid=300&source=wq_passport&returnurl=https://wqlogin2.jd.com/passport/LoginRedirect?state=1100399130787&returnurl=//home.m.jd.com/myJd/newhome.action?sceneval=2&ufc=&/myJd/home.action' + local response = requests.post {url, data = data, cookies = cookies, headers = xformHeaders} + --local cookie = jd_cookie.praseSetCookies(response.headers['set-cookie']) + local json = response.json() + local return_json = {} + if json.errcode == 0 then + local ucookie = praseSetCookies(response.headers['set-cookie']) + return_json = { + error = 0, + cookie = ucookie + } + else + return_json = { + error = json.errcode, + msg = json.message + } + end + + return return_json +end + +return jd_cookie diff --git a/package/ctcgfw/luci-app-jd-dailybonus/root/usr/share/jd-dailybonus/newapp.sh b/package/ctcgfw/luci-app-jd-dailybonus/root/usr/share/jd-dailybonus/newapp.sh index 938461c032..c91e838b4d 100755 --- a/package/ctcgfw/luci-app-jd-dailybonus/root/usr/share/jd-dailybonus/newapp.sh +++ b/package/ctcgfw/luci-app-jd-dailybonus/root/usr/share/jd-dailybonus/newapp.sh @@ -49,78 +49,58 @@ cancel() { exit 1 } -fill_cookie() { - cookie1=$(uci_get_by_type global cookie) - if [ ! "$cookie1" = "" ]; then - varb="var Key = '$cookie1';" - a=$(sed -n '/var Key =/=' $JD_SCRIPT) - b=$((a-1)) - sed -i "${a}d" $JD_SCRIPT - sed -i "${b}a ${varb}" $JD_SCRIPT - fi - - cookie2=$(uci_get_by_type global cookie2) - if [ ! "$cookie2" = "" ]; then - varb2="var DualKey = '$cookie2';" - aa=$(sed -n '/var DualKey =/=' $JD_SCRIPT) - bb=$((aa-1)) - sed -i "${aa}d" $JD_SCRIPT - sed -i "${bb}a ${varb2}" $JD_SCRIPT - fi - - stop=$(uci_get_by_type global stop) - if [ ! "$stop" = "" ]; then - varb3="var stop = $stop;" - sed -i "s/^var stop =.*/$varb3/g" $JD_SCRIPT - fi -} - add_cron() { sed -i '/jd-dailybonus/d' $CRON_FILE - [ $(uci_get_by_type global auto_run 0) -eq 1 ] && echo '5 '$(uci_get_by_type global auto_run_time)' * * * sleep '$(expr $(head -n 128 /dev/urandom | tr -dc "0123456789" | head -c4) % 180)'s; /usr/share/jd-dailybonus/newapp.sh -w' >>$CRON_FILE + [ $(uci_get_by_type global auto_run 0) -eq 1 ] && echo $(uci_get_by_type global auto_run_time_m)' '$(uci_get_by_type global auto_run_time_h)' * * * /usr/share/jd-dailybonus/newapp.sh -w' >>$CRON_FILE [ $(uci_get_by_type global auto_update 0) -eq 1 ] && echo '1 '$(uci_get_by_type global auto_update_time)' * * * /usr/share/jd-dailybonus/newapp.sh -u' >>$CRON_FILE crontab $CRON_FILE + /etc/init.d/cron restart } # Run Script -serverchan() { - sckey=$(uci_get_by_type global serverchan) - failed=$(uci_get_by_type global failed) - desc=$(cat /www/JD_DailyBonus.htm | grep -E '签到号|签到概览|签到奖励|其他奖励|账号总计|其他总计' | sed 's/$/&\n/g') - serverurlflag=$(uci_get_by_type global serverurl) - serverurl=https://sc.ftqq.com/ - if [ "$serverurlflag" = "sct" ]; then - serverurl=https://sctapi.ftqq.com/ - fi - if [ $failed -eq 1 ]; then - grep "Cookie失效" /www/JD_DailyBonus.htm > /dev/null - if [ $? -eq 0 ]; then - title="$(date '+%Y年%m月%d日') 京东签到 Cookie 失效" - wget-ssl -q --output-document=/dev/null --post-data="text=$title~&desp=$desc" $serverurl$sckey.send - fi +notify() { + grep "Cookie失效" /www/JD_DailyBonus.htm >/dev/null + if [ $? -eq 0 ]; then + title="$(date '+%Y年%m月%d日') 京东签到 Cookie 失效" else title="$(date '+%Y年%m月%d日') 京东签到" + fi + desc=$(cat /www/JD_DailyBonus.htm | grep -E '签到号|签到概览|签到奖励|其他奖励|账号总计|其他总计' | sed 's/$/&\n/g') + #serverchan + sckey=$(uci_get_by_type global serverchan) + if [ ! -z $sckey ]; then + serverurlflag=$(uci_get_by_type global serverurl) + serverurl=https://sc.ftqq.com/ + if [ "$serverurlflag" = "sct" ]; then + serverurl=https://sctapi.ftqq.com/ + fi wget-ssl -q --output-document=/dev/null --post-data="text=$title~&desp=$desc" $serverurl$sckey.send fi + #telegram + TG_BOT_TOKEN=$(uci_get_by_type global tg_token) + TG_USER_ID=$(uci_get_by_type global tg_userid) + API_URL="https://api.telegram.org/bot${TG_BOT_TOKEN}/sendMessage" + if [ ! -z $TG_BOT_TOKEN ] && [ ! -z $TG_USER_ID ]; then + text="*$title* + +\`\`\` +"$desc" +==================================== +本消息来自京东签到插件 jd-dailybonus +\`\`\`" + wget-ssl -q --output-document=/dev/null --post-data="chat_id=$TG_USER_ID&text=$text&parse_mode=markdownv2" $API_URL + fi } run() { - fill_cookie echo -e $(date '+%Y-%m-%d %H:%M:%S %A') >$LOG_HTM 2>/dev/null - [ ! -f "/usr/bin/node" ] && echo -e "未安装node.js,请安装后再试!\nNode.js is not installed, please try again after installation!">>$LOG_HTM && exit 1 - node $JD_SCRIPT >>$LOG_HTM 2>/dev/null -} - -back_run() { - run - sleep 1s - serverchan + [ ! -f "/usr/bin/node" ] && echo -e "未安装node.js,请安装后再试!\nNode.js is not installed, please try again after installation!" >>$LOG_HTM && exit 1 + node $JD_SCRIPT >>$LOG_HTM 2>/dev/null && notify & } save() { - fill_cookie add_cron } @@ -156,7 +136,6 @@ update() { fi remote_ver=$(get_ver $TEMP_SCRIPT) cp -r $TEMP_SCRIPT $JD_SCRIPT - fill_cookie uci set jd-dailybonus.@global[0].version=$remote_ver uci commit jd-dailybonus cancel "0" @@ -169,7 +148,7 @@ while getopts ":alnruswh" arg; do exit 0 ;; l) - serverchan + notify exit 0 ;; n) @@ -189,7 +168,7 @@ while getopts ":alnruswh" arg; do exit 0 ;; w) - back_run + run exit 0 ;; h) diff --git a/package/ctcgfw/luci-app-jd-dailybonus/root/usr/share/jd-dailybonus/requests.lua b/package/ctcgfw/luci-app-jd-dailybonus/root/usr/share/jd-dailybonus/requests.lua new file mode 100644 index 0000000000..c2fc4d702e --- /dev/null +++ b/package/ctcgfw/luci-app-jd-dailybonus/root/usr/share/jd-dailybonus/requests.lua @@ -0,0 +1,303 @@ +-- Lua Requests library for http ease + +local http_socket = require('socket.http') +local https_socket = require('ssl.https') +local url_parser = require('socket.url') +local ltn12 = require('ltn12') +local json = require('cjson.safe') +local md5sum = require('md5') -- TODO: Make modular? +local mime = require('mime') + +local requests = { + _DESCRIPTION = 'Http requests made simpler', + http_socket = http_socket, + https_socket = https_socket +} + +local _requests = {} + +--User facing function the make a request use Digest Authentication +--TODO: Determine what else should live in authentication +function requests.HTTPDigestAuth(user, password) + return { _type = 'digest', user = user, password = password} +end + +--User facing function the make a request use Basic Authentication +--TODO: Determine what else should live in authentication +function requests.HTTPBasicAuth(user, password) + return { _type = 'basic', user = user, password = password} +end + +function requests.post(url, args) + return requests.request("POST", url, args) +end + +function requests.get(url, args) + return requests.request("GET", url, args) +end + +function requests.delete(url, args) + return requests.request("DELETE", url, args) +end + +function requests.patch(url, args) + return requests.request("PATCH", url, args) +end + +function requests.put(url, args) + return requests.request("PUT", url, args) +end + +function requests.options(url, args) + return requests.request("OPTIONS", url, args) +end + +function requests.head(url, args) + return requests.request("HEAD", url, args) +end + +function requests.trace(url, args) + return requests.request("TRACE", url, args) +end + +--Sets up all the data for a request and makes the request +function requests.request(method, url, args) + local request + + if type(url) == "table" then + request = url + if not request.url and request[1] then + request.url = table.remove(request, 1) + end + else + request = args or {} + request.url = url + end + + request.method = method + _requests.parse_args(request) + + -- TODO: Find a better way to do this + if request.auth and request.auth._type == 'digest' then + local response = _requests.make_request(request) + return _requests.use_digest(response, request) + else + return _requests.make_request(request) + end +end + +--Makes a request +function _requests.make_request(request) + local response_body = {} + local full_request = { + method = request.method, + url = request.url, + headers = request.headers, + sink = ltn12.sink.table(response_body), + redirect = request.allow_redirects, + proxy = request.proxy + } + if request.data then + full_request.source = ltn12.source.string(request.data) + end + + local response = {} + local ok + local socket = string.find(full_request.url, '^https:') and not request.proxy and https_socket or http_socket + + ok, response.status_code, response.headers, response.status = socket.request(full_request) + + assert(ok, 'error in '..request.method..' request: '..response.status_code) + response.text = table.concat(response_body) + response.json = function () return json.decode(response.text) end + + return response +end + +--Parses through all the possible arguments for a request +function _requests.parse_args(request) + _requests.check_url(request) + _requests.check_data(request) + _requests.create_header(request) + _requests.check_timeout(request.timeout) + _requests.check_redirect(request.allow_redirects) +end + +--Format the the url based on the params argument +function _requests.format_params(url, params) -- TODO: Clean + if not params or next(params) == nil then return url end + + url = url..'?' + for key, value in pairs(params) do + if tostring(value) then + url = url..tostring(key)..'=' + + if type(value) == 'table' then + local val_string = '' + + for _, val in ipairs(value) do + val_string = val_string..tostring(val)..',' + end + + url = url..val_string:sub(0, -2) + else + url = url..tostring(value) + end + + url = url..'&' + end + end + + return url:sub(0, -2) +end + +--Check that there is a URL given and append to it if params are passed in. +function _requests.check_url(request) + assert(request.url, 'No url specified for request') + request.url = _requests.format_params(request.url, request.params) +end + +-- Add to the HTTP header +function _requests.create_header(request) + request.headers = request.headers or {} + if request.data then + request.headers['Content-Length'] = request.data:len() + end + + if request.cookies then + if request.headers.cookie then + request.headers.cookie = request.headers.cookie..'; '..request.cookies + else + request.headers.cookie = request.cookies + end + end + + if request.auth then + _requests.add_auth_headers(request) + end +end + +--Makes sure that the data is in a format that can be sent +function _requests.check_data(request) + if type(request.data) == "table" then + request.data = json.encode(request.data) + elseif request.data then + request.data = tostring(request.data) + end +end + +--Set the timeout +function _requests.check_timeout(timeout) + http_socket.TIMEOUT = timeout or 5 + https_socket.TIMEOUT = timeout or 5 +end + +--Checks is allow_redirects parameter is set correctly +function _requests.check_redirect(allow_redirects) + if allow_redirects and type(allow_redirects) ~= "boolean" then + error("allow_redirects expects a boolean value. received type = "..type(allow_redirects)) + end +end + +--Create the Authorization header for Basic Auth +function _requests.basic_auth_header(request) + local encoded = mime.b64(request.auth.user..':'..request.auth.password) + request.headers.Authorization = 'Basic '..encoded +end + +-- Create digest authorization string for request header TODO: Could be better, but it should work +function _requests.digest_create_header_string(auth) + local authorization = 'Digest username="'..auth.user..'", realm="'..auth.realm..'", nonce="'..auth.nonce + authorization = authorization..'", uri="'..auth.uri..'", qop='..auth.qop..', nc='..auth.nc + authorization = authorization..', cnonce="'..auth.cnonce..'", response="'..auth.response..'"' + + if auth.opaque then + authorization = authorization..', opaque="'..auth.opaque..'"' + end + + return authorization +end + +--MD5 hash all parameters +local function md5_hash(...) + return md5sum.sumhexa(table.concat({...}, ":")) +end + +-- Creates response hash TODO: Add functionality +function _requests.digest_hash_response(auth_table) + return md5_hash( + md5_hash(auth_table.user, auth_table.realm, auth_table.password), + auth_table.nonce, + auth_table.nc, + auth_table.cnonce, + auth_table.qop, + md5_hash(auth_table.method, auth_table.uri) + ) +end + +-- Add digest authentication to the request header +function _requests.digest_auth_header(request) + if not request.auth.nonce then return end + + request.auth.cnonce = request.auth.cnonce or string.format("%08x", os.time()) + + request.auth.nc_count = request.auth.nc_count or 0 + request.auth.nc_count = request.auth.nc_count + 1 + + request.auth.nc = string.format("%08x", request.auth.nc_count) + + local url = url_parser.parse(request.url) + request.auth.uri = url_parser.build{path = url.path, query = url.query} + request.auth.method = request.method + request.auth.qop = 'auth' + + request.auth.response = _requests.digest_hash_response(request.auth) + + request.headers.Authorization = _requests.digest_create_header_string(request.auth) +end + +--Checks the resonse code and adds additional headers for Digest Auth +-- TODO: Rename this +function _requests.use_digest(response, request) + if response.status_code == 401 then + _requests.parse_digest_response_header(response,request) + _requests.create_header(request) + response = _requests.make_request(request) + response.auth = request.auth + response.cookies = request.headers.cookie + return response + else + response.auth = request.auth + response.cookies = request.headers.cookie + return response + end +end + +--Parse the first response from the host to make the Authorization header +function _requests.parse_digest_response_header(response, request) + for key, value in response.headers['www-authenticate']:gmatch('(%w+)="(%S+)"') do + request.auth[key] = value + end + + if request.headers.cookie then + request.headers.cookie = request.headers.cookie..'; '..response.headers['set-cookie'] + else + request.headers.cookie = response.headers['set-cookie'] + end + + request.auth.nc_count = 0 +end + +-- Call the correct authentication header function +function _requests.add_auth_headers(request) + local auth_func = { + basic = _requests.basic_auth_header, + digest = _requests.digest_auth_header + } + + auth_func[request.auth._type](request) +end + +--Return public functions +requests._private = _requests +return requests From d7dd4bfecb41688ab40a82652cd73e0bdd504379 Mon Sep 17 00:00:00 2001 From: xiaorouji <60100640+xiaorouji@users.noreply.github.com> Date: Fri, 22 Jan 2021 18:17:24 +0800 Subject: [PATCH 08/20] luci-app-passwall: bump to 4-10 Signed-off-by: CN_SZTL --- package/lienol/luci-app-passwall/Makefile | 6 +- .../luasrc/controller/passwall.lua | 22 --- .../luasrc/model/cbi/passwall/api/api.lua | 25 --- .../model/cbi/passwall/api/gen_xray.lua | 34 +++- .../luasrc/model/cbi/passwall/api/v2ray.lua | 173 ----------------- .../model/cbi/passwall/client/app_update.lua | 5 - .../model/cbi/passwall/client/global.lua | 88 ++++++--- .../model/cbi/passwall/client/node_config.lua | 57 +----- .../model/cbi/passwall/client/node_list.lua | 4 +- .../luasrc/model/cbi/passwall/client/rule.lua | 2 +- .../model/cbi/passwall/client/shunt_rules.lua | 2 +- .../model/cbi/passwall/server/api/app.lua | 3 - .../model/cbi/passwall/server/api/v2ray.lua | 177 ------------------ .../model/cbi/passwall/server/index.lua | 2 +- .../luasrc/model/cbi/passwall/server/user.lua | 39 +--- .../passwall/app_update/v2ray_version.htm | 172 ----------------- .../passwall/node_list/link_share_man.htm | 9 +- .../luci-app-passwall/po/zh-cn/passwall.po | 3 + .../root/etc/config/passwall | 1 - .../root/usr/share/passwall/app.sh | 122 ++++++------ .../root/usr/share/passwall/iptables.sh | 16 +- .../root/usr/share/passwall/rules/chnlist | 158 +++------------- .../root/usr/share/passwall/rules/chnroute | 2 +- .../root/usr/share/passwall/rules/chnroute6 | 1 - .../root/usr/share/passwall/subscribe.lua | 19 +- .../root/usr/share/passwall/test.sh | 2 +- 26 files changed, 235 insertions(+), 909 deletions(-) delete mode 100644 package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/api/v2ray.lua delete mode 100644 package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/server/api/v2ray.lua delete mode 100644 package/lienol/luci-app-passwall/luasrc/view/passwall/app_update/v2ray_version.htm diff --git a/package/lienol/luci-app-passwall/Makefile b/package/lienol/luci-app-passwall/Makefile index 55c2a333e0..8c22904f91 100644 --- a/package/lienol/luci-app-passwall/Makefile +++ b/package/lienol/luci-app-passwall/Makefile @@ -7,8 +7,8 @@ include $(TOPDIR)/rules.mk PKG_NAME:=luci-app-passwall PKG_VERSION:=4 -PKG_RELEASE:=9 -PKG_DATE:=20210119 +PKG_RELEASE:=10 +PKG_DATE:=20210122 PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION) @@ -92,7 +92,6 @@ define Package/$(PKG_NAME) DEPENDS:=+libmbedtls +iptables-mod-tproxy +ip +ipset +coreutils +coreutils-base64 +coreutils-nohup +luci-lib-jsonc \ +curl +ca-certificates +resolveip +unzip +dnsmasq-full +tcping +libuci-lua \ +ipt2socks \ - +ssocks \ +microsocks \ +pdnsd-alt \ +PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks:shadowsocks-libev-ss-redir \ @@ -102,7 +101,6 @@ define Package/$(PKG_NAME) +PACKAGE_$(PKG_NAME)_INCLUDE_ShadowsocksR:shadowsocksr-libev-ssr-local \ +PACKAGE_$(PKG_NAME)_INCLUDE_ShadowsocksR_Server:shadowsocksr-libev-server \ +PACKAGE_$(PKG_NAME)_INCLUDE_Xray:xray \ - +PACKAGE_$(PKG_NAME)_INCLUDE_V2ray:v2ray \ +PACKAGE_$(PKG_NAME)_INCLUDE_Trojan_Plus:trojan-plus \ +PACKAGE_$(PKG_NAME)_INCLUDE_Trojan_GO:trojan-go \ +PACKAGE_$(PKG_NAME)_INCLUDE_NaiveProxy:naiveproxy \ diff --git a/package/lienol/luci-app-passwall/luasrc/controller/passwall.lua b/package/lienol/luci-app-passwall/luasrc/controller/passwall.lua index d6c19ee988..8731d7d906 100644 --- a/package/lienol/luci-app-passwall/luasrc/controller/passwall.lua +++ b/package/lienol/luci-app-passwall/luasrc/controller/passwall.lua @@ -9,7 +9,6 @@ local api = require "luci.model.cbi.passwall.api.api" local kcptun = require "luci.model.cbi.passwall.api.kcptun" local brook = require "luci.model.cbi.passwall.api.brook" local xray = require "luci.model.cbi.passwall.api.xray" -local v2ray = require "luci.model.cbi.passwall.api.v2ray" local trojan_go = require "luci.model.cbi.passwall.api.trojan_go" function index() @@ -72,8 +71,6 @@ function index() entry({"admin", "services", appname, "brook_update"}, call("brook_update")).leaf = true entry({"admin", "services", appname, "xray_check"}, call("xray_check")).leaf = true entry({"admin", "services", appname, "xray_update"}, call("xray_update")).leaf = true - entry({"admin", "services", appname, "v2ray_check"}, call("v2ray_check")).leaf = true - entry({"admin", "services", appname, "v2ray_update"}, call("v2ray_update")).leaf = true entry({"admin", "services", appname, "trojan_go_check"}, call("trojan_go_check")).leaf = true entry({"admin", "services", appname, "trojan_go_update"}, call("trojan_go_update")).leaf = true end @@ -413,25 +410,6 @@ function xray_update() http_write_json(json) end -function v2ray_check() - local json = v2ray.to_check("") - http_write_json(json) -end - -function v2ray_update() - local json = nil - local task = http.formvalue("task") - if task == "extract" then - json = v2ray.to_extract(http.formvalue("file"), http.formvalue("subfix")) - elseif task == "move" then - json = v2ray.to_move(http.formvalue("file")) - else - json = v2ray.to_download(http.formvalue("url")) - end - - http_write_json(json) -end - function trojan_go_check() local json = trojan_go.to_check("") http_write_json(json) diff --git a/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/api/api.lua b/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/api/api.lua index c2bb2a8a88..7df868e616 100644 --- a/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/api/api.lua +++ b/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/api/api.lua @@ -149,31 +149,6 @@ function get_xray_version(file) return "" end -function get_v2ray_path() - local path = uci_get_type("global_app", "v2ray_file") - return path -end - -function get_v2ray_version(file) - if file == nil then file = get_v2ray_path() end - chmod_755(file) - if fs.access(file) then - if file == get_v2ray_path() then - local md5 = sys.exec("echo -n $(md5sum " .. file .. " | awk '{print $1}')") - if fs.access("/tmp/psw_" .. md5) then - return sys.exec("cat /tmp/psw_" .. md5) - else - local version = sys.exec("echo -n $(%s -version | awk '{print $2}' | sed -n 1P)" % file) - sys.call("echo '" .. version .. "' > " .. "/tmp/psw_" .. md5) - return version - end - else - return sys.exec("echo -n $(%s -version | awk '{print $2}' | sed -n 1P)" % file) - end - end - return "" -end - function get_trojan_go_path() local path = uci_get_type("global_app", "trojan_go_file") return path diff --git a/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/api/gen_xray.lua b/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/api/gen_xray.lua index 086dbdc46c..9bb67237c2 100644 --- a/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/api/gen_xray.lua +++ b/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/api/gen_xray.lua @@ -57,13 +57,13 @@ function gen_outbound(node, tag, relay_port) node.port = new_port sys.call(string.format('/usr/share/%s/app.sh run_socks "%s" "%s" "%s" "%s" "%s" "%s" "%s" "%s"> /dev/null', appname, + new_port, node_id, "127.0.0.1", new_port, string.format("/var/etc/%s/v2_%s_%s.json", appname, node_type, node_id), "0", "nil", - "4", relay_port and tostring(relay_port) or "" ) ) @@ -286,6 +286,38 @@ if node_section then local default_node_id = node.default_node or nil if default_node_id and default_node_id ~= "nil" then local default_node = ucursor:get_all(appname, default_node_id) + if "1" == node.default_proxy then + local node_id = node.main_node or nil + if node_id and node_id ~= "nil" then + if node_id == default_node_id then + else + new_port = get_new_port() + table.insert(inbounds, { + tag = "proxy_default", + listen = "127.0.0.1", + port = new_port, + protocol = "dokodemo-door", + settings = {network = "tcp,udp", address = default_node.address, port = tonumber(default_node.port)} + }) + if default_node.tls_serverName == nil then + default_node.tls_serverName = default_node.address + end + default_node.address = "127.0.0.1" + default_node.port = new_port + local node = ucursor:get_all(appname, node_id) + local outbound = gen_outbound(node, "main") + if outbound then + table.insert(outbounds, outbound) + local rule = { + type = "field", + inboundTag = {"proxy_default"}, + outboundTag = "main" + } + table.insert(rules, rule) + end + end + end + end local default_outbound = gen_outbound(default_node, "default") if default_outbound then table.insert(outbounds, default_outbound) diff --git a/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/api/v2ray.lua b/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/api/v2ray.lua deleted file mode 100644 index 60841d6bcb..0000000000 --- a/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/api/v2ray.lua +++ /dev/null @@ -1,173 +0,0 @@ -module("luci.model.cbi.passwall.api.v2ray", package.seeall) -local fs = require "nixio.fs" -local sys = require "luci.sys" -local util = require "luci.util" -local i18n = require "luci.i18n" -local api = require "luci.model.cbi.passwall.api.api" - -local v2ray_api = "https://api.github.com/repos/v2fly/v2ray-core/releases/latest" -local is_armv7 = false - -function to_check(arch) - local app_path = api.get_v2ray_path() or "" - if app_path == "" then - return { - code = 1, - error = i18n.translatef("You did not fill in the %s path. Please save and apply then update manually.", "V2ray") - } - end - if not arch or arch == "" then arch = api.auto_get_arch() end - - local file_tree, sub_version = api.get_file_info(arch) - if sub_version == "7" then is_armv7 = true end - - if file_tree == "" then - return { - code = 1, - error = i18n.translate("Can't determine ARCH, or ARCH not supported.") - } - end - - if file_tree == "amd64" then file_tree = "64" end - if file_tree == "386" then file_tree = "32" end - - local json = api.get_api_json(v2ray_api) - - if json.tag_name == nil then - return { - code = 1, - error = i18n.translate("Get remote version info failed.") - } - end - - local now_version = api.get_v2ray_version() - local remote_version = json.tag_name:match("[^v]+") - local needs_update = api.compare_versions(now_version, "<", remote_version) - local html_url, download_url - - if needs_update then - html_url = json.html_url - for _, v in ipairs(json.assets) do - if v.name and v.name:match("linux%-" .. file_tree) then - download_url = v.browser_download_url - break - end - end - end - - if needs_update and not download_url then - return { - code = 1, - now_version = now_version, - version = remote_version, - html_url = html_url, - error = i18n.translate("New version found, but failed to get new version download url.") - } - end - - return { - code = 0, - update = needs_update, - now_version = now_version, - version = remote_version, - url = {html = html_url, download = download_url} - } -end - -function to_download(url) - local app_path = api.get_v2ray_path() or "" - if app_path == "" then - return { - code = 1, - error = i18n.translatef("You did not fill in the %s path. Please save and apply then update manually.", "V2ray") - } - end - if not url or url == "" then - return {code = 1, error = i18n.translate("Download url is required.")} - end - - sys.call("/bin/rm -f /tmp/v2ray_download.*") - - local tmp_file = util.trim(util.exec("mktemp -u -t v2ray_download.XXXXXX")) - - local result = api.exec(api.curl, {api._unpack(api.curl_args), "-o", tmp_file, url}, nil, api.command_timeout) == 0 - - if not result then - api.exec("/bin/rm", {"-f", tmp_file}) - return { - code = 1, - error = i18n.translatef("File download failed or timed out: %s", url) - } - end - - return {code = 0, file = tmp_file} -end - -function to_extract(file, subfix) - local app_path = api.get_v2ray_path() or "" - if app_path == "" then - return { - code = 1, - error = i18n.translatef("You did not fill in the %s path. Please save and apply then update manually.", "V2ray") - } - end - - if not file or file == "" or not fs.access(file) then - return {code = 1, error = i18n.translate("File path required.")} - end - - if sys.exec("echo -n $(opkg list-installed | grep -c unzip)") ~= "1" then - api.exec("/bin/rm", {"-f", file}) - return { - code = 1, - error = i18n.translate("Not installed unzip, Can't unzip!") - } - end - - sys.call("/bin/rm -rf /tmp/v2ray_extract.*") - local tmp_dir = util.trim(util.exec("mktemp -d -t v2ray_extract.XXXXXX")) - - local output = {} - api.exec("/usr/bin/unzip", {"-o", file, "-d", tmp_dir}, - function(chunk) output[#output + 1] = chunk end) - - local files = util.split(table.concat(output)) - - api.exec("/bin/rm", {"-f", file}) - - return {code = 0, file = tmp_dir} -end - -function to_move(file) - local app_path = api.get_v2ray_path() or "" - if app_path == "" then - return { - code = 1, - error = i18n.translatef("You did not fill in the %s path. Please save and apply then update manually.", "V2ray") - } - end - if not file or file == "" then - sys.call("/bin/rm -rf /tmp/v2ray_extract.*") - return {code = 1, error = i18n.translate("Client file is required.")} - end - - if not arch or arch == "" then arch = api.auto_get_arch() end - local file_tree, sub_version = api.get_file_info(arch) - local t = "" - sys.call("/etc/init.d/passwall stop") - local result = nil - if sub_version and sub_version == "7" then t = "_armv7" end - result = api.exec("/bin/mv", { "-f", file .. "/v2ray" .. t, app_path }, nil, api.command_timeout) == 0 - sys.call("/bin/rm -rf /tmp/v2ray_extract.*") - if not result or not fs.access(app_path) then - return { - code = 1, - error = i18n.translatef("Can't move new file to path: %s", app_path) - } - end - - api.chmod_755(app_path) - sys.call("/etc/init.d/passwall restart >/dev/null 2>&1 &") - - return {code = 0} -end diff --git a/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/client/app_update.lua b/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/client/app_update.lua index dbbad8e5b0..d7f7e7e2db 100644 --- a/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/client/app_update.lua +++ b/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/client/app_update.lua @@ -10,7 +10,6 @@ s = m:section(TypedSection, "global_app", translate("App Update"), "") s.anonymous = true s:append(Template(appname .. "/app_update/xray_version")) -s:append(Template(appname .. "/app_update/v2ray_version")) s:append(Template(appname .. "/app_update/trojan_go_version")) s:append(Template(appname .. "/app_update/kcptun_version")) s:append(Template(appname .. "/app_update/brook_version")) @@ -19,10 +18,6 @@ o = s:option(Value, "xray_file", translatef("%s App Path", "Xray")) o.default = "/usr/bin/xray" o.rmempty = false -o = s:option(Value, "v2ray_file", translatef("%s App Path", "V2ray")) -o.default = "/usr/bin/v2ray" -o.rmempty = false - o = s:option(Value, "trojan_go_file", translatef("%s App Path", "Trojan-Go")) o.default = "/usr/bin/trojan-go" o.rmempty = false diff --git a/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/client/global.lua b/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/client/global.lua index 6d8f598c2e..19e65ce419 100644 --- a/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/client/global.lua +++ b/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/client/global.lua @@ -2,16 +2,27 @@ local d = require "luci.dispatcher" local uci = require"luci.model.uci".cursor() local api = require "luci.model.cbi.passwall.api.api" local appname = "passwall" +local has_xray = api.is_finded("xray") + +m = Map(appname) local nodes_table = {} for k, e in ipairs(api.get_valid_nodes()) do nodes_table[#nodes_table + 1] = { id = e[".name"], - remarks = e.remarks_name + remarks = e.remarks_name, + type = e["type"] } end local socks_table = {} +if tonumber(m:get("@global[0]", "tcp_node_socks") or 0) == 1 then + local id = "127.0.0.1" .. ":" .. m:get("@global[0]", "tcp_node_socks_port") + socks_table[#socks_table + 1] = { + id = id, + remarks = id .. " - " .. translate("TCP Node") + } +end uci:foreach(appname, "socks", function(s) if s.enabled == "1" and s.node then local id, remarks @@ -25,7 +36,7 @@ uci:foreach(appname, "socks", function(s) end end end - id = "0.0.0.0" .. ":" .. s.port + id = "127.0.0.1" .. ":" .. s.port socks_table[#socks_table + 1] = { id = id, remarks = id .. " - " .. (remarks or translate("Misconfigured")) @@ -55,7 +66,6 @@ local doh_validate = function(self, value, t) return nil, translate("DoH request address") .. " " .. translate("Format must be:") .. " URL,IP" end -m = Map(appname) local status = m:get("@global_other[0]", "status") or "" if status:find("big_icon") then m:append(Template(appname .. "/global/status")) @@ -74,11 +84,11 @@ o = s:taboption("Main", Flag, "enabled", translate("Main switch")) o.rmempty = false ---- TCP Node -o = s:taboption("Main", ListValue, "tcp_node", translate("TCP Node")) -o.title = translate("TCP Node") -o.description = "" ---o.description = translate("For proxy specific list.") ---o.description = o.description .. "
" +tcp_node = s:taboption("Main", ListValue, "tcp_node", translate("TCP Node")) +tcp_node.title = translate("TCP Node") +tcp_node.description = "" +--tcp_node.description = translate("For proxy specific list.") +--tcp_node.description = o.description .. "
" local current_node = luci.sys.exec(string.format("[ -f '/var/etc/%s/id/TCP' ] && echo -n $(cat /var/etc/%s/id/TCP)", appname, appname)) if current_node and current_node ~= "" and current_node ~= "nil" then local n = uci:get_all(appname, current_node) @@ -86,7 +96,7 @@ if current_node and current_node ~= "" and current_node ~= "nil" then if tonumber(m:get("@auto_switch[0]", "enable") or 0) == 1 then local remarks = api.get_full_node_remarks(n) local url = d.build_url("admin", "services", appname, "node_config", current_node) - o.description = o.description .. translatef("Current node: %s", string.format('%s', url, remarks)) .. "
" + tcp_node.description = tcp_node.description .. translatef("Current node: %s", string.format('%s', url, remarks)) .. "
" end if n.protocol and n.protocol == "_shunt" then uci:foreach(appname, "shunt_rules", function(e) @@ -95,7 +105,7 @@ if current_node and current_node ~= "" and current_node ~= "nil" then if n[id] and n[id] ~= "nil" then local url = d.build_url("admin", "services", appname, "node_config", n[id]) local r = api.get_full_node_remarks(uci:get_all(appname, n[id])) - o.description = o.description .. remarks .. ":" .. string.format('%s', url, r) .. "
" + tcp_node.description = tcp_node.description .. remarks .. ":" .. string.format('%s', url, r) .. "
" end end) local id = "default_node" @@ -103,22 +113,32 @@ if current_node and current_node ~= "" and current_node ~= "nil" then if n[id] and n[id] ~= "nil" then local url = d.build_url("admin", "services", appname, "node_config", n[id]) local r = api.get_full_node_remarks(uci:get_all(appname, n[id])) - o.description = o.description .. remarks .. ":" .. string.format('%s', url, r) .. "
" + tcp_node.description = tcp_node.description .. remarks .. ":" .. string.format('%s', url, r) .. "
" end end end end -o:value("nil", translate("Close")) -for k, v in pairs(nodes_table) do o:value(v.id, v.remarks) end +tcp_node:value("nil", translate("Close")) -o = s:taboption("Main", ListValue, "udp_node", translate("UDP Node")) -o:value("nil", translate("Close")) -o.title = translate("UDP Node") ---o.description = translate("For proxy game network, DNS hijack etc.") .. "
" .. translate("The selected server will not use Kcptun.") -o:value("tcp_", translate("Same as the tcp node")) ---o:value("tcp", translate("Same as the tcp node")) ---o:value("tcp_", translate("Same as the tcp node") .. "(" .. translate("New process") .. ")") -for k, v in pairs(nodes_table) do o:value(v.id, v.remarks) end +udp_node = s:taboption("Main", ListValue, "udp_node", translate("UDP Node")) +udp_node:value("nil", translate("Close")) +udp_node.title = translate("UDP Node") +--udp_node.description = translate("For proxy game network, DNS hijack etc.") .. "
" .. translate("The selected server will not use Kcptun.") +udp_node:value("tcp_", translate("Same as the tcp node")) +--udp_node:value("tcp", translate("Same as the tcp node")) +--udp_node:value("tcp_", translate("Same as the tcp node") .. "(" .. translate("New process") .. ")") + +tcp_node_socks = s:taboption("Main", Flag, "tcp_node_socks", translate("Enable") .. translate("TCP Node") .. "Socks") +o = s:taboption("Main", Value, "tcp_node_socks_port", "Socks" .. translate("Listen Port")) +o.default = 1080 +o.datatype = "port" +o:depends("tcp_node_socks", true) + +tcp_node_http = s:taboption("Main", Flag, "tcp_node_http", translate("Enable") .. translate("TCP Node") .. "Http") +o = s:taboption("Main", Value, "tcp_node_http_port", "HTTP" .. translate("Listen Port")) +o.default = 1180 +o.datatype = "port" +o:depends("tcp_node_http", true) s:tab("DNS", translate("DNS")) @@ -135,7 +155,7 @@ o = s:taboption("DNS", Value, "up_china_dns", translate("Local DNS") .. "(UDP)") o.description = translate("IP:Port mode acceptable, multi value split with english comma.") .. "
" .. translate("When the selection is not the default, this DNS is forced to be set to dnsmasq upstream DNS.") o.default = "default" o:value("default", translate("Default")) -if api.is_finded("xray") then +if has_xray then o:value("xray_doh", "Xray DNS(DoH)") end o:value("223.5.5.5", "223.5.5.5 (" .. translate("Ali") .. "DNS)") @@ -166,7 +186,7 @@ end if api.is_finded("dns2socks") then o:value("dns2socks", "dns2socks") end -if api.is_finded("xray") then +if has_xray then o:value("xray_doh", "Xray DNS(DoH)") end o:value("udp", translatef("Requery DNS By %s", translate("UDP Node"))) @@ -335,21 +355,35 @@ o = s:option(Flag, "enabled", translate("Enable")) o.default = 1 o.rmempty = false -o = s:option(ListValue, "node", translate("Socks Node")) -o:value("tcp", translate("Same as the tcp node")) -for k, v in pairs(nodes_table) do o:value(v.id, v.remarks) end +socks_node = s:option(ListValue, "node", translate("Socks Node")) o = s:option(Value, "port", "Socks" .. translate("Listen Port")) o.default = 9050 o.datatype = "port" o.rmempty = false -if api.is_finded("xray") or api.is_finded("v2ray") then +if has_xray then o = s:option(Value, "http_port", "HTTP" .. translate("Listen Port") .. " " .. translate("0 is not use")) o.default = 0 o.datatype = "port" end +for k, v in pairs(nodes_table) do + tcp_node:value(v.id, v.remarks) + tcp_node_socks:depends("tcp_node", v.id) + if has_xray then + tcp_node_http:depends("tcp_node", v.id) + end + udp_node:value(v.id, v.remarks) + if v.type == "Socks" then + if has_xray then + socks_node:value(v.id, v.remarks) + end + else + socks_node:value(v.id, v.remarks) + end +end + m:append(Template(appname .. "/global/footer")) --[[ diff --git a/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/client/node_config.lua b/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/client/node_config.lua index 6ae46e94c7..61186e3ce3 100644 --- a/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/client/node_config.lua +++ b/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/client/node_config.lua @@ -83,9 +83,6 @@ if api.is_finded("xray") then type:value("Xray", translate("Xray")) type.description = translate("Xray is currently directly compatible with V2ray and used.") end -if api.is_finded("v2ray") then - type:value("V2ray", translate("V2ray")) -end if api.is_finded("brook") then type:value("Brook", translate("Brook")) end @@ -113,7 +110,6 @@ protocol:value("shadowsocks", translate("Shadowsocks")) protocol:value("trojan", translate("Trojan")) protocol:value("_balancing", translate("Balancing")) protocol:value("_shunt", translate("Shunt")) -protocol:depends("type", "V2ray") protocol:depends("type", "Xray") local nodes_table = {} @@ -155,6 +151,14 @@ default_node:value("nil", translate("Close")) for k, v in pairs(nodes_table) do default_node:value(v.id, v.remarks) end default_node:depends("protocol", "_shunt") +default_proxy = s:option(Flag, "default_proxy", translate("Default") .. translate("Node") .. translate("Preproxy"), translate("Use the under node for the transit.")) +default_proxy.default = 0 +default_proxy:depends("protocol", "_shunt") + +o = s:option(ListValue, "main_node", " ") +for k, v in pairs(nodes_table) do o:value(v.id, v.remarks) end +o:depends("default_proxy", "1") + domainStrategy = s:option(ListValue, "domainStrategy", translate("Domain Strategy")) domainStrategy:value("AsIs") domainStrategy:value("IPIfNonMatch") @@ -209,12 +213,6 @@ address:depends({ type = "Xray", protocol = "http" }) address:depends({ type = "Xray", protocol = "socks" }) address:depends({ type = "Xray", protocol = "shadowsocks" }) address:depends({ type = "Xray", protocol = "trojan" }) -address:depends({ type = "V2ray", protocol = "vmess" }) -address:depends({ type = "V2ray", protocol = "vless" }) -address:depends({ type = "V2ray", protocol = "http" }) -address:depends({ type = "V2ray", protocol = "socks" }) -address:depends({ type = "V2ray", protocol = "shadowsocks" }) -address:depends({ type = "V2ray", protocol = "trojan" }) --[[ use_ipv6 = s:option(Flag, "use_ipv6", translate("Use IPv6")) @@ -232,12 +230,6 @@ use_ipv6:depends({ type = "Xray", protocol = "http" }) use_ipv6:depends({ type = "Xray", protocol = "socks" }) use_ipv6:depends({ type = "Xray", protocol = "shadowsocks" }) use_ipv6:depends({ type = "Xray", protocol = "trojan" }) -use_ipv6:depends({ type = "V2ray", protocol = "vmess" }) -use_ipv6:depends({ type = "V2ray", protocol = "vless" }) -use_ipv6:depends({ type = "V2ray", protocol = "http" }) -use_ipv6:depends({ type = "V2ray", protocol = "socks" }) -use_ipv6:depends({ type = "V2ray", protocol = "shadowsocks" }) -use_ipv6:depends({ type = "V2ray", protocol = "trojan" }) --]] port = s:option(Value, "port", translate("Port")) @@ -257,20 +249,12 @@ port:depends({ type = "Xray", protocol = "http" }) port:depends({ type = "Xray", protocol = "socks" }) port:depends({ type = "Xray", protocol = "shadowsocks" }) port:depends({ type = "Xray", protocol = "trojan" }) -port:depends({ type = "V2ray", protocol = "vmess" }) -port:depends({ type = "V2ray", protocol = "vless" }) -port:depends({ type = "V2ray", protocol = "http" }) -port:depends({ type = "V2ray", protocol = "socks" }) -port:depends({ type = "V2ray", protocol = "shadowsocks" }) -port:depends({ type = "V2ray", protocol = "trojan" }) username = s:option(Value, "username", translate("Username")) username:depends("type", "Socks") username:depends("type", "Naiveproxy") username:depends({ type = "Xray", protocol = "http" }) username:depends({ type = "Xray", protocol = "socks" }) -username:depends({ type = "V2ray", protocol = "http" }) -username:depends({ type = "V2ray", protocol = "socks" }) password = s:option(Value, "password", translate("Password")) password.password = true @@ -286,10 +270,6 @@ password:depends({ type = "Xray", protocol = "http" }) password:depends({ type = "Xray", protocol = "socks" }) password:depends({ type = "Xray", protocol = "shadowsocks" }) password:depends({ type = "Xray", protocol = "trojan" }) -password:depends({ type = "V2ray", protocol = "http" }) -password:depends({ type = "V2ray", protocol = "socks" }) -password:depends({ type = "V2ray", protocol = "shadowsocks" }) -password:depends({ type = "V2ray", protocol = "trojan" }) ss_encrypt_method = s:option(ListValue, "ss_encrypt_method", translate("Encrypt Method")) for a, t in ipairs(ss_encrypt_method_list) do ss_encrypt_method:value(t) end @@ -314,12 +294,10 @@ end security = s:option(ListValue, "security", translate("Encrypt Method")) for a, t in ipairs(security_list) do security:value(t) end security:depends({ type = "Xray", protocol = "vmess" }) -security:depends({ type = "V2ray", protocol = "vmess" }) encryption = s:option(Value, "encryption", translate("Encrypt Method")) encryption.default = "none" encryption:depends({ type = "Xray", protocol = "vless" }) -encryption:depends({ type = "V2ray", protocol = "vless" }) v_ss_encrypt_method = s:option(ListValue, "v_ss_encrypt_method", translate("Encrypt Method")) for a, t in ipairs(v_ss_encrypt_method_list) do v_ss_encrypt_method:value(t) end @@ -411,8 +389,6 @@ uuid = s:option(Value, "uuid", translate("ID")) uuid.password = true uuid:depends({ type = "Xray", protocol = "vmess" }) uuid:depends({ type = "Xray", protocol = "vless" }) -uuid:depends({ type = "V2ray", protocol = "vmess" }) -uuid:depends({ type = "V2ray", protocol = "vless" }) alter_id = s:option(Value, "alter_id", translate("Alter ID")) alter_id:depends("protocol", "vmess") @@ -433,11 +409,6 @@ tls:depends({ type = "Xray", protocol = "vless" }) tls:depends({ type = "Xray", protocol = "socks" }) tls:depends({ type = "Xray", protocol = "trojan" }) tls:depends({ type = "Xray", protocol = "shadowsocks" }) -tls:depends({ type = "V2ray", protocol = "vmess" }) -tls:depends({ type = "V2ray", protocol = "vless" }) -tls:depends({ type = "V2ray", protocol = "socks" }) -tls:depends({ type = "V2ray", protocol = "shadowsocks" }) -tls:depends({ type = "Xray", protocol = "trojan" }) tls:depends("type", "Trojan") tls:depends("type", "Trojan-Plus") tls:depends("type", "Trojan-Go") @@ -526,11 +497,6 @@ transport:depends({ type = "Xray", protocol = "vless" }) transport:depends({ type = "Xray", protocol = "socks" }) transport:depends({ type = "Xray", protocol = "shadowsocks" }) transport:depends({ type = "Xray", protocol = "trojan" }) -transport:depends({ type = "V2ray", protocol = "vmess" }) -transport:depends({ type = "V2ray", protocol = "vless" }) -transport:depends({ type = "V2ray", protocol = "socks" }) -transport:depends({ type = "V2ray", protocol = "shadowsocks" }) -transport:depends({ type = "V2ray", protocol = "trojan" }) --[[ ss_transport = s:option(ListValue, "ss_transport", translate("Transport")) @@ -538,7 +504,6 @@ ss_transport:value("ws", "WebSocket") ss_transport:value("h2", "HTTP/2") ss_transport:value("h2+ws", "HTTP/2 & WebSocket") ss_transport:depends({ type = "Xray", protocol = "shadowsocks" }) -ss_transport:depends({ type = "V2ray", protocol = "shadowsocks" }) ]]-- -- [[ TCP部分 ]]-- @@ -658,11 +623,6 @@ mux:depends({ type = "Xray", protocol = "vless", xtls = false }) mux:depends({ type = "Xray", protocol = "http" }) mux:depends({ type = "Xray", protocol = "socks" }) mux:depends({ type = "Xray", protocol = "shadowsocks" }) -mux:depends({ type = "V2ray", protocol = "vmess" }) -mux:depends({ type = "V2ray", protocol = "vless" }) -mux:depends({ type = "V2ray", protocol = "http" }) -mux:depends({ type = "V2ray", protocol = "socks" }) -mux:depends({ type = "V2ray", protocol = "shadowsocks" }) mux:depends("type", "Trojan-Go") mux_concurrency = s:option(Value, "mux_concurrency", translate("Mux Concurrency")) @@ -674,7 +634,6 @@ mux_concurrency:depends("mux", "1") tcp_socks = s:option(Flag, "tcp_socks", translate("TCP Open Socks"), translate("When using this TCP node, whether to open the socks proxy at the same time")) tcp_socks.default = 0 tcp_socks:depends("type", "Xray") -tcp_socks:depends("type", "V2ray") tcp_socks_port = s:option(Value, "tcp_socks_port", "Socks " .. translate("Port"), translate("Do not conflict with other ports")) tcp_socks_port.datatype = "port" diff --git a/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/client/node_list.lua b/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/client/node_list.lua index 4c194ce938..f34553fac4 100644 --- a/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/client/node_list.lua +++ b/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/client/node_list.lua @@ -63,7 +63,7 @@ if nodes_display:find("compact_display_nodes") then local remarks = m:get(n, "remarks") or "" local type = m:get(n, "type") or "" str = str .. string.format("", appname, n, type) - if type == "Xray" or type == "V2ray" then + if type == "Xray" then local protocol = m:get(n, "protocol") if protocol == "_balancing" then type = type .. " 负载均衡" @@ -106,7 +106,7 @@ else local v = Value.cfgvalue(t, n) if v then result = translate(v) - if v == "Xray" or v == "V2ray" then + if v == "Xray" then local protocol = m:get(n, "protocol") if protocol == "_balancing" then result = result .. " 负载均衡" diff --git a/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/client/rule.lua b/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/client/rule.lua index 51fb136942..7ae5807c99 100644 --- a/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/client/rule.lua +++ b/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/client/rule.lua @@ -49,7 +49,7 @@ for e = 0, 23 do o:value(e, e .. translate("oclock")) end o.default = 0 o:depends("auto_update", 1) -s = m:section(TypedSection, "shunt_rules", "Xray/V2ray" .. translate("Shunt") .. translate("Rule")) +s = m:section(TypedSection, "shunt_rules", "Xray" .. translate("Shunt") .. translate("Rule")) s.template = "cbi/tblsection" s.anonymous = false s.addremove = true diff --git a/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/client/shunt_rules.lua b/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/client/shunt_rules.lua index ce6b3cc34f..94af7757c6 100644 --- a/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/client/shunt_rules.lua +++ b/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/client/shunt_rules.lua @@ -1,7 +1,7 @@ local d = require "luci.dispatcher" local appname = "passwall" -m = Map(appname, "Xray/V2ray" .. translate("Shunt") .. translate("Rule")) +m = Map(appname, "Xray" .. translate("Shunt") .. translate("Rule")) m.redirect = d.build_url("admin", "services", appname) s = m:section(NamedSection, arg[1], "shunt_rules", "") diff --git a/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/server/api/app.lua b/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/server/api/app.lua index dd9e62994c..e7372f7e26 100755 --- a/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/server/api/app.lua +++ b/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/server/api/app.lua @@ -112,9 +112,6 @@ local function start() elseif type == "Xray" then config = require("luci.model.cbi.passwall.server.api.xray").gen_config(user) bin = ln_start(_api.get_xray_path(), "xray", "-config=" .. config_file, log_path) - elseif type == "V2ray" then - config = require("luci.model.cbi.passwall.server.api.v2ray").gen_config(user) - bin = ln_start(_api.get_v2ray_path(), "v2ray", "-config=" .. config_file, log_path) elseif type == "Trojan" then config = require("luci.model.cbi.passwall.server.api.trojan").gen_config(user) bin = ln_start("/usr/sbin/trojan", "trojan", "-c " .. config_file, log_path) diff --git a/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/server/api/v2ray.lua b/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/server/api/v2ray.lua deleted file mode 100644 index d4da4ab8fa..0000000000 --- a/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/server/api/v2ray.lua +++ /dev/null @@ -1,177 +0,0 @@ -module("luci.model.cbi.passwall.server.api.v2ray", package.seeall) -local ucic = require"luci.model.uci".cursor() - -function gen_config(user) - local settings = nil - local routing = nil - local outbounds = { - {protocol = "freedom", tag = "direct"}, {protocol = "blackhole", tag = "blocked"} - } - - if user.protocol == "vmess" or user.protocol == "vless" then - if user.uuid then - local clients = {} - for i = 1, #user.uuid do - clients[i] = { - id = user.uuid[i], - flow = user.flow or nil, - level = tonumber(user.level), - alterId = tonumber(user.alter_id) - } - end - settings = { - clients = clients, - decryption = user.decryption or "none" - } - end - elseif user.protocol == "socks" then - settings = { - auth = (user.auth and user.auth == "1") and "password" or "noauth", - accounts = (user.auth and user.auth == "1") and { - { - user = user.username, - pass = user.password - } - } - } - elseif user.protocol == "http" then - settings = { - allowTransparent = false, - accounts = (user.auth and user.auth == "1") and { - { - user = user.username, - pass = user.password - } - } - } - user.transport = "tcp" - user.tcp_guise = "none" - elseif user.protocol == "shadowsocks" then - settings = { - method = user.method, - password = user.password, - level = tonumber(user.level) or 1, - network = user.ss_network or "TCP,UDP" - } - elseif user.protocol == "trojan" then - if user.uuid then - local clients = {} - for i = 1, #user.uuid do - clients[i] = { - password = user.uuid[i], - level = tonumber(user.level) - } - end - settings = { - clients = clients - } - end - elseif user.protocol == "mtproto" then - settings = { - users = { - { - level = tonumber(user.level) or 1, - secret = (user.password == nil) and "" or user.password - } - } - } - end - - routing = { - domainStrategy = "IPOnDemand", - rules = { - { - type = "field", - ip = {"10.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16"}, - outboundTag = (user.accept_lan == nil or user.accept_lan == "0") and "blocked" or "direct" - } - } - } - - if user.transit_node and user.transit_node ~= "nil" then - local gen_v2ray = require("luci.model.cbi.passwall.api.gen_v2ray") - local client = gen_v2ray.gen_outbound(ucic:get_all("passwall", user.transit_node), "transit") - table.insert(outbounds, 1, client) - end - - local config = { - log = { - -- error = "/var/etc/passwall_server/log/" .. user[".name"] .. ".log", - loglevel = (user.log and user.log == "1") and user.loglevel or "none" - }, - -- 传入连接 - inbounds = { - { - listen = (user.bind_local == "1") and "127.0.0.1" or nil, - port = tonumber(user.port), - protocol = user.protocol, - settings = settings, - streamSettings = { - network = user.transport, - security = "none", - tlsSettings = (user.tls and user.tls == "1") and { - disableSystemRoot = false, - certificates = { - { - certificateFile = user.tls_certificateFile, - keyFile = user.tls_keyFile - } - } - } or nil, - tcpSettings = (user.transport == "tcp") and { - header = { - type = user.tcp_guise, - request = (user.tcp_guise == "http") and { - path = user.tcp_guise_http_path or {"/"}, - headers = { - Host = user.tcp_guise_http_host or {} - } - } or nil - } - } or nil, - kcpSettings = (user.transport == "mkcp") and { - mtu = tonumber(user.mkcp_mtu), - tti = tonumber(user.mkcp_tti), - uplinkCapacity = tonumber(user.mkcp_uplinkCapacity), - downlinkCapacity = tonumber(user.mkcp_downlinkCapacity), - congestion = (user.mkcp_congestion == "1") and true or false, - readBufferSize = tonumber(user.mkcp_readBufferSize), - writeBufferSize = tonumber(user.mkcp_writeBufferSize), - seed = (user.mkcp_seed and user.mkcp_seed ~= "") and user.mkcp_seed or nil, - header = {type = user.mkcp_guise} - } or nil, - wsSettings = (user.transport == "ws") and { - acceptProxyProtocol = false, - headers = (user.ws_host) and {Host = user.ws_host} or nil, - path = user.ws_path - } or nil, - httpSettings = (user.transport == "h2") and { - path = user.h2_path, host = user.h2_host - } or nil, - dsSettings = (user.transport == "ds") and { - path = user.ds_path - } or nil, - quicSettings = (user.transport == "quic") and { - security = user.quic_security, - key = user.quic_key, - header = {type = user.quic_guise} - } or nil - } - } - }, - -- 传出连接 - outbounds = outbounds, - routing = routing - } - - if user.tls and user.tls == "1" then - config.inbounds[1].streamSettings.security = "tls" - end - - if user.transport == "mkcp" or user.transport == "quic" then - config.inbounds[1].streamSettings.security = "none" - config.inbounds[1].streamSettings.tlsSettings = nil - end - - return config -end diff --git a/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/server/index.lua b/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/server/index.lua index 21020bced7..b452a89512 100644 --- a/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/server/index.lua +++ b/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/server/index.lua @@ -47,7 +47,7 @@ e = t:option(DummyValue, "type", translate("Type")) e.cfgvalue = function(t, n) local v = Value.cfgvalue(t, n) if v then - if v == "Xray" or v == "V2ray" then + if v == "Xray" then local protocol = m:get(n, "protocol") return v .. " -> " .. protocol end diff --git a/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/server/user.lua b/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/server/user.lua index 863cc07131..bd2df888d8 100644 --- a/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/server/user.lua +++ b/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/server/user.lua @@ -80,9 +80,6 @@ end if api.is_finded("xray") then type:value("Xray", translate("Xray")) end -if api.is_finded("v2ray") then - type:value("V2ray", translate("V2ray")) -end if api.is_finded("brook") then type:value("Brook", translate("Brook")) end @@ -107,7 +104,6 @@ protocol:value("shadowsocks", "Shadowsocks") protocol:value("trojan", "Trojan") protocol:value("mtproto", "MTProto") protocol:depends("type", "Xray") -protocol:depends("type", "V2ray") -- Brook协议 brook_protocol = s:option(ListValue, "brook_protocol", translate("Protocol")) @@ -142,8 +138,6 @@ end auth:depends("type", "Socks") auth:depends({ type = "Xray", protocol = "socks" }) auth:depends({ type = "Xray", protocol = "http" }) -auth:depends({ type = "V2ray", protocol = "socks" }) -auth:depends({ type = "V2ray", protocol = "http" }) username = s:option(Value, "username", translate("Username")) username:depends("auth", "1") @@ -155,11 +149,9 @@ password:depends("type", "SS") password:depends("type", "SSR") password:depends("type", "Brook") password:depends({ type = "Xray", protocol = "shadowsocks" }) -password:depends({ type = "V2ray", protocol = "shadowsocks" }) mtproto_password = s:option(Value, "mtproto_password", translate("Password"), translate("The MTProto protocol must be 32 characters and can only contain characters from 0 to 9 and a to f.")) mtproto_password:depends({ type = "Xray", protocol = "mtproto" }) -mtproto_password:depends({ type = "V2ray", protocol = "mtproto" }) mtproto_password.default = arg[1] function mtproto_password.cfgvalue(self, section) return m:get(section, "password") @@ -171,7 +163,6 @@ end decryption = s:option(Value, "decryption", translate("Encrypt Method")) decryption.default = "none" decryption:depends({ type = "Xray", protocol = "vless" }) -decryption:depends({ type = "V2ray", protocol = "vless" }) ss_encrypt_method = s:option(ListValue, "ss_encrypt_method", translate("Encrypt Method")) for a, t in ipairs(ss_encrypt_method_list) do ss_encrypt_method:value(t) end @@ -196,7 +187,6 @@ end v_ss_encrypt_method = s:option(ListValue, "v_ss_encrypt_method", translate("Encrypt Method")) for a, t in ipairs(v_ss_encrypt_method_list) do v_ss_encrypt_method:value(t) end v_ss_encrypt_method:depends({ type = "Xray", protocol = "shadowsocks" }) -v_ss_encrypt_method:depends({ type = "V2ray", protocol = "shadowsocks" }) function v_ss_encrypt_method.cfgvalue(self, section) return m:get(section, "method") end @@ -210,7 +200,6 @@ ss_network:value("tcp", "TCP") ss_network:value("udp", "UDP") ss_network:value("tcp,udp", "TCP,UDP") ss_network:depends({ type = "Xray", protocol = "shadowsocks" }) -ss_network:depends({ type = "V2ray", protocol = "shadowsocks" }) ssr_protocol = s:option(ListValue, "ssr_protocol", translate("Protocol")) for a, t in ipairs(ssr_protocol_list) do ssr_protocol:value(t) end @@ -250,16 +239,12 @@ end uuid:depends({ type = "Xray", protocol = "vmess" }) uuid:depends({ type = "Xray", protocol = "vless" }) uuid:depends({ type = "Xray", protocol = "trojan" }) -uuid:depends({ type = "V2ray", protocol = "vmess" }) -uuid:depends({ type = "V2ray", protocol = "vless" }) -uuid:depends({ type = "V2ray", protocol = "trojan" }) uuid:depends("type", "Trojan") uuid:depends("type", "Trojan-Go") uuid:depends("type", "Trojan-Plus") alter_id = s:option(Value, "alter_id", translate("Alter ID")) alter_id:depends({ type = "Xray", protocol = "vmess" }) -alter_id:depends({ type = "V2ray", protocol = "vmess" }) level = s:option(Value, "level", translate("User Level")) level:depends({ type = "Xray", protocol = "vmess" }) @@ -267,11 +252,6 @@ level:depends({ type = "Xray", protocol = "vless" }) level:depends({ type = "Xray", protocol = "shadowsocks" }) level:depends({ type = "Xray", protocol = "trojan" }) level:depends({ type = "Xray", protocol = "mtproto" }) -level:depends({ type = "V2ray", protocol = "vmess" }) -level:depends({ type = "V2ray", protocol = "vless" }) -level:depends({ type = "V2ray", protocol = "shadowsocks" }) -level:depends({ type = "V2ray", protocol = "trojan" }) -level:depends({ type = "V2ray", protocol = "mtproto" }) tls = s:option(Flag, "tls", translate("TLS")) tls.default = 0 @@ -296,10 +276,6 @@ tls:depends({ type = "Xray", protocol = "vless" }) tls:depends({ type = "Xray", protocol = "socks" }) tls:depends({ type = "Xray", protocol = "shadowsocks" }) tls:depends({ type = "Xray", protocol = "trojan" }) -tls:depends({ type = "V2ray", protocol = "vmess" }) -tls:depends({ type = "V2ray", protocol = "vless" }) -tls:depends({ type = "V2ray", protocol = "socks" }) -tls:depends({ type = "V2ray", protocol = "shadowsocks" }) tls:depends("type", "Trojan") tls:depends("type", "Trojan-Plus") tls:depends("type", "Trojan-Go") @@ -374,11 +350,6 @@ transport:depends({ type = "Xray", protocol = "vless" }) transport:depends({ type = "Xray", protocol = "socks" }) transport:depends({ type = "Xray", protocol = "shadowsocks" }) transport:depends({ type = "Xray", protocol = "trojan" }) -transport:depends({ type = "V2ray", protocol = "vmess" }) -transport:depends({ type = "V2ray", protocol = "vless" }) -transport:depends({ type = "V2ray", protocol = "socks" }) -transport:depends({ type = "V2ray", protocol = "shadowsocks" }) -transport:depends({ type = "V2ray", protocol = "trojan" }) trojan_transport = s:option(ListValue, "trojan_transport", translate("Transport")) trojan_transport:value("original", "Original") @@ -512,15 +483,11 @@ quic_guise:depends("transport", "quic") acceptProxyProtocol = s:option(Flag, "acceptProxyProtocol", translate("acceptProxyProtocol"), translate("Whether to receive PROXY protocol, when this node want to be fallback or forwarded by proxy, it must be enable, otherwise it cannot be used.")) acceptProxyProtocol:depends({ type = "Xray", transport = "tcp" }) acceptProxyProtocol:depends({ type = "Xray", transport = "ws" }) -acceptProxyProtocol:depends({ type = "V2ray", transport = "tcp" }) -acceptProxyProtocol:depends({ type = "V2ray", transport = "ws" }) -- [[ Fallback部分 ]]-- fallback = s:option(Flag, "fallback", translate("Fallback")) fallback:depends({ type = "Xray", protocol = "vless", transport = "tcp" }) fallback:depends({ type = "Xray", protocol = "trojan", transport = "tcp" }) -fallback:depends({ type = "V2ray", protocol = "vless", transport = "tcp" }) -fallback:depends({ type = "V2ray", protocol = "trojan", transport = "tcp" }) --[[ fallback_alpn = s:option(Value, "fallback_alpn", "Fallback alpn") @@ -580,17 +547,15 @@ remote_port:depends("remote_enable", 1) bind_local = s:option(Flag, "bind_local", translate("Bind Local"), translate("When selected, it can only be accessed locally, It is recommended to turn on when using reverse proxies or be fallback.")) bind_local.default = "0" bind_local:depends("type", "Xray") -bind_local:depends("type", "V2ray") accept_lan = s:option(Flag, "accept_lan", translate("Accept LAN Access"), translate("When selected, it can accessed lan , this will not be safe!")) accept_lan.default = "0" accept_lan.rmempty = false accept_lan:depends("type", "Xray") -accept_lan:depends("type", "V2ray") local nodes_table = {} for k, e in ipairs(api.get_valid_nodes()) do - if e.node_type == "normal" and e.type == "Xray" or e.type == "V2ray" then + if e.node_type == "normal" and e.type == "Xray" then nodes_table[#nodes_table + 1] = { id = e[".name"], remarks = e.remarks_name @@ -603,7 +568,6 @@ transit_node:value("nil", translate("Close")) for k, v in pairs(nodes_table) do transit_node:value(v.id, v.remarks) end transit_node.default = "nil" transit_node:depends("type", "Xray") -transit_node:depends("type", "V2ray") log = s:option(Flag, "log", translate("Enable") .. translate("Log")) log.default = "1" @@ -616,7 +580,6 @@ loglevel:value("info") loglevel:value("warning") loglevel:value("error") loglevel:depends({ type = "Xray", log = true }) -loglevel:depends({ type = "V2ray", log = true }) trojan_loglevel = s:option(ListValue, "trojan_loglevel", translate("Log Level")) trojan_loglevel.default = "2" diff --git a/package/lienol/luci-app-passwall/luasrc/view/passwall/app_update/v2ray_version.htm b/package/lienol/luci-app-passwall/luasrc/view/passwall/app_update/v2ray_version.htm deleted file mode 100644 index 467a5ad229..0000000000 --- a/package/lienol/luci-app-passwall/luasrc/view/passwall/app_update/v2ray_version.htm +++ /dev/null @@ -1,172 +0,0 @@ -<% -local v2ray_version = require "luci.model.cbi.passwall.api.api".get_v2ray_version() --%> - - - -
- -
-
- 【 <%=v2ray_version%> 】 - - -
-
-
\ No newline at end of file diff --git a/package/lienol/luci-app-passwall/luasrc/view/passwall/node_list/link_share_man.htm b/package/lienol/luci-app-passwall/luasrc/view/passwall/node_list/link_share_man.htm index c22b9b4883..75aa1eb9b7 100644 --- a/package/lienol/luci-app-passwall/luasrc/view/passwall/node_list/link_share_man.htm +++ b/package/lienol/luci-app-passwall/luasrc/view/passwall/node_list/link_share_man.htm @@ -1,8 +1,6 @@ <%+cbi/valueheader%> <% local dsp = require "luci.dispatcher" -local api = require "luci.model.cbi.passwall.api.api" - -%> - -
-

- <%:Collecting data...%> -

-
diff --git a/package/lean/luci-app-uugamebooster/luasrc/view/uuplugin/uuplugin_qcode.htm b/package/lean/luci-app-uugamebooster/luasrc/view/uuplugin/uuplugin_qcode.htm new file mode 100644 index 0000000000..12cb2e9743 --- /dev/null +++ b/package/lean/luci-app-uugamebooster/luasrc/view/uuplugin/uuplugin_qcode.htm @@ -0,0 +1,6 @@ + +
+

+ +

+
diff --git a/package/lean/luci-app-uugamebooster/luasrc/view/uuplugin/uuplugin_status.htm b/package/lean/luci-app-uugamebooster/luasrc/view/uuplugin/uuplugin_status.htm new file mode 100644 index 0000000000..c4930636ee --- /dev/null +++ b/package/lean/luci-app-uugamebooster/luasrc/view/uuplugin/uuplugin_status.htm @@ -0,0 +1,21 @@ + + +
+

+ <%:Collecting data...%> +

+
diff --git a/package/lean/luci-app-uugamebooster/po/zh-cn/uugamebooster.po b/package/lean/luci-app-uugamebooster/po/zh-cn/uugamebooster.po deleted file mode 100644 index e91029e72c..0000000000 --- a/package/lean/luci-app-uugamebooster/po/zh-cn/uugamebooster.po +++ /dev/null @@ -1,9 +0,0 @@ - -msgid "Enable" -msgstr "启用" - -msgid "UU Game Booster" -msgstr "网易UU网游加速器" - -msgid "A Paid Game Acceleration service" -msgstr "一个富家子弟用的游戏加速器" diff --git a/package/lean/luci-app-uugamebooster/po/zh-cn/uuplugin.po b/package/lean/luci-app-uugamebooster/po/zh-cn/uuplugin.po new file mode 100644 index 0000000000..d2a3ddbb4e --- /dev/null +++ b/package/lean/luci-app-uugamebooster/po/zh-cn/uuplugin.po @@ -0,0 +1,12 @@ + +msgid "Enable" +msgstr "启用" + +msgid "UU GameAcc" +msgstr "UU游戏加速器" + +msgid "UU Game Accelerator" +msgstr "UU游戏加速器" + +msgid "A Paid Game Acceleration service" +msgstr "一个富家子弟用的主机游戏加速器 (开启服务后,使用手机APP绑定路由器并指定加速主机)" diff --git a/package/lean/luci-app-uugamebooster/root/etc/config/uugamebooster b/package/lean/luci-app-uugamebooster/root/etc/config/uugamebooster deleted file mode 100644 index ed8a894041..0000000000 --- a/package/lean/luci-app-uugamebooster/root/etc/config/uugamebooster +++ /dev/null @@ -1,4 +0,0 @@ - -config uugamebooster 'uugamebooster' - option enabled '0' - diff --git a/package/lean/luci-app-uugamebooster/root/etc/config/uuplugin b/package/lean/luci-app-uugamebooster/root/etc/config/uuplugin new file mode 100644 index 0000000000..3df3127498 --- /dev/null +++ b/package/lean/luci-app-uugamebooster/root/etc/config/uuplugin @@ -0,0 +1,4 @@ + +config uuplugin 'uuplugin' + option enabled '0' + diff --git a/package/lean/luci-app-uugamebooster/root/etc/init.d/uuplugin b/package/lean/luci-app-uugamebooster/root/etc/init.d/uuplugin new file mode 100755 index 0000000000..6eec9607de --- /dev/null +++ b/package/lean/luci-app-uugamebooster/root/etc/init.d/uuplugin @@ -0,0 +1,23 @@ +#!/bin/sh /etc/rc.common + +START=99 +STOP=10 + +USE_PROCD=1 + +NAME="uugamebooster" +UU_BIN="/usr/share/uugamebooster/uuplugin" +UU_CONF="/usr/share/uugamebooster/uu.conf" +UU_LOGFILE="/tmp/uugamebooster.log" + +start_service() { + config_load uuplugin + local enable + config_get_bool enable uuplugin enabled + if [ "$enable" -eq 1 ]; then + procd_open_instance + procd_set_param command $UU_BIN $UU_CONF >$UU_LOGFILE 2>&1 + procd_set_param respawn + procd_close_instance + fi +} diff --git a/package/lean/luci-app-uugamebooster/root/etc/uci-defaults/45_luci-uugamebooster b/package/lean/luci-app-uugamebooster/root/etc/uci-defaults/45_luci-uugamebooster deleted file mode 100644 index 4eeb70d8e1..0000000000 --- a/package/lean/luci-app-uugamebooster/root/etc/uci-defaults/45_luci-uugamebooster +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/sh - -uci -q batch <<-EOF >/dev/null - delete ucitrack.@uugamebooster[-1] - add ucitrack uugamebooster - set ucitrack.@uugamebooster[-1].init=uugamebooster - commit ucitrack -EOF - -rm -f /tmp/luci-indexcache -exit 0 diff --git a/package/lean/luci-app-uugamebooster/root/etc/uci-defaults/45_luci-uuplugin b/package/lean/luci-app-uugamebooster/root/etc/uci-defaults/45_luci-uuplugin new file mode 100644 index 0000000000..e65f87ecec --- /dev/null +++ b/package/lean/luci-app-uugamebooster/root/etc/uci-defaults/45_luci-uuplugin @@ -0,0 +1,11 @@ +#!/bin/sh + +uci -q batch <<-EOF >/dev/null + delete ucitrack.@uuplugin[-1] + add ucitrack uuplugin + set ucitrack.@uuplugin[-1].init=uuplugin + commit ucitrack +EOF + +rm -f /tmp/luci-indexcache +exit 0 diff --git a/package/lean/uugamebooster/Makefile b/package/lean/uugamebooster/Makefile index cdf7226bed..10a075b0bc 100644 --- a/package/lean/uugamebooster/Makefile +++ b/package/lean/uugamebooster/Makefile @@ -13,7 +13,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=uugamebooster PKG_VERSION:=v2.7.2 -PKG_RELEASE:=6 +PKG_RELEASE:=5 include $(INCLUDE_DIR)/package.mk @@ -70,8 +70,8 @@ define Build/Compile endef define Package/$(PKG_NAME)/install - $(INSTALL_DIR) $(1)/etc/init.d - $(INSTALL_BIN) ./files/uugamebooster.init $(1)/etc/init.d/uugamebooster + # $(INSTALL_DIR) $(1)/etc/init.d + # $(INSTALL_BIN) ./files/uugamebooster.init $(1)/etc/init.d/uuplugin $(INSTALL_DIR) $(1)/usr/share/$(PKG_NAME) $(INSTALL_BIN) $(UNTAR_DIR)/uuplugin $(1)/usr/share/$(PKG_NAME)/uuplugin diff --git a/package/lean/uugamebooster/files/uugamebooster.init b/package/lean/uugamebooster/files/uugamebooster.init deleted file mode 100755 index 7fa2ea8acc..0000000000 --- a/package/lean/uugamebooster/files/uugamebooster.init +++ /dev/null @@ -1,18 +0,0 @@ -#!/bin/sh /etc/rc.common - -START=99 -STOP=10 - -USE_PROCD=1 - -NAME="uugamebooster" -UU_BIN="/usr/share/uugamebooster/uuplugin" -UU_CONF="/usr/share/uugamebooster/uu.conf" -UU_LOGFILE="/tmp/uugamebooster.log" - -start_service() { - procd_open_instance - procd_set_param command $UU_BIN $UU_CONF >$UU_LOGFILE 2>&1 - procd_set_param respawn - procd_close_instance -} From 67e3f5351f0e9f7974dd6ccaab7e20a3ead7f8d1 Mon Sep 17 00:00:00 2001 From: Mattraks <16359027+Mattraks@users.noreply.github.com> Date: Thu, 21 Jan 2021 12:10:48 +0800 Subject: [PATCH 11/20] luci-app-ssr-plus: sync with upstream source Signed-off-by: CN_SZTL --- package/lean/luci-app-ssr-plus/Makefile | 102 +++++++++++------- .../luasrc/view/shadowsocksr/ssrurl.htm | 2 +- .../root/etc/init.d/shadowsocksr | 70 +++++++++--- .../usr/share/shadowsocksr/gen_config.lua | 2 +- package/lean/shadowsocksr-libev/Makefile | 18 +--- 5 files changed, 123 insertions(+), 71 deletions(-) diff --git a/package/lean/luci-app-ssr-plus/Makefile b/package/lean/luci-app-ssr-plus/Makefile index 21104075ad..395f4e4864 100644 --- a/package/lean/luci-app-ssr-plus/Makefile +++ b/package/lean/luci-app-ssr-plus/Makefile @@ -2,7 +2,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=luci-app-ssr-plus PKG_VERSION:=182 -PKG_RELEASE:=5 +PKG_RELEASE:=9 define Package/$(PKG_NAME)/conffiles /etc/config/shadowsocksr @@ -10,69 +10,89 @@ define Package/$(PKG_NAME)/conffiles endef define Package/$(PKG_NAME)/config -config PACKAGE_$(PKG_NAME)_INCLUDE_Xray - bool "Include Xray" - default y if i386||x86_64||arm||aarch64 - -config PACKAGE_$(PKG_NAME)_INCLUDE_Trojan - bool "Include Trojan" - default y if i386||x86_64||arm||aarch64 - -config PACKAGE_$(PKG_NAME)_INCLUDE_Redsocks2 - bool "Include Redsocks2" - default y if i386||x86_64||arm||aarch64 +config PACKAGE_$(PKG_NAME)_INCLUDE_Kcptun + bool "Include Kcptun" + default n config PACKAGE_$(PKG_NAME)_INCLUDE_NaiveProxy bool "Include NaiveProxy" depends on !(arc||armeb||mips||mips64||powerpc) default y if i386||x86_64||arm||aarch64 -config PACKAGE_$(PKG_NAME)_INCLUDE_V2ray - bool "Include V2ray" +config PACKAGE_$(PKG_NAME)_INCLUDE_Redsocks2 + bool "Include Redsocks2" default n -config PACKAGE_$(PKG_NAME)_INCLUDE_Trojan_Go - bool "Include Trojan-Go" - default n +config PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks + bool "Include Shadowsocks-libev" + default y -config PACKAGE_$(PKG_NAME)_INCLUDE_Kcptun - bool "Include Kcptun" - default n - -config PACKAGE_$(PKG_NAME)_INCLUDE_V2ray_plugin - bool "Include Shadowsocks V2ray Plugin" - default n +config PACKAGE_$(PKG_NAME)_INCLUDE_ShadowsocksR + bool "Include ShadowsocksR-libev" + default y config PACKAGE_$(PKG_NAME)_INCLUDE_ShadowsocksR_Server bool "Include ShadowsocksR Server" default y if i386||x86_64||arm||aarch64 + +config PACKAGE_$(PKG_NAME)_INCLUDE_Simple_Obfs + bool "Include Shadowsocks Simple Obfs Plugin" + default y + +config PACKAGE_$(PKG_NAME)_INCLUDE_Trojan + bool "Include Trojan" + default y if i386||arm + +config PACKAGE_$(PKG_NAME)_INCLUDE_Trojan_Go + bool "Include Trojan-Go" + default y if x86_64||aarch64 + +config PACKAGE_$(PKG_NAME)_INCLUDE_V2ray + bool "Include V2ray" + default n + +config PACKAGE_$(PKG_NAME)_INCLUDE_V2ray_Plugin + bool "Include Shadowsocks V2ray Plugin" + default n + +config PACKAGE_$(PKG_NAME)_INCLUDE_Xray + bool "Include Xray" + default y if i386||x86_64||arm||aarch64 endef PKG_CONFIG_DEPENDS:= \ - CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_V2ray_plugin \ - CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_V2ray \ - CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_Xray \ - CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_Trojan \ - CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_Trojan_Go \ + CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_Kcptun \ CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_NaiveProxy \ CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_Redsocks2 \ - CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_Kcptun \ - CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_ShadowsocksR_Server + CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks \ + CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_ShadowsocksR \ + CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_ShadowsocksR_Server \ + CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_Simple_Obfs \ + CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_Trojan \ + CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_Trojan_Go \ + CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_V2ray \ + CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_V2ray_Plugin \ + CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_Xray LUCI_TITLE:=SS/SSR/V2Ray/Trojan/NaiveProxy/Socks5/Tun LuCI interface LUCI_PKGARCH:=all -LUCI_DEPENDS:=+shadowsocksr-libev-alt +ipset +ip-full +iptables-mod-tproxy +dnsmasq-full +coreutils +coreutils-base64 +pdnsd-alt +wget-ssl +lua +libuci-lua \ - +microsocks +dns2socks +shadowsocks-libev-ss-local +shadowsocksr-libev-ssr-local +shadowsocks-libev-ss-redir +simple-obfs +tcping +resolveip\ - +PACKAGE_$(PKG_NAME)_INCLUDE_V2ray_plugin:v2ray-plugin \ - +PACKAGE_$(PKG_NAME)_INCLUDE_V2ray:v2ray \ - +PACKAGE_$(PKG_NAME)_INCLUDE_Xray:xray \ - +PACKAGE_$(PKG_NAME)_INCLUDE_Trojan:trojan \ - +PACKAGE_$(PKG_NAME)_INCLUDE_Trojan_Go:trojan-go \ - +PACKAGE_$(PKG_NAME)_INCLUDE_Trojan:ipt2socks \ +LUCI_DEPENDS:=+coreutils +coreutils-base64 +dns2socks +dnsmasq-full +ipset +ip-full \ + +iptables-mod-tproxy +lua +libuci-lua +microsocks +pdnsd-alt +tcping +resolveip \ + +shadowsocksr-libev-alt +wget-ssl \ + +PACKAGE_$(PKG_NAME)_INCLUDE_Kcptun:kcptun-client \ +PACKAGE_$(PKG_NAME)_INCLUDE_NaiveProxy:naiveproxy \ +PACKAGE_$(PKG_NAME)_INCLUDE_Redsocks2:redsocks2 \ - +PACKAGE_$(PKG_NAME)_INCLUDE_Kcptun:kcptun-client \ - +PACKAGE_$(PKG_NAME)_INCLUDE_ShadowsocksR_Server:shadowsocksr-libev-server + +PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks:shadowsocks-libev-ss-local \ + +PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks:shadowsocks-libev-ss-redir \ + +PACKAGE_$(PKG_NAME)_INCLUDE_ShadowsocksR:shadowsocksr-libev-ssr-local \ + +PACKAGE_$(PKG_NAME)_INCLUDE_ShadowsocksR_Server:shadowsocksr-libev-server \ + +PACKAGE_$(PKG_NAME)_INCLUDE_Simple_Obfs:simple-obfs \ + +PACKAGE_$(PKG_NAME)_INCLUDE_Trojan:trojan \ + +PACKAGE_$(PKG_NAME)_INCLUDE_Trojan:ipt2socks \ + +PACKAGE_$(PKG_NAME)_INCLUDE_Trojan_Go:trojan-go \ + +PACKAGE_$(PKG_NAME)_INCLUDE_V2ray_Plugin:v2ray-plugin \ + +PACKAGE_$(PKG_NAME)_INCLUDE_V2ray:v2ray \ + +PACKAGE_$(PKG_NAME)_INCLUDE_Xray:xray include $(TOPDIR)/feeds/luci/luci.mk diff --git a/package/lean/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm b/package/lean/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm index 66284ffbab..5ed71f082d 100644 --- a/package/lean/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm +++ b/package/lean/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm @@ -361,8 +361,8 @@ function import_ssr_url(btn, urlname, sid) { document.getElementsByName('cbid.shadowsocksr.' + sid + '.vless_encryption')[0].value = queryParam.encryption || "none"; if (queryParam.security == "tls") { document.getElementsByName('cbid.shadowsocksr.' + sid + '.tls')[0].checked = true; - document.getElementsByName('cbid.shadowsocksr.' + sid + '.tls_host')[0].value = queryParam.sni || serverPart[0]; document.getElementsByName('cbid.shadowsocksr.' + sid + '.tls')[0].dispatchEvent(event); + document.getElementsByName('cbid.shadowsocksr.' + sid + '.tls_host')[0].value = queryParam.sni || serverPart[0]; } switch (queryParam.type) { case "ws": diff --git a/package/lean/luci-app-ssr-plus/root/etc/init.d/shadowsocksr b/package/lean/luci-app-ssr-plus/root/etc/init.d/shadowsocksr index 6396d14274..2689f47d9b 100755 --- a/package/lean/luci-app-ssr-plus/root/etc/init.d/shadowsocksr +++ b/package/lean/luci-app-ssr-plus/root/etc/init.d/shadowsocksr @@ -44,7 +44,6 @@ CRON_FILE=/etc/crontabs/root EXTRA_COMMANDS='reset' EXTRA_HELP=" reset Reset to default settings" #extra_command "reset" "Reset to default settings" -trap 'rm -f "$LOCK_FILE"; exit $?' INT TERM EXIT uci_get_by_name() { local ret=$(uci get $NAME.$1.$2 2>/dev/null) @@ -283,7 +282,7 @@ gen_config_file() { #server1 type2 code3 local_port4 socks_port5 threads5 vmess | vless) lua /usr/share/shadowsocksr/gen_config.lua $1 $mode $4 $5 >$config_file ;; - trojan | trojan-go) + trojan) case "$3" in 1) lua /usr/share/shadowsocksr/gen_config.lua $1 nat $4 >$config_file @@ -292,10 +291,25 @@ gen_config_file() { #server1 type2 code3 local_port4 socks_port5 threads5 lua /usr/share/shadowsocksr/gen_config.lua $1 client $4 >$config_file ;; 3) + lua /usr/share/shadowsocksr/gen_config.lua $1 nat $4 >$config_file lua /usr/share/shadowsocksr/gen_config.lua $1 client $tmp_port >$shunt_dns_config_file ;; 4) - lua /usr/share/shadowsocksr/gen_config.lua $1 $mode $4 >$config_file + lua /usr/share/shadowsocksr/gen_config.lua $1 client $4 >$config_file + ;; + esac + ;; + trojan-go) + case "$3" in + 1 | 2) + lua /usr/share/shadowsocksr/gen_config.lua $1 nat $4 >$config_file + ;; + 3) + lua /usr/share/shadowsocksr/gen_config.lua $1 nat $4 >$config_file + lua /usr/share/shadowsocksr/gen_config.lua $1 client $tmp_port >$shunt_dns_config_file + ;; + 4) + lua /usr/share/shadowsocksr/gen_config.lua $1 client $4 >$config_file ;; esac ;; @@ -342,20 +356,29 @@ start_udp() { ln_start_bin $(first_type xray v2ray) v2ray -config $udp_config_file echolog "UDP TPROXY Relay:$($(first_type "xray" "v2ray") -version | head -1) Started!" ;; - trojan | trojan-go) #client + trojan) #client gen_config_file $UDP_RELAY_SERVER $type 2 $tmp_udp_local_port ln_start_bin $(first_type trojan-go trojan) $type --config $udp_config_file ln_start_bin $(first_type ipt2socks) ipt2socks -U -b 0.0.0.0 -4 -s 127.0.0.1 -p $tmp_udp_local_port -l $tmp_udp_port echolog "UDP TPROXY Relay:$($(first_type trojan-go trojan) --version 2>&1 | head -1) Started!" ;; + trojan-go) + gen_config_file $UDP_RELAY_SERVER $type 2 $udp_config_file + ln_start_bin $(first_type trojan-go trojan) $type --config $udp_config_file + echolog "UDP TPROXY Relay:$($(first_type trojan-go trojan) --version 2>&1 | head -1) Started!" + ;; naiveproxy) echolog "NaïveProxy UDP TPROXY Relay not supported!" redir_udp=0 ARG_UDP="" ;; socks5) - gen_config_file $UDP_RELAY_SERVER $type 2 $tmp_udp_port - ln_start_bin $(first_type redsocks2) redsocks2 -c $udp_config_file + if [ "$(uci_get_by_name $UDP_RELAY_SERVER auth_enable 0)" == "1" ]; then + local auth="-a $(uci_get_by_name $UDP_RELAY_SERVER username) -k $(uci_get_by_name $UDP_RELAY_SERVER password)" + fi + ln_start_bin $(first_type ipt2socks) ipt2socks $udp_config_file -U -4 -s $(uci_get_by_name $UDP_RELAY_SERVER server) -p $(uci_get_by_name $UDP_RELAY_SERVER server_port) -l $tmp_udp_port $auth + #gen_config_file $UDP_RELAY_SERVER $type 2 $tmp_udp_port + #ln_start_bin $(first_type redsocks2) redsocks2 -c $udp_config_file echolog "UDP TPROXY Relay:Socks5 REDIRECT/TPROXY Started!" ;; tun) @@ -371,7 +394,6 @@ start_shunt() { case "$type" in ss | ssr) gen_config_file $SHUNT_SERVER $type 3 $tmp_shunt_port - #gen_config_file $SHUNT_SERVER $type 3 $tmp_local_port ln_start_bin $(first_type ${type}-redir) ${type}-redir -c $shunt_config_file if [ -n "$tmp_local_port" ]; then local tmp_port=$tmp_local_port @@ -418,6 +440,22 @@ start_shunt() { echolog "shunt:$($(first_type "naive") --version 2>&1 | head -1) Started!" redir_udp=0 ;; + socks5) + if [ "$(uci_get_by_name $SHUNT_SERVER auth_enable 0)" == "1" ]; then + local auth="-a $(uci_get_by_name $SHUNT_SERVER username) -k $(uci_get_by_name $SHUNT_SERVER password)" + fi + ln_start_bin $(first_type ipt2socks) ipt2socks $shunt_config_file -R -4 -s $(uci_get_by_name $SHUNT_SERVER server) -p $(uci_get_by_name $SHUNT_SERVER server_port) -l $tmp_shunt_port $auth + #gen_config_file $SHUNT_SERVER $type 3 $tmp_shunt_port + #ln_start_bin $(first_type redsocks2) redsocks2 -c $shunt_config_file + if [ -n "$tmp_local_port" ]; then + local tmp_port=$tmp_local_port + else + local tmp_port=$tmp_shunt_local_port + ln_start_bin $(first_type microsocks) microsocks -i 127.0.0.1 -p $tmp_port shunt-dns-ssr-plus + fi + ln_start_bin $(first_type dns2socks) dns2socks 127.0.0.1:$tmp_port 8.8.8.8:53 127.0.0.1:$tmp_shunt_dns_port -q + echolog "shunt:$type REDIRECT/TPROXY Started!" + ;; *) gen_config_file $SHUNT_SERVER $type 3 $tmp_shunt_port ln_start_bin $(first_type redsocks2) redsocks2 -c $shunt_config_file @@ -445,7 +483,7 @@ start_local() { echolog "Global_Socks5:$(get_name $type) Started!" ;; vmess | vless) - if [ "_local" == "1" ]; then + if [ "$_local" == "2" ]; then gen_config_file $LOCAL_SERVER $type 4 0 $local_port ln_start_bin $(first_type xray v2ray) v2ray -config $local_config_file echolog "Global_Socks5:$($(first_type "xray" "v2ray") -version | head -1) Started!" @@ -514,7 +552,7 @@ Start_Run() { trojan | trojan-go) gen_config_file $GLOBAL_SERVER $type 1 $tcp_port ln_start_bin $(first_type trojan-go trojan) $type --config $tcp_config_file - echolog "Main node:$($(first_type $type) --version 2>&1 | head -1) Started!" + echolog "Main node:$($(first_type trojan-go trojan) --version 2>&1 | head -1) Started!" ;; naiveproxy) gen_config_file $GLOBAL_SERVER $type 1 $tcp_port @@ -522,10 +560,14 @@ Start_Run() { echolog "Main node:$($(first_type naive) --version 2>&1 | head -1) , $threads Threads Started!" ;; socks5) - gen_config_file $GLOBAL_SERVER $type 1 $tcp_port - for i in $(seq 1 $threads); do - ln_start_bin $(first_type redsocks2) redsocks2 -c $tcp_config_file - done + if [ "$(uci_get_by_name $GLOBAL_SERVER auth_enable 0)" == "1" ]; then + local auth="-a $(uci_get_by_name $GLOBAL_SERVER username) -k $(uci_get_by_name $GLOBAL_SERVER password)" + fi + ln_start_bin $(first_type ipt2socks) ipt2socks $tcp_config_file -R -4 -j $threads -s $(uci_get_by_name $GLOBAL_SERVER server) -p $(uci_get_by_name $GLOBAL_SERVER server_port) -l $tcp_port $auth + #gen_config_file $GLOBAL_SERVER $type 1 $tcp_port + #for i in $(seq 1 $threads); do + # ln_start_bin $(first_type redsocks2) redsocks2 -c $tcp_config_file + #done echolog "Main node:Socks5 REDIRECT/TPROXY $threads Threads Started!" ;; tun) @@ -729,7 +771,6 @@ start_rules() { w | W | b | B) local ac_ips="$lan_ac_mode$lan_ac_ips" ;; esac fi - #deal gfw firewall rule gfwmode() { case "$(uci_get_by_type global run_mode)" in gfw) echo "-g" ;; @@ -830,7 +871,6 @@ stop() { ps -w | grep -v "grep" | grep ssr-monitor | awk '{print $1}' | xargs kill -9 >/dev/null 2>&1 & ps -w | grep -v "grep" | grep "sleep 0000" | awk '{print $1}' | xargs kill -9 >/dev/null 2>&1 & ps -w | grep -v "grep" | grep "$TMP_PATH" | awk '{print $1}' | xargs kill -9 >/dev/null 2>&1 & - #killall -q -9 ss-redir ss-local obfs-local ssr-redir ssr-local ssr-server v2ray v2ray-plugin xray trojan naive microsocks ipt2socks dns2socks redsocks2 pdnsd killall -q -9 v2ray-plugin obfs-local rm -f /var/lock/ssr-monitor.lock if [ -f "/var/dnsmasq.d/dnsmasq-ssrplus.conf" ]; then diff --git a/package/lean/luci-app-ssr-plus/root/usr/share/shadowsocksr/gen_config.lua b/package/lean/luci-app-ssr-plus/root/usr/share/shadowsocksr/gen_config.lua index f4c8eb761f..f42809776f 100644 --- a/package/lean/luci-app-ssr-plus/root/usr/share/shadowsocksr/gen_config.lua +++ b/package/lean/luci-app-ssr-plus/root/usr/share/shadowsocksr/gen_config.lua @@ -18,7 +18,7 @@ local Xray = { sniffing = {enabled = true, destOverride = {"http", "tls"}} } or nil, -- 开启 socks 代理 - inboundDetour = (proto == "tcp" and socks_port ~= "0") and { + inboundDetour = (proto:find("tcp") and socks_port ~= "0") and { { protocol = "socks", port = tonumber(socks_port), diff --git a/package/lean/shadowsocksr-libev/Makefile b/package/lean/shadowsocksr-libev/Makefile index 29d2d032f3..67b3e40003 100644 --- a/package/lean/shadowsocksr-libev/Makefile +++ b/package/lean/shadowsocksr-libev/Makefile @@ -23,18 +23,19 @@ PKG_BUILD_PARALLEL:=1 include $(INCLUDE_DIR)/package.mk -define Package/shadowsocksr-libev +define Package/shadowsocksr-libev/Default SECTION:=net CATEGORY:=Network SUBMENU:=Web Servers/Proxies TITLE:=Lightweight Secured Socks5 Proxy URL:=https://github.com/shadowsocksrr/shadowsocksr-libev DEPENDS:=+libev +libsodium +libopenssl +libpthread +libpcre +libudns +zlib + PROVIDES:=shadowsocksr-libev endef -Package/shadowsocksr-libev-server = $(Package/shadowsocksr-libev) -Package/shadowsocksr-libev-alt = $(Package/shadowsocksr-libev) -Package/shadowsocksr-libev-ssr-local = $(Package/shadowsocksr-libev) +Package/shadowsocksr-libev-server = $(Package/shadowsocksr-libev/Default) +Package/shadowsocksr-libev-alt = $(Package/shadowsocksr-libev/Default) +Package/shadowsocksr-libev-ssr-local = $(Package/shadowsocksr-libev/Default) CONFIGURE_ARGS += --disable-documentation --disable-ssp --disable-assert \ --enable-system-shared-lib @@ -42,15 +43,6 @@ CONFIGURE_ARGS += --disable-documentation --disable-ssp --disable-assert \ TARGET_CFLAGS += -flto TARGET_LDFLAGS += -Wl,--gc-sections,--as-needed -define Package/shadowsocksr-libev/install - $(INSTALL_DIR) $(1)/usr/bin - $(INSTALL_BIN) $(PKG_BUILD_DIR)/src/ss-redir $(1)/usr/bin/ssr-redir - $(INSTALL_BIN) $(PKG_BUILD_DIR)/src/ss-local $(1)/usr/bin/ssr-local - $(LN) ssr-local $(1)/usr/bin/ssr-tunnel - $(INSTALL_BIN) $(PKG_BUILD_DIR)/server/ss-check $(1)/usr/bin/ssr-check - $(INSTALL_BIN) $(PKG_BUILD_DIR)/server/ss-server $(1)/usr/bin/ssr-server -endef - define Package/shadowsocksr-libev-alt/install $(INSTALL_DIR) $(1)/usr/bin $(INSTALL_BIN) $(PKG_BUILD_DIR)/src/ss-redir $(1)/usr/bin/ssr-redir From 091d84d34ad90abaf75b4694f492fa3bdf59bc76 Mon Sep 17 00:00:00 2001 From: CN_SZTL Date: Sat, 23 Jan 2021 20:42:42 +0800 Subject: [PATCH 12/20] shadowsocksr-libev: remove empty package call Signed-off-by: CN_SZTL --- package/lean/shadowsocksr-libev/Makefile | 1 - 1 file changed, 1 deletion(-) diff --git a/package/lean/shadowsocksr-libev/Makefile b/package/lean/shadowsocksr-libev/Makefile index 67b3e40003..c5409d3f8e 100644 --- a/package/lean/shadowsocksr-libev/Makefile +++ b/package/lean/shadowsocksr-libev/Makefile @@ -60,7 +60,6 @@ define Package/shadowsocksr-libev-ssr-local/install $(LN) ssr-local $(1)/usr/bin/ssr-tunnel endef -$(eval $(call BuildPackage,shadowsocksr-libev)) $(eval $(call BuildPackage,shadowsocksr-libev-alt)) $(eval $(call BuildPackage,shadowsocksr-libev-server)) $(eval $(call BuildPackage,shadowsocksr-libev-ssr-local)) From 8be7cdc375aca005e276b360ff3f604e40e6f1e4 Mon Sep 17 00:00:00 2001 From: Florian Eckert Date: Fri, 22 Jan 2021 10:14:48 +0100 Subject: [PATCH 13/20] iperf: remove This package is not needed in base. It will be imported in the packages feed. Signed-off-by: Florian Eckert Signed-off-by: CN_SZTL --- package/network/utils/iperf/Makefile | 57 ------------------- .../patches/0003-fix-non-ipv6-builds.patch | 20 ------- .../utils/iperf/patches/010-libcxx.patch | 12 ---- 3 files changed, 89 deletions(-) delete mode 100644 package/network/utils/iperf/Makefile delete mode 100644 package/network/utils/iperf/patches/0003-fix-non-ipv6-builds.patch delete mode 100644 package/network/utils/iperf/patches/010-libcxx.patch diff --git a/package/network/utils/iperf/Makefile b/package/network/utils/iperf/Makefile deleted file mode 100644 index e56abd5306..0000000000 --- a/package/network/utils/iperf/Makefile +++ /dev/null @@ -1,57 +0,0 @@ -# -# Copyright (C) 2007-2010 OpenWrt.org -# -# This is free software, licensed under the GNU General Public License v2. -# See /LICENSE for more information. -# - -include $(TOPDIR)/rules.mk - -PKG_NAME:=iperf -PKG_VERSION:=2.0.13 -PKG_RELEASE:=2 - -PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz -PKG_HASH:=c88adec966096a81136dda91b4bd19c27aae06df4d45a7f547a8e50d723778ad -PKG_SOURCE_URL:=@SF/iperf2 - -PKG_MAINTAINER:=Felix Fietkau -PKG_LICENSE:=BSD-3-Clause - -PKG_BUILD_PARALLEL:=1 - -PKG_CONFIG_DEPENDS:=CONFIG_IPERF_ENABLE_MULTICAST - -include $(INCLUDE_DIR)/uclibc++.mk -include $(INCLUDE_DIR)/package.mk - -define Package/iperf - SECTION:=net - CATEGORY:=Network - DEPENDS:= $(CXX_DEPENDS) +libpthread - TITLE:=Internet Protocol bandwidth measuring tool - URL:=http://sourceforge.net/projects/iperf2/ -endef - -define Package/iperf/description - Iperf is a modern alternative for measuring TCP and UDP bandwidth - performance, allowing the tuning of various parameters and - characteristics. -endef - -TARGET_CFLAGS += -D_GNU_SOURCE -CONFIGURE_ARGS += --disable-multicast - -ifeq ($(CONFIG_IPV6),) - CONFIGURE_ARGS += --disable-ipv6 -endif - -CONFIGURE_VARS += CXXFLAGS="$$$$CXXFLAGS -fno-rtti" -CONFIGURE_VARS += LIBS="-lpthread -lm" - -define Package/iperf/install - $(INSTALL_DIR) $(1)/usr/bin - $(INSTALL_BIN) $(PKG_BUILD_DIR)/src/iperf $(1)/usr/bin/iperf -endef - -$(eval $(call BuildPackage,iperf)) diff --git a/package/network/utils/iperf/patches/0003-fix-non-ipv6-builds.patch b/package/network/utils/iperf/patches/0003-fix-non-ipv6-builds.patch deleted file mode 100644 index c6afa3e160..0000000000 --- a/package/network/utils/iperf/patches/0003-fix-non-ipv6-builds.patch +++ /dev/null @@ -1,20 +0,0 @@ ---- a/src/Listener.cpp -+++ b/src/Listener.cpp -@@ -723,6 +723,7 @@ int Listener::L2_setup (void) { - - // Now optimize packet flow up the raw socket - // Establish the flow BPF to forward up only "connected" packets to this raw socket -+#ifdef HAVE_IPV6 - if (l->sa_family == AF_INET6) { - #ifdef HAVE_IPV6 - struct in6_addr *v6peer = SockAddr_get_in6_addr(&server->peer); -@@ -740,6 +741,9 @@ int Listener::L2_setup (void) { - return -1; - #endif /* HAVE_IPV6 */ - } else { -+#else -+ { -+#endif - rc = SockAddr_v4_Connect_BPF(server->mSock, ((struct sockaddr_in *)(l))->sin_addr.s_addr, ((struct sockaddr_in *)(p))->sin_addr.s_addr, ((struct sockaddr_in *)(l))->sin_port, ((struct sockaddr_in *)(p))->sin_port); - WARN_errno( rc == SOCKET_ERROR, "l2 connect ip bpf"); - } diff --git a/package/network/utils/iperf/patches/010-libcxx.patch b/package/network/utils/iperf/patches/010-libcxx.patch deleted file mode 100644 index cf0124232f..0000000000 --- a/package/network/utils/iperf/patches/010-libcxx.patch +++ /dev/null @@ -1,12 +0,0 @@ ---- a/config.h.in -+++ b/config.h.in -@@ -360,7 +360,9 @@ - #undef _REENTRANT - - /* */ -+#ifndef __cplusplus - #undef bool -+#endif - - /* Define to empty if `const' does not conform to ANSI C. */ - #undef const From 8e9268c8999d8787be97f6fe1228b3176a2fadfb Mon Sep 17 00:00:00 2001 From: Florian Eckert Date: Fri, 22 Jan 2021 13:06:10 +0100 Subject: [PATCH 14/20] iperf3: remove This package is not needed in base. It will be imported in the packages feed. Signed-off-by: Florian Eckert Signed-off-by: CN_SZTL --- package/network/utils/iperf3/Makefile | 83 --------------------------- 1 file changed, 83 deletions(-) delete mode 100644 package/network/utils/iperf3/Makefile diff --git a/package/network/utils/iperf3/Makefile b/package/network/utils/iperf3/Makefile deleted file mode 100644 index 6f90bc9221..0000000000 --- a/package/network/utils/iperf3/Makefile +++ /dev/null @@ -1,83 +0,0 @@ -# -# Copyright (C) 2007-2010 OpenWrt.org -# -# This is free software, licensed under the GNU General Public License v2. -# See /LICENSE for more information. -# - -include $(TOPDIR)/rules.mk - -PKG_NAME:=iperf -PKG_VERSION:=3.9 -PKG_RELEASE:=1 - -PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz -PKG_SOURCE_URL:=https://downloads.es.net/pub/iperf -PKG_HASH:=24b63a26382325f759f11d421779a937b63ca1bc17c44587d2fcfedab60ac038 - -PKG_MAINTAINER:=Felix Fietkau -PKG_LICENSE:=BSD-3-Clause - -PKG_BUILD_PARALLEL:=1 -PKG_INSTALL:=1 - -PKG_FIXUP:=autoreconf - -include $(INCLUDE_DIR)/package.mk - -DISABLE_NLS:= - -define Package/iperf3/default - SECTION:=net - CATEGORY:=Network - TITLE:=Internet Protocol bandwidth measuring tool - URL:=https://github.com/esnet/iperf -endef - -define Package/iperf3 -$(call Package/iperf3/default) - VARIANT:=nossl -endef - -define Package/iperf3-ssl -$(call Package/iperf3/default) - TITLE+= with iperf_auth support - VARIANT:=ssl - DEPENDS:= +libopenssl -endef - -TARGET_CFLAGS += -D_GNU_SOURCE -CONFIGURE_ARGS += --disable-shared - -ifeq ($(BUILD_VARIANT),ssl) - CONFIGURE_ARGS += --with-openssl="$(STAGING_DIR)/usr" -else - CONFIGURE_ARGS += --without-openssl -endif - -MAKE_FLAGS += noinst_PROGRAMS= - -define Package/iperf3/description - Iperf is a modern alternative for measuring TCP and UDP bandwidth - performance, allowing the tuning of various parameters and - characteristics. -endef - -# autoreconf fails if the README file isn't present -define Build/Prepare - $(call Build/Prepare/Default) - touch $(PKG_BUILD_DIR)/README -endef - -define Package/iperf3/install - $(INSTALL_DIR) $(1)/usr/bin - $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/iperf3 $(1)/usr/bin/ -endef - -define Package/iperf3-ssl/install - $(INSTALL_DIR) $(1)/usr/bin - $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/iperf3 $(1)/usr/bin/ -endef - -$(eval $(call BuildPackage,iperf3)) -$(eval $(call BuildPackage,iperf3-ssl)) From a1763a0d81fb45981c71e70c080c287cb0c4ce81 Mon Sep 17 00:00:00 2001 From: Paul Spooren Date: Fri, 1 Jan 2021 14:02:12 -1000 Subject: [PATCH 15/20] rules: add AUTORELEASE and COMMITCOUNT variables The lack of bumped PKG_RELEASE variables is a recurring theme on the mailing list and in GitHub comments. This costs precious review time, a rare good within the OpenWrt project. Instead of relying on a manually set PKG_RELEASE this commit adds a `commitcount` function that uses the number of Git commits to determine the release. The function is called via the variables `$(AUTORELEASE)` or `$(COMMITCOUNT)`. The `PKG_RELEASE` variable can be set to either of the two. - $(AUTORELEASE): Release is automagically set to the number of commits since the last commit containing either ": update to " or ": bump to ". Example below: $ git log packages/foobar/ foobar: fixup file location foobar: disable docs foobar: bump to 5.3.2 foobar: fixup copyright Resulting package name: foobar_5.3.2-3_all.ipk, two package changes since the last upstream version change, using a 1 based counter. - $(COMMITCOUNT): For non-traditional versioning (x.y.z), most prominent `base-files`, this variable contains the total number of package commits. The new functionality can also be used by other feeds like packages.git. In case no build information is available, e.g. when using release tarballs, the SOURCE_DATE_EPOCH is used to have a reproducible release identifier. Suggested-by: Daniel Golle Signed-off-by: Paul Spooren Signed-off-by: CN_SZTL --- rules.mk | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/rules.mk b/rules.mk index ea2a3f9bd0..7ec15defce 100644 --- a/rules.mk +++ b/rules.mk @@ -410,6 +410,32 @@ endef # file extension ext=$(word $(words $(subst ., ,$(1))),$(subst ., ,$(1))) +# Count Git commits of a package +# $(1) => if non-empty: count commits since last ": [uU]pdate to " or ": [bB]ump to " in commit message +define commitcount +$(shell \ + if git log -1 >/dev/null 2>/dev/null; then \ + if [ -n "$(1)" ]; then \ + last_bump="$$(git log --pretty=format:'%h %s' . | \ + grep --max-count=1 -e ': [uU]pdate to ' -e ': [bB]ump to ' | \ + cut -f 1 -d ' ')"; \ + fi; \ + if [ -n "$$last_bump" ]; then \ + echo -n $$(($$(git rev-list --count "$$last_bump..HEAD" .) + 1)); \ + else \ + echo -n $$(($$(git rev-list --count HEAD .) + 1)); \ + fi; \ + else \ + secs="$$(($(SOURCE_DATE_EPOCH) % 86400))"; \ + date="$$(date --utc --date="@$(SOURCE_DATE_EPOCH)" "+%y%m%d")"; \ + printf '%s.%05d' "$$date" "$$secs"; \ + fi; \ +) +endef + +COMMITCOUNT = $(if $(DUMP),,$(call commitcount)) +AUTORELEASE = $(if $(DUMP),,$(call commitcount,1)) + all: FORCE: ; .PHONY: FORCE From 1c45a75927bb0fd8d5e294b3c8232c4e987b3df3 Mon Sep 17 00:00:00 2001 From: Paul Spooren Date: Fri, 1 Jan 2021 14:18:32 -1000 Subject: [PATCH 16/20] base-files: use $(COMMITCOUNT) in PKG_RELEASE The newly added `$(COMMITCOUNT)` varialbe allows automatic versioning based on the number of Git commits of a package. Replace *tedious to bump* and *merge conflict causing* `PKG_RELEASE` and replace it with `$(COMMITCOUNT)`. Signed-off-by: Paul Spooren Signed-off-by: CN_SZTL --- package/base-files/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package/base-files/Makefile b/package/base-files/Makefile index 4085aa185e..f0ea41d98c 100644 --- a/package/base-files/Makefile +++ b/package/base-files/Makefile @@ -12,8 +12,8 @@ include $(INCLUDE_DIR)/version.mk include $(INCLUDE_DIR)/feeds.mk PKG_NAME:=base-files -PKG_RELEASE:=215 PKG_FLAGS:=nonshared +PKG_RELEASE:=$(COMMITCOUNT) PKG_FILE_DEPENDS:=$(PLATFORM_DIR)/ $(GENERIC_PLATFORM_DIR)/base-files/ PKG_BUILD_DEPENDS:=usign/host ucert/host From c18befafbccabdb1dfba551874e2cda800e0ddb4 Mon Sep 17 00:00:00 2001 From: Paul Spooren Date: Wed, 6 Jan 2021 22:56:54 -1000 Subject: [PATCH 17/20] uboot-envtools: use $(AUTORELEASE) for PKG_RELEASE Use `$(AUTORELEASE)` variable rather than setting a PKG_RELEASE on every commit manually. Signed-off-by: Paul Spooren Signed-off-by: CN_SZTL --- package/boot/uboot-envtools/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package/boot/uboot-envtools/Makefile b/package/boot/uboot-envtools/Makefile index b032e07c37..5014b71ef6 100644 --- a/package/boot/uboot-envtools/Makefile +++ b/package/boot/uboot-envtools/Makefile @@ -10,7 +10,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=uboot-envtools PKG_DISTNAME:=u-boot PKG_VERSION:=2020.04 -PKG_RELEASE:=1 +PKG_RELEASE:=$(AUTORELEASE) PKG_SOURCE:=$(PKG_DISTNAME)-$(PKG_VERSION).tar.bz2 PKG_SOURCE_URL:= \ From cba1985b07d0be990006d72396337dcdf98b195e Mon Sep 17 00:00:00 2001 From: CN_SZTL Date: Sat, 23 Jan 2021 21:36:40 +0800 Subject: [PATCH 18/20] kernel: bump to 4.9.252, 4.14.216, 4.19.169 Refreshed all patches. Signed-off-by: CN_SZTL --- include/kernel-version.mk | 12 +++--- ...i_h5-Don-t-send-conf_req-when-ACTIVE.patch | 2 +- ...ption-fix-dwm-158-3g-modem-interface.patch | 2 +- ...imit-and-delta-fields-from-struct-ub.patch | 2 +- .../generic/hack-4.14/220-gc_sections.patch | 4 +- .../hack-4.14/221-module_exports.patch | 2 +- .../998-usb-serial-option-add-u9300.patch | 2 +- .../hack-4.19/221-module_exports.patch | 2 +- .../998-usb-serial-option-add-u9300.patch | 2 +- .../generic/hack-4.9/220-gc_sections.patch | 14 +++---- .../generic/hack-4.9/221-module_exports.patch | 2 +- ...-linux-kernel-to-support-shortcut-fe.patch | 39 ++++++------------- .../601-add-kernel-imq-support.patch | 2 +- .../601-add-kernel-imq-support.patch | 2 +- ...leton-for-Aquantia-AQtionUSB-to-5GbE.patch | 2 +- .../601-add-kernel-imq-support.patch | 2 +- .../996-add-uart2-and-mdio-label.patch | 4 +- .../807-usb-support-layerscape.patch | 12 +++--- .../105-mt7621-memory-detect.patch | 2 +- 19 files changed, 48 insertions(+), 63 deletions(-) diff --git a/include/kernel-version.mk b/include/kernel-version.mk index 7ba9e10c43..6d2eb13ee8 100644 --- a/include/kernel-version.mk +++ b/include/kernel-version.mk @@ -6,13 +6,13 @@ ifdef CONFIG_TESTING_KERNEL KERNEL_PATCHVER:=$(KERNEL_TESTING_PATCHVER) endif -LINUX_VERSION-4.9 = .250 -LINUX_VERSION-4.14 = .214 -LINUX_VERSION-4.19 = .166 +LINUX_VERSION-4.9 = .252 +LINUX_VERSION-4.14 = .216 +LINUX_VERSION-4.19 = .169 -LINUX_KERNEL_HASH-4.9.250 = 9ebdbf45d83efc5ee096e98a9f0b0383ade1ad01645a25a70e6188285aff7197 -LINUX_KERNEL_HASH-4.14.214 = f54296216ace09a1bf81efaa9dbbd4ebbe8631dbf22df9c6f286157db827391e -LINUX_KERNEL_HASH-4.19.166 = b98ef209321a4e39ce98ca6b8745a2268bdd927fd74e4e2c50bc68d9a637880e +LINUX_KERNEL_HASH-4.9.252 = 1c9edadf5e17540b01d95c879f42859d5f28ff577ff2ef6d56cdc45ef3a314ea +LINUX_KERNEL_HASH-4.14.216 = b7864fef15ca9bdefe38cd19232538e3387f05c6ace17f44a0da07bd71edbba5 +LINUX_KERNEL_HASH-4.19.169 = c7d24ddb8ecc348ca7bed24111ff98e2a87f74666c8bbbf4f9c57b7c3c25de94 remove_uri_prefix=$(subst git://,,$(subst http://,,$(subst https://,,$(1)))) sanitize_uri=$(call qstrip,$(subst @,_,$(subst :,_,$(subst .,_,$(subst -,_,$(subst /,_,$(1))))))) diff --git a/target/linux/bcm27xx/patches-4.19/950-0090-hci_h5-Don-t-send-conf_req-when-ACTIVE.patch b/target/linux/bcm27xx/patches-4.19/950-0090-hci_h5-Don-t-send-conf_req-when-ACTIVE.patch index 302c6124a2..65f7d9438d 100644 --- a/target/linux/bcm27xx/patches-4.19/950-0090-hci_h5-Don-t-send-conf_req-when-ACTIVE.patch +++ b/target/linux/bcm27xx/patches-4.19/950-0090-hci_h5-Don-t-send-conf_req-when-ACTIVE.patch @@ -11,7 +11,7 @@ other with conf_req and conf_rsp messages, in a demented game of tag. --- a/drivers/bluetooth/hci_h5.c +++ b/drivers/bluetooth/hci_h5.c -@@ -359,7 +359,8 @@ static void h5_handle_internal_rx(struct +@@ -355,7 +355,8 @@ static void h5_handle_internal_rx(struct h5_link_control(hu, conf_req, 3); } else if (memcmp(data, conf_req, 2) == 0) { h5_link_control(hu, conf_rsp, 2); diff --git a/target/linux/generic/backport-4.14/030-USB-serial-option-fix-dwm-158-3g-modem-interface.patch b/target/linux/generic/backport-4.14/030-USB-serial-option-fix-dwm-158-3g-modem-interface.patch index ecef1a4b2b..a66f628e3c 100644 --- a/target/linux/generic/backport-4.14/030-USB-serial-option-fix-dwm-158-3g-modem-interface.patch +++ b/target/linux/generic/backport-4.14/030-USB-serial-option-fix-dwm-158-3g-modem-interface.patch @@ -30,7 +30,7 @@ Signed-off-by: Johan Hovold --- a/drivers/usb/serial/option.c +++ b/drivers/usb/serial/option.c -@@ -2015,7 +2015,8 @@ static const struct usb_device_id option +@@ -2017,7 +2017,8 @@ static const struct usb_device_id option { USB_DEVICE_INTERFACE_CLASS(0x2001, 0x7d01, 0xff) }, /* D-Link DWM-156 (variant) */ { USB_DEVICE_INTERFACE_CLASS(0x2001, 0x7d02, 0xff) }, { USB_DEVICE_INTERFACE_CLASS(0x2001, 0x7d03, 0xff) }, diff --git a/target/linux/generic/backport-4.9/030-01-ubifs-Drop-softlimit-and-delta-fields-from-struct-ub.patch b/target/linux/generic/backport-4.9/030-01-ubifs-Drop-softlimit-and-delta-fields-from-struct-ub.patch index c1367074bd..84a5e23596 100644 --- a/target/linux/generic/backport-4.9/030-01-ubifs-Drop-softlimit-and-delta-fields-from-struct-ub.patch +++ b/target/linux/generic/backport-4.9/030-01-ubifs-Drop-softlimit-and-delta-fields-from-struct-ub.patch @@ -48,7 +48,7 @@ Signed-off-by: Richard Weinberger HRTIMER_MODE_REL); } -@@ -1071,10 +1077,6 @@ int ubifs_wbuf_init(struct ubifs_info *c +@@ -1080,10 +1086,6 @@ int ubifs_wbuf_init(struct ubifs_info *c hrtimer_init(&wbuf->timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL); wbuf->timer.function = wbuf_timer_callback_nolock; diff --git a/target/linux/generic/hack-4.14/220-gc_sections.patch b/target/linux/generic/hack-4.14/220-gc_sections.patch index 6a4475fc6e..fbf49aba90 100644 --- a/target/linux/generic/hack-4.14/220-gc_sections.patch +++ b/target/linux/generic/hack-4.14/220-gc_sections.patch @@ -238,7 +238,7 @@ Signed-off-by: Gabor Juhos /* * Data section helpers -@@ -497,7 +498,7 @@ +@@ -500,7 +501,7 @@ #define ENTRY_TEXT \ ALIGN_FUNCTION(); \ VMLINUX_SYMBOL(__entry_text_start) = .; \ @@ -247,7 +247,7 @@ Signed-off-by: Gabor Juhos VMLINUX_SYMBOL(__entry_text_end) = .; #define IRQENTRY_TEXT \ -@@ -604,7 +605,7 @@ +@@ -607,7 +608,7 @@ . = ALIGN(sbss_align); \ .sbss : AT(ADDR(.sbss) - LOAD_OFFSET) { \ *(.dynsbss) \ diff --git a/target/linux/generic/hack-4.14/221-module_exports.patch b/target/linux/generic/hack-4.14/221-module_exports.patch index 003175c223..59a6528dd3 100644 --- a/target/linux/generic/hack-4.14/221-module_exports.patch +++ b/target/linux/generic/hack-4.14/221-module_exports.patch @@ -56,7 +56,7 @@ Signed-off-by: Felix Fietkau } \ \ /* __*init sections */ \ -@@ -796,6 +806,8 @@ +@@ -799,6 +809,8 @@ EXIT_TEXT \ EXIT_DATA \ EXIT_CALL \ diff --git a/target/linux/generic/hack-4.14/998-usb-serial-option-add-u9300.patch b/target/linux/generic/hack-4.14/998-usb-serial-option-add-u9300.patch index 54f7cc8dd8..126b24073b 100644 --- a/target/linux/generic/hack-4.14/998-usb-serial-option-add-u9300.patch +++ b/target/linux/generic/hack-4.14/998-usb-serial-option-add-u9300.patch @@ -1,6 +1,6 @@ --- a/drivers/net/usb/qmi_wwan.c +++ b/drivers/net/usb/qmi_wwan.c -@@ -1295,6 +1295,7 @@ static const struct usb_device_id produc +@@ -1296,6 +1296,7 @@ static const struct usb_device_id produc {QMI_FIXED_INTF(0x03f0, 0x9d1d, 1)}, /* HP lt4120 Snapdragon X5 LTE */ {QMI_FIXED_INTF(0x22de, 0x9061, 3)}, /* WeTelecom WPD-600N */ {QMI_QUIRK_SET_DTR(0x1e0e, 0x9001, 5)}, /* SIMCom 7100E, 7230E, 7600E ++ */ diff --git a/target/linux/generic/hack-4.19/221-module_exports.patch b/target/linux/generic/hack-4.19/221-module_exports.patch index 47051aa638..f794e95555 100644 --- a/target/linux/generic/hack-4.19/221-module_exports.patch +++ b/target/linux/generic/hack-4.19/221-module_exports.patch @@ -56,7 +56,7 @@ Signed-off-by: Felix Fietkau } \ \ /* __*init sections */ \ -@@ -845,6 +855,8 @@ +@@ -848,6 +858,8 @@ EXIT_TEXT \ EXIT_DATA \ EXIT_CALL \ diff --git a/target/linux/generic/hack-4.19/998-usb-serial-option-add-u9300.patch b/target/linux/generic/hack-4.19/998-usb-serial-option-add-u9300.patch index e31650c18b..68babc0f11 100644 --- a/target/linux/generic/hack-4.19/998-usb-serial-option-add-u9300.patch +++ b/target/linux/generic/hack-4.19/998-usb-serial-option-add-u9300.patch @@ -1,6 +1,6 @@ --- a/drivers/net/usb/qmi_wwan.c +++ b/drivers/net/usb/qmi_wwan.c -@@ -1306,6 +1306,7 @@ static const struct usb_device_id produc +@@ -1307,6 +1307,7 @@ static const struct usb_device_id produc {QMI_FIXED_INTF(0x03f0, 0x9d1d, 1)}, /* HP lt4120 Snapdragon X5 LTE */ {QMI_FIXED_INTF(0x22de, 0x9061, 3)}, /* WeTelecom WPD-600N */ {QMI_QUIRK_SET_DTR(0x1e0e, 0x9001, 5)}, /* SIMCom 7100E, 7230E, 7600E ++ */ diff --git a/target/linux/generic/hack-4.9/220-gc_sections.patch b/target/linux/generic/hack-4.9/220-gc_sections.patch index a9d2fd17f9..767557ea05 100644 --- a/target/linux/generic/hack-4.9/220-gc_sections.patch +++ b/target/linux/generic/hack-4.9/220-gc_sections.patch @@ -380,7 +380,7 @@ Signed-off-by: Gabor Juhos VMLINUX_SYMBOL(__stop___modver) = .; \ . = ALIGN((align)); \ VMLINUX_SYMBOL(__end_rodata) = .; \ -@@ -497,7 +498,7 @@ +@@ -500,7 +501,7 @@ #define ENTRY_TEXT \ ALIGN_FUNCTION(); \ VMLINUX_SYMBOL(__entry_text_start) = .; \ @@ -389,7 +389,7 @@ Signed-off-by: Gabor Juhos VMLINUX_SYMBOL(__entry_text_end) = .; #if defined(CONFIG_FUNCTION_GRAPH_TRACER) || defined(CONFIG_KASAN) -@@ -535,7 +536,7 @@ +@@ -538,7 +539,7 @@ . = ALIGN(align); \ __ex_table : AT(ADDR(__ex_table) - LOAD_OFFSET) { \ VMLINUX_SYMBOL(__start___ex_table) = .; \ @@ -398,7 +398,7 @@ Signed-off-by: Gabor Juhos VMLINUX_SYMBOL(__stop___ex_table) = .; \ } -@@ -551,9 +552,9 @@ +@@ -554,9 +555,9 @@ #ifdef CONFIG_CONSTRUCTORS #define KERNEL_CTORS() . = ALIGN(8); \ VMLINUX_SYMBOL(__ctors_start) = .; \ @@ -410,7 +410,7 @@ Signed-off-by: Gabor Juhos VMLINUX_SYMBOL(__ctors_end) = .; #else #define KERNEL_CTORS() -@@ -610,7 +611,7 @@ +@@ -613,7 +614,7 @@ #define SBSS(sbss_align) \ . = ALIGN(sbss_align); \ .sbss : AT(ADDR(.sbss) - LOAD_OFFSET) { \ @@ -419,7 +419,7 @@ Signed-off-by: Gabor Juhos *(.scommon) \ } -@@ -679,7 +680,7 @@ +@@ -682,7 +683,7 @@ . = ALIGN(8); \ __bug_table : AT(ADDR(__bug_table) - LOAD_OFFSET) { \ VMLINUX_SYMBOL(__start___bug_table) = .; \ @@ -428,7 +428,7 @@ Signed-off-by: Gabor Juhos VMLINUX_SYMBOL(__stop___bug_table) = .; \ } #else -@@ -691,7 +692,7 @@ +@@ -694,7 +695,7 @@ . = ALIGN(4); \ .tracedata : AT(ADDR(.tracedata) - LOAD_OFFSET) { \ VMLINUX_SYMBOL(__tracedata_start) = .; \ @@ -437,7 +437,7 @@ Signed-off-by: Gabor Juhos VMLINUX_SYMBOL(__tracedata_end) = .; \ } #else -@@ -708,7 +709,7 @@ +@@ -711,7 +712,7 @@ #define INIT_SETUP(initsetup_align) \ . = ALIGN(initsetup_align); \ VMLINUX_SYMBOL(__setup_start) = .; \ diff --git a/target/linux/generic/hack-4.9/221-module_exports.patch b/target/linux/generic/hack-4.9/221-module_exports.patch index d5bd0a21e8..bda3b83f88 100644 --- a/target/linux/generic/hack-4.9/221-module_exports.patch +++ b/target/linux/generic/hack-4.9/221-module_exports.patch @@ -56,7 +56,7 @@ Signed-off-by: Felix Fietkau } \ \ /* __*init sections */ \ -@@ -766,6 +776,8 @@ +@@ -769,6 +779,8 @@ EXIT_TEXT \ EXIT_DATA \ EXIT_CALL \ diff --git a/target/linux/generic/hack-4.9/953-net-patch-linux-kernel-to-support-shortcut-fe.patch b/target/linux/generic/hack-4.9/953-net-patch-linux-kernel-to-support-shortcut-fe.patch index db4dc79869..0cb49962a8 100644 --- a/target/linux/generic/hack-4.9/953-net-patch-linux-kernel-to-support-shortcut-fe.patch +++ b/target/linux/generic/hack-4.9/953-net-patch-linux-kernel-to-support-shortcut-fe.patch @@ -1,5 +1,3 @@ -diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h -index f332adcd..3dc4b2e1 100644 --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h @@ -758,6 +758,9 @@ struct sk_buff { @@ -12,8 +10,6 @@ index f332adcd..3dc4b2e1 100644 /* 1, 3 or 4 bit hole */ #if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE) -diff --git a/include/linux/timer.h b/include/linux/timer.h -index ec86e4e5..121daab8 100644 --- a/include/linux/timer.h +++ b/include/linux/timer.h @@ -20,6 +20,10 @@ struct timer_list { @@ -27,8 +23,6 @@ index ec86e4e5..121daab8 100644 #ifdef CONFIG_TIMER_STATS int start_pid; void *start_site; -diff --git a/include/net/netfilter/nf_conntrack_ecache.h b/include/net/netfilter/nf_conntrack_ecache.h -index c2b98b6a..78a728e8 100644 --- a/include/net/netfilter/nf_conntrack_ecache.h +++ b/include/net/netfilter/nf_conntrack_ecache.h @@ -73,6 +73,8 @@ struct nf_ct_event { @@ -40,8 +34,6 @@ index c2b98b6a..78a728e8 100644 #else struct nf_ct_event_notifier { int (*fcn)(unsigned int events, struct nf_ct_event *item); -diff --git a/net/Kconfig b/net/Kconfig -index b4621e1f..9612ca6c 100644 --- a/net/Kconfig +++ b/net/Kconfig @@ -444,3 +444,6 @@ config HAVE_CBPF_JIT @@ -51,21 +43,18 @@ index b4621e1f..9612ca6c 100644 + +config SHORTCUT_FE + bool "Enables kernel network stack path for Shortcut Forwarding Engine" -diff --git a/net/core/dev.c b/net/core/dev.c -index 822268d8..74a0e0f4 100644 --- a/net/core/dev.c +++ b/net/core/dev.c -@@ -2973,8 +2973,17 @@ static int xmit_one(struct sk_buff *skb, struct net_device *dev, - !(skb->imq_flags & IMQ_F_ENQUEUE)) +@@ -2974,7 +2974,16 @@ static int xmit_one(struct sk_buff *skb, #else if (!list_empty(&ptype_all) || !list_empty(&dev->ptype_all)) -+#endif + #endif +#ifdef CONFIG_SHORTCUT_FE + /* If this skb has been fast forwarded then we don't want it to + * go to any taps (by definition we're trying to bypass them). + */ + if (!skb->fast_forwarded) { - #endif ++#endif dev_queue_xmit_nit(skb, dev); +#ifdef CONFIG_SHORTCUT_FE + } @@ -73,7 +62,7 @@ index 822268d8..74a0e0f4 100644 #ifdef CONFIG_ETHERNET_PACKET_MANGLE if (!dev->eth_mangle_tx || -@@ -4126,6 +4135,11 @@ void netdev_rx_handler_unregister(struct net_device *dev) +@@ -4126,6 +4135,11 @@ void netdev_rx_handler_unregister(struct } EXPORT_SYMBOL_GPL(netdev_rx_handler_unregister); @@ -85,7 +74,7 @@ index 822268d8..74a0e0f4 100644 /* * Limit the use of PFMEMALLOC reserves to those protocols that implement * the special handling of PFMEMALLOC skbs. -@@ -4174,6 +4188,10 @@ static int __netif_receive_skb_core(struct sk_buff *skb, bool pfmemalloc) +@@ -4174,6 +4188,10 @@ static int __netif_receive_skb_core(stru int ret = NET_RX_DROP; __be16 type; @@ -96,7 +85,7 @@ index 822268d8..74a0e0f4 100644 net_timestamp_check(!netdev_tstamp_prequeue, skb); trace_netif_receive_skb(skb); -@@ -4199,6 +4217,16 @@ static int __netif_receive_skb_core(struct sk_buff *skb, bool pfmemalloc) +@@ -4199,6 +4217,16 @@ another_round: goto out; } @@ -113,11 +102,9 @@ index 822268d8..74a0e0f4 100644 #ifdef CONFIG_NET_CLS_ACT if (skb->tc_verd & TC_NCLS) { skb->tc_verd = CLR_TC_NCLS(skb->tc_verd); -diff --git a/net/netfilter/nf_conntrack_ecache.c b/net/netfilter/nf_conntrack_ecache.c -index 2fdb6605..988b62cb 100644 --- a/net/netfilter/nf_conntrack_ecache.c +++ b/net/netfilter/nf_conntrack_ecache.c -@@ -162,7 +162,11 @@ int nf_conntrack_eventmask_report(unsigned int eventmask, struct nf_conn *ct, +@@ -162,7 +162,11 @@ int nf_conntrack_eventmask_report(unsign rcu_read_lock(); notify = rcu_dereference(net->ct.nf_conntrack_event_cb); @@ -129,7 +116,7 @@ index 2fdb6605..988b62cb 100644 goto out_unlock; e = nf_ct_ecache_find(ct); -@@ -181,7 +185,14 @@ int nf_conntrack_eventmask_report(unsigned int eventmask, struct nf_conn *ct, +@@ -181,7 +185,14 @@ int nf_conntrack_eventmask_report(unsign if (!((eventmask | missed) & e->ctmask)) goto out_unlock; @@ -144,7 +131,7 @@ index 2fdb6605..988b62cb 100644 if (unlikely(ret < 0 || missed)) { spin_lock_bh(&ct->lock); if (ret < 0) { -@@ -263,7 +274,11 @@ void nf_ct_deliver_cached_events(struct nf_conn *ct) +@@ -263,7 +274,11 @@ void nf_ct_deliver_cached_events(struct rcu_read_lock(); notify = rcu_dereference(net->ct.nf_conntrack_event_cb); @@ -156,7 +143,7 @@ index 2fdb6605..988b62cb 100644 goto out_unlock; e = nf_ct_ecache_find(ct); -@@ -287,7 +302,15 @@ void nf_ct_deliver_cached_events(struct nf_conn *ct) +@@ -287,7 +302,15 @@ void nf_ct_deliver_cached_events(struct item.portid = 0; item.report = 0; @@ -172,7 +159,7 @@ index 2fdb6605..988b62cb 100644 if (likely(ret >= 0 && !missed)) goto out_unlock; -@@ -340,6 +363,11 @@ int nf_conntrack_register_notifier(struct net *net, struct notifier_block *nb) +@@ -340,6 +363,11 @@ int nf_conntrack_register_notifier(struc { return atomic_notifier_chain_register(&net->ct.nf_conntrack_chain, nb); } @@ -184,7 +171,7 @@ index 2fdb6605..988b62cb 100644 #else int nf_conntrack_register_notifier(struct net *net, struct nf_ct_event_notifier *new) -@@ -369,6 +397,11 @@ int nf_conntrack_unregister_notifier(struct net *net, struct notifier_block *nb) +@@ -369,6 +397,11 @@ int nf_conntrack_unregister_notifier(str { return atomic_notifier_chain_unregister(&net->ct.nf_conntrack_chain, nb); } @@ -196,8 +183,6 @@ index 2fdb6605..988b62cb 100644 #else void nf_conntrack_unregister_notifier(struct net *net, struct nf_ct_event_notifier *new) -diff --git a/net/netfilter/nf_conntrack_proto_tcp.c b/net/netfilter/nf_conntrack_proto_tcp.c -index f24b6266..201d2215 100644 --- a/net/netfilter/nf_conntrack_proto_tcp.c +++ b/net/netfilter/nf_conntrack_proto_tcp.c @@ -35,11 +35,19 @@ diff --git a/target/linux/generic/pending-4.14/601-add-kernel-imq-support.patch b/target/linux/generic/pending-4.14/601-add-kernel-imq-support.patch index 3886b42c7a..e6f19cba9a 100644 --- a/target/linux/generic/pending-4.14/601-add-kernel-imq-support.patch +++ b/target/linux/generic/pending-4.14/601-add-kernel-imq-support.patch @@ -1801,7 +1801,7 @@ /* Note : this field could be in headers_start/headers_end section * It is not yet because we do not want to have a 16 bit hole -@@ -3943,6 +4050,13 @@ void __init skb_init(void) +@@ -3949,6 +4056,13 @@ void __init skb_init(void) 0, SLAB_HWCACHE_ALIGN|SLAB_PANIC, NULL); diff --git a/target/linux/generic/pending-4.19/601-add-kernel-imq-support.patch b/target/linux/generic/pending-4.19/601-add-kernel-imq-support.patch index 10ed04cbe0..413ac39e15 100644 --- a/target/linux/generic/pending-4.19/601-add-kernel-imq-support.patch +++ b/target/linux/generic/pending-4.19/601-add-kernel-imq-support.patch @@ -1466,7 +1466,7 @@ /* Note : this field could be in headers_start/headers_end section * It is not yet because we do not want to have a 16 bit hole -@@ -3969,6 +4046,13 @@ void __init skb_init(void) +@@ -3975,6 +4052,13 @@ void __init skb_init(void) 0, SLAB_HWCACHE_ALIGN|SLAB_PANIC, NULL); diff --git a/target/linux/generic/pending-4.19/760-net-usb-aqc111-Driver-skeleton-for-Aquantia-AQtionUSB-to-5GbE.patch b/target/linux/generic/pending-4.19/760-net-usb-aqc111-Driver-skeleton-for-Aquantia-AQtionUSB-to-5GbE.patch index 5c16ac42f3..c7c8607fa2 100644 --- a/target/linux/generic/pending-4.19/760-net-usb-aqc111-Driver-skeleton-for-Aquantia-AQtionUSB-to-5GbE.patch +++ b/target/linux/generic/pending-4.19/760-net-usb-aqc111-Driver-skeleton-for-Aquantia-AQtionUSB-to-5GbE.patch @@ -1856,7 +1856,7 @@ static const struct usb_device_id products[] = { /* BLACKLIST !! -@@ -842,6 +844,30 @@ static const struct usb_device_id produc +@@ -849,6 +851,30 @@ static const struct usb_device_id produc .driver_info = 0, }, diff --git a/target/linux/generic/pending-4.9/601-add-kernel-imq-support.patch b/target/linux/generic/pending-4.9/601-add-kernel-imq-support.patch index 1263da96e0..f6a3e888c2 100644 --- a/target/linux/generic/pending-4.9/601-add-kernel-imq-support.patch +++ b/target/linux/generic/pending-4.9/601-add-kernel-imq-support.patch @@ -1754,7 +1754,7 @@ /* Note : this field could be in headers_start/headers_end section * It is not yet because we do not want to have a 16 bit hole -@@ -3521,6 +3628,13 @@ void __init skb_init(void) +@@ -3527,6 +3634,13 @@ void __init skb_init(void) 0, SLAB_HWCACHE_ALIGN|SLAB_PANIC, NULL); diff --git a/target/linux/ipq40xx/patches-4.14/996-add-uart2-and-mdio-label.patch b/target/linux/ipq40xx/patches-4.14/996-add-uart2-and-mdio-label.patch index 1ae8b86f80..5d02307ba8 100644 --- a/target/linux/ipq40xx/patches-4.14/996-add-uart2-and-mdio-label.patch +++ b/target/linux/ipq40xx/patches-4.14/996-add-uart2-and-mdio-label.patch @@ -1,6 +1,6 @@ --- a/arch/arm/boot/dts/qcom-ipq4019.dtsi +++ b/arch/arm/boot/dts/qcom-ipq4019.dtsi -@@ -387,7 +387,7 @@ +@@ -392,7 +392,7 @@ dma-names = "rx", "tx"; }; @@ -9,7 +9,7 @@ compatible = "qcom,msm-uartdm-v1.4", "qcom,msm-uartdm"; reg = <0x78b0000 0x200>; interrupts = ; -@@ -591,7 +591,7 @@ +@@ -596,7 +596,7 @@ status = "disabled"; }; diff --git a/target/linux/layerscape/patches-4.14/807-usb-support-layerscape.patch b/target/linux/layerscape/patches-4.14/807-usb-support-layerscape.patch index 449165dca1..f140edea70 100644 --- a/target/linux/layerscape/patches-4.14/807-usb-support-layerscape.patch +++ b/target/linux/layerscape/patches-4.14/807-usb-support-layerscape.patch @@ -442,7 +442,7 @@ Signed-off-by: Zhao Chenhui /* Global User Control 1 Register */ #define DWC3_GUCTL1_PARKMODE_DISABLE_SS BIT(17) #define DWC3_GUCTL1_TX_IPGAP_LINECHECK_DIS BIT(28) -@@ -478,6 +507,14 @@ +@@ -479,6 +508,14 @@ #define DWC3_DEV_IMOD_INTERVAL_SHIFT 0 #define DWC3_DEV_IMOD_INTERVAL_MASK (0xffff << 0) @@ -457,7 +457,7 @@ Signed-off-by: Zhao Chenhui /* Structures */ struct dwc3_trb; -@@ -789,6 +826,7 @@ struct dwc3_scratchpad_array { +@@ -790,6 +827,7 @@ struct dwc3_scratchpad_array { * @regs: base address for our registers * @regs_size: address space size * @fladj: frame length adjustment @@ -465,7 +465,7 @@ Signed-off-by: Zhao Chenhui * @irq_gadget: peripheral controller's IRQ number * @nr_scratch: number of scratch buffers * @u1u2: only used on revisions <1.83a for workaround -@@ -844,6 +882,7 @@ struct dwc3_scratchpad_array { +@@ -845,6 +883,7 @@ struct dwc3_scratchpad_array { * @setup_packet_pending: true when there's a Setup Packet in FIFO. Workaround * @three_stage_setup: set if we perform a three phase setup * @usb3_lpm_capable: set if hadrware supports Link Power Management @@ -473,7 +473,7 @@ Signed-off-by: Zhao Chenhui * @disable_scramble_quirk: set if we enable the disable scramble quirk * @u2exit_lfps_quirk: set if we enable u2exit lfps quirk * @u2ss_inp3_quirk: set if we enable P3 OK for U2/SS Inactive quirk -@@ -925,6 +964,12 @@ struct dwc3 { +@@ -926,6 +965,12 @@ struct dwc3 { enum usb_phy_interface hsphy_mode; u32 fladj; @@ -486,7 +486,7 @@ Signed-off-by: Zhao Chenhui u32 irq_gadget; u32 nr_scratch; u32 u1u2; -@@ -1009,6 +1054,7 @@ struct dwc3 { +@@ -1010,6 +1055,7 @@ struct dwc3 { unsigned setup_packet_pending:1; unsigned three_stage_setup:1; unsigned usb3_lpm_capable:1; @@ -494,7 +494,7 @@ Signed-off-by: Zhao Chenhui unsigned disable_scramble_quirk:1; unsigned u2exit_lfps_quirk:1; -@@ -1029,6 +1075,11 @@ struct dwc3 { +@@ -1030,6 +1076,11 @@ struct dwc3 { unsigned tx_de_emphasis_quirk:1; unsigned tx_de_emphasis:2; diff --git a/target/linux/ramips/patches-4.14/105-mt7621-memory-detect.patch b/target/linux/ramips/patches-4.14/105-mt7621-memory-detect.patch index f843e514d3..b19b57fd66 100644 --- a/target/linux/ramips/patches-4.14/105-mt7621-memory-detect.patch +++ b/target/linux/ramips/patches-4.14/105-mt7621-memory-detect.patch @@ -90,7 +90,7 @@ Signed-off-by: Chuanhong Guo void __init ralink_clk_init(void) { u32 syscfg, xtal_sel, clkcfg, clk_sel, curclk, ffiv, ffrac; -@@ -328,10 +353,7 @@ void prom_soc_init(struct ralink_soc_inf +@@ -319,10 +344,7 @@ void prom_soc_init(struct ralink_soc_inf (rev >> CHIP_REV_VER_SHIFT) & CHIP_REV_VER_MASK, (rev & CHIP_REV_ECO_MASK)); From 236f828ae56cbd135fcf33d5f36e84f7fd2e2e45 Mon Sep 17 00:00:00 2001 From: CN_SZTL Date: Sat, 23 Jan 2021 21:04:46 +0800 Subject: [PATCH 19/20] linux: arm64: cpuinfo: Add "model name" in /proc/cpuinfo for 64bit tasks also Removed restriction of displaying model name for 32 bit tasks only. Because of this Processor details were not displayed in "System setting -> Details" in Ubuntu model name display is generic and can be printed for 64 bit also. model name : ARMv8 Processor rev X (v8l) Signed-off-by: Sumit Gupta Link: https://lore.kernel.org/lkml/1472461345-28219-1-git-send-email-sumitg@nvidia.com/ Reported-by: AmadeusGhost Tested-by: AmadeusGhost Signed-off-by: CN_SZTL (backport from 68692453e23f2f53ba32c21a315a2b06b786d9ba) --- ...el-name-in-proc-cpuinfo-for-64bit-ta.patch | 36 +++++++++++++++++++ ...el-name-in-proc-cpuinfo-for-64bit-ta.patch | 36 +++++++++++++++++++ ...el-name-in-proc-cpuinfo-for-64bit-ta.patch | 36 +++++++++++++++++++ 3 files changed, 108 insertions(+) create mode 100644 target/linux/generic/pending-4.14/312-arm64-cpuinfo-Add-model-name-in-proc-cpuinfo-for-64bit-ta.patch create mode 100644 target/linux/generic/pending-4.19/312-arm64-cpuinfo-Add-model-name-in-proc-cpuinfo-for-64bit-ta.patch create mode 100644 target/linux/generic/pending-4.9/312-arm64-cpuinfo-Add-model-name-in-proc-cpuinfo-for-64bit-ta.patch diff --git a/target/linux/generic/pending-4.14/312-arm64-cpuinfo-Add-model-name-in-proc-cpuinfo-for-64bit-ta.patch b/target/linux/generic/pending-4.14/312-arm64-cpuinfo-Add-model-name-in-proc-cpuinfo-for-64bit-ta.patch new file mode 100644 index 0000000000..fbc49a5a4e --- /dev/null +++ b/target/linux/generic/pending-4.14/312-arm64-cpuinfo-Add-model-name-in-proc-cpuinfo-for-64bit-ta.patch @@ -0,0 +1,36 @@ +From: Sumit Gupta +To: , , + +Cc: , , + , , + , , + , , + , Sumit Gupta +Subject: [PATCH] arm64: cpuinfo: Add "model name" in /proc/cpuinfo for 64bit tasks also +Date: Mon, 29 Aug 2016 14:32:25 +0530 +Message-ID: <1472461345-28219-1-git-send-email-sumitg@nvidia.com> (raw) + +Removed restriction of displaying model name for 32 bit tasks only. +Because of this Processor details were not displayed in +"System setting -> Details" in Ubuntu model name display is generic +and can be printed for 64 bit also. + +model name : ARMv8 Processor rev X (v8l) + +Signed-off-by: Sumit Gupta +--- + arch/arm64/kernel/cpuinfo.c | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +--- a/arch/arm64/kernel/cpuinfo.c ++++ b/arch/arm64/kernel/cpuinfo.c +@@ -136,8 +136,7 @@ static int c_show(struct seq_file *m, vo + * "processor". Give glibc what it expects. + */ + seq_printf(m, "processor\t: %d\n", i); +- if (compat) +- seq_printf(m, "model name\t: ARMv8 Processor rev %d (%s)\n", ++ seq_printf(m, "model name\t: ARMv8 Processor rev %d (%s)\n", + MIDR_REVISION(midr), COMPAT_ELF_PLATFORM); + + seq_printf(m, "BogoMIPS\t: %lu.%02lu\n", diff --git a/target/linux/generic/pending-4.19/312-arm64-cpuinfo-Add-model-name-in-proc-cpuinfo-for-64bit-ta.patch b/target/linux/generic/pending-4.19/312-arm64-cpuinfo-Add-model-name-in-proc-cpuinfo-for-64bit-ta.patch new file mode 100644 index 0000000000..9518c44412 --- /dev/null +++ b/target/linux/generic/pending-4.19/312-arm64-cpuinfo-Add-model-name-in-proc-cpuinfo-for-64bit-ta.patch @@ -0,0 +1,36 @@ +From: Sumit Gupta +To: , , + +Cc: , , + , , + , , + , , + , Sumit Gupta +Subject: [PATCH] arm64: cpuinfo: Add "model name" in /proc/cpuinfo for 64bit tasks also +Date: Mon, 29 Aug 2016 14:32:25 +0530 +Message-ID: <1472461345-28219-1-git-send-email-sumitg@nvidia.com> (raw) + +Removed restriction of displaying model name for 32 bit tasks only. +Because of this Processor details were not displayed in +"System setting -> Details" in Ubuntu model name display is generic +and can be printed for 64 bit also. + +model name : ARMv8 Processor rev X (v8l) + +Signed-off-by: Sumit Gupta +--- + arch/arm64/kernel/cpuinfo.c | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +--- a/arch/arm64/kernel/cpuinfo.c ++++ b/arch/arm64/kernel/cpuinfo.c +@@ -137,8 +137,7 @@ static int c_show(struct seq_file *m, vo + * "processor". Give glibc what it expects. + */ + seq_printf(m, "processor\t: %d\n", i); +- if (compat) +- seq_printf(m, "model name\t: ARMv8 Processor rev %d (%s)\n", ++ seq_printf(m, "model name\t: ARMv8 Processor rev %d (%s)\n", + MIDR_REVISION(midr), COMPAT_ELF_PLATFORM); + + seq_printf(m, "BogoMIPS\t: %lu.%02lu\n", diff --git a/target/linux/generic/pending-4.9/312-arm64-cpuinfo-Add-model-name-in-proc-cpuinfo-for-64bit-ta.patch b/target/linux/generic/pending-4.9/312-arm64-cpuinfo-Add-model-name-in-proc-cpuinfo-for-64bit-ta.patch new file mode 100644 index 0000000000..58f28210d6 --- /dev/null +++ b/target/linux/generic/pending-4.9/312-arm64-cpuinfo-Add-model-name-in-proc-cpuinfo-for-64bit-ta.patch @@ -0,0 +1,36 @@ +From: Sumit Gupta +To: , , + +Cc: , , + , , + , , + , , + , Sumit Gupta +Subject: [PATCH] arm64: cpuinfo: Add "model name" in /proc/cpuinfo for 64bit tasks also +Date: Mon, 29 Aug 2016 14:32:25 +0530 +Message-ID: <1472461345-28219-1-git-send-email-sumitg@nvidia.com> (raw) + +Removed restriction of displaying model name for 32 bit tasks only. +Because of this Processor details were not displayed in +"System setting -> Details" in Ubuntu model name display is generic +and can be printed for 64 bit also. + +model name : ARMv8 Processor rev X (v8l) + +Signed-off-by: Sumit Gupta +--- + arch/arm64/kernel/cpuinfo.c | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +--- a/arch/arm64/kernel/cpuinfo.c ++++ b/arch/arm64/kernel/cpuinfo.c +@@ -118,8 +118,7 @@ static int c_show(struct seq_file *m, vo + * "processor". Give glibc what it expects. + */ + seq_printf(m, "processor\t: %d\n", i); +- if (compat) +- seq_printf(m, "model name\t: ARMv8 Processor rev %d (%s)\n", ++ seq_printf(m, "model name\t: ARMv8 Processor rev %d (%s)\n", + MIDR_REVISION(midr), COMPAT_ELF_PLATFORM); + + seq_printf(m, "BogoMIPS\t: %lu.%02lu\n", From c05a66e3f98fbecad0aacbd510799b6d25555af5 Mon Sep 17 00:00:00 2001 From: CN_SZTL Date: Sat, 23 Jan 2021 21:42:06 +0800 Subject: [PATCH 20/20] autocore: remove hack for ARMv8 The related issue was fixed so this hack is totally useless now. Signed-off-by: CN_SZTL (cherry-pick from 68692453e23f2f53ba32c21a315a2b06b786d9ba) --- package/lean/autocore/Makefile | 2 +- package/lean/autocore/files/arm/sbin/cpuinfo | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/package/lean/autocore/Makefile b/package/lean/autocore/Makefile index f9c0a312cf..4ee9c9c1d1 100644 --- a/package/lean/autocore/Makefile +++ b/package/lean/autocore/Makefile @@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=autocore PKG_VERSION:=1 -PKG_RELEASE:=36 +PKG_RELEASE:=37 include $(INCLUDE_DIR)/package.mk diff --git a/package/lean/autocore/files/arm/sbin/cpuinfo b/package/lean/autocore/files/arm/sbin/cpuinfo index afdfc7a6fa..92c6f0bd9d 100755 --- a/package/lean/autocore/files/arm/sbin/cpuinfo +++ b/package/lean/autocore/files/arm/sbin/cpuinfo @@ -1,7 +1,6 @@ #!/bin/sh cpu_arch="$(cat "/proc/cpuinfo" | grep "model name" | sed -n "1p" | awk -F ': ' '{print $2}')" -[ -z "${cpu_arch}" ] && cpu_arch="ARMv8 Processor" cpu_cores="$(cat "/proc/cpuinfo" | grep "processor" | wc -l)" if grep -q "bcm27xx" "/etc/openwrt_release"; then