mirror of
https://github.com/caiwx86/small-packages.git
synced 2026-10-29 08:45:13 +08:00
update 2026-09-24 16:56:26
This commit is contained in:
1 parent
b31a5c3878
commit
e4cee331e9
6885 files changed
+3240523
No files matched your search
@@ -0,0 +1,21 @@
|
||||
# Author: mingxiaoyu (fengying0347@163.com)
|
||||
#
|
||||
# Licensed to the public under the GNU General Public License v3.
|
||||
#
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=luci-app-cloudflarespeedtest
|
||||
|
||||
LUCI_TITLE:=LuCI support for Cloudflares Speed Test
|
||||
LUCI_DEPENDS:=+cdnspeedtest +openssl-util +curl
|
||||
LUCI_PKGARCH:=all
|
||||
PKG_VERSION:=1.5.4
|
||||
PKG_RELEASE:=0
|
||||
PKG_LICENSE:=AGPL-3.0
|
||||
PKG_MAINTAINER:=mingxiaoyu <fengying0347@163.com>
|
||||
|
||||
include $(TOPDIR)/feeds/luci/luci.mk
|
||||
|
||||
# call BuildPackage - OpenWrt buildroot signature
|
||||
|
||||
@@ -0,0 +1,50 @@
|
||||
-- Copyright (C) 2020 mingxiaoyu <fengying0347@163.com>
|
||||
-- Licensed to the public under the GNU General Public License v3.
|
||||
module("luci.controller.cloudflarespeedtest",package.seeall)
|
||||
|
||||
function index()
|
||||
|
||||
if not nixio.fs.access('/etc/config/cloudflarespeedtest') then
|
||||
return
|
||||
end
|
||||
|
||||
local page
|
||||
page = entry({"admin", "services", "cloudflarespeedtest"}, firstchild(), _("Cloudflare Speed Test"), 99)
|
||||
page.dependent = false
|
||||
page.acl_depends = { "luci-app-cloudflarespeedtest" }
|
||||
|
||||
entry({"admin", "services", "cloudflarespeedtest", "general"}, cbi("cloudflarespeedtest/cloudflarespeedtest"), _("Base Setting"), 1)
|
||||
entry({"admin", "services", "cloudflarespeedtest", "logread"}, form("cloudflarespeedtest/logread"), _("Logs"), 2)
|
||||
|
||||
entry({"admin", "services", "cloudflarespeedtest", "status"}, call("act_status")).leaf = true
|
||||
entry({"admin", "services", "cloudflarespeedtest", "stop"}, call("act_stop"))
|
||||
entry({"admin", "services", "cloudflarespeedtest", "start"}, call("act_start"))
|
||||
entry({"admin", "services", "cloudflarespeedtest", "getlog"}, call("get_log"))
|
||||
end
|
||||
|
||||
function act_status()
|
||||
local e = {}
|
||||
e.running = luci.sys.call("busybox ps -w | grep cdnspeedtest | grep -v grep >/dev/null") == 0
|
||||
luci.http.prepare_content("application/json")
|
||||
luci.http.write_json(e)
|
||||
end
|
||||
|
||||
function act_stop()
|
||||
luci.sys.call("busybox ps -w | grep cdnspeedtest | grep -v grep | xargs kill -9 >/dev/null")
|
||||
luci.http.write('')
|
||||
end
|
||||
|
||||
function act_start()
|
||||
act_stop()
|
||||
luci.sys.call("/usr/bin/cloudflarespeedtest/cloudflarespeedtest.sh start")
|
||||
luci.http.write('')
|
||||
end
|
||||
|
||||
function get_log()
|
||||
local fs = require "nixio.fs"
|
||||
local e = {}
|
||||
e.running = luci.sys.call("busybox ps -w | grep cdnspeedtest | grep -v grep >/dev/null") == 0
|
||||
e.log= fs.readfile("/var/log/cloudflarespeedtest.log") or ""
|
||||
luci.http.prepare_content("application/json")
|
||||
luci.http.write_json(e)
|
||||
end
|
||||
+340
@@ -0,0 +1,340 @@
|
||||
require("luci.sys")
|
||||
|
||||
local uci = luci.model.uci.cursor()
|
||||
|
||||
m = Map('cloudflarespeedtest')
|
||||
m.title = translate('Cloudflare Speed Test')
|
||||
m.description = '<a href=\"https://github.com/mingxiaoyu/luci-app-cloudflarespeedtest\" target=\"_blank\">GitHub</a>'
|
||||
|
||||
-- [[ 基本设置 ]]--
|
||||
|
||||
s = m:section(NamedSection, 'global')
|
||||
s.addremove = false
|
||||
s.anonymous = true
|
||||
|
||||
o=s:option(Flag,"enabled",translate("Enabled"))
|
||||
o.description = translate("Enabled scheduled task test Cloudflare IP")
|
||||
o.rmempty=false
|
||||
o.default = 0
|
||||
|
||||
o=s:option(Flag,"ipv6_enabled",translate("IPv6 Enabled"))
|
||||
o.description = translate("Provides only one method, if IPv6 is enabled, IPv4 will not be tested")
|
||||
o.default = 0
|
||||
o.rmempty=false
|
||||
|
||||
o=s:option(Value,"speed",translate("Broadband speed"))
|
||||
o.description =translate("100M broadband download speed is about 12M/s. It is not recommended to fill in an excessively large value, and it may run all the time.");
|
||||
o.datatype ="uinteger"
|
||||
o.rmempty=false
|
||||
|
||||
o=s:option(Value,"custome_url",translate("Custome Url"))
|
||||
o.description = translate("<a href=\"https://github.com/XIU2/CloudflareSpeedTest/issues/168\" target=\"_blank\">How to create</a>")
|
||||
o.rmempty=false
|
||||
|
||||
o=s:option(Flag,"custome_cors_enabled",translate("Custome Cron Enabled"))
|
||||
o.default = 0
|
||||
o.rmempty=false
|
||||
|
||||
o = s:option(Value, "custome_cron", translate("Custome Cron"))
|
||||
o:depends("custome_cors_enabled", 1)
|
||||
|
||||
hour = s:option(Value, "hour", translate("Hour"))
|
||||
hour.datatype = "range(0,23)"
|
||||
hour:depends("custome_cors_enabled", 0)
|
||||
|
||||
minute = s:option(Value, "minute", translate("Minute"))
|
||||
minute.datatype = "range(0,59)"
|
||||
minute:depends("custome_cors_enabled", 0)
|
||||
|
||||
o = s:option(ListValue, "proxy_mode", translate("Proxy Mode"))
|
||||
o:value("nil", translate("HOLD"))
|
||||
o.description = translate("during the speed testing, swith to which mode")
|
||||
o:value("gfw", translate("GFW List"))
|
||||
o:value("close", translate("CLOSE"))
|
||||
o.default = "gfw"
|
||||
|
||||
o=s:option(Flag,"advanced",translate("Advanced"))
|
||||
o.description = translate("Not recommended")
|
||||
o.default = 0
|
||||
o.rmempty=false
|
||||
|
||||
o = s:option(Value, "threads", translate("Thread"))
|
||||
o.datatype ="uinteger"
|
||||
o.default = 200
|
||||
o.rmempty=true
|
||||
o:depends("advanced", 1)
|
||||
|
||||
o = s:option(Value, "tl", translate("Average Latency Cap"))
|
||||
o.datatype ="uinteger"
|
||||
o.default = 200
|
||||
o.rmempty=true
|
||||
o:depends("advanced", 1)
|
||||
|
||||
o = s:option(Value, "tll", translate("Average Latency Lower Bound"))
|
||||
o.datatype ="uinteger"
|
||||
o.default = 40
|
||||
o.rmempty=true
|
||||
o:depends("advanced", 1)
|
||||
|
||||
o = s:option(Value, "t", translate("Delayed speed measurement time"))
|
||||
o.datatype ="uinteger"
|
||||
o.default = 4
|
||||
o.rmempty=true
|
||||
o:depends("advanced", 1)
|
||||
|
||||
o = s:option(Value, "dt", translate("Download speed test time"))
|
||||
o.datatype ="uinteger"
|
||||
o.default = 10
|
||||
o.rmempty=true
|
||||
o:depends("advanced", 1)
|
||||
|
||||
o = s:option(Value, "dn", translate("Number of download speed tests"))
|
||||
o.datatype ="uinteger"
|
||||
o.default = 1
|
||||
o.rmempty=true
|
||||
o:depends("advanced", 1)
|
||||
|
||||
o = s:option(Flag, "dd", translate("Disable download speed test"))
|
||||
o.default = 0
|
||||
o.rmempty=true
|
||||
o:depends("advanced", 1)
|
||||
|
||||
o = s:option(Value, "tp", translate("Port"))
|
||||
o.rmempty=true
|
||||
o.default = 443
|
||||
o.datatype ="port"
|
||||
o:depends("advanced", 1)
|
||||
|
||||
o = s:option(DummyValue, '', '')
|
||||
o.rawhtml = true
|
||||
o.template = "cloudflarespeedtest/actions"
|
||||
|
||||
s = m:section(NamedSection, "servers", "section", translate("Third party applications settings"))
|
||||
|
||||
if nixio.fs.access("/etc/config/shadowsocksr") then
|
||||
s:tab("ssr", translate("Shadowsocksr Plus+"))
|
||||
|
||||
o=s:taboption("ssr", Flag, "ssr_enabled",translate("Shadowsocksr Plus+ Enabled"))
|
||||
o.rmempty=true
|
||||
|
||||
local ssr_server_table = {}
|
||||
uci:foreach("shadowsocksr", "servers", function(s)
|
||||
if s.alias then
|
||||
ssr_server_table[s[".name"]] = "[%s]:%s" % {string.upper(s.v2ray_protocol or s.type), s.alias}
|
||||
elseif s.server and s.server_port then
|
||||
ssr_server_table[s[".name"]] = "[%s]:%s:%s" % {string.upper(s.v2ray_protocol or s.type), s.server, s.server_port}
|
||||
end
|
||||
end)
|
||||
|
||||
local ssr_key_table = {}
|
||||
for key, _ in pairs(ssr_server_table) do
|
||||
table.insert(ssr_key_table, key)
|
||||
end
|
||||
|
||||
table.sort(ssr_key_table)
|
||||
|
||||
o = s:taboption("ssr", DynamicList, "ssr_services",
|
||||
translate("Shadowsocksr Servers"),
|
||||
translate("Please select a service"))
|
||||
|
||||
for _, key in pairs(ssr_key_table) do
|
||||
o:value(key, ssr_server_table[key])
|
||||
end
|
||||
o:depends("ssr_enabled", 1)
|
||||
o.forcewrite = true
|
||||
|
||||
end
|
||||
|
||||
|
||||
if nixio.fs.access("/etc/config/passwall") then
|
||||
s:tab("passwalltab", translate("passwall"))
|
||||
|
||||
o=s:taboption("passwalltab", Flag, "passwall_enabled",translate("Passwall Enabled"))
|
||||
o.rmempty=true
|
||||
|
||||
local passwall_server_table = {}
|
||||
uci:foreach("passwall", "nodes", function(s)
|
||||
if s.remarks then
|
||||
passwall_server_table[s[".name"]] = "[%s]:%s" % {string.upper(s.protocol or s.type), s.remarks}
|
||||
end
|
||||
end)
|
||||
|
||||
local passwall_key_table = {}
|
||||
for key, _ in pairs(passwall_server_table) do
|
||||
table.insert(passwall_key_table, key)
|
||||
end
|
||||
|
||||
table.sort(passwall_key_table)
|
||||
|
||||
o = s:taboption("passwalltab", DynamicList, "passwall_services",
|
||||
translate("Passwall Servers"),
|
||||
translate("Please select a service"))
|
||||
|
||||
for _, key in pairs(passwall_key_table) do
|
||||
o:value(key, passwall_server_table[key])
|
||||
end
|
||||
o:depends("passwall_enabled", 1)
|
||||
o.forcewrite = true
|
||||
|
||||
end
|
||||
|
||||
if nixio.fs.access("/etc/config/passwall2") then
|
||||
s:tab("passwall2tab", translate("passwall2"))
|
||||
|
||||
o=s:taboption("passwall2tab", Flag, "passwall2_enabled",translate("PassWall2 Enabled"))
|
||||
o.rmempty=true
|
||||
|
||||
local passwall2_server_table = {}
|
||||
uci:foreach("passwall2", "nodes", function(s)
|
||||
if s.remarks then
|
||||
passwall2_server_table[s[".name"]] = "[%s]:%s" % {string.upper(s.protocol or s.type), s.remarks}
|
||||
end
|
||||
end)
|
||||
|
||||
local passwall2_key_table = {}
|
||||
for key, _ in pairs(passwall2_server_table) do
|
||||
table.insert(passwall2_key_table, key)
|
||||
end
|
||||
|
||||
table.sort(passwall2_key_table)
|
||||
|
||||
o = s:taboption("passwall2tab", DynamicList, "passwall2_services",
|
||||
translate("Passwall2 Servers"),
|
||||
translate("Please select a service"))
|
||||
|
||||
for _, key in pairs(passwall2_key_table) do
|
||||
o:value(key, passwall2_server_table[key])
|
||||
end
|
||||
o:depends("passwall2_enabled", 1)
|
||||
o.forcewrite = true
|
||||
|
||||
end
|
||||
|
||||
s:tab("bypasstab", translate("Bypass"))
|
||||
if nixio.fs.access("/etc/config/bypass") then
|
||||
|
||||
o=s:taboption("bypasstab", Flag, "bypass_enabled",translate("Bypass Enabled"))
|
||||
o.rmempty=true
|
||||
|
||||
local bypass_server_table = {}
|
||||
uci:foreach("bypass", "servers", function(s)
|
||||
if s.alias then
|
||||
bypass_server_table[s[".name"]] = "[%s]:%s" % {string.upper(s.protocol or s.type), s.alias}
|
||||
elseif s.server and s.server_port then
|
||||
bypass_server_table[s[".name"]] = "[%s]:%s:%s" % {string.upper(s.protocol or s.type), s.server, s.server_port}
|
||||
end
|
||||
end)
|
||||
|
||||
local bypass_key_table = {}
|
||||
for key, _ in pairs(bypass_server_table) do
|
||||
table.insert(bypass_key_table, key)
|
||||
end
|
||||
|
||||
table.sort(bypass_key_table)
|
||||
|
||||
o = s:taboption("bypasstab", DynamicList, "bypass_services",
|
||||
translate("Bypass Servers"),
|
||||
translate("Please select a service"))
|
||||
|
||||
for _, key in pairs(bypass_key_table) do
|
||||
o:value(key, bypass_server_table[key])
|
||||
end
|
||||
o:depends("bypass_enabled", 1)
|
||||
o.forcewrite = true
|
||||
|
||||
end
|
||||
|
||||
s:tab("vssrtab", translate("Vssr"))
|
||||
if nixio.fs.access("/etc/config/vssr") then
|
||||
|
||||
o=s:taboption("vssrtab", Flag, "vssr_enabled",translate("Vssr Enabled"))
|
||||
o.rmempty=true
|
||||
|
||||
local vssr_server_table = {}
|
||||
uci:foreach("vssr", "servers", function(s)
|
||||
if s.alias then
|
||||
vssr_server_table[s[".name"]] = "[%s]:%s" % {string.upper(s.protocol or s.type), s.alias}
|
||||
elseif s.server and s.server_port then
|
||||
vssr_server_table[s[".name"]] = "[%s]:%s:%s" % {string.upper(s.protocol or s.type), s.server, s.server_port}
|
||||
end
|
||||
end)
|
||||
|
||||
local vssr_key_table = {}
|
||||
for key, _ in pairs(vssr_server_table) do
|
||||
table.insert(vssr_key_table, key)
|
||||
end
|
||||
|
||||
table.sort(vssr_key_table)
|
||||
|
||||
o = s:taboption("vssrtab", DynamicList, "vssr_services",
|
||||
translate("Vssr Servers"),
|
||||
translate("Please select a service"))
|
||||
|
||||
for _, key in pairs(vssr_key_table) do
|
||||
o:value(key, vssr_server_table[key])
|
||||
end
|
||||
o:depends("vssr_enabled", 1)
|
||||
o.forcewrite = true
|
||||
|
||||
end
|
||||
|
||||
s:tab("dnstab", translate("DNS"))
|
||||
|
||||
o=s:taboption("dnstab", Flag, "DNS_enabled",translate("DNS Enabled"))
|
||||
|
||||
o=s:taboption("dnstab", ListValue, "DNS_type", translate("DNS Type"))
|
||||
o:value("aliyu", translate("AliyuDNS"))
|
||||
o:depends("DNS_enabled", 1)
|
||||
|
||||
o=s:taboption("dnstab", Value,"app_key",translate("Access Key ID"))
|
||||
o.rmempty=true
|
||||
o:depends("DNS_enabled", 1)
|
||||
o=s:taboption("dnstab", Value,"app_secret",translate("Access Key Secret"))
|
||||
o.rmempty=true
|
||||
o:depends("DNS_enabled", 1)
|
||||
|
||||
o=s:taboption("dnstab", Value,"main_domain",translate("Main Domain"),translate("For example: test.github.com -> github.com"))
|
||||
o.rmempty=true
|
||||
o:depends("DNS_enabled", 1)
|
||||
o=s:taboption("dnstab", DynamicList,"sub_domain",translate("Sub Domain"),translate("For example: test.github.com -> test"))
|
||||
o.rmempty=true
|
||||
o:depends("DNS_enabled", 1)
|
||||
|
||||
o=s:taboption("dnstab", ListValue, "line", translate("Lines"))
|
||||
o:value("default", translate("default"))
|
||||
o:value("telecom", translate("telecom"))
|
||||
o:value("unicom", translate("unicom"))
|
||||
o:value("mobile", translate("mobile"))
|
||||
o:depends("DNS_enabled", 1)
|
||||
o.default ="telecom"
|
||||
|
||||
s:tab("dnshost", translate("HOST"))
|
||||
o=s:taboption("dnshost", Flag, "HOST_enabled",translate("HOST Enabled"))
|
||||
o=s:taboption("dnshost", Value,"host_domain",translate("Domain"))
|
||||
o.rmempty=true
|
||||
o:depends("HOST_enabled", 1)
|
||||
|
||||
s:tab("mosdns", translate("MosDNS"))
|
||||
o=s:taboption("mosdns", Flag, "MosDNS_enabled",translate("MosDNS Enabled"))
|
||||
o=s:taboption("mosdns", Flag, "openclash_restart",translate("OpenClash Restart"))
|
||||
o:depends("MosDNS_enabled", 1)
|
||||
|
||||
e=m:section(TypedSection,"global",translate("Best IP"))
|
||||
e.anonymous=true
|
||||
local a="/usr/share/cloudflarespeedtestresult.txt"
|
||||
tvIPs=e:option(TextValue,"syipstext")
|
||||
tvIPs.rows=8
|
||||
tvIPs.readonly="readonly"
|
||||
tvIPs.wrap="off"
|
||||
|
||||
function tvIPs.cfgvalue(e,e)
|
||||
sylogtext=""
|
||||
if a and nixio.fs.access(a) then
|
||||
sylogtext=luci.sys.exec("tail -n 100 %s"%a)
|
||||
end
|
||||
return sylogtext
|
||||
end
|
||||
tvIPs.write=function(e,e,e)
|
||||
end
|
||||
|
||||
return m
|
||||
@@ -0,0 +1,9 @@
|
||||
log = SimpleForm("logview")
|
||||
log.submit = false
|
||||
log.reset = false
|
||||
|
||||
t = log:field(DummyValue, '', '')
|
||||
t.rawhtml = true
|
||||
t.template = 'cloudflarespeedtest/logread'
|
||||
|
||||
return log
|
||||
@@ -0,0 +1,56 @@
|
||||
<%+cbi/valueheader%>
|
||||
<script type="text/javascript">//<![CDATA[
|
||||
const STATUS_URL = '<%=luci.dispatcher.build_url("admin", "services", "cloudflarespeedtest","status")%>';
|
||||
const RUN_URL = '<%=luci.dispatcher.build_url("admin", "services", "cloudflarespeedtest","start")%>';
|
||||
const STOP_URL = '<%=luci.dispatcher.build_url("admin", "services", "cloudflarespeedtest","stop")%>';
|
||||
const LOG_URL = '<%=luci.dispatcher.build_url("admin", "services", "cloudflarespeedtest","logread")%>';
|
||||
|
||||
XHR.poll(3, STATUS_URL, null,
|
||||
function(x, data) {
|
||||
var tb = document.getElementById('cloudflarespeedtest_status');
|
||||
|
||||
if (data && tb) {
|
||||
if (data.running) {
|
||||
buttonStatus(true)
|
||||
tb.innerHTML = '<em><b><font color=green><%:RUNNING %></font></b></em>';
|
||||
} else {
|
||||
buttonStatus(false)
|
||||
tb.innerHTML = '<em><b><font color=red> <%:NOT RUNNING %></font></b></em>';
|
||||
}
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
function cloudflarespeedtest_act_start() {
|
||||
buttonStatus(true)
|
||||
XHR.get(RUN_URL, null, () => {
|
||||
});
|
||||
setTimeout(() => { window.location = LOG_URL }, 500);
|
||||
return false;
|
||||
}
|
||||
|
||||
function cloudflarespeedtest_act_stop(){
|
||||
XHR.get(STOP_URL, null, () => {
|
||||
buttonStatus(false)
|
||||
});
|
||||
return false;
|
||||
}
|
||||
|
||||
function buttonStatus(running){
|
||||
document.getElementById('cloudflarespeedtest_start').style.display = running ? "none" : "block"
|
||||
document.getElementById('cloudflarespeedtest_stop').style.display = running ? "block" : "none"
|
||||
}
|
||||
|
||||
//]]></script>
|
||||
<label class="cbi-value-title"><%= translate("Status") %></label>
|
||||
<div class="cbi-value-field">
|
||||
<p id="cloudflarespeedtest_status"><em><%:Collecting data...%></em></p>
|
||||
</div>
|
||||
|
||||
<label class="cbi-value-title"><%= translate("Speed Test") %></label>
|
||||
<div class="cbi-value-field">
|
||||
<input id="cloudflarespeedtest_start" type="button" style="display:block;" class="btn cbi-button cbi-button-apply" value="<%= translate('TEST AND APPLY') %>" onclick="cloudflarespeedtest_act_start()" />
|
||||
<input id="cloudflarespeedtest_stop" type="button" style="display:none;" class="btn cbi-button cbi-button-apply" value="<%= translate('STOP') %>" onclick="cloudflarespeedtest_act_stop()" />
|
||||
</div>
|
||||
|
||||
<%+cbi/valuefooter%>
|
||||
@@ -0,0 +1,23 @@
|
||||
<%+cbi/valueheader%>
|
||||
<input type="checkbox" id="checkbox1" checked><%:Auto refresh%></input>
|
||||
<textarea id="logview" class="cbi-input-textarea" style="width: 100%" rows="30" readonly="readonly"></textarea>
|
||||
|
||||
<script type="text/javascript">
|
||||
const LOG_URL = '<%=luci.dispatcher.build_url("admin", "services", "cloudflarespeedtest","getlog")%>';
|
||||
|
||||
function getlog(){
|
||||
XHR.get(LOG_URL, null, function(x, data) {
|
||||
logview.value = data.log;
|
||||
if(document.getElementById("checkbox1").checked == true){
|
||||
logview.scrollTop = logview.scrollHeight;
|
||||
}
|
||||
});
|
||||
}
|
||||
getlog()
|
||||
setInterval(() => {
|
||||
if(document.getElementById("checkbox1").checked == true){
|
||||
getlog()
|
||||
}
|
||||
}, 2000);
|
||||
</script>
|
||||
<%+cbi/valuefooter%>
|
||||
@@ -0,0 +1,227 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"POT-Creation-Date: \n"
|
||||
"PO-Revision-Date: 2022-02-10 20:44+0000\n"
|
||||
"Last-Translator: mingxiaoyu <fengying0347@163.com>\n"
|
||||
"Language: zh_Hans\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Generator: Weblate 4.8-dev\n"
|
||||
|
||||
msgid "<a href=\"https://github.com/mingxiaoyu/luci-app-cloudflarespeedtest\" target=\"_blank\">GitHub</a>"
|
||||
msgstr "<a href=\"https://github.com/mingxiaoyu/luci-app-cloudflarespeedtest\" target=\"_blank\">GitHub项目地址</a>"
|
||||
|
||||
msgid "Cloudflare Speed Test"
|
||||
msgstr "Cloudflare速度测试"
|
||||
|
||||
msgid "Base Setting"
|
||||
msgstr "基本设置"
|
||||
|
||||
msgid "Logs"
|
||||
msgstr "日志"
|
||||
|
||||
msgid "Enabled"
|
||||
msgstr "启用"
|
||||
|
||||
msgid "Enabled scheduled task test Cloudflare IP"
|
||||
msgstr "启用计划任务测试 Cloudflare IP"
|
||||
|
||||
msgid "Broadband speed"
|
||||
msgstr "宽带速度"
|
||||
|
||||
msgid "Custome Url Enabled"
|
||||
msgstr "启用自定义地址"
|
||||
|
||||
msgid "Custome Url"
|
||||
msgstr "自定义地址"
|
||||
|
||||
msgid "Custome Cron Enabled"
|
||||
msgstr "启用自定义Cron"
|
||||
|
||||
msgid "Custome Cron"
|
||||
msgstr "自定义Cron"
|
||||
|
||||
msgid "Hour"
|
||||
msgstr "小时"
|
||||
|
||||
msgid "Minute"
|
||||
msgstr "分钟"
|
||||
|
||||
msgid "100M broadband download speed is about 12M/s. It is not recommended to fill in an excessively large value, and it may run all the time."
|
||||
msgstr "100M的宽带下载大概为速度12M/s。不推荐填过大的值,可能出现一直运行。"
|
||||
|
||||
msgid "Shadowsocksr Plus+ Enabled"
|
||||
msgstr "启用ShadowSocksR Plus+"
|
||||
|
||||
msgid "Passwall Enabled"
|
||||
msgstr "启用Passwall"
|
||||
|
||||
msgid "PassWall2 Enabled"
|
||||
msgstr "启用PassWall2"
|
||||
|
||||
msgid "Bypass Enabled"
|
||||
msgstr "启用Bypass"
|
||||
|
||||
msgid "Vssr Enabled"
|
||||
msgstr "启用Vssr"
|
||||
msgid "Shadowsocksr Servers"
|
||||
msgstr "ShadowSocksR Plus+服务"
|
||||
|
||||
msgid "Passwall Servers"
|
||||
msgstr "Passwall服务"
|
||||
|
||||
msgid "Passwall2 Servers"
|
||||
msgstr "Passwall2服务"
|
||||
|
||||
msgid "Bypass Servers"
|
||||
msgstr "Bypass服务"
|
||||
|
||||
msgid "Vssr Servers"
|
||||
msgstr "Vssr服务"
|
||||
|
||||
msgid "Please select a service"
|
||||
msgstr "请选择一项服务"
|
||||
|
||||
msgid "Speed Test"
|
||||
msgstr "速度测试"
|
||||
|
||||
msgid "Best IP"
|
||||
msgstr "最佳IP"
|
||||
|
||||
msgid "TEST AND APPLY"
|
||||
msgstr "测试并应用"
|
||||
|
||||
msgid "STOP"
|
||||
msgstr "停止"
|
||||
|
||||
msgid "Advanced"
|
||||
msgstr "高级模式"
|
||||
|
||||
msgid "Thread"
|
||||
msgid "线程数"
|
||||
|
||||
msgid "Average Latency Cap"
|
||||
msgstr "平均延迟上限"
|
||||
|
||||
msgid "Average Latency Lower Bound"
|
||||
msgstr "平均延迟下限"
|
||||
|
||||
msgid "IPv6 Enabled"
|
||||
msgstr "启用IPv6"
|
||||
|
||||
msgid "Delayed speed measurement time"
|
||||
msgstr "延迟测速次数"
|
||||
|
||||
msgid "Download speed test time"
|
||||
msgstr "下载测速时间"
|
||||
|
||||
msgid "Number of download speed tests"
|
||||
msgstr "下载测速数量"
|
||||
|
||||
msgid "Disable download speed test"
|
||||
msgstr "禁用下载测速"
|
||||
|
||||
msgid "Port"
|
||||
msgstr "端口"
|
||||
|
||||
msgid "Not recommended"
|
||||
msgstr "不推荐"
|
||||
|
||||
msgid "Provides only one method, if IPv6 is enabled, IPv4 will not be tested"
|
||||
msgstr "IPv4和IPv6只能选一个!!!!!!"
|
||||
|
||||
msgid "<a href=\"https://github.com/XIU2/CloudflareSpeedTest/issues/168\" target=\"_blank\">How to create</a>"
|
||||
msgstr "<a href=\"https://github.com/XIU2/CloudflareSpeedTest/issues/168\" target=\"_blank\">如何创建</a>"
|
||||
|
||||
msgid "RUNNING"
|
||||
msgstr "运行中"
|
||||
|
||||
msgid "NOT RUNNING"
|
||||
msgstr "未运行"
|
||||
|
||||
msgid "Collecting data..."
|
||||
msgstr "收集数据中..."
|
||||
|
||||
msgid "Third party applications settings"
|
||||
msgstr "第三方应用设置"
|
||||
|
||||
msgid "Auto refresh"
|
||||
msgstr "自动刷新"
|
||||
|
||||
msgid "Status"
|
||||
msgstr "状态"
|
||||
|
||||
msgid "Proxy Mode"
|
||||
msgstr "代理模式"
|
||||
|
||||
msgid "HOLD"
|
||||
msgstr "保持"
|
||||
|
||||
msgid "GFW List"
|
||||
msgid "GFW列表"
|
||||
|
||||
msgid "CLOSE"
|
||||
msgstr "关闭"
|
||||
|
||||
msgid "during the speed testing, swith to which mode"
|
||||
msgstr "在速度测试期间,切换到哪种模式"
|
||||
|
||||
msgid "DNS"
|
||||
msgstr "DNS"
|
||||
|
||||
msgid "DNS Enabled"
|
||||
msgstr "启用DNS"
|
||||
|
||||
msgid "DNS Type"
|
||||
msgstr "DNS类型"
|
||||
|
||||
msgid "AliyuDNS"
|
||||
msgstr "阿里云DNS"
|
||||
|
||||
msgid "Access Key ID"
|
||||
msgstr "Access Key ID"
|
||||
|
||||
msgid "Access Key Secret"
|
||||
msgstr "Access Key Secret"
|
||||
|
||||
msgid "Main Domain"
|
||||
msgstr "主域名"
|
||||
|
||||
msgid "Sub Domain"
|
||||
msgstr "子域名"
|
||||
|
||||
msgid "For example: test.github.com -> github.com"
|
||||
msgstr "例如: test.github.com 则填: github.com"
|
||||
|
||||
msgid "For example: test.github.com -> test"
|
||||
msgstr "例如: test.github.com, 则填: test"
|
||||
|
||||
msgid "Lines"
|
||||
msgstr "解析线路"
|
||||
|
||||
msgid "default"
|
||||
msgstr "默认"
|
||||
|
||||
msgid "telecom"
|
||||
msgstr "电信"
|
||||
|
||||
msgid "unicom"
|
||||
msgstr "联通"
|
||||
|
||||
msgid "mobile"
|
||||
msgstr "移动"
|
||||
|
||||
msgid "HOST Enabled"
|
||||
msgstr "启用HOST"
|
||||
|
||||
msgid "Domain"
|
||||
msgstr "域名"
|
||||
|
||||
msgid "MosDNS Enabled"
|
||||
msgstr "写入 MosDNS"
|
||||
|
||||
msgid "OpenClash Restart"
|
||||
msgstr "重启 OpenClash"
|
||||
@@ -0,0 +1,227 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"POT-Creation-Date: \n"
|
||||
"PO-Revision-Date: 2022-02-10 20:44+0000\n"
|
||||
"Last-Translator: mingxiaoyu <fengying0347@163.com>\n"
|
||||
"Language: zh_Hans\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Generator: Weblate 4.8-dev\n"
|
||||
|
||||
msgid "<a href=\"https://github.com/mingxiaoyu/luci-app-cloudflarespeedtest\" target=\"_blank\">GitHub</a>"
|
||||
msgstr "<a href=\"https://github.com/mingxiaoyu/luci-app-cloudflarespeedtest\" target=\"_blank\">GitHub项目地址</a>"
|
||||
|
||||
msgid "Cloudflare Speed Test"
|
||||
msgstr "Cloudflare速度测试"
|
||||
|
||||
msgid "Base Setting"
|
||||
msgstr "基本设置"
|
||||
|
||||
msgid "Logs"
|
||||
msgstr "日志"
|
||||
|
||||
msgid "Enabled"
|
||||
msgstr "启用"
|
||||
|
||||
msgid "Enabled scheduled task test Cloudflare IP"
|
||||
msgstr "启用计划任务测试 Cloudflare IP"
|
||||
|
||||
msgid "Broadband speed"
|
||||
msgstr "宽带速度"
|
||||
|
||||
msgid "Custome Url Enabled"
|
||||
msgstr "启用自定义地址"
|
||||
|
||||
msgid "Custome Url"
|
||||
msgstr "自定义地址"
|
||||
|
||||
msgid "Custome Cron Enabled"
|
||||
msgstr "启用自定义Cron"
|
||||
|
||||
msgid "Custome Cron"
|
||||
msgstr "自定义Cron"
|
||||
|
||||
msgid "Hour"
|
||||
msgstr "小时"
|
||||
|
||||
msgid "Minute"
|
||||
msgstr "分钟"
|
||||
|
||||
msgid "100M broadband download speed is about 12M/s. It is not recommended to fill in an excessively large value, and it may run all the time."
|
||||
msgstr "100M的宽带下载大概为速度12M/s。不推荐填过大的值,可能出现一直运行。"
|
||||
|
||||
msgid "Shadowsocksr Plus+ Enabled"
|
||||
msgstr "启用ShadowSocksR Plus+"
|
||||
|
||||
msgid "Passwall Enabled"
|
||||
msgstr "启用Passwall"
|
||||
|
||||
msgid "PassWall2 Enabled"
|
||||
msgstr "启用PassWall2"
|
||||
|
||||
msgid "Bypass Enabled"
|
||||
msgstr "启用Bypass"
|
||||
|
||||
msgid "Vssr Enabled"
|
||||
msgstr "启用Vssr"
|
||||
msgid "Shadowsocksr Servers"
|
||||
msgstr "ShadowSocksR Plus+服务"
|
||||
|
||||
msgid "Passwall Servers"
|
||||
msgstr "Passwall服务"
|
||||
|
||||
msgid "Passwall2 Servers"
|
||||
msgstr "Passwall2服务"
|
||||
|
||||
msgid "Bypass Servers"
|
||||
msgstr "Bypass服务"
|
||||
|
||||
msgid "Vssr Servers"
|
||||
msgstr "Vssr服务"
|
||||
|
||||
msgid "Please select a service"
|
||||
msgstr "请选择一项服务"
|
||||
|
||||
msgid "Speed Test"
|
||||
msgstr "速度测试"
|
||||
|
||||
msgid "Best IP"
|
||||
msgstr "最佳IP"
|
||||
|
||||
msgid "TEST AND APPLY"
|
||||
msgstr "测试并应用"
|
||||
|
||||
msgid "STOP"
|
||||
msgstr "停止"
|
||||
|
||||
msgid "Advanced"
|
||||
msgstr "高级模式"
|
||||
|
||||
msgid "Thread"
|
||||
msgid "线程数"
|
||||
|
||||
msgid "Average Latency Cap"
|
||||
msgstr "平均延迟上限"
|
||||
|
||||
msgid "Average Latency Lower Bound"
|
||||
msgstr "平均延迟下限"
|
||||
|
||||
msgid "IPv6 Enabled"
|
||||
msgstr "启用IPv6"
|
||||
|
||||
msgid "Delayed speed measurement time"
|
||||
msgstr "延迟测速次数"
|
||||
|
||||
msgid "Download speed test time"
|
||||
msgstr "下载测速时间"
|
||||
|
||||
msgid "Number of download speed tests"
|
||||
msgstr "下载测速数量"
|
||||
|
||||
msgid "Disable download speed test"
|
||||
msgstr "禁用下载测速"
|
||||
|
||||
msgid "Port"
|
||||
msgstr "端口"
|
||||
|
||||
msgid "Not recommended"
|
||||
msgstr "不推荐"
|
||||
|
||||
msgid "Provides only one method, if IPv6 is enabled, IPv4 will not be tested"
|
||||
msgstr "IPv4和IPv6只能选一个!!!!!!"
|
||||
|
||||
msgid "<a href=\"https://github.com/XIU2/CloudflareSpeedTest/issues/168\" target=\"_blank\">How to create</a>"
|
||||
msgstr "<a href=\"https://github.com/XIU2/CloudflareSpeedTest/issues/168\" target=\"_blank\">如何创建</a>"
|
||||
|
||||
msgid "RUNNING"
|
||||
msgstr "运行中"
|
||||
|
||||
msgid "NOT RUNNING"
|
||||
msgstr "未运行"
|
||||
|
||||
msgid "Collecting data..."
|
||||
msgstr "收集数据中..."
|
||||
|
||||
msgid "Third party applications settings"
|
||||
msgstr "第三方应用设置"
|
||||
|
||||
msgid "Auto refresh"
|
||||
msgstr "自动刷新"
|
||||
|
||||
msgid "Status"
|
||||
msgstr "状态"
|
||||
|
||||
msgid "Proxy Mode"
|
||||
msgstr "代理模式"
|
||||
|
||||
msgid "HOLD"
|
||||
msgstr "保持"
|
||||
|
||||
msgid "GFW List"
|
||||
msgid "GFW列表"
|
||||
|
||||
msgid "CLOSE"
|
||||
msgstr "关闭"
|
||||
|
||||
msgid "during the speed testing, swith to which mode"
|
||||
msgstr "在速度测试期间,切换到哪种模式"
|
||||
|
||||
msgid "DNS"
|
||||
msgstr "DNS"
|
||||
|
||||
msgid "DNS Enabled"
|
||||
msgstr "启用DNS"
|
||||
|
||||
msgid "DNS Type"
|
||||
msgstr "DNS类型"
|
||||
|
||||
msgid "AliyuDNS"
|
||||
msgstr "阿里云DNS"
|
||||
|
||||
msgid "Access Key ID"
|
||||
msgstr "Access Key ID"
|
||||
|
||||
msgid "Access Key Secret"
|
||||
msgstr "Access Key Secret"
|
||||
|
||||
msgid "Main Domain"
|
||||
msgstr "主域名"
|
||||
|
||||
msgid "Sub Domain"
|
||||
msgstr "子域名"
|
||||
|
||||
msgid "For example: test.github.com -> github.com"
|
||||
msgstr "例如: test.github.com 则填: github.com"
|
||||
|
||||
msgid "For example: test.github.com -> test"
|
||||
msgstr "例如: test.github.com, 则填: test"
|
||||
|
||||
msgid "Lines"
|
||||
msgstr "解析线路"
|
||||
|
||||
msgid "default"
|
||||
msgstr "默认"
|
||||
|
||||
msgid "telecom"
|
||||
msgstr "电信"
|
||||
|
||||
msgid "unicom"
|
||||
msgstr "联通"
|
||||
|
||||
msgid "mobile"
|
||||
msgstr "移动"
|
||||
|
||||
msgid "HOST Enabled"
|
||||
msgstr "启用HOST"
|
||||
|
||||
msgid "Domain"
|
||||
msgstr "域名"
|
||||
|
||||
msgid "MosDNS Enabled"
|
||||
msgstr "写入 MosDNS"
|
||||
|
||||
msgid "OpenClash Restart"
|
||||
msgstr "重启 OpenClash"
|
||||
@@ -0,0 +1,21 @@
|
||||
|
||||
config global 'global'
|
||||
option hour '5'
|
||||
option minute '0'
|
||||
option enabled '0'
|
||||
option ipv6_enabled '0'
|
||||
option advanced '0'
|
||||
option tl '200'
|
||||
option tll '40'
|
||||
option custome_url 'https://speed.cloudflare.com/__down?bytes=300000000'
|
||||
option threads '200'
|
||||
option speed '100'
|
||||
|
||||
config servers 'servers'
|
||||
option ssr_enabled '0'
|
||||
option passwall_enabled '0'
|
||||
option passwall2_enabled '0'
|
||||
option bypass_enabled '0'
|
||||
option vssr_enabled '0'
|
||||
option DNS_enabled '0'
|
||||
|
||||
@@ -0,0 +1,59 @@
|
||||
#!/bin/sh /etc/rc.common
|
||||
|
||||
START=99
|
||||
|
||||
USE_PROCD=1
|
||||
|
||||
CRON_FILE=/etc/crontabs/root
|
||||
|
||||
service_triggers() {
|
||||
procd_add_reload_trigger "cloudflarespeedtest"
|
||||
}
|
||||
|
||||
add_cron(){
|
||||
local enabled
|
||||
config_get_bool enabled $1 enabled
|
||||
|
||||
del_cron
|
||||
|
||||
if [ $enabled = 1 ] ; then
|
||||
local minute
|
||||
local hour
|
||||
local custome_cors_enabled
|
||||
local custome_cron
|
||||
|
||||
config_get minute $1 minute
|
||||
config_get hour $1 hour
|
||||
config_get_bool custome_cors_enabled $1 custome_cors_enabled
|
||||
config_get custome_cron $1 custome_cron
|
||||
|
||||
if [ $custome_cors_enabled = 1 ] ; then
|
||||
echo "$custome_cron /usr/bin/cloudflarespeedtest/cloudflarespeedtest.sh start" >> $CRON_FILE
|
||||
else
|
||||
echo "$minute $hour * * * /usr/bin/cloudflarespeedtest/cloudflarespeedtest.sh start" >> $CRON_FILE
|
||||
fi
|
||||
crontab $CRON_FILE
|
||||
fi
|
||||
}
|
||||
|
||||
del_cron(){
|
||||
sed -i '/cloudflarespeedtest/d' $CRON_FILE
|
||||
/etc/init.d/cron restart
|
||||
}
|
||||
|
||||
stop_instance(){
|
||||
del_cron
|
||||
}
|
||||
|
||||
stop_service() {
|
||||
config_load cloudflarespeedtest
|
||||
config_foreach stop_instance global
|
||||
}
|
||||
start_service() {
|
||||
config_load cloudflarespeedtest
|
||||
config_foreach add_cron global
|
||||
}
|
||||
reload_service() {
|
||||
stop
|
||||
start
|
||||
}
|
||||
@@ -0,0 +1,81 @@
|
||||
#!/bin/sh
|
||||
LOG_FILE='/var/log/cloudflarespeedtest.log'
|
||||
|
||||
echolog() {
|
||||
local d="$(date "+%Y-%m-%d %H:%M:%S")"
|
||||
echo -e "$d: $*" >>$LOG_FILE
|
||||
}
|
||||
|
||||
urlencode() {
|
||||
# urlencode url<string>
|
||||
out=''
|
||||
for c in $(echo -n $1 | sed 's/[^\n]/&\n/g'); do
|
||||
case $c in
|
||||
[a-zA-Z0-9._-]) out="$out$c" ;;
|
||||
*) out="$out$(printf '%%%02X' "'$c")" ;;
|
||||
esac
|
||||
done
|
||||
echo -n $out
|
||||
}
|
||||
|
||||
send_request() {
|
||||
# send_request action<string> args<string>
|
||||
local args="AccessKeyId=$ak_id&Action=$1&Format=json&$2&Version=2015-01-09"
|
||||
local hash=$(urlencode $(echo -n "GET&%2F&$(urlencode $args)" | openssl dgst -sha1 -hmac "$ak_sec&" -binary | openssl base64))
|
||||
curl -sSL --connect-timeout 5 "http://alidns.aliyuncs.com/?$args&Signature=$hash"
|
||||
}
|
||||
|
||||
get_recordid() {
|
||||
sed 's/RR/\n/g' | sed -n 's/.*RecordId[^0-9]*\([0-9]*\).*/\1\n/p' | sort -ru | sed /^$/d
|
||||
}
|
||||
|
||||
query_recordid() {
|
||||
send_request "DescribeSubDomainRecords" "SignatureMethod=HMAC-SHA1&SignatureNonce=$timestamp&SignatureVersion=1.0&SubDomain=$sub_dm.$main_dm&Timestamp=$timestamp&Type=A"
|
||||
}
|
||||
|
||||
update_record() {
|
||||
send_request "UpdateDomainRecord" "Line=$line&RR=$sub_dm&RecordId=$1&SignatureMethod=HMAC-SHA1&SignatureNonce=$timestamp&SignatureVersion=1.0&Timestamp=$timestamp&Type=$type&Value=$ip"
|
||||
}
|
||||
|
||||
add_record() {
|
||||
send_request "AddDomainRecord&DomainName=$main_dm" "Line=$line&RR=$sub_dm&SignatureMethod=HMAC-SHA1&SignatureNonce=$timestamp&SignatureVersion=1.0&Timestamp=$timestamp&Type=$type&Value=$ip"
|
||||
}
|
||||
|
||||
del_record() {
|
||||
send_request "DeleteDomainRecord" "RecordId=$1&SignatureMethod=HMAC-SHA1&SignatureNonce=$timestamp&SignatureVersion=1.0&Timestamp=$timestamp"
|
||||
}
|
||||
|
||||
aliddns() {
|
||||
ak_id=$1
|
||||
ak_sec=$2
|
||||
main_dm=$3
|
||||
sub_dm=$4
|
||||
line=$5
|
||||
isIpv6=$6
|
||||
ip=$7
|
||||
type=A
|
||||
|
||||
if [ $isIpv6 -eq "1" ] ;then
|
||||
type=AAAA
|
||||
fi
|
||||
echo $ip
|
||||
echo $type
|
||||
rrid=`query_recordid | get_recordid`
|
||||
|
||||
if [ -z "$rrid" ]; then
|
||||
rrid=`add_record | get_recordid`
|
||||
echolog "ADD record $rrid"
|
||||
else
|
||||
update_record $rrid
|
||||
echolog "UPDATE record $rrid"
|
||||
fi
|
||||
if [ -z "$rrid" ]; then
|
||||
# failed
|
||||
echolog "# ERROR, Please Check Config/Time"
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
timestamp=$(date -u "+%Y-%m-%dT%H%%3A%M%%3A%SZ")
|
||||
|
||||
aliddns "$@"
|
||||
+352
@@ -0,0 +1,352 @@
|
||||
#!/bin/sh
|
||||
|
||||
LOG_FILE='/var/log/cloudflarespeedtest.log'
|
||||
IP_FILE='/usr/share/cloudflarespeedtestresult.txt'
|
||||
IPV4_TXT='/usr/share/CloudflareSpeedTest/ip.txt'
|
||||
IPV6_TXT='/usr/share/CloudflareSpeedTest/ipv6.txt'
|
||||
|
||||
function get_global_config(){
|
||||
while [[ "$*" != "" ]]; do
|
||||
eval ${1}='`uci get cloudflarespeedtest.global.$1`' 2>/dev/null
|
||||
shift
|
||||
done
|
||||
}
|
||||
|
||||
function get_servers_config(){
|
||||
while [[ "$*" != "" ]]; do
|
||||
eval ${1}='`uci get cloudflarespeedtest.servers.$1`' 2>/dev/null
|
||||
shift
|
||||
done
|
||||
}
|
||||
|
||||
echolog() {
|
||||
local d="$(date "+%Y-%m-%d %H:%M:%S")"
|
||||
echo -e "$d: $*"
|
||||
echo -e "$d: $*" >>$LOG_FILE
|
||||
}
|
||||
|
||||
function read_config(){
|
||||
get_global_config "enabled" "speed" "custome_url" "threads" "custome_cors_enabled" "custome_cron" "t" "tp" "dt" "dn" "dd" "tl" "tll" "ipv6_enabled" "advanced" "proxy_mode"
|
||||
get_servers_config "ssr_services" "ssr_enabled" "passwall_enabled" "passwall_services" "passwall2_enabled" "passwall2_services" "bypass_enabled" "bypass_services" "vssr_enabled" "vssr_services" "DNS_enabled" "HOST_enabled" "MosDNS_enabled" "openclash_restart"
|
||||
}
|
||||
|
||||
function appinit(){
|
||||
ssr_started='';
|
||||
passwall_started='';
|
||||
passwall2_started='';
|
||||
bypass_started='';
|
||||
vssr_started='';
|
||||
}
|
||||
|
||||
function speed_test(){
|
||||
|
||||
rm -rf $LOG_FILE
|
||||
|
||||
command="/usr/bin/cdnspeedtest -sl $((speed*125/1000)) -url ${custome_url} -o ${IP_FILE}"
|
||||
|
||||
if [ $ipv6_enabled -eq "1" ] ;then
|
||||
command="${command} -f ${IPV6_TXT}"
|
||||
else
|
||||
command="${command} -f ${IPV4_TXT}"
|
||||
fi
|
||||
|
||||
if [ $advanced -eq "1" ] ; then
|
||||
command="${command} -tl ${tl} -tll ${tll} -n ${threads} -t ${t} -dt ${dt} -dn ${dn}"
|
||||
if [ $dd -eq "1" ] ; then
|
||||
command="${command} -dd"
|
||||
fi
|
||||
if [ $tp -ne "443" ] ; then
|
||||
command="${command} -tp ${tp}"
|
||||
fi
|
||||
else
|
||||
command="${command} -tl 200 -tll 40 -n 200 -t 4 -dt 10 -dn 1"
|
||||
fi
|
||||
|
||||
appinit
|
||||
|
||||
ssr_original_server=$(uci get shadowsocksr.@global[0].global_server 2>/dev/null)
|
||||
ssr_original_run_mode=$(uci get shadowsocksr.@global[0].run_mode 2>/dev/null)
|
||||
if [ "x${ssr_original_server}" != "xnil" ] && [ "x${ssr_original_server}" != "x" ] ;then
|
||||
if [ $proxy_mode == "close" ] ;then
|
||||
uci set shadowsocksr.@global[0].global_server="nil"
|
||||
elif [ $proxy_mode == "gfw" ] ;then
|
||||
uci set shadowsocksr.@global[0].run_mode="gfw"
|
||||
fi
|
||||
ssr_started='1';
|
||||
uci commit shadowsocksr
|
||||
/etc/init.d/shadowsocksr restart
|
||||
fi
|
||||
|
||||
passwall_server_enabled=$(uci get passwall.@global[0].enabled 2>/dev/null)
|
||||
passwall_original_run_mode=$(uci get passwall.@global[0].tcp_proxy_mode 2>/dev/null)
|
||||
if [ "x${passwall_server_enabled}" == "x1" ] ;then
|
||||
if [ $proxy_mode == "close" ] ;then
|
||||
uci set passwall.@global[0].enabled="0"
|
||||
elif [ $proxy_mode == "gfw" ] ;then
|
||||
uci set passwall.@global[0].tcp_proxy_mode="gfwlist"
|
||||
fi
|
||||
passwall_started='1';
|
||||
uci commit passwall
|
||||
/etc/init.d/passwall restart 2>/dev/null
|
||||
fi
|
||||
|
||||
passwall2_server_enabled=$(uci get passwall2.@global[0].enabled 2>/dev/null)
|
||||
passwall2_original_run_mode=$(uci get passwall2.@global[0].tcp_proxy_mode 2>/dev/null)
|
||||
if [ "x${passwall2_server_enabled}" == "x1" ] ;then
|
||||
if [ $proxy_mode == "close" ] ;then
|
||||
uci set passwall2.@global[0].enabled="0"
|
||||
elif [ $proxy_mode == "gfw" ] ;then
|
||||
uci set passwall2.@global[0].tcp_proxy_mode="gfwlist"
|
||||
fi
|
||||
passwall2_started='1';
|
||||
uci commit passwall2
|
||||
/etc/init.d/passwall2 restart 2>/dev/null
|
||||
fi
|
||||
|
||||
vssr_original_server=$(uci get vssr.@global[0].global_server 2>/dev/null)
|
||||
vssr_original_run_mode=$(uci get vssr.@global[0].run_mode 2>/dev/null)
|
||||
if [ "x${vssr_original_server}" != "xnil" ] && [ "x${vssr_original_server}" != "x" ] ;then
|
||||
|
||||
if [ $proxy_mode == "close" ] ;then
|
||||
uci set vssr.@global[0].global_server="nil"
|
||||
elif [ $proxy_mode == "gfw" ] ;then
|
||||
uci set vssr.@global[0].run_mode="gfw"
|
||||
fi
|
||||
vssr_started='1';
|
||||
uci commit vssr
|
||||
/etc/init.d/vssr restart
|
||||
fi
|
||||
|
||||
bypass_original_server=$(uci get bypass.@global[0].global_server 2>/dev/null)
|
||||
bypass_original_run_mode=$(uci get bypass.@global[0].run_mode 2>/dev/null)
|
||||
if [ "x${bypass_original_server}" != "x" ] ;then
|
||||
if [ $proxy_mode == "close" ] ;then
|
||||
uci set bypass.@global[0].global_server=""
|
||||
elif [ $proxy_mode == "gfw" ] ;then
|
||||
uci set bypass.@global[0].run_mode="gfw"
|
||||
fi
|
||||
bypass_started='1';
|
||||
uci commit bypass
|
||||
/etc/init.d/bypass restart
|
||||
fi
|
||||
|
||||
if [ "x${MosDNS_enabled}" == "x1" ] ;then
|
||||
if [ -n "$(grep 'option cloudflare' /etc/config/mosdns)" ]
|
||||
then
|
||||
sed -i".bak" "/option cloudflare/d" /etc/config/mosdns
|
||||
fi
|
||||
sed -i '/^$/d' /etc/config/mosdns && echo -e "\toption cloudflare '0'" >> /etc/config/mosdns
|
||||
|
||||
/etc/init.d/mosdns restart &>/dev/null
|
||||
if [ "x${openclash_restart}" == "x1" ] ;then
|
||||
/etc/init.d/openclash restart &>/dev/null
|
||||
fi
|
||||
fi
|
||||
|
||||
echo $command >> $LOG_FILE 2>&1
|
||||
echolog "-----------start----------"
|
||||
$command >> $LOG_FILE 2>&1
|
||||
echolog "-----------end------------"
|
||||
}
|
||||
|
||||
function ip_replace(){
|
||||
|
||||
# 获取最快 IP(从 result.csv 结果文件中获取第一个 IP)
|
||||
bestip=$(sed -n "2,1p" $IP_FILE | awk -F, '{print $1}')
|
||||
if [[ -z "${bestip}" ]]; then
|
||||
echolog "CloudflareST 测速结果 IP 数量为 0,跳过下面步骤..."
|
||||
else
|
||||
host_ip
|
||||
mosdns_ip
|
||||
alidns_ip
|
||||
ssr_best_ip
|
||||
vssr_best_ip
|
||||
bypass_best_ip
|
||||
passwall_best_ip
|
||||
passwall2_best_ip
|
||||
restart_app
|
||||
|
||||
fi
|
||||
}
|
||||
|
||||
function host_ip() {
|
||||
if [ "x${HOST_enabled}" == "x1" ] ;then
|
||||
get_servers_config "host_domain"
|
||||
HOSTS_LINE=$(echo "$host_domain" | sed 's/,/ /g' | sed "s/^/$bestip /g")
|
||||
host_domain_first=$(echo "$host_domain" | awk -F, '{print $1}')
|
||||
|
||||
if [ -n "$(grep $host_domain_first /etc/hosts)" ]
|
||||
then
|
||||
echo $host_domain_first
|
||||
sed -i".bak" "/$host_domain_first/d" /etc/hosts
|
||||
echo $HOSTS_LINE >> /etc/hosts;
|
||||
else
|
||||
echo $HOSTS_LINE >> /etc/hosts;
|
||||
fi
|
||||
/etc/init.d/dnsmasq reload &>/dev/null
|
||||
echolog "HOST 完成"
|
||||
fi
|
||||
}
|
||||
|
||||
function mosdns_ip() {
|
||||
if [ "x${MosDNS_enabled}" == "x1" ] ;then
|
||||
if [ -n "$(grep 'option cloudflare' /etc/config/mosdns)" ]
|
||||
then
|
||||
sed -i".bak" "/option cloudflare/d" /etc/config/mosdns
|
||||
fi
|
||||
if [ -n "$(grep 'list cloudflare_ip' /etc/config/mosdns)" ]
|
||||
then
|
||||
sed -i".bak" "/list cloudflare_ip/d" /etc/config/mosdns
|
||||
fi
|
||||
sed -i '/^$/d' /etc/config/mosdns && echo -e "\toption cloudflare '1'\n\tlist cloudflare_ip '$bestip'" >> /etc/config/mosdns
|
||||
|
||||
/etc/init.d/mosdns restart &>/dev/null
|
||||
if [ "x${openclash_restart}" == "x1" ] ;then
|
||||
/etc/init.d/openclash restart &>/dev/null
|
||||
fi
|
||||
echolog "MosDNS 写入完成"
|
||||
fi
|
||||
}
|
||||
|
||||
function passwall_best_ip(){
|
||||
if [ "x${passwall_enabled}" == "x1" ] ;then
|
||||
echolog "设置passwall IP"
|
||||
for ssrname in $passwall_services
|
||||
do
|
||||
echo $ssrname
|
||||
uci set passwall.$ssrname.address="${bestip}"
|
||||
done
|
||||
uci commit passwall
|
||||
fi
|
||||
}
|
||||
|
||||
function passwall2_best_ip(){
|
||||
if [ "x${passwall2_enabled}" == "x1" ] ;then
|
||||
echolog "设置passwall2 IP"
|
||||
for ssrname in $passwall2_services
|
||||
do
|
||||
echo $ssrname
|
||||
uci set passwall2.$ssrname.address="${bestip}"
|
||||
done
|
||||
uci commit passwall2
|
||||
fi
|
||||
}
|
||||
|
||||
function ssr_best_ip(){
|
||||
if [ "x${ssr_enabled}" == "x1" ] ;then
|
||||
echolog "设置ssr IP"
|
||||
for ssrname in $ssr_services
|
||||
do
|
||||
echo $ssrname
|
||||
uci set shadowsocksr.$ssrname.server="${bestip}"
|
||||
uci set shadowsocksr.$ssrname.ip="${bestip}"
|
||||
done
|
||||
uci commit shadowsocksr
|
||||
fi
|
||||
}
|
||||
|
||||
function vssr_best_ip(){
|
||||
if [ "x${vssr_enabled}" == "x1" ] ;then
|
||||
echolog "设置Vssr IP"
|
||||
for ssrname in $vssr_services
|
||||
do
|
||||
echo $ssrname
|
||||
uci set vssr.$ssrname.server="${bestip}"
|
||||
done
|
||||
uci commit vssr
|
||||
fi
|
||||
}
|
||||
|
||||
function bypass_best_ip(){
|
||||
if [ "x${bypass_enabled}" == "x1" ] ;then
|
||||
echolog "设置Bypass IP"
|
||||
for ssrname in $bypass_services
|
||||
do
|
||||
echo $ssrname
|
||||
uci set bypass.$ssrname.server="${bestip}"
|
||||
done
|
||||
uci commit bypass
|
||||
fi
|
||||
}
|
||||
|
||||
function restart_app(){
|
||||
if [ "x${ssr_started}" == "x1" ] ;then
|
||||
if [ $proxy_mode == "close" ] ;then
|
||||
uci set shadowsocksr.@global[0].global_server="${ssr_original_server}"
|
||||
elif [ $proxy_mode == "gfw" ] ;then
|
||||
uci set shadowsocksr.@global[0].run_mode="${ssr_original_run_mode}"
|
||||
fi
|
||||
uci commit shadowsocksr
|
||||
/etc/init.d/shadowsocksr restart &>/dev/null
|
||||
echolog "ssr重启完成"
|
||||
fi
|
||||
|
||||
if [ "x${passwall_started}" == "x1" ] ;then
|
||||
if [ $proxy_mode == "close" ] ;then
|
||||
uci set passwall.@global[0].enabled="${passwall_server_enabled}"
|
||||
elif [ $proxy_mode == "gfw" ] ;then
|
||||
uci set passwall.@global[0].tcp_proxy_mode="${passwall_original_run_mode}"
|
||||
fi
|
||||
uci commit passwall
|
||||
/etc/init.d/passwall restart 2>/dev/null
|
||||
echolog "passwall重启完成"
|
||||
fi
|
||||
|
||||
if [ "x${passwall2_started}" == "x1" ] ;then
|
||||
if [ $proxy_mode == "close" ] ;then
|
||||
uci set passwall2.@global[0].enabled="${passwall2_server_enabled}"
|
||||
elif [ $proxy_mode == "gfw" ] ;then
|
||||
uci set passwall2.@global[0].tcp_proxy_mode="${passwall2_original_run_mode}"
|
||||
fi
|
||||
uci commit passwall2
|
||||
/etc/init.d/passwall2 restart 2>/dev/null
|
||||
echolog "passwall2重启完成"
|
||||
fi
|
||||
|
||||
if [ "x${vssr_started}" == "x1" ] ;then
|
||||
if [ $proxy_mode == "close" ] ;then
|
||||
uci set vssr.@global[0].global_server="${vssr_original_server}"
|
||||
elif [ $proxy_mode == "gfw" ] ;then
|
||||
uci set vssr.@global[0].run_mode="${vssr_original_run_mode}"
|
||||
fi
|
||||
uci commit vssr
|
||||
/etc/init.d/vssr restart &>/dev/null
|
||||
echolog "Vssr重启完成"
|
||||
fi
|
||||
|
||||
if [ "x${bypass_started}" == "x1" ] ;then
|
||||
if [ $proxy_mode == "close" ] ;then
|
||||
uci set bypass.@global[0].global_server="${bypass_original_server}"
|
||||
elif [ $proxy_mode == "gfw" ] ;then
|
||||
uci set bypass.@global[0].run_mode="${bypass_original_run_mode}"
|
||||
fi
|
||||
uci commit bypass
|
||||
/etc/init.d/bypass restart &>/dev/null
|
||||
echolog "Bypass重启完成"
|
||||
fi
|
||||
}
|
||||
|
||||
function alidns_ip(){
|
||||
if [ "x${DNS_enabled}" == "x1" ] ;then
|
||||
get_servers_config "DNS_type" "app_key" "app_secret" "main_domain" "sub_domain" "line"
|
||||
if [ $DNS_type == "aliyu" ] ;then
|
||||
for sub in $sub_domain
|
||||
do
|
||||
/usr/bin/cloudflarespeedtest/aliddns.sh $app_key $app_secret $main_domain $sub $line $ipv6_enabled $bestip
|
||||
echolog "更新域名${sub}阿里云DNS完成"
|
||||
sleep 1s
|
||||
done
|
||||
fi
|
||||
echo "aliyun done"
|
||||
fi
|
||||
}
|
||||
|
||||
read_config
|
||||
|
||||
# 启动参数
|
||||
if [ "$1" ] ;then
|
||||
[ $1 == "start" ] && speed_test && ip_replace
|
||||
[ $1 == "test" ] && speed_test
|
||||
[ $1 == "replace" ] && ip_replace
|
||||
exit
|
||||
fi
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"luci-app-cloudflarespeedtest": {
|
||||
"description": "Grant UCI access for luci-app-cloudflarespeedtest",
|
||||
"read": {
|
||||
"uci": [ "cloudflarespeedtest" ]
|
||||
},
|
||||
"write": {
|
||||
"uci": [ "cloudflarespeedtest" ]
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user