luci-app-ssr-plus: Optimize and fix bugs (#3841)

This commit is contained in:
Mattraks 2020-03-18 21:00:18 +08:00 committed by GitHub
parent 033b0ec159
commit 830d3f946c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
22 changed files with 637 additions and 19569 deletions

View File

@ -2,7 +2,7 @@ include $(TOPDIR)/rules.mk
PKG_NAME:=luci-app-ssr-plus PKG_NAME:=luci-app-ssr-plus
PKG_VERSION:=170 PKG_VERSION:=170
PKG_RELEASE:=3 PKG_RELEASE:=4
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME) PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)
@ -77,9 +77,6 @@ define Package/$(PKG_NAME)/conffiles
endef endef
define Package/$(PKG_NAME)/install define Package/$(PKG_NAME)/install
$(INSTALL_DIR) $(1)/etc
$(INSTALL_DATA) ./root/etc/china_ssr.txt $(1)/etc/china_ssr.txt
$(INSTALL_DIR) $(1)/etc/config $(INSTALL_DIR) $(1)/etc/config
$(INSTALL_CONF) ./root/etc/config/shadowsocksr $(1)/etc/config/shadowsocksr $(INSTALL_CONF) ./root/etc/config/shadowsocksr $(1)/etc/config/shadowsocksr
$(INSTALL_DATA) ./root/etc/config/*.list $(1)/etc/config/ $(INSTALL_DATA) ./root/etc/config/*.list $(1)/etc/config/
@ -118,27 +115,14 @@ endef
define Package/$(PKG_NAME)/postinst define Package/$(PKG_NAME)/postinst
#!/bin/sh #!/bin/sh
if [ -z "$${IPKG_INSTROOT}" ]; then rm -rf /tmp/luci-modulecache/*
( . /etc/uci-defaults/luci-ssr-plus ) && rm -f /etc/uci-defaults/luci-ssr-plus rm -f /tmp/luci-indexcache
rm -f /tmp/luci-indexcache
/etc/init.d/shadowsocksr enable >/dev/null 2>&1
fi
exit 0
endef
define Package/$(PKG_NAME)/prerm
#!/bin/sh
if [ -z "$${IPKG_INSTROOT}" ]; then
/etc/init.d/shadowsocksr disable
/etc/init.d/shadowsocksr stop
fi
exit 0
endef endef
define Package/$(PKG_NAME)/postrm define Package/$(PKG_NAME)/postrm
#!/bin/sh #!/bin/sh
rm -rf /etc/china_ssr.txt /etc/dnsmasq.ssr /etc/dnsmasq.oversea /etc/config/shadowsocksr /etc/config/black.list \ rm -rf /etc/china_ssr.txt /etc/dnsmasq.ssr /etc/dnsmasq.oversea /etc/config/shadowsocksr /etc/config/black.list \
/etc/config/gfw.list /etc/config/white.list >/dev/null 2>&1 /etc/config/gfw.list /etc/config/white.list /etc/config/netflix.list /etc/config/netflixip.list >/dev/null 2>&1
exit 0 exit 0
endef endef

View File

@ -70,136 +70,127 @@ function check_status()
end end
function refresh_data() function refresh_data()
local set =luci.http.formvalue("set") local set =luci.http.formvalue("set")
local icount =0 local uci = luci.model.uci.cursor()
local icount =0
if set == "gfw_data" then if set == "gfw_data" then
refresh_cmd="wget-ssl --no-check-certificate https://cdn.jsdelivr.net/gh/gfwlist/gfwlist/gfwlist.txt -O /tmp/gfw.b64" refresh_cmd = "wget-ssl --no-check-certificate -O - https://cdn.jsdelivr.net/gh/gfwlist/gfwlist/gfwlist.txt > /tmp/gfw.b64"
sret=luci.sys.call(refresh_cmd .. " 2>/dev/null") sret = luci.sys.call(refresh_cmd .. " 2>/dev/null")
if sret== 0 then if sret == 0 then
luci.sys.call("/usr/bin/ssr-gfw") luci.sys.call("/usr/bin/ssr-gfw")
icount = luci.sys.exec("cat /tmp/gfwnew.txt | wc -l") icount = luci.sys.exec("cat /tmp/gfwnew.txt | wc -l")
if tonumber(icount)>1000 then if tonumber(icount) > 1000 then
oldcount=luci.sys.exec("cat /etc/dnsmasq.ssr/gfw_list.conf | wc -l") oldcount= l uci.sys.exec("cat /etc/dnsmasq.ssr/gfw_list.conf | wc -l")
if tonumber(icount) ~= tonumber(oldcount) then if tonumber(icount) ~= tonumber(oldcount) then
luci.sys.exec("cp -f /tmp/gfwnew.txt /etc/dnsmasq.ssr/gfw_list.conf") luci.sys.exec("cp -f /tmp/gfwnew.txt /etc/dnsmasq.ssr/gfw_list.conf")
luci.sys.exec("cp -f /tmp/gfwnew.txt /tmp/dnsmasq.ssr/gfw_list.conf") luci.sys.exec("cp -f /tmp/gfwnew.txt /tmp/dnsmasq.ssr/gfw_list.conf")
luci.sys.call("/etc/init.d/dnsmasq restart") luci.sys.call("/etc/init.d/dnsmasq restart")
retstring=tostring(math.ceil(tonumber(icount)/2)) retstring = tostring(tonumber(icount)/2)
else else
retstring ="0" retstring ="0"
end end
else else
retstring ="-1" retstring = "-1"
end end
luci.sys.exec("rm -f /tmp/gfwnew.txt ") luci.sys.exec("rm -f /tmp/gfwnew.txt")
else
retstring ="-1"
end
elseif set == "ip_data" then
if (luci.model.uci.cursor():get_first('shadowsocksr', 'global', 'chnroute', '0') == '1') then
refresh_cmd="wget-ssl --no-check-certificate -O - " .. luci.model.uci.cursor():get_first('shadowsocksr', 'global', 'chnroute_url', 'https://ispip.clang.cn/all_cn.txt') .. ' > /tmp/china_ssr.txt 2>/dev/null'
else else
refresh_cmd="wget -O- 'http://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest' 2>/dev/null| awk -F\\| '/CN\\|ipv4/ { printf(\"%s/%d\\n\", $4, 32-log($5)/log(2)) }' > /tmp/china_ssr.txt" retstring = "-1"
end end
sret=luci.sys.call(refresh_cmd) elseif set == "ip_data" then
refresh_cmd = "wget-ssl --no-check-certificate -O - " .. uci:get_first('shadowsocksr', 'global', 'chnroute_url', 'https://ispip.clang.cn/all_cn.txt') .. ' > /tmp/china_ssr.txt'
sret = luci.sys.call(refresh_cmd .. " 2>/dev/null")
icount = luci.sys.exec("cat /tmp/china_ssr.txt | wc -l") icount = luci.sys.exec("cat /tmp/china_ssr.txt | wc -l")
if sret== 0 and tonumber(icount)>1000 then if sret == 0 and tonumber(icount) > 1000 then
oldcount=luci.sys.exec("cat /etc/china_ssr.txt | wc -l") oldcount = luci.sys.exec("cat /etc/china_ssr.txt | wc -l")
if tonumber(icount) ~= tonumber(oldcount) then if tonumber(icount) ~= tonumber(oldcount) then
luci.sys.exec("cp -f /tmp/china_ssr.txt /etc/china_ssr.txt") luci.sys.exec("cp -f /tmp/china_ssr.txt /etc/china_ssr.txt")
retstring=tostring(tonumber(icount)) luci.sys.exec("/etc/init.d/shadowsocksr restart &")
retstring = tostring(tonumber(icount))
else else
retstring ="0" retstring = "0"
end end
else else
retstring ="-1" retstring = "-1"
end end
luci.sys.exec("rm -f /tmp/china_ssr.txt ") luci.sys.exec("rm -f /tmp/china_ssr.txt")
elseif set == "nfip_data" then elseif set == "nfip_data" then
if (luci.model.uci.cursor():get_first('shadowsocksr', 'global', 'netflix', '0') == '1') then refresh_cmd = "wget-ssl --no-check-certificate -O - ".. uci:get_first('shadowsocksr', 'global', 'nfip_url','https://raw.githubusercontent.com/QiuSimons/Netflix_IP/master/NF_only.txt') .." > /tmp/netflixip.list"
refresh_cmd="wget-ssl --no-check-certificate -O - ".. luci.model.uci.cursor():get_first('shadowsocksr', 'global', 'nfip_url', 'https://raw.githubusercontent.com/QiuSimons/Netflix_IP/master/NF_only.txt') .." > /tmp/netflixip.list" sret = luci.sys.call(refresh_cmd .. " 2>/dev/null")
else
refresh_cmd="wget-ssl --no-check-certificate -O - https://raw.githubusercontent.com/QiuSimons/Netflix_IP/master/NF_only.txt > /tmp/netflixip.list"
end
sret=luci.sys.call(refresh_cmd)
icount = luci.sys.exec("cat /tmp/netflixip.list | wc -l") icount = luci.sys.exec("cat /tmp/netflixip.list | wc -l")
if sret== 0 and tonumber(icount)>1 then if sret == 0 and tonumber(icount) > 5 then
oldcount=luci.sys.exec("cat /etc/config/netflixip.list | wc -l") oldcount = luci.sys.exec("cat /etc/config/netflixip.list | wc -l")
if tonumber(icount) ~= tonumber(oldcount) then if tonumber(icount) ~= tonumber(oldcount) then
luci.sys.exec("cp -f /tmp/netflixip.list /etc/config/netflixip.list") luci.sys.exec("cp -f /tmp/netflixip.list /etc/config/netflixip.list")
luci.sys.exec("/etc/init.d/shadowsocksr restart &") luci.sys.exec("/etc/init.d/shadowsocksr restart &")
retstring=tostring(tonumber(icount)) retstring = tostring(tonumber(icount))
else else
retstring ="0" retstring = "0"
end end
else else
retstring ="-1" retstring = "-1"
end end
luci.sys.exec("rm -f /tmp/netflixip.list ") luci.sys.exec("rm -f /tmp/netflixip.list")
else else
if nixio.fs.access("/usr/bin/wget-ssl") then refresh_cmd = "wget-ssl --no-check-certificate -O - ".. uci:get_first('shadowsocksr', 'global', 'adblock_url','https://easylist-downloads.adblockplus.org/easylistchina+easylist.txt') .." > /tmp/adnew.conf"
refresh_cmd="wget-ssl --no-check-certificate -O - ".. luci.model.uci.cursor():get_first('shadowsocksr', 'global', 'adblock_url','https://easylist-downloads.adblockplus.org/easylistchina+easylist.txt') .." > /tmp/adnew.conf" sret = luci.sys.call(refresh_cmd .. " 2>/dev/null")
end if sret== 0 then
sret=luci.sys.call(refresh_cmd .. " 2>/dev/null")
if sret== 0 then
luci.sys.call("/usr/bin/ssr-ad") luci.sys.call("/usr/bin/ssr-ad")
icount = luci.sys.exec("cat /tmp/ad.conf | wc -l") icount = luci.sys.exec("cat /tmp/ad.conf | wc -l")
if tonumber(icount)>1000 then if tonumber(icount) > 100 then
if nixio.fs.access("/etc/dnsmasq.ssr/ad.conf") then if nixio.fs.access("/etc/dnsmasq.ssr/ad.conf") then
oldcount=luci.sys.exec("cat /etc/dnsmasq.ssr/ad.conf | wc -l") oldcount = luci.sys.exec("cat /etc/dnsmasq.ssr/ad.conf | wc -l")
else else
oldcount=0 oldcount = "0"
end end
if tonumber(icount) ~= tonumber(oldcount) then if tonumber(icount) ~= tonumber(oldcount) then
luci.sys.exec("cp -f /tmp/ad.conf /etc/dnsmasq.ssr/ad.conf") luci.sys.exec("cp -f /tmp/ad.conf /etc/dnsmasq.ssr/ad.conf")
luci.sys.exec("cp -f /tmp/ad.conf /tmp/dnsmasq.ssr/ad.conf") luci.sys.exec("cp -f /tmp/ad.conf /tmp/dnsmasq.ssr/ad.conf")
luci.sys.call("/etc/init.d/dnsmasq restart") luci.sys.call("/etc/init.d/dnsmasq restart")
retstring=tostring(math.ceil(tonumber(icount))) retstring = tostring(tonumber(icount))
else else
retstring ="0" retstring = "0"
end end
else else
retstring ="-1" retstring = "-1"
end end
luci.sys.exec("rm -f /tmp/ad.conf") luci.sys.exec("rm -f /tmp/ad.conf")
else else
retstring ="-1" retstring = "-1"
end end
end end
luci.http.prepare_content("application/json") luci.http.prepare_content("application/json")
luci.http.write_json({ ret=retstring ,retcount=icount}) luci.http.write_json({ret=retstring,retcount=icount})
end end
function check_port() function check_port()
local set="" local set = ""
local retstring="<br /><br />" local retstring="<br /><br />"
local s local s
local server_name = "" local server_name = ""
local shadowsocksr = "shadowsocksr" local shadowsocksr = "shadowsocksr"
local uci = luci.model.uci.cursor() local uci = luci.model.uci.cursor()
local iret=1 local iret = 1
uci:foreach(shadowsocksr, "servers", function(s) uci:foreach(shadowsocksr, "servers", function(s)
if s.alias then if s.alias then
server_name=s.alias server_name = s.alias
elseif s.server and s.server_port then elseif s.server and s.server_port then
server_name= "%s:%s" %{s.server, s.server_port} server_name = "%s:%s" %{s.server, s.server_port}
end end
iret=luci.sys.call(" ipset add ss_spec_wan_ac " .. s.server .. " 2>/dev/null") iret = luci.sys.call(" ipset add ss_spec_wan_ac " .. s.server .. " 2>/dev/null")
socket = nixio.socket("inet", "stream") socket = nixio.socket("inet", "stream")
socket:setopt("socket", "rcvtimeo", 3) socket:setopt("socket", "rcvtimeo", 3)
socket:setopt("socket", "sndtimeo", 3) socket:setopt("socket", "sndtimeo", 3)
ret=socket:connect(s.server,s.server_port) ret = socket:connect(s.server,s.server_port)
if tostring(ret) == "true" then if tostring(ret) == "true" then
socket:close() socket:close()
retstring =retstring .. "<font color='green'>[" .. server_name .. "] OK.</font><br />" retstring = retstring .. "<font color='green'>[" .. server_name .. "] OK.</font><br />"
else else
retstring =retstring .. "<font color='red'>[" .. server_name .. "] Error.</font><br />" retstring = retstring .. "<font color='red'>[" .. server_name .. "] Error.</font><br />"
end end
if iret== 0 then if iret == 0 then
luci.sys.call(" ipset del ss_spec_wan_ac " .. s.server) luci.sys.call(" ipset del ss_spec_wan_ac " .. s.server)
end end
end) end)
luci.http.prepare_content("application/json") luci.http.prepare_content("application/json")
luci.http.write_json({ ret=retstring }) luci.http.write_json({ret=retstring})
end end

View File

@ -1,4 +1,3 @@
m = Map("shadowsocksr") m = Map("shadowsocksr")
-- [[ global ]]-- -- [[ global ]]--
s = m:section(TypedSection, "global", translate("Server failsafe auto swith and custom update settings")) s = m:section(TypedSection, "global", translate("Server failsafe auto swith and custom update settings"))
@ -27,12 +26,8 @@ o.datatype = "uinteger"
o:depends("enable_switch", "1") o:depends("enable_switch", "1")
o.default = 3 o.default = 3
o = s:option(Flag, "chnroute", translate("Enable Custom Chnroute"))
o.rmempty = false
o = s:option(Value, "chnroute_url", translate("Chnroute Update url")) o = s:option(Value, "chnroute_url", translate("Chnroute Update url"))
o.default = "https://ispip.clang.cn/all_cn.txt" o.default = "https://ispip.clang.cn/all_cn.txt"
o:depends("chnroute", "1")
o = s:option(Flag, "adblock", translate("Enable adblock")) o = s:option(Flag, "adblock", translate("Enable adblock"))
o.rmempty = false o.rmempty = false
@ -42,46 +37,42 @@ o.default = "https://gitee.com/privacy-protection-tools/anti-ad/raw/master/anti-
o:depends("adblock", "1") o:depends("adblock", "1")
o.description = translate("Support AdGuardHome and DNSMASQ format list") o.description = translate("Support AdGuardHome and DNSMASQ format list")
o = s:option(Flag, "netflix", translate("Enable Custom Netflix IP Url"))
o.rmempty = false
o = s:option(Value, "nfip_url", translate("nfip_url")) o = s:option(Value, "nfip_url", translate("nfip_url"))
o.default = "https://raw.githubusercontent.com/QiuSimons/Netflix_IP/master/NF_only.txt" o.default = "https://raw.githubusercontent.com/QiuSimons/Netflix_IP/master/NF_only.txt"
o:depends("netflix", "1")
o.description = translate("Customize Netflix IP Url") o.description = translate("Customize Netflix IP Url")
-- [[ SOCKS Proxy ]]-- -- [[ SOCKS Proxy ]]--
if nixio.fs.access("/usr/bin/microsocks") then if nixio.fs.access("/usr/bin/microsocks") then
s = m:section(TypedSection, "socks5_proxy", translate("SOCKS5 Proxy Server Settings")) s = m:section(TypedSection, "socks5_proxy", translate("SOCKS5 Proxy Server Settings"))
s.anonymous = true s.anonymous = true
o = s:option(Flag, "socks", translate("Enable SOCKS5 Proxy Server")) o = s:option(Flag, "socks", translate("Enable SOCKS5 Proxy Server"))
o.rmempty = false o.rmempty = false
o = s:option(Value, "local_port", translate("Local Port")) o = s:option(Value, "local_port", translate("Local Port"))
o.datatype = "port" o.datatype = "port"
o.default = 10800 o.default = 10800
o.rmempty = true o.rmempty = true
o:depends("socks", "1") o:depends("socks", "1")
o = s:option(Flag, "auth_enable", translate("Enable Authentication")) o = s:option(Flag, "auth_enable", translate("Enable Authentication"))
o.rmempty = false o.rmempty = false
o.default = "0" o.default = "0"
o:depends("socks", "1") o:depends("socks", "1")
o = s:option(Value, "username", translate("Username")) o = s:option(Value, "username", translate("Username"))
o.default = "username" o.default = "username"
o:depends("auth_enable", "1") o:depends("auth_enable", "1")
o = s:option(Value, "password", translate("Password")) o = s:option(Value, "password", translate("Password"))
o.password = true o.password = true
o.default = "password" o.default = "password"
o:depends("auth_enable", "1") o:depends("auth_enable", "1")
o = s:option(Flag, "wan_enable", translate("Enable WAN Access")) o = s:option(Flag, "wan_enable", translate("Enable WAN Access"))
o.rmempty = true o.rmempty = true
o.default = "0" o.default = "0"
o:depends("auth_enable", "1") o:depends("auth_enable", "1")
end end
return m return m

View File

@ -14,92 +14,90 @@ local function isKcptun(file)
if not fs.access(file, "rwx", "rx", "rx") then if not fs.access(file, "rwx", "rx", "rx") then
fs.chmod(file, 755) fs.chmod(file, 755)
end end
local str = sys.exec(file .. " -v | awk '{printf $1}'") local str = sys.exec(file .. " -v | awk '{printf $1}'")
return (str:lower() == "kcptun") return (str:lower() == "kcptun")
end end
local server_table = {} local server_table = {}
local encrypt_methods = { local encrypt_methods = {
"none", "none",
"table", "table",
"rc4", "rc4",
"rc4-md5-6", "rc4-md5-6",
"rc4-md5", "rc4-md5",
"aes-128-cfb", "aes-128-cfb",
"aes-192-cfb", "aes-192-cfb",
"aes-256-cfb", "aes-256-cfb",
"aes-128-ctr", "aes-128-ctr",
"aes-192-ctr", "aes-192-ctr",
"aes-256-ctr", "aes-256-ctr",
"bf-cfb", "bf-cfb",
"camellia-128-cfb", "camellia-128-cfb",
"camellia-192-cfb", "camellia-192-cfb",
"camellia-256-cfb", "camellia-256-cfb",
"cast5-cfb", "cast5-cfb",
"des-cfb", "des-cfb",
"idea-cfb", "idea-cfb",
"rc2-cfb", "rc2-cfb",
"seed-cfb", "seed-cfb",
"salsa20", "salsa20",
"chacha20", "chacha20",
"chacha20-ietf", "chacha20-ietf",
} }
local encrypt_methods_ss = { local encrypt_methods_ss = {
-- aead -- aead
"aes-128-gcm", "aes-128-gcm",
"aes-192-gcm", "aes-192-gcm",
"aes-256-gcm", "aes-256-gcm",
"chacha20-ietf-poly1305", "chacha20-ietf-poly1305",
"xchacha20-ietf-poly1305", "xchacha20-ietf-poly1305",
-- stream -- stream
"table", "table",
"rc4", "rc4",
"rc4-md5", "rc4-md5",
"aes-128-cfb", "aes-128-cfb",
"aes-192-cfb", "aes-192-cfb",
"aes-256-cfb", "aes-256-cfb",
"aes-128-ctr", "aes-128-ctr",
"aes-192-ctr", "aes-192-ctr",
"aes-256-ctr", "aes-256-ctr",
"bf-cfb", "bf-cfb",
"camellia-128-cfb", "camellia-128-cfb",
"camellia-192-cfb", "camellia-192-cfb",
"camellia-256-cfb", "camellia-256-cfb",
"salsa20", "salsa20",
"chacha20", "chacha20",
"chacha20-ietf", "chacha20-ietf",
} }
local protocol = { local protocol = {
"origin", "origin",
"verify_deflate", "verify_deflate",
"auth_sha1_v4", "auth_sha1_v4",
"auth_aes128_sha1", "auth_aes128_sha1",
"auth_aes128_md5", "auth_aes128_md5",
"auth_chain_a", "auth_chain_a",
"auth_chain_b", "auth_chain_b",
"auth_chain_c", "auth_chain_c",
"auth_chain_d", "auth_chain_d",
"auth_chain_e", "auth_chain_e",
"auth_chain_f", "auth_chain_f",
} }
obfs = { obfs = {
"plain", "plain",
"http_simple", "http_simple",
"http_post", "http_post",
"random_head", "random_head",
"tls1.2_ticket_auth", "tls1.2_ticket_auth",
} }
local securitys = { local securitys = {
"auto", "auto",
"none", "none",
"aes-128-gcm", "aes-128-gcm",
"chacha20-poly1305" "chacha20-poly1305"
} }
@ -123,17 +121,17 @@ o.value =sid
o = s:option(ListValue, "type", translate("Server Node Type")) o = s:option(ListValue, "type", translate("Server Node Type"))
o:value("ssr", translate("ShadowsocksR")) o:value("ssr", translate("ShadowsocksR"))
if nixio.fs.access("/usr/bin/ss-redir") then if nixio.fs.access("/usr/bin/ss-redir") then
o:value("ss", translate("Shadowsocks New Version")) o:value("ss", translate("Shadowsocks New Version"))
end end
if nixio.fs.access("/usr/bin/v2ray/v2ray") or nixio.fs.access("/usr/bin/v2ray") then if nixio.fs.access("/usr/bin/v2ray/v2ray") or nixio.fs.access("/usr/bin/v2ray") then
o:value("v2ray", translate("V2Ray")) o:value("v2ray", translate("V2Ray"))
end end
if nixio.fs.access("/usr/sbin/trojan") then if nixio.fs.access("/usr/sbin/trojan") then
o:value("trojan", translate("Trojan")) o:value("trojan", translate("Trojan"))
end end
if nixio.fs.access("/usr/sbin/redsocks2") then if nixio.fs.access("/usr/sbin/redsocks2") then
o:value("socks5", translate("Socks5")) o:value("socks5", translate("Socks5"))
o:value("tun", translate("Network Tunnel")) o:value("tun", translate("Network Tunnel"))
end end
o.description = translate("Using incorrect encryption mothod may causes service fail to start") o.description = translate("Using incorrect encryption mothod may causes service fail to start")
@ -410,7 +408,7 @@ cert_dir = "/etc/ssl/private/"
local path local path
http.setfilehandler( http.setfilehandler(
function(meta, chunk, eof) function(meta, chunk, eof)
if not fd then if not fd then
if (not meta) or (not meta.name) or (not meta.file) then return end if (not meta) or (not meta.name) or (not meta.file) then return end
fd = nixio.open(cert_dir .. meta.file, "w") fd = nixio.open(cert_dir .. meta.file, "w")
@ -427,8 +425,8 @@ http.setfilehandler(
fd = nil fd = nil
path = '/etc/ssl/private/' .. meta.file .. '' path = '/etc/ssl/private/' .. meta.file .. ''
end end
end end
) )
if luci.http.formvalue("upload") then if luci.http.formvalue("upload") then
local f = luci.http.formvalue("ulfile") local f = luci.http.formvalue("ulfile")
if #f <= 0 then if #f <= 0 then
@ -460,16 +458,16 @@ o.rmempty = false
if nixio.fs.access("/usr/bin/kcptun-client") then if nixio.fs.access("/usr/bin/kcptun-client") then
kcp_enable = s:option(Flag, "kcp_enable", translate("KcpTun Enable"), translate("bin:/usr/bin/kcptun-client")) kcp_enable = s:option(Flag, "kcp_enable", translate("KcpTun Enable"), translate("bin:/usr/bin/kcptun-client"))
kcp_enable.rmempty = true kcp_enable.rmempty = true
kcp_enable.default = "0" kcp_enable.default = "0"
kcp_enable:depends("type", "ssr") kcp_enable:depends("type", "ssr")
kcp_enable:depends("type", "ss") kcp_enable:depends("type", "ss")
o = s:option(Value, "kcp_port", translate("KcpTun Port")) o = s:option(Value, "kcp_port", translate("KcpTun Port"))
o.datatype = "port" o.datatype = "port"
o.default = 4000 o.default = 4000
function o.validate(self, value, section) function o.validate(self, value, section)
local kcp_file="/usr/bin/kcptun-client" local kcp_file="/usr/bin/kcptun-client"
local enable = kcp_enable:formvalue(section) or kcp_enable.disabled local enable = kcp_enable:formvalue(section) or kcp_enable.disabled
if enable == kcp_enable.enabled then if enable == kcp_enable.enabled then
@ -481,19 +479,19 @@ function o.validate(self, value, section)
end end
return value return value
end end
o:depends("type", "ssr") o:depends("type", "ssr")
o:depends("type", "ss") o:depends("type", "ss")
o = s:option(Value, "kcp_password", translate("KcpTun Password")) o = s:option(Value, "kcp_password", translate("KcpTun Password"))
o.password = true o.password = true
o:depends("type", "ssr") o:depends("type", "ssr")
o:depends("type", "ss") o:depends("type", "ss")
o = s:option(Value, "kcp_param", translate("KcpTun Param")) o = s:option(Value, "kcp_param", translate("KcpTun Param"))
o.default = "--nocomp" o.default = "--nocomp"
o:depends("type", "ssr") o:depends("type", "ssr")
o:depends("type", "ss") o:depends("type", "ss")
end end

View File

@ -5,12 +5,12 @@ t = f:field(TextValue, "conf")
t.rmempty = true t.rmempty = true
t.rows = 20 t.rows = 20
function t.cfgvalue() function t.cfgvalue()
local logs = luci.util.execi("cat /tmp/ssrplus.log") local logs = luci.util.execi("cat /tmp/ssrplus.log")
local s = "" local s = ""
for line in logs do for line in logs do
s = line .. "\n" .. s s = line .. "\n" .. s
end end
return s return s
end end
t.readonly="readonly" t.readonly="readonly"

View File

@ -6,38 +6,38 @@ local shadowsocksr = "shadowsocksr"
local sid = arg[1] local sid = arg[1]
local encrypt_methods = { local encrypt_methods = {
"rc4-md5", "rc4-md5",
"rc4-md5-6", "rc4-md5-6",
"rc4", "rc4",
"table", "table",
"aes-128-cfb", "aes-128-cfb",
"aes-192-cfb", "aes-192-cfb",
"aes-256-cfb", "aes-256-cfb",
"aes-128-ctr", "aes-128-ctr",
"aes-192-ctr", "aes-192-ctr",
"aes-256-ctr", "aes-256-ctr",
"bf-cfb", "bf-cfb",
"camellia-128-cfb", "camellia-128-cfb",
"camellia-192-cfb", "camellia-192-cfb",
"camellia-256-cfb", "camellia-256-cfb",
"cast5-cfb", "cast5-cfb",
"des-cfb", "des-cfb",
"idea-cfb", "idea-cfb",
"rc2-cfb", "rc2-cfb",
"seed-cfb", "seed-cfb",
"salsa20", "salsa20",
"chacha20", "chacha20",
"chacha20-ietf", "chacha20-ietf",
} }
local protocol = { local protocol = {
"origin", "origin",
} }
obfs = { obfs = {
"plain", "plain",
"http_simple", "http_simple",
"http_post", "http_post",
} }
m = Map(shadowsocksr, translate("Edit ShadowSocksR Server")) m = Map(shadowsocksr, translate("Edit ShadowSocksR Server"))

View File

@ -9,46 +9,46 @@ local uci = luci.model.uci.cursor()
m = Map(shadowsocksr, translate("ShadowSocksR Server")) m = Map(shadowsocksr, translate("ShadowSocksR Server"))
local encrypt_methods = { local encrypt_methods = {
"table", "table",
"rc4", "rc4",
"rc4-md5", "rc4-md5",
"rc4-md5-6", "rc4-md5-6",
"aes-128-cfb", "aes-128-cfb",
"aes-192-cfb", "aes-192-cfb",
"aes-256-cfb", "aes-256-cfb",
"aes-128-ctr", "aes-128-ctr",
"aes-192-ctr", "aes-192-ctr",
"aes-256-ctr", "aes-256-ctr",
"bf-cfb", "bf-cfb",
"camellia-128-cfb", "camellia-128-cfb",
"camellia-192-cfb", "camellia-192-cfb",
"camellia-256-cfb", "camellia-256-cfb",
"cast5-cfb", "cast5-cfb",
"des-cfb", "des-cfb",
"idea-cfb", "idea-cfb",
"rc2-cfb", "rc2-cfb",
"seed-cfb", "seed-cfb",
"salsa20", "salsa20",
"chacha20", "chacha20",
"chacha20-ietf", "chacha20-ietf",
} }
local protocol = { local protocol = {
"origin", "origin",
"verify_deflate", "verify_deflate",
"auth_sha1_v4", "auth_sha1_v4",
"auth_aes128_sha1", "auth_aes128_sha1",
"auth_aes128_md5", "auth_aes128_md5",
"auth_chain_a", "auth_chain_a",
} }
obfs = { obfs = {
"plain", "plain",
"http_simple", "http_simple",
"http_post", "http_post",
"random_head", "random_head",
"tls1.2_ticket_auth", "tls1.2_ticket_auth",
"tls1.2_ticket_fastauth", "tls1.2_ticket_fastauth",
} }
-- [[ Global Setting ]]-- -- [[ Global Setting ]]--

View File

@ -12,8 +12,6 @@ end)
local fs = require "nixio.fs" local fs = require "nixio.fs"
local sys = require "luci.sys" local sys = require "luci.sys"
local ucic = luci.model.uci.cursor()
m = Map(shadowsocksr, translate("Servers subscription and manage")) m = Map(shadowsocksr, translate("Servers subscription and manage"))
-- Server Subscribe -- Server Subscribe
@ -28,7 +26,7 @@ o.description = translate("Auto Update Server subscription, GFW list and CHN rou
o = s:option(ListValue, "auto_update_time", translate("Update time (every day)")) o = s:option(ListValue, "auto_update_time", translate("Update time (every day)"))
for t = 0,23 do for t = 0,23 do
o:value(t, t..":00") o:value(t, t..":00")
end end
o.default=2 o.default=2
o.rmempty = false o.rmempty = false
@ -61,18 +59,18 @@ o = s:option(Button,"delete",translate("Delete All Subscribe Severs"))
o.inputstyle = "reset" o.inputstyle = "reset"
o.description = string.format(translate("Server Count") .. ": %d", server_count) o.description = string.format(translate("Server Count") .. ": %d", server_count)
o.write = function() o.write = function()
uci:delete_all("shadowsocksr", "servers", function(s) uci:delete_all("shadowsocksr", "servers", function(s)
if s.hashkey or s.isSubscribe then if s.hashkey or s.isSubscribe then
return true return true
else else
return false return false
end end
end) end)
uci:save("shadowsocksr") uci:save("shadowsocksr")
uci:commit("shadowsocksr") uci:commit("shadowsocksr")
luci.sys.exec("/etc/init.d/shadowsocksr restart") luci.sys.exec("/etc/init.d/shadowsocksr restart")
luci.http.redirect(luci.dispatcher.build_url("admin", "services", "shadowsocksr", "servers")) luci.http.redirect(luci.dispatcher.build_url("admin", "services", "shadowsocksr", "servers"))
return return
end end
-- [[ Servers Manage ]]-- -- [[ Servers Manage ]]--
@ -117,9 +115,9 @@ o.width="10%"
node = s:option(Button,"apply_node",translate("Apply")) node = s:option(Button,"apply_node",translate("Apply"))
node.inputstyle = "apply" node.inputstyle = "apply"
node.write = function(self, section) node.write = function(self, section)
ucic:set("shadowsocksr", '@global[0]', 'global_server', section) uci:set("shadowsocksr", '@global[0]', 'global_server', section)
ucic:save("shadowsocksr") uci:save("shadowsocksr")
ucic:commit("shadowsocksr") uci:commit("shadowsocksr")
luci.sys.exec("/etc/init.d/shadowsocksr restart") luci.sys.exec("/etc/init.d/shadowsocksr restart")
luci.http.redirect(luci.dispatcher.build_url("admin", "services", "shadowsocksr", "client")) luci.http.redirect(luci.dispatcher.build_url("admin", "services", "shadowsocksr", "client"))
end end

View File

@ -1,7 +1,6 @@
-- Copyright (C) 2017 yushi studio <ywb94@qq.com> -- Copyright (C) 2017 yushi studio <ywb94@qq.com>
-- Licensed to the public under the GNU General Public License v3. -- Licensed to the public under the GNU General Public License v3.
local IPK_Version="3.0.9"
local m, s, o local m, s, o
local redir_run=0 local redir_run=0
local reudp_run=0 local reudp_run=0
@ -9,13 +8,11 @@ local sock5_run=0
local server_run=0 local server_run=0
local kcptun_run=0 local kcptun_run=0
local tunnel_run=0 local tunnel_run=0
local udp2raw_run=0
local udpspeeder_run=0
local gfw_count=0 local gfw_count=0
local ad_count=0 local ad_count=0
local ip_count=0 local ip_count=0
local nfip_count=0 local nfip_count=0
local ucic = luci.model.uci.cursor() local uci = luci.model.uci.cursor()
local shadowsocksr = "shadowsocksr" local shadowsocksr = "shadowsocksr"
-- html constants -- html constants
font_blue = [[<font color="green">]] font_blue = [[<font color="green">]]
@ -28,66 +25,66 @@ local sys = require "luci.sys"
local kcptun_version=translate("Unknown") local kcptun_version=translate("Unknown")
local kcp_file="/usr/bin/kcptun-client" local kcp_file="/usr/bin/kcptun-client"
if not fs.access(kcp_file) then if not fs.access(kcp_file) then
kcptun_version=translate("Not exist") kcptun_version=translate("Not exist")
else else
if not fs.access(kcp_file, "rwx", "rx", "rx") then if not fs.access(kcp_file, "rwx", "rx", "rx") then
fs.chmod(kcp_file, 755) fs.chmod(kcp_file, 755)
end end
kcptun_version=sys.exec(kcp_file .. " -v | awk '{printf $3}'") kcptun_version=sys.exec(kcp_file .. " -v | awk '{printf $3}'")
if not kcptun_version or kcptun_version == "" then if not kcptun_version or kcptun_version == "" then
kcptun_version = translate("Unknown") kcptun_version = translate("Unknown")
end end
end end
if nixio.fs.access("/etc/dnsmasq.ssr/gfw_list.conf") then if nixio.fs.access("/etc/dnsmasq.ssr/gfw_list.conf") then
gfw_count = tonumber(sys.exec("cat /etc/dnsmasq.ssr/gfw_list.conf | wc -l"))/2 gfw_count = tonumber(sys.exec("cat /etc/dnsmasq.ssr/gfw_list.conf | wc -l"))/2
end end
if nixio.fs.access("/etc/dnsmasq.ssr/ad.conf") then if nixio.fs.access("/etc/dnsmasq.ssr/ad.conf") then
ad_count=tonumber(sys.exec("cat /etc/dnsmasq.ssr/ad.conf | wc -l")) ad_count = tonumber(sys.exec("cat /etc/dnsmasq.ssr/ad.conf | wc -l"))
end end
if nixio.fs.access("/etc/china_ssr.txt") then if nixio.fs.access("/etc/china_ssr.txt") then
ip_count = sys.exec("cat /etc/china_ssr.txt | wc -l") ip_count = tonumber(sys.exec("cat /etc/china_ssr.txt | wc -l"))
end end
if nixio.fs.access("/etc/config/netflixip.list") then if nixio.fs.access("/etc/config/netflixip.list") then
nfip_count = sys.exec("cat /etc/config/netflixip.list | wc -l") nfip_count = tonumber(sys.exec("cat /etc/config/netflixip.list | wc -l"))
end end
local icount=sys.exec("busybox ps -w | grep ssr-reudp |grep -v grep| wc -l") local icount=sys.exec("busybox ps -w | grep ssr-reudp |grep -v grep| wc -l")
if tonumber(icount)>0 then if tonumber(icount)>0 then
reudp_run=1 reudp_run=1
else else
icount=sys.exec("busybox ps -w | grep ssr-retcp |grep \"\\-u\"|grep -v grep| wc -l") icount=sys.exec("busybox ps -w | grep ssr-retcp |grep \"\\-u\"|grep -v grep| wc -l")
if tonumber(icount)>0 then if tonumber(icount)>0 then
reudp_run=1 reudp_run=1
end end
end end
if luci.sys.call("busybox ps -w | grep ssr-retcp | grep -v grep >/dev/null") == 0 then if luci.sys.call("busybox ps -w | grep ssr-retcp | grep -v grep >/dev/null") == 0 then
redir_run=1 redir_run=1
end end
if luci.sys.call("busybox ps -w | grep ssr-socks | grep -v grep >/dev/null") == 0 then if luci.sys.call("busybox ps -w | grep ssr-socks | grep -v grep >/dev/null") == 0 then
sock5_run=1 sock5_run=1
end end
if luci.sys.call("pidof kcptun-client >/dev/null") == 0 then if luci.sys.call("pidof kcptun-client >/dev/null") == 0 then
kcptun_run=1 kcptun_run=1
end end
if luci.sys.call("pidof ssr-server >/dev/null") == 0 then if luci.sys.call("pidof ssr-server >/dev/null") == 0 then
server_run=1 server_run=1
end end
if luci.sys.call("busybox ps -w | grep ssr-tunnel |grep -v grep >/dev/null") == 0 then if luci.sys.call("busybox ps -w | grep ssr-tunnel |grep -v grep >/dev/null") == 0 then
tunnel_run=1 tunnel_run=1
end end
if luci.sys.call("pidof pdnsd >/dev/null") == 0 or (luci.sys.call("busybox ps -w | grep ssr-dns |grep -v grep >/dev/null") == 0 and luci.sys.call("pidof dns2socks >/dev/null") == 0)then if luci.sys.call("pidof pdnsd >/dev/null") == 0 or (luci.sys.call("busybox ps -w | grep ssr-dns |grep -v grep >/dev/null") == 0 and luci.sys.call("pidof dns2socks >/dev/null") == 0)then
pdnsd_run=1 pdnsd_run=1
end end
m = SimpleForm("Version") m = SimpleForm("Version")
@ -97,63 +94,62 @@ m.submit = false
s=m:field(DummyValue,"redir_run",translate("Global Client")) s=m:field(DummyValue,"redir_run",translate("Global Client"))
s.rawhtml = true s.rawhtml = true
if redir_run == 1 then if redir_run == 1 then
s.value =font_blue .. bold_on .. translate("Running") .. bold_off .. font_off s.value =font_blue .. bold_on .. translate("Running") .. bold_off .. font_off
else else
s.value = translate("Not Running") s.value = translate("Not Running")
end end
s=m:field(DummyValue,"reudp_run",translate("Game Mode UDP Relay")) s=m:field(DummyValue,"reudp_run",translate("Game Mode UDP Relay"))
s.rawhtml = true s.rawhtml = true
if reudp_run == 1 then if reudp_run == 1 then
s.value =font_blue .. bold_on .. translate("Running") .. bold_off .. font_off s.value =font_blue .. bold_on .. translate("Running") .. bold_off .. font_off
else else
s.value = translate("Not Running") s.value = translate("Not Running")
end end
if ucic:get_first(shadowsocksr, 'global', 'pdnsd_enable', '0') ~= '0' then if uci:get_first(shadowsocksr, 'global', 'pdnsd_enable', '0') ~= '0' then
s=m:field(DummyValue,"pdnsd_run",translate("DNS Anti-pollution")) s=m:field(DummyValue,"pdnsd_run",translate("DNS Anti-pollution"))
s.rawhtml = true s.rawhtml = true
if pdnsd_run == 1 then if pdnsd_run == 1 then
s.value =font_blue .. bold_on .. translate("Running") .. bold_off .. font_off s.value =font_blue .. bold_on .. translate("Running") .. bold_off .. font_off
else else
s.value = translate("Not Running") s.value = translate("Not Running")
end end
end end
if ucic:get_first(shadowsocksr, 'socks5_proxy', 'socks', '0') == '1' then if uci:get_first(shadowsocksr, 'socks5_proxy', 'socks', '0') == '1' then
if nixio.fs.access("/usr/bin/microsocks") then if nixio.fs.access("/usr/bin/microsocks") then
s=m:field(DummyValue,"sock5_run",translate("SOCKS5 Proxy Server")) s=m:field(DummyValue,"sock5_run",translate("SOCKS5 Proxy Server"))
s.rawhtml = true s.rawhtml = true
if sock5_run == 1 then if sock5_run == 1 then
s.value =font_blue .. bold_on .. translate("Running") .. bold_off .. font_off s.value =font_blue .. bold_on .. translate("Running") .. bold_off .. font_off
else else
s.value = translate("Not Running") s.value = translate("Not Running")
end end
end end
end end
if nixio.fs.access("/usr/bin/ssr-server") then if nixio.fs.access("/usr/bin/ssr-server") then
s=m:field(DummyValue,"server_run",translate("Global SSR Server")) s=m:field(DummyValue,"server_run",translate("Global SSR Server"))
s.rawhtml = true s.rawhtml = true
if server_run == 1 then if server_run == 1 then
s.value =font_blue .. bold_on .. translate("Running") .. bold_off .. font_off s.value =font_blue .. bold_on .. translate("Running") .. bold_off .. font_off
else else
s.value = translate("Not Running") s.value = translate("Not Running")
end end
end end
if nixio.fs.access("/usr/bin/kcptun-client") then if nixio.fs.access("/usr/bin/kcptun-client") then
s=m:field(DummyValue,"kcp_version",translate("KcpTun Version")) s=m:field(DummyValue,"kcp_version",translate("KcpTun Version"))
s.rawhtml = true s.rawhtml = true
s.value =kcptun_version s.value =kcptun_version
s=m:field(DummyValue,"kcptun_run",translate("KcpTun"))
s=m:field(DummyValue,"kcptun_run",translate("KcpTun")) s.rawhtml = true
s.rawhtml = true if kcptun_run == 1 then
if kcptun_run == 1 then s.value =font_blue .. bold_on .. translate("Running") .. bold_off .. font_off
s.value =font_blue .. bold_on .. translate("Running") .. bold_off .. font_off else
else s.value = translate("Not Running")
s.value = translate("Not Running") end
end
end end
s=m:field(DummyValue,"google",translate("Google Connectivity")) s=m:field(DummyValue,"google",translate("Google Connectivity"))
@ -167,23 +163,23 @@ s.template = "shadowsocksr/check"
s=m:field(DummyValue,"gfw_data",translate("GFW List Data")) s=m:field(DummyValue,"gfw_data",translate("GFW List Data"))
s.rawhtml = true s.rawhtml = true
s.template = "shadowsocksr/refresh" s.template = "shadowsocksr/refresh"
s.value =tostring(math.ceil(gfw_count)) .. " " .. translate("Records") s.value = gfw_count .. " " .. translate("Records")
s=m:field(DummyValue,"ip_data",translate("China IP Data")) s=m:field(DummyValue,"ip_data",translate("China IP Data"))
s.rawhtml = true s.rawhtml = true
s.template = "shadowsocksr/refresh" s.template = "shadowsocksr/refresh"
s.value =ip_count .. " " .. translate("Records") s.value = ip_count .. " " .. translate("Records")
s=m:field(DummyValue,"nfip_data",translate("Netflix IP Data")) s=m:field(DummyValue,"nfip_data",translate("Netflix IP Data"))
s.rawhtml = true s.rawhtml = true
s.template = "shadowsocksr/refresh" s.template = "shadowsocksr/refresh"
s.value =nfip_count .. " " .. translate("Records") s.value = nfip_count .. " " .. translate("Records")
if ucic:get_first(shadowsocksr, 'global', 'adblock', '0') == '1' then if uci:get_first(shadowsocksr, 'global', 'adblock', '0') == '1' then
s=m:field(DummyValue,"ad_data",translate("Advertising Data")) s=m:field(DummyValue,"ad_data",translate("Advertising Data"))
s.rawhtml = true s.rawhtml = true
s.template = "shadowsocksr/refresh" s.template = "shadowsocksr/refresh"
s.value =ad_count .. " " .. translate("Records") s.value = ad_count .. " " .. translate("Records")
end end
s=m:field(DummyValue,"check_port",translate("Check Server Port")) s=m:field(DummyValue,"check_port",translate("Check Server Port"))

View File

@ -334,9 +334,6 @@ msgstr "启用广告屏蔽"
msgid "adblock_url" msgid "adblock_url"
msgstr "广告屏蔽订阅" msgstr "广告屏蔽订阅"
msgid "Enable Custom Netflix IP Url"
msgstr "启用自定义Netflix IP更新URL"
msgid "nfip_url" msgid "nfip_url"
msgstr "Netflix IP更新URL" msgstr "Netflix IP更新URL"
@ -352,9 +349,6 @@ msgstr "【广告屏蔽】数据库"
msgid "Chnroute Setting" msgid "Chnroute Setting"
msgstr "国内IP段数据库更新设置" msgstr "国内IP段数据库更新设置"
msgid "Enable custom chnroute"
msgstr "启用自定义更新地址"
msgid "Update url" msgid "Update url"
msgstr "更新链接" msgstr "更新链接"

File diff suppressed because it is too large Load Diff

View File

@ -13,7 +13,6 @@ config global
option switch_try_count '3' option switch_try_count '3'
option adblock '0' option adblock '0'
option adblock_url 'https://gitee.com/privacy-protection-tools/anti-ad/raw/master/anti-ad-for-dnsmasq.conf' option adblock_url 'https://gitee.com/privacy-protection-tools/anti-ad/raw/master/anti-ad-for-dnsmasq.conf'
option chnroute '1'
option chnroute_url 'https://ispip.clang.cn/all_cn.txt' option chnroute_url 'https://ispip.clang.cn/all_cn.txt'
option nfip_url 'https://raw.githubusercontent.com/QiuSimons/Netflix_IP/master/NF_only.txt' option nfip_url 'https://raw.githubusercontent.com/QiuSimons/Netflix_IP/master/NF_only.txt'
option netflix_server 'same' option netflix_server 'same'

View File

@ -68,7 +68,6 @@ add_cron() {
sed -i '/shadowsocksr/d' $CRON_FILE sed -i '/shadowsocksr/d' $CRON_FILE
sed -i '/ssrplus.log/d' $CRON_FILE && echo '0 1 * * * echo "" > /tmp/ssrplus.log' >>$CRON_FILE sed -i '/ssrplus.log/d' $CRON_FILE && echo '0 1 * * * echo "" > /tmp/ssrplus.log' >>$CRON_FILE
[ $(uci_get_by_type server_subscribe auto_update 0) -eq 1 ] && echo "0 $(uci_get_by_type server_subscribe auto_update_time) * * * /usr/share/shadowsocksr/ssrplusupdate.sh" >>$CRON_FILE [ $(uci_get_by_type server_subscribe auto_update 0) -eq 1 ] && echo "0 $(uci_get_by_type server_subscribe auto_update_time) * * * /usr/share/shadowsocksr/ssrplusupdate.sh" >>$CRON_FILE
crontab $CRON_FILE crontab $CRON_FILE
} }
@ -432,7 +431,6 @@ start_redir() {
fi fi
fi fi
if [ -n "$UDP_RELAY_SERVER" ]; then if [ -n "$UDP_RELAY_SERVER" ]; then
redir_udp=1 redir_udp=1
if [ "$utype" == "ss" -o "$utype" == "ssr" ]; then if [ "$utype" == "ss" -o "$utype" == "ssr" ]; then
@ -725,4 +723,3 @@ stop() {
fi fi
del_cron del_cron
} }

View File

@ -13,7 +13,7 @@ uci -q batch <<-EOF >/dev/null
commit firewall commit firewall
EOF EOF
killall -q -9 ssr-monitor ss-redir ssr-redir v2ray trojan ipt2socks ssr-server kcptun-client srelay killall -q -9 ssr-monitor ss-redir ssr-redir ss-local ssr-local obfs-local v2ray-plugin v2ray trojan ipt2socks ssr-server kcptun-client dns2socks microsocks redsocks2
/usr/share/shadowsocksr/gfw2ipset.sh /usr/share/shadowsocksr/gfw2ipset.sh
rm -f /tmp/luci-indexcache rm -f /tmp/luci-indexcache
exit 0 exit 0

View File

@ -383,7 +383,6 @@ local execute = function()
end end
log('忽略手动添加的节点: ' .. old.alias) log('忽略手动添加的节点: ' .. old.alias)
end end
end) end)
for k, v in ipairs(nodeResult) do for k, v in ipairs(nodeResult) do
for kk, vv in ipairs(v) do for kk, vv in ipairs(v) do

View File

@ -8,20 +8,20 @@ require 'luci.util'
require 'luci.jsonc' require 'luci.jsonc'
require 'luci.sys' require 'luci.sys'
local icount =0 local icount =0
local ucic = luci.model.uci.cursor() local uci = luci.model.uci.cursor()
local log = function(...) local log = function(...)
print(os.date("%Y-%m-%d %H:%M:%S ") .. table.concat({ ... }, " ")) print(os.date("%Y-%m-%d %H:%M:%S ") .. table.concat({ ... }, " "))
end end
log('正在更新【GFW列表】数据库') log('正在更新【GFW列表】数据库')
refresh_cmd="wget-ssl --no-check-certificate https://cdn.jsdelivr.net/gh/gfwlist/gfwlist/gfwlist.txt -O /tmp/gfw.b64" refresh_cmd = "wget-ssl --no-check-certificate -O - https://cdn.jsdelivr.net/gh/gfwlist/gfwlist/gfwlist.txt > /tmp/gfw.b64"
sret=luci.sys.call(refresh_cmd .. " 2>/dev/null") sret = luci.sys.call(refresh_cmd .. " 2>/dev/null")
if sret== 0 then if sret == 0 then
luci.sys.call("/usr/bin/ssr-gfw") luci.sys.call("/usr/bin/ssr-gfw")
icount = luci.sys.exec("cat /tmp/gfwnew.txt | wc -l") icount = luci.sys.exec("cat /tmp/gfwnew.txt | wc -l")
if tonumber(icount)>1000 then if tonumber(icount) > 1000 then
oldcount=luci.sys.exec("cat /etc/dnsmasq.ssr/gfw_list.conf | wc -l") oldcount = luci.sys.exec("cat /etc/dnsmasq.ssr/gfw_list.conf | wc -l")
if tonumber(icount) ~= tonumber(oldcount) then if tonumber(icount) ~= tonumber(oldcount) then
luci.sys.exec("cp -f /tmp/gfwnew.txt /etc/dnsmasq.ssr/gfw_list.conf") luci.sys.exec("cp -f /tmp/gfwnew.txt /etc/dnsmasq.ssr/gfw_list.conf")
luci.sys.exec("cp -f /tmp/gfwnew.txt /tmp/dnsmasq.ssr/gfw_list.conf") luci.sys.exec("cp -f /tmp/gfwnew.txt /tmp/dnsmasq.ssr/gfw_list.conf")
@ -38,17 +38,13 @@ else
end end
log('正在更新【国内IP段】数据库') log('正在更新【国内IP段】数据库')
if (ucic:get_first('shadowsocksr', 'global', 'chnroute','0') == '1' ) then refresh_cmd = "wget-ssl --no-check-certificate -O - ".. uci:get_first('shadowsocksr', 'global', 'chnroute_url','https://ispip.clang.cn/all_cn.txt') .." > /tmp/china_ssr.txt"
refresh_cmd="wget-ssl --no-check-certificate -O - ".. ucic:get_first('shadowsocksr', 'global', 'chnroute_url','https://ispip.clang.cn/all_cn.txt') .." > /tmp/china_ssr.txt 2>/dev/null" sret = luci.sys.call(refresh_cmd .. " 2>/dev/null")
else
refresh_cmd="wget -O- 'http://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest' 2>/dev/null| awk -F\\| '/CN\\|ipv4/ { printf(\"%s/%d\\n\", $4, 32-log($5)/log(2)) }' > /tmp/china_ssr.txt"
end
sret=luci.sys.call(refresh_cmd)
icount = luci.sys.exec("cat /tmp/china_ssr.txt | wc -l") icount = luci.sys.exec("cat /tmp/china_ssr.txt | wc -l")
if sret== 0 then if sret == 0 then
icount = luci.sys.exec("cat /tmp/china_ssr.txt | wc -l") icount = luci.sys.exec("cat /tmp/china_ssr.txt | wc -l")
if tonumber(icount)>1000 then if tonumber(icount) > 1000 then
oldcount=luci.sys.exec("cat /etc/china_ssr.txt | wc -l") oldcount = luci.sys.exec("cat /etc/china_ssr.txt | wc -l")
if tonumber(icount) ~= tonumber(oldcount) then if tonumber(icount) ~= tonumber(oldcount) then
luci.sys.exec("cp -f /tmp/china_ssr.txt /etc/china_ssr.txt") luci.sys.exec("cp -f /tmp/china_ssr.txt /etc/china_ssr.txt")
log('更新成功! 新的总纪录数:'.. icount) log('更新成功! 新的总纪录数:'.. icount)
@ -63,20 +59,18 @@ else
log('更新失败!') log('更新失败!')
end end
if ucic:get_first('shadowsocksr', 'global', 'adblock','0') == "1" then if uci:get_first('shadowsocksr', 'global', 'adblock','0') == "1" then
log('正在更新【广告屏蔽】数据库') log('正在更新【广告屏蔽】数据库')
if nixio.fs.access("/usr/bin/wget-ssl") then refresh_cmd = "wget-ssl --no-check-certificate -O - ".. uci:get_first('shadowsocksr', 'global', 'adblock_url','https://easylist-downloads.adblockplus.org/easylistchina+easylist.txt') .." > /tmp/adnew.conf"
refresh_cmd="wget-ssl --no-check-certificate -O - ".. ucic:get_first('shadowsocksr', 'global', 'adblock_url','https://easylist-downloads.adblockplus.org/easylistchina+easylist.txt') .." > /tmp/adnew.conf" sret = luci.sys.call(refresh_cmd .. " 2>/dev/null")
end if sret == 0 then
sret=luci.sys.call(refresh_cmd .. " 2>/dev/null")
if sret== 0 then
luci.sys.call("/usr/bin/ssr-ad") luci.sys.call("/usr/bin/ssr-ad")
icount = luci.sys.exec("cat /tmp/ad.conf | wc -l") icount = luci.sys.exec("cat /tmp/ad.conf | wc -l")
if tonumber(icount)>1000 then if tonumber(icount) > 100 then
if nixio.fs.access("/etc/dnsmasq.ssr/ad.conf") then if nixio.fs.access("/etc/dnsmasq.ssr/ad.conf") then
oldcount=luci.sys.exec("cat /etc/dnsmasq.ssr/ad.conf | wc -l") oldcount = luci.sys.exec("cat /etc/dnsmasq.ssr/ad.conf | wc -l")
else else
oldcount=0 oldcount = "0"
end end
if tonumber(icount) ~= tonumber(oldcount) then if tonumber(icount) ~= tonumber(oldcount) then
luci.sys.exec("cp -f /tmp/ad.conf /etc/dnsmasq.ssr/ad.conf") luci.sys.exec("cp -f /tmp/ad.conf /etc/dnsmasq.ssr/ad.conf")
@ -89,9 +83,31 @@ if sret== 0 then
log('更新失败!') log('更新失败!')
end end
luci.sys.exec("rm -f /tmp/ad.conf") luci.sys.exec("rm -f /tmp/ad.conf")
else
log('更新失败!')
end
end
--[[
log('正在更新【Netflix IP段】数据库')
refresh_cmd = "wget-ssl --no-check-certificate -O - ".. uci:get_first('shadowsocksr', 'global', 'nfip_url','https://raw.githubusercontent.com/QiuSimons/Netflix_IP/master/NF_only.txt') .." > /tmp/netflixip.list"
sret = luci.sys.call(refresh_cmd .. " 2>/dev/null")
if sret == 0 then
luci.sys.call("/usr/bin/ssr-gfw")
icount = luci.sys.exec("cat /tmp/netflixip.list | wc -l")
if tonumber(icount) > 5 then
oldcount = luci.sys.exec("cat /etc/config/netflixip.list | wc -l")
if tonumber(icount) ~= tonumber(oldcount) then
luci.sys.exec("cp -f /tmp/netflixip.list /etc/config/netflixip.list")
log('更新成功! 新的总纪录数:'.. icount)
else
log('你已经是最新数据,无需更新!')
end
else
log('更新失败!')
end
luci.sys.exec("rm -f /tmp/netflixip.list")
else else
log('更新失败!') log('更新失败!')
end end
end --]]
luci.sys.call("/etc/init.d/dnsmasq reload")