From c98a984d4a6ce28e822a92e5421c401d4496f2ab Mon Sep 17 00:00:00 2001 From: coolsnowwolf Date: Wed, 19 Feb 2020 00:13:08 +0800 Subject: [PATCH] luci-app-ssr-plus: fix check port status when vps disable ping --- package/lean/luci-app-ssr-plus/Makefile | 2 +- .../luasrc/controller/shadowsocksr.lua | 36 ++++++++++++++++++- .../luasrc/model/cbi/shadowsocksr/status.lua | 12 ++++--- .../luasrc/view/shadowsocksr/checkport.htm | 36 +++++++++++++++++++ 4 files changed, 80 insertions(+), 6 deletions(-) create mode 100644 package/lean/luci-app-ssr-plus/luasrc/view/shadowsocksr/checkport.htm diff --git a/package/lean/luci-app-ssr-plus/Makefile b/package/lean/luci-app-ssr-plus/Makefile index acf480daf..ee97856a5 100644 --- a/package/lean/luci-app-ssr-plus/Makefile +++ b/package/lean/luci-app-ssr-plus/Makefile @@ -1,7 +1,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=luci-app-ssr-plus -PKG_VERSION:=145 +PKG_VERSION:=146 PKG_RELEASE:=1 PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME) diff --git a/package/lean/luci-app-ssr-plus/luasrc/controller/shadowsocksr.lua b/package/lean/luci-app-ssr-plus/luasrc/controller/shadowsocksr.lua index e5d5bf80d..16312f251 100644 --- a/package/lean/luci-app-ssr-plus/luasrc/controller/shadowsocksr.lua +++ b/package/lean/luci-app-ssr-plus/luasrc/controller/shadowsocksr.lua @@ -19,6 +19,7 @@ function index() entry({"admin", "services", "shadowsocksr", "check"}, call("check_status")) entry({"admin", "services", "shadowsocksr", "refresh"}, call("refresh_data")) entry({"admin", "services", "shadowsocksr", "subscribe"}, call("subscribe")) + entry({"admin", "services", "shadowsocksr", "checkport"}, call("check_port")) entry({"admin", "services", "shadowsocksr", "log"},form("shadowsocksr/log"),_("Log"), 80).leaf = true entry({"admin", "services", "shadowsocksr","run"},call("act_status")).leaf=true entry({"admin", "services", "shadowsocksr", "ping"}, call("act_ping")).leaf=true @@ -42,13 +43,13 @@ function act_ping() local domain = luci.http.formvalue("domain") local port = luci.http.formvalue("port") e.index = luci.http.formvalue("index") - e.ping = luci.sys.exec("ping -c 1 -W 1 %q 2>&1 | grep -o 'time=[0-9]*.[0-9]' | awk -F '=' '{print$2}'" % domain) local iret = luci.sys.call(" ipset add ss_spec_wan_ac " .. domain .. " 2>/dev/null") local socket = nixio.socket("inet", "stream") socket:setopt("socket", "rcvtimeo", 3) socket:setopt("socket", "sndtimeo", 3) e.socket = socket:connect(domain, port) socket:close() + e.ping = luci.sys.exec("ping -c 1 -W 1 %q 2>&1 | grep -o 'time=[0-9]*.[0-9]' | awk -F '=' '{print$2}'" % domain) if (iret == 0) then luci.sys.call(" ipset del ss_spec_wan_ac " .. domain) end @@ -147,3 +148,36 @@ end luci.http.prepare_content("application/json") luci.http.write_json({ ret=retstring ,retcount=icount}) end + +function check_port() +local set="" +local retstring="

" +local s +local server_name = "" +local shadowsocksr = "shadowsocksr" +local uci = luci.model.uci.cursor() +local iret=1 +uci:foreach(shadowsocksr, "servers", function(s) + if s.alias then + server_name=s.alias + elseif s.server and s.server_port then + server_name= "%s:%s" %{s.server, s.server_port} + end + iret=luci.sys.call(" ipset add ss_spec_wan_ac " .. s.server .. " 2>/dev/null") + socket = nixio.socket("inet", "stream") + socket:setopt("socket", "rcvtimeo", 3) + socket:setopt("socket", "sndtimeo", 3) + ret=socket:connect(s.server,s.server_port) + if tostring(ret) == "true" then + socket:close() + retstring =retstring .. "[" .. server_name .. "] OK.
" + else + retstring =retstring .. "[" .. server_name .. "] Error.
" + end + if iret== 0 then + luci.sys.call(" ipset del ss_spec_wan_ac " .. s.server) + end +end) +luci.http.prepare_content("application/json") +luci.http.write_json({ ret=retstring }) +end diff --git a/package/lean/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/status.lua b/package/lean/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/status.lua index beb5970e1..614a362bf 100644 --- a/package/lean/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/status.lua +++ b/package/lean/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/status.lua @@ -160,6 +160,11 @@ s.rawhtml = true s.template = "shadowsocksr/refresh" s.value =tostring(math.ceil(gfw_count)) .. " " .. translate("Records") +s=m:field(DummyValue,"ip_data",translate("China IP Data")) +s.rawhtml = true +s.template = "shadowsocksr/refresh" +s.value =ip_count .. " " .. translate("Records") + if ucic:get_first(shadowsocksr, 'global', 'adblock', '0') == '1' then s=m:field(DummyValue,"ad_data",translate("Advertising Data")) s.rawhtml = true @@ -167,9 +172,8 @@ s.template = "shadowsocksr/refresh" s.value =ad_count .. " " .. translate("Records") end -s=m:field(DummyValue,"ip_data",translate("China IP Data")) -s.rawhtml = true -s.template = "shadowsocksr/refresh" -s.value =ip_count .. " " .. translate("Records") +s=m:field(DummyValue,"check_port",translate("Check Server Port")) +s.template = "shadowsocksr/checkport" +s.value =translate("No Check") return m diff --git a/package/lean/luci-app-ssr-plus/luasrc/view/shadowsocksr/checkport.htm b/package/lean/luci-app-ssr-plus/luasrc/view/shadowsocksr/checkport.htm new file mode 100644 index 000000000..ed91a2f22 --- /dev/null +++ b/package/lean/luci-app-ssr-plus/luasrc/view/shadowsocksr/checkport.htm @@ -0,0 +1,36 @@ +<%+cbi/valueheader%> + + + +<%=self.value%> + + + +<%+cbi/valuefooter%> \ No newline at end of file