diff --git a/package/ctcgfw/luci-app-vssr/Makefile b/package/ctcgfw/luci-app-vssr/Makefile index 39d38c3c91..21cfa21681 100644 --- a/package/ctcgfw/luci-app-vssr/Makefile +++ b/package/ctcgfw/luci-app-vssr/Makefile @@ -1,8 +1,8 @@ include $(TOPDIR)/rules.mk PKG_NAME:=luci-app-vssr -PKG_VERSION:=1.21 -PKG_RELEASE:=20200309-4 +PKG_VERSION:=1.22 +PKG_RELEASE:=20200310-4 PKG_CONFIG_DEPENDS:= CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks \ CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_V2ray \ diff --git a/package/ctcgfw/luci-app-vssr/luasrc/controller/vssr.lua b/package/ctcgfw/luci-app-vssr/luasrc/controller/vssr.lua index 3876140dbb..976b77b13a 100644 --- a/package/ctcgfw/luci-app-vssr/luasrc/controller/vssr.lua +++ b/package/ctcgfw/luci-app-vssr/luasrc/controller/vssr.lua @@ -322,7 +322,7 @@ if set == "gfw_data" then oldcount=luci.sys.exec("cat /etc/dnsmasq.ssr/gfw_list.conf | wc -l") 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 /etc/dnsmasq.ssr/gfw_list.conf /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") retstring=tostring(math.ceil(tonumber(icount)/2)) else @@ -337,7 +337,7 @@ else end elseif set == "ip_data" then if (luci.model.uci.cursor():get_first('vssr', 'global', 'chnroute', '0') == '1') then - refresh_cmd="wget-ssl --no-check-certificate -O - " .. luci.model.uci.cursor():get_first('vssr', 'global', 'chnroute_url', 'https://pexcn.me/daily/chnroute/chnroute.txt') .. ' > /tmp/china_ssr.txt 2>/dev/null' + refresh_cmd="wget-ssl --no-check-certificate -O - " .. luci.model.uci.cursor():get_first('vssr', 'global', 'chnroute_url', 'https://ispip.clang.cn/all_cn.txt') .. ' > /tmp/china_ssr.txt 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 @@ -371,11 +371,9 @@ if sret== 0 then end 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 /tmp/dnsmasq.ssr/ad.conf") + luci.sys.call("/etc/init.d/dnsmasq restart") retstring=tostring(math.ceil(tonumber(icount))) - if oldcount==0 then - luci.sys.exec("cp -f /etc/dnsmasq.ssr/ad.conf /tmp/dnsmasq.ssr/ad.conf") - luci.sys.call("/etc/init.d/dnsmasq restart") - end else retstring ="0" end @@ -392,6 +390,7 @@ luci.http.write_json({ ret=retstring ,retcount=icount}) end + -- 检测所有服务器 function check_ports() local set = "" diff --git a/package/ctcgfw/luci-app-vssr/luasrc/model/cbi/vssr/status.lua b/package/ctcgfw/luci-app-vssr/luasrc/model/cbi/vssr/status.lua index dcd262be1d..c36f9cd9d8 100644 --- a/package/ctcgfw/luci-app-vssr/luasrc/model/cbi/vssr/status.lua +++ b/package/ctcgfw/luci-app-vssr/luasrc/model/cbi/vssr/status.lua @@ -1,7 +1,7 @@ -- Copyright (C) 2017 yushi studio -- Licensed to the public under the GNU General Public License v3. -local IPK_Version="20200307.1.19" +local IPK_Version="20200310.1.22" local m, s, o local redir_run=0 local reudp_run=0 diff --git a/package/ctcgfw/luci-app-vssr/luasrc/model/cbi/vssr/subscription.lua b/package/ctcgfw/luci-app-vssr/luasrc/model/cbi/vssr/subscription.lua index be946b7078..8f10af47db 100644 --- a/package/ctcgfw/luci-app-vssr/luasrc/model/cbi/vssr/subscription.lua +++ b/package/ctcgfw/luci-app-vssr/luasrc/model/cbi/vssr/subscription.lua @@ -58,7 +58,8 @@ o = s:option(DummyValue, "", "") o.rawhtml = true o.template = "vssr/update_subscribe" -o = s:option(Button,"update",translate("Update All Subscribe Severs"),translate("No special needs, please click here to subscribe to update")) + +o = s:option(Button,"update",translate("Update All Subscribe Severs"), "" .. translate("No special needs, please click here to subscribe to update") .."") o.inputstyle = "reload" o.write = function() luci.sys.call("bash /usr/share/vssr/subscribe.sh >>/tmp/vssr.log 2>&1") diff --git a/package/ctcgfw/luci-app-vssr/luasrc/view/vssr/status2.htm b/package/ctcgfw/luci-app-vssr/luasrc/view/vssr/status2.htm index 42bf17e8e8..c2fa88c297 100644 --- a/package/ctcgfw/luci-app-vssr/luasrc/view/vssr/status2.htm +++ b/package/ctcgfw/luci-app-vssr/luasrc/view/vssr/status2.htm @@ -13,10 +13,10 @@ math.randomseed(os.time())
- - - - + + + +
@@ -61,27 +61,27 @@ math.randomseed(os.time()) $(".status-info").html(data.outboard+"
"+country); } if(data.baidu){ - $(".i1").attr("src","/luci-static/vssr/img/site_icon_01.jpg"); + $(".i1").attr("src","/luci-static/vssr/img/site_icon_01.png"); }else{ - $(".i1").attr("src","/luci-static/vssr/img/site_icon1_01.jpg"); + $(".i1").attr("src","/luci-static/vssr/img/site_icon1_01.png"); } if(data.taobao){ - $(".i2").attr("src","/luci-static/vssr/img/site_icon_02.jpg"); + $(".i2").attr("src","/luci-static/vssr/img/site_icon_02.png"); }else{ - $(".i2").attr("src","/luci-static/vssr/img/site_icon1_02.jpg"); + $(".i2").attr("src","/luci-static/vssr/img/site_icon1_02.png"); } if(data.google){ - $(".i3").attr("src","/luci-static/vssr/img/site_icon_03.jpg"); + $(".i3").attr("src","/luci-static/vssr/img/site_icon_03.png"); }else{ - $(".i3").attr("src","/luci-static/vssr/img/site_icon1_03.jpg"); + $(".i3").attr("src","/luci-static/vssr/img/site_icon1_03.png"); } if(data.youtube){ - $(".i4").attr("src","/luci-static/vssr/img/site_icon_04.jpg"); + $(".i4").attr("src","/luci-static/vssr/img/site_icon_04.png"); }else{ - $(".i4").attr("src","/luci-static/vssr/img/site_icon1_04.jpg"); + $(".i4").attr("src","/luci-static/vssr/img/site_icon1_04.png"); } diff --git a/package/ctcgfw/luci-app-vssr/po/zh-cn/vssr.po b/package/ctcgfw/luci-app-vssr/po/zh-cn/vssr.po index 5394864a74..985a9a14f3 100644 --- a/package/ctcgfw/luci-app-vssr/po/zh-cn/vssr.po +++ b/package/ctcgfw/luci-app-vssr/po/zh-cn/vssr.po @@ -707,7 +707,7 @@ msgid "Using acceleration center DNS" msgstr "使用加速中心DNS" msgid "Appoint dns List" -msgstr "指定DNS解析列表" +msgstr "DNS解析列表" msgid "Use https_dns_proxy query and cache" msgstr "使用https_dns_proxy TCP查询并缓存" diff --git a/package/ctcgfw/luci-app-vssr/root/usr/share/vssr/subscribe.sh b/package/ctcgfw/luci-app-vssr/root/usr/share/vssr/subscribe.sh index a67fb69615..318bfbfc0c 100644 --- a/package/ctcgfw/luci-app-vssr/root/usr/share/vssr/subscribe.sh +++ b/package/ctcgfw/luci-app-vssr/root/usr/share/vssr/subscribe.sh @@ -4,59 +4,75 @@ . /usr/share/libubox/jshn.sh urlsafe_b64decode() { - local d="====" data=$(echo $1 | sed 's/_/\//g; s/-/+/g') - local mod4=$((${#data}%4)) - [ $mod4 -gt 0 ] && data=${data}${d:mod4} - echo $data | base64 -d + local d="====" data=$(echo $1 | sed 's/_/\//g; s/-/+/g') + local mod4=$((${#data} % 4)) + [ $mod4 -gt 0 ] && data=${data}${d:mod4} + echo $data | base64 -d } -urldecode() { : "${*//+/ }"; echo -e "${_//%/\\x}"; } +urldecode() { + : "${*//+/ }" + echo -e "${_//%/\\x}" +} -echo_date(){ +echo_date() { echo $(TZ=UTC-8 date -R +%Y-%m-%d\ %X):$1 } + Server_Update() { - local uci_set="uci -q set $name.$1." - ${uci_set}grouphashkey="$ssr_grouphashkey" - ${uci_set}hashkey="$ssr_hashkey" - ${uci_set}alias="[$ssr_group] $ssr_remarks" - ${uci_set}auth_enable="0" - ${uci_set}switch_enable="1" - ${uci_set}type="$ssr_type" - ${uci_set}server="$ssr_host" - ${uci_set}server_port="$ssr_port" - ${uci_set}local_port="1234" - uci -q get $name.@servers[$1].timeout >/dev/null || ${uci_set}timeout="60" - ${uci_set}password="$ssr_passwd" - ${uci_set}encrypt_method="$ssr_method" - ${uci_set}protocol="$ssr_protocol" - ${uci_set}protocol_param="$ssr_protoparam" - ${uci_set}obfs="$ssr_obfs" - ${uci_set}obfs_param="$ssr_obfsparam" - ${uci_set}fast_open="0" - ${uci_set}kcp_enable="0" - ${uci_set}kcp_port="0" - ${uci_set}kcp_param="--nocomp" - + local uci_set="uci -q set $name.$1." + local flag=$(/usr/share/$name/getflag.sh "$ssr_remarks" $ssr_host) + ${uci_set}grouphashkey="$ssr_grouphashkey" + ${uci_set}hashkey="$ssr_hashkey" + ${uci_set}alias="[$ssr_group] $ssr_remarks" + ${uci_set}auth_enable="0" + ${uci_set}switch_enable="1" + ${uci_set}type="$ssr_type" + ${uci_set}flag="$flag" + ${uci_set}server="$ssr_host" + ${uci_set}server_port="$ssr_port" + ${uci_set}local_port="1234" + uci -q get $name.@servers[$1].timeout >/dev/null || ${uci_set}timeout="60" + ${uci_set}password="$ssr_passwd" + ${uci_set}encrypt_method="$ssr_method" + ${uci_set}protocol="$ssr_protocol" + ${uci_set}protocol_param="$ssr_protoparam" + ${uci_set}obfs="$ssr_obfs" + ${uci_set}obfs_param="$ssr_obfsparam" + ${uci_set}fast_open="0" + ${uci_set}kcp_enable="0" + ${uci_set}kcp_port="0" + ${uci_set}kcp_param="--nocomp" + if [ "$ssr_type" = "v2ray" ]; then - #v2ray - ${uci_set}alter_id="$ssr_alter_id" - ${uci_set}vmess_id="$ssr_vmess_id" - ${uci_set}transport="$ssr_transport" - ${uci_set}tcp_guise="$ssr_tcp_guise" - ${uci_set}ws_host="$ssr_ws_host" - ${uci_set}ws_path="$ssr_ws_path" - ${uci_set}h2_host="$ssr_h2_host" - ${uci_set}h2_path="$ssr_h2_path" - ${uci_set}tls="$ssr_tls" - ${uci_set}security=$ssr_security - ${uci_set}alias="$ssr_remarks" + #v2ray + ${uci_set}alter_id="$ssr_alter_id" + ${uci_set}vmess_id="$ssr_vmess_id" + ${uci_set}transport="$ssr_transport" + if [ "$ssr_transport" = "tcp" ]; then + ${uci_set}tcp_guise="$ssr_tcp_guise" + fi + + if [ "$ssr_transport" = "ws" ]; then + ${uci_set}ws_host="$ssr_ws_host" + ${uci_set}ws_path="$ssr_ws_path" + fi + + if [ "$ssr_transport" = "h2" ]; then + ${uci_set}h2_host="$ssr_ws_host" + ${uci_set}h2_path="$ssr_ws_path" + fi + + ${uci_set}tls="$ssr_tls" + ${uci_set}insecure="$ssr_insecure" + ${uci_set}security="auto" + ${uci_set}alias="$ssr_remarks" fi - + if [ "$ssr_type" = "ss" ]; then - ${uci_set}encrypt_method_ss="$ss_method" - ${uci_set}alias="$ssr_remarks" + ${uci_set}encrypt_method_ss="$ss_method" + ${uci_set}alias="$ssr_remarks" fi } @@ -66,194 +82,187 @@ subscribe_url=($(uci get $name.@server_subscribe[0].subscribe_url)) #订阅服 [ ${#subscribe_url[@]} -eq 0 ] && exit 1 [ $(uci -q get $name.@server_subscribe[0].proxy || echo 0) -eq 0 ] && /etc/init.d/$name stop >/dev/null 2>&1 log_name=${name}_subscribe -for ((o=0;o<${#subscribe_url[@]};o++)) -do +for ((o = 0; o < ${#subscribe_url[@]}; o++)); do echo_date "从 ${subscribe_url[o]} 获取订阅" echo_date "开始更新在线订阅列表..." - echo_date "尝试下载订阅链接到本地临时文件,请稍等..." - subscribe_data=$(wget-ssl --no-check-certificate -t 3 -T 30 -O- ${subscribe_url[o]}) + echo_date "开始下载订阅链接到本地临时文件,请稍等..." + subscribe_data=$(wget-ssl --user-agent="User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36" --no-check-certificate -t 10 -T 10 -O- ${subscribe_url[o]}) curl_code=$? # 计算group的hashkey ssr_grouphashkey=$(echo "${subscribe_url[o]}" | md5sum | cut -d ' ' -f1) - if [ ! $curl_code -eq 0 ];then - echo_date "下载订阅失败,自动重试中..." - subscribe_data=$(wget-ssl --user-agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36" --no-check-certificate -t 3 -T 30 -O- ${subscribe_url[o]}) + if [ ! $curl_code -eq 0 ]; then + + subscribe_data=$(wget-ssl --no-check-certificate -t 10 -T 10 -O- ${subscribe_url[o]}) curl_code=$? fi - if [ $curl_code -eq 0 ];then - echo_date "下载订阅成功,开始解析节点信息..." + if [ $curl_code -eq 0 ]; then + echo_date "下载订阅成功..." + echo_date "开始解析节点信息..." ssr_url=($(echo $subscribe_data | base64 -d | sed 's/\r//g')) # 解码数据并删除 \r 换行符 subscribe_max=$(echo ${ssr_url[0]} | grep -i MAX= | awk -F = '{print $2}') subscribe_max_x=() - if [ -n "$subscribe_max" ]; then - while [ ${#subscribe_max_x[@]} -ne $subscribe_max ] - do - if [ ${#ssr_url[@]} -ge 10 ]; then - if [ $((${RANDOM:0:2}%2)) -eq 0 ]; then - temp_x=${RANDOM:0:1} - else - temp_x=${RANDOM:0:2} - fi - else + if [ -n "$subscribe_max" ]; then + while [ ${#subscribe_max_x[@]} -ne $subscribe_max ]; do + if [ ${#ssr_url[@]} -ge 10 ]; then + if [ $((${RANDOM:0:2} % 2)) -eq 0 ]; then temp_x=${RANDOM:0:1} + else + temp_x=${RANDOM:0:2} fi - [ $temp_x -lt ${#ssr_url[@]} -a -z "$(echo "${subscribe_max_x[*]}" | grep -w $temp_x)" ] && subscribe_max_x[${#subscribe_max_x[@]}]="$temp_x" - done - else - subscribe_max=${#ssr_url[@]} - fi - echo_date "共计$subscribe_max个节点" + else + temp_x=${RANDOM:0:1} + fi + [ $temp_x -lt ${#ssr_url[@]} -a -z "$(echo "${subscribe_max_x[*]}" | grep -w $temp_x)" ] && subscribe_max_x[${#subscribe_max_x[@]}]="$temp_x" + done + else + subscribe_max=${#ssr_url[@]} + fi + echo_date "共计$subscribe_max个节点" - ssr_group=$(urlsafe_b64decode $(urlsafe_b64decode ${ssr_url[$((${#ssr_url[@]} - 1))]//ssr:\/\//} | sed 's/&/\n/g' | grep group= | awk -F = '{print $2}')) - if [ -z "$ssr_group" ]; then - ssr_group="default" - fi - if [ -n "$ssr_group" ]; then - subscribe_i=0 - subscribe_n=0 - subscribe_o=0 - subscribe_x="" - temp_host_o=() - curr_ssr=$(uci show $name | grep @servers | grep -c server=) - for ((x=0;x<$curr_ssr;x++)) # 循环已有服务器信息,匹配当前订阅群组 - do - temp_alias=$(uci -q get $name.@servers[$x].grouphashkey | grep "$ssr_grouphashkey") - [ -n "$temp_alias" ] && temp_host_o[${#temp_host_o[@]}]=$(uci get $name.@servers[$x].hashkey) - done + ssr_group=$(urlsafe_b64decode $(urlsafe_b64decode ${ssr_url[$((${#ssr_url[@]} - 1))]//ssr:\/\//} | sed 's/&/\n/g' | grep group= | awk -F = '{print $2}')) + if [ -z "$ssr_group" ]; then + ssr_group="default" + fi + if [ -n "$ssr_group" ]; then + subscribe_i=0 + subscribe_n=0 + subscribe_o=0 + subscribe_x="" + temp_host_o=() + curr_ssr=$(uci show $name | grep @servers | grep -c server=) + for ((x = 0; x < $curr_ssr; x++)); do # 循环已有服务器信息,匹配当前订阅群组 + temp_alias=$(uci -q get $name.@servers[$x].grouphashkey | grep "$ssr_grouphashkey") + [ -n "$temp_alias" ] && temp_host_o[${#temp_host_o[@]}]=$(uci get $name.@servers[$x].hashkey) + done - for ((x=0;x<$subscribe_max;x++)) # 循环链接 - do - [ ${#subscribe_max_x[@]} -eq 0 ] && temp_x=$x || temp_x=${subscribe_max_x[x]} - result=$(echo ${ssr_url[temp_x]} | grep "ss") - subscribe_url_type=$(echo "$ssr_url" | awk -F ':' '{print $1}') - - if [ "$subscribe_url_type" = "ss" ]; then - temp_info=${ssr_url[temp_x]//ss:\/\//} # 解码 SS 链接 - # 计算hashkey - ssr_hashkey=$(echo "$temp_info" | md5sum | cut -d ' ' -f1) + for ((x = 0; x < $subscribe_max; x++)); do # 循环链接 + [ ${#subscribe_max_x[@]} -eq 0 ] && temp_x=$x || temp_x=${subscribe_max_x[x]} + result=$(echo ${ssr_url[temp_x]} | grep "ss") + subscribe_url_type=$(echo "$ssr_url" | awk -F ':' '{print $1}') - info=$(urlsafe_b64decode $(echo "$temp_info" | awk -F '@' '{print $1}')) - temp_info_array=(${info//:/ }) - ssr_type="ss" - ss_method=${temp_info_array[0]} - ssr_passwd=${temp_info_array[1]} - info=$(echo "$temp_info" | awk -F '@' '{print $2}' | awk -F '#' '{print $1}') - temp_info_array=(${info//:/ }) - ssr_host=${temp_info_array[0]} - ssr_port=${temp_info_array[1]} - ssr_remarks=$(urldecode $(echo "$temp_info" | awk -F '#' '{print $2}')) - fi - - if [ "$subscribe_url_type" = "ssr" ]; then - temp_info=$(urlsafe_b64decode ${ssr_url[temp_x]//ssr:\/\//}) # 解码 SSR 链接 - # 计算hashkey - ssr_hashkey=$(echo "$temp_info" | md5sum | cut -d ' ' -f1) + if [ "$subscribe_url_type" = "ss" ]; then + temp_info=${ssr_url[temp_x]//ss:\/\//} # 解码 SS 链接 + # 计算hashkey + ssr_hashkey=$(echo "$temp_info" | md5sum | cut -d ' ' -f1) - info=${temp_info///?*/} - temp_info_array=(${info//:/ }) - ssr_type="ssr" - ssr_host=${temp_info_array[0]} - ssr_port=${temp_info_array[1]} - ssr_protocol=${temp_info_array[2]} - ssr_method=${temp_info_array[3]} - ssr_obfs=${temp_info_array[4]} - ssr_passwd=$(urlsafe_b64decode ${temp_info_array[5]}) - info=${temp_info:$((${#info} + 2))} - info=(${info//&/ }) - ssr_protoparam="" - ssr_obfsparam="" - ssr_remarks="$temp_x" - for ((i=0;i<${#info[@]};i++)) # 循环扩展信息 - do - temp_info=($(echo ${info[i]} | sed 's/=/ /g')) - case "${temp_info[0]}" in - protoparam) - ssr_protoparam=$(urlsafe_b64decode ${temp_info[1]});; - obfsparam) - ssr_obfsparam=$(urlsafe_b64decode ${temp_info[1]});; - remarks) - ssr_remarks=$(urlsafe_b64decode ${temp_info[1]});; - esac - done - fi - - if [ "$subscribe_url_type" = "vmess" ]; then - temp_info=$(urlsafe_b64decode ${ssr_url[temp_x]//vmess:\/\//}) # 解码 Vmess 链接 - # 计算hashkey - ssr_hashkey=$(echo "$temp_info" | md5sum | cut -d ' ' -f1) - - ssr_type="v2ray" - json_load "$temp_info" - json_get_var ssr_host add - json_get_var ssr_port port - json_get_var ssr_alter_id aid - json_get_var ssr_vmess_id id - json_get_var ssr_security security - if [ "$ssr_security" == "" ]; then - ssr_security="auto" - fi - json_get_var ssr_transport net - json_get_var ssr_remarks ps - ssr_tcp_guise="none" - json_get_var ssr_ws_host host - json_get_var ssr_ws_path path - json_get_var ssr_h2_host host - json_get_var ssr_h2_path path - json_get_var ssr_tls tls - if [ "$ssr_tls" == "tls" -o "$ssr_tls" == "1" ]; then - ssr_tls="1" - else - ssr_tls="0" - fi - fi - - if [ -z "ssr_remarks" ]; then # 没有备注的话则生成一个 - ssr_remarks="$ssr_host:$ssr_port"; - fi + info=$(urlsafe_b64decode $(echo "$temp_info" | awk -F '@' '{print $1}')) + temp_info_array=(${info//:/ }) + ssr_type="ss" + ss_method=${temp_info_array[0]} + ssr_passwd=${temp_info_array[1]} + info=$(echo "$temp_info" | awk -F '@' '{print $2}' | awk -F '#' '{print $1}') + temp_info_array=(${info//:/ }) + ssr_host=${temp_info_array[0]} + ssr_port=${temp_info_array[1]} + ssr_remarks=$(urldecode $(echo "$temp_info" | awk -F '#' '{print $2}')) + fi - uci_name_tmp=$(uci show $name | grep -w "$ssr_hashkey" | awk -F . '{print $2}') - if [ -z "$uci_name_tmp" ]; then # 判断当前服务器信息是否存在 - uci_name_tmp=$(uci add $name servers) - subscribe_n=$(($subscribe_n + 1)) - fi - Server_Update $uci_name_tmp - subscribe_x=$subscribe_x$ssr_hashkey" " - ssrtype=$(echo $ssr_type | tr '[a-z]' '[A-Z]') - echo_date "$ssrtype节点:【$ssr_remarks】" - - # SSR - # echo "服务器地址: $ssr_host" - # echo "服务器端口 $ssr_port" - # echo "密码: $ssr_passwd" - # echo "SS加密: $ss_method" - # echo "加密: $ssr_method" - # echo "协议: $ssr_protocol" - # echo "协议参数: $ssr_protoparam" - # echo "混淆: $ssr_obfs" - # echo "混淆参数: $ssr_obfsparam" - # echo "备注: $ssr_remarks" - - done - for ((x=0;x<${#temp_host_o[@]};x++)) # 新旧服务器信息匹配,如果旧服务器信息不存在于新服务器信息则删除 - do - if [ -z "$(echo "$subscribe_x" | grep -w ${temp_host_o[x]})" ]; then - uci_name_tmp=$(uci show $name | grep ${temp_host_o[x]} | awk -F . '{print $2}') - uci delete $name.$uci_name_tmp - subscribe_o=$(($subscribe_o + 1)) - fi - done - echo_date "本次更新订阅来源 【$ssr_group】 服务器数量: ${#ssr_url[@]} 新增服务器: $subscribe_n 删除服务器: $subscribe_o" - echo_date "在线订阅列表更新完成!请等待网页自动刷新!" - subscribe_log="$ssr_group 服务器订阅更新成功 服务器数量: ${#ssr_url[@]} 新增服务器: $subscribe_n 删除服务器: $subscribe_o" - logger -st $log_name[$$] -p6 "$subscribe_log" - uci commit $name - else - echo_date "${subscribe_url[$o]} 订阅数据解析失败 无法获取 Group" - logger -st $log_name[$$] -p3 "${subscribe_url[$o]} 订阅数据解析失败 无法获取 Group" - fi - else - echo_date "${subscribe_url[$o]} 订阅数据获取失败 错误代码: $curl_code" - logger -st $log_name[$$] -p3 "${subscribe_url[$o]} 订阅数据获取失败 错误代码: $curl_code" + if [ "$subscribe_url_type" = "ssr" ]; then + temp_info=$(urlsafe_b64decode ${ssr_url[temp_x]//ssr:\/\//}) # 解码 SSR 链接 + # 计算hashkey + ssr_hashkey=$(echo "$temp_info" | md5sum | cut -d ' ' -f1) + + info=${temp_info///?*/} + temp_info_array=(${info//:/ }) + ssr_type="ssr" + ssr_host=${temp_info_array[0]} + ssr_port=${temp_info_array[1]} + ssr_protocol=${temp_info_array[2]} + ssr_method=${temp_info_array[3]} + ssr_obfs=${temp_info_array[4]} + ssr_passwd=$(urlsafe_b64decode ${temp_info_array[5]}) + info=${temp_info:$((${#info} + 2))} + info=(${info//&/ }) + ssr_protoparam="" + ssr_obfsparam="" + ssr_remarks="$temp_x" + for ((i = 0; i < ${#info[@]}; i++)); do # 循环扩展信息 + temp_info=($(echo ${info[i]} | sed 's/=/ /g')) + case "${temp_info[0]}" in + protoparam) + ssr_protoparam=$(urlsafe_b64decode ${temp_info[1]}) + ;; + obfsparam) + ssr_obfsparam=$(urlsafe_b64decode ${temp_info[1]}) + ;; + remarks) + ssr_remarks=$(urlsafe_b64decode ${temp_info[1]}) + ;; + esac + done + fi + + if [ "$subscribe_url_type" = "vmess" ]; then + temp_info=$(urlsafe_b64decode ${ssr_url[temp_x]//vmess:\/\//}) # 解码 Vmess 链接 + # 计算hashkey + ssr_hashkey=$(echo "$temp_info" | md5sum | cut -d ' ' -f1) + + ssr_type="v2ray" + json_load "$temp_info" + json_get_var ssr_host add + json_get_var ssr_port port + json_get_var ssr_alter_id aid + json_get_var ssr_vmess_id id + json_get_var ssr_transport net + json_get_var ssr_remarks ps + ssr_tcp_guise="none" + json_get_var ssr_ws_host host + json_get_var ssr_ws_path path + json_get_var ssr_tls tls + if [ "$ssr_tls" == "tls" -o "$ssr_tls" == "1" ]; then + ssr_tls="1" + ssr_insecure="1" + else + ssr_tls="0" + fi + fi + + if [ -z "ssr_remarks" ]; then # 没有备注的话则生成一个 + ssr_remarks="$ssr_host:$ssr_port" + fi + + uci_name_tmp=$(uci show $name | grep -w "$ssr_hashkey" | awk -F . '{print $2}') + if [ -z "$uci_name_tmp" ]; then # 判断当前服务器信息是否存在 + uci_name_tmp=$(uci add $name servers) + subscribe_n=$(($subscribe_n + 1)) + fi + Server_Update $uci_name_tmp + subscribe_x=$subscribe_x$ssr_hashkey" " + ssrtype=$(echo $ssr_type | tr '[a-z]' '[A-Z]') + echo_date "$ssrtype节点:【$ssr_remarks】" + + # SSR + # echo "服务器地址: $ssr_host" + # echo "服务器端口 $ssr_port" + # echo "密码: $ssr_passwd" + # echo "SS加密: $ss_method" + # echo "加密: $ssr_method" + # echo "协议: $ssr_protocol" + # echo "协议参数: $ssr_protoparam" + # echo "混淆: $ssr_obfs" + # echo "混淆参数: $ssr_obfsparam" + # echo "备注: $ssr_remarks" + + done + for ((x = 0; x < ${#temp_host_o[@]}; x++)); do # 新旧服务器信息匹配,如果旧服务器信息不存在于新服务器信息则删除 + if [ -z "$(echo "$subscribe_x" | grep -w ${temp_host_o[x]})" ]; then + uci_name_tmp=$(uci show $name | grep ${temp_host_o[x]} | awk -F . '{print $2}') + uci delete $name.$uci_name_tmp + subscribe_o=$(($subscribe_o + 1)) + fi + done + echo_date "本次更新订阅来源 【$ssr_group】 服务器数量: ${#ssr_url[@]} 新增服务器: $subscribe_n 删除服务器: $subscribe_o" + echo_date "在线订阅列表更新完成!请等待网页自动刷新!" + subscribe_log="$ssr_group 服务器订阅更新成功 服务器数量: ${#ssr_url[@]} 新增服务器: $subscribe_n 删除服务器: $subscribe_o" + logger -st $log_name[$$] -p6 "$subscribe_log" + uci commit $name + else + echo_date "${subscribe_url[$o]} 订阅数据解析失败 无法获取 Group" + logger -st $log_name[$$] -p3 "${subscribe_url[$o]} 订阅数据解析失败 无法获取 Group" + fi + else + echo_date "${subscribe_url[$o]} 订阅数据获取失败 错误代码: $curl_code" + logger -st $log_name[$$] -p3 "${subscribe_url[$o]} 订阅数据获取失败 错误代码: $curl_code" fi done echo "END SUBSCRIBE" diff --git a/package/ctcgfw/luci-app-vssr/root/usr/share/vssr/update.lua b/package/ctcgfw/luci-app-vssr/root/usr/share/vssr/update.lua index 02645963bb..fc3c837652 100644 --- a/package/ctcgfw/luci-app-vssr/root/usr/share/vssr/update.lua +++ b/package/ctcgfw/luci-app-vssr/root/usr/share/vssr/update.lua @@ -15,11 +15,7 @@ local log = function(...) end log('正在更新【GFW列表】数据库') -if nixio.fs.access("/usr/bin/wget-ssl") then refresh_cmd="wget-ssl --no-check-certificate https://cdn.jsdelivr.net/gh/gfwlist/gfwlist/gfwlist.txt -O /tmp/gfw.b64" - else - refresh_cmd="wget -O /tmp/gfw.b64 http://iytc.net/tools/list.b64" - end sret=luci.sys.call(refresh_cmd .. " 2>/dev/null") if sret== 0 then luci.sys.call("/usr/bin/vssr-gfw") @@ -28,7 +24,7 @@ if nixio.fs.access("/usr/bin/wget-ssl") then oldcount=luci.sys.exec("cat /etc/dnsmasq.ssr/gfw_list.conf | wc -l") if tonumber(icount) ~= tonumber(oldcount) then luci.sys.exec("cp -f /tmp/gfwnew.txt /etc/dnsmasq.ssr/gfw_list.conf") --- retstring=tostring(math.ceil(tonumber(icount)/2)) + luci.sys.exec("cp -f /tmp/gfwnew.txt /tmp/dnsmasq.ssr/gfw_list.conf") log('更新成功! 新的总纪录数:'.. icount) else log('你已经是最新数据,无需更新!') @@ -43,7 +39,7 @@ end log('正在更新【国内IP段】数据库') if (ucic:get_first('vssr', 'global', 'chnroute','0') == '1' ) then - refresh_cmd="wget-ssl --no-check-certificate -O - ".. ucic:get_first('vssr', 'global', 'chnroute_url','https://cdn.jsdelivr.net/gh/17mon/china_ip_list/china_ip_list.txt') .." > /tmp/china_ssr.txt 2>/dev/null" + refresh_cmd="wget-ssl --no-check-certificate -O - ".. ucic:get_first('vssr', 'global', 'chnroute_url','https://ispip.clang.cn/all_cn.txt') .." > /tmp/china_ssr.txt 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 @@ -55,7 +51,6 @@ if sret== 0 then oldcount=luci.sys.exec("cat /etc/china_ssr.txt | wc -l") if tonumber(icount) ~= tonumber(oldcount) then luci.sys.exec("cp -f /tmp/china_ssr.txt /etc/china_ssr.txt") --- retstring=tostring(math.ceil(tonumber(icount)/2)) log('更新成功! 新的总纪录数:'.. icount) else log('你已经是最新数据,无需更新!') @@ -71,7 +66,7 @@ end if ucic:get_first('vssr', 'global', 'adblock','0') == "1" then log('正在更新【广告屏蔽】数据库') if nixio.fs.access("/usr/bin/wget-ssl") then - 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" + refresh_cmd="wget-ssl --no-check-certificate -O - ".. ucic:get_first('vssr', 'global', 'adblock_url','https://easylist-downloads.adblockplus.org/easylistchina+easylist.txt') .." > /tmp/adnew.conf" end sret=luci.sys.call(refresh_cmd .. " 2>/dev/null") if sret== 0 then @@ -85,10 +80,7 @@ if sret== 0 then end if tonumber(icount) ~= tonumber(oldcount) then luci.sys.exec("cp -f /tmp/ad.conf /etc/dnsmasq.ssr/ad.conf") --- retstring=tostring(math.ceil(tonumber(icount))) - if oldcount==0 then - luci.sys.call("/etc/init.d/dnsmasq restart") - end + luci.sys.exec("cp -f /tmp/ad.conf /tmp/dnsmasq.ssr/ad.conf") log('更新成功! 新的总纪录数:'.. icount) else log('你已经是最新数据,无需更新!') @@ -100,4 +92,6 @@ if sret== 0 then else log('更新失败!') end -end \ No newline at end of file +end + +luci.sys.call("/etc/init.d/dnsmasq restart") diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/css/vssr.css b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/css/vssr.css index 5373f053b5..167d91256c 100644 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/css/vssr.css +++ b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/css/vssr.css @@ -332,7 +332,7 @@ https://github.com/pure-css/pure/blob/master/LICENSE.md transition: all 0.2s; } .cbi-section-table-row:hover{ - background: #fff; + background: #F0E68C; } @@ -358,7 +358,7 @@ https://github.com/pure-css/pure/blob/master/LICENSE.md color: #fff !important; } .host_con.fast { - color: #6f9a37; + color: #00bc12; } .host_con.nopass { @@ -538,7 +538,7 @@ footer.mobile-hide{ right: 0; box-shadow: 0 0 2rem 0 rgba(136,152,170,.3); color: #525f7f; - background: #fff; + background: #f4; z-index: 5; box-sizing: border-box; } diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/img/site_icon1_01.jpg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/img/site_icon1_01.jpg deleted file mode 100644 index 2e7efb7b8e..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/img/site_icon1_01.jpg and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/img/site_icon1_01.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/img/site_icon1_01.png new file mode 100644 index 0000000000..73a1342881 Binary files /dev/null and b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/img/site_icon1_01.png differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/img/site_icon1_02.jpg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/img/site_icon1_02.jpg deleted file mode 100644 index 9fd205ef94..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/img/site_icon1_02.jpg and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/img/site_icon1_02.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/img/site_icon1_02.png new file mode 100644 index 0000000000..516fddb1e1 Binary files /dev/null and b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/img/site_icon1_02.png differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/img/site_icon1_03.jpg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/img/site_icon1_03.jpg deleted file mode 100644 index 494bd54583..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/img/site_icon1_03.jpg and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/img/site_icon1_03.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/img/site_icon1_03.png new file mode 100644 index 0000000000..b58dc07db5 Binary files /dev/null and b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/img/site_icon1_03.png differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/img/site_icon1_04.jpg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/img/site_icon1_04.jpg deleted file mode 100644 index 9df09d55bc..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/img/site_icon1_04.jpg and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/img/site_icon1_04.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/img/site_icon1_04.png new file mode 100644 index 0000000000..2f2d9e8be5 Binary files /dev/null and b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/img/site_icon1_04.png differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/img/site_icon_01.jpg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/img/site_icon_01.jpg deleted file mode 100644 index 5cfeb830ad..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/img/site_icon_01.jpg and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/img/site_icon_01.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/img/site_icon_01.png new file mode 100644 index 0000000000..53de36bdb3 Binary files /dev/null and b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/img/site_icon_01.png differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/img/site_icon_02.jpg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/img/site_icon_02.jpg deleted file mode 100644 index ca0c0fdf5d..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/img/site_icon_02.jpg and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/img/site_icon_02.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/img/site_icon_02.png new file mode 100644 index 0000000000..f9d0d31a83 Binary files /dev/null and b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/img/site_icon_02.png differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/img/site_icon_03.jpg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/img/site_icon_03.jpg deleted file mode 100644 index 2f936737fd..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/img/site_icon_03.jpg and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/img/site_icon_03.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/img/site_icon_03.png new file mode 100644 index 0000000000..6d58c8ce9f Binary files /dev/null and b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/img/site_icon_03.png differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/img/site_icon_04.jpg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/img/site_icon_04.jpg deleted file mode 100644 index 707cca4958..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/img/site_icon_04.jpg and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/img/site_icon_04.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/img/site_icon_04.png new file mode 100644 index 0000000000..3818b0a41d Binary files /dev/null and b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/img/site_icon_04.png differ