Created
April 7, 2020 10:36
-
-
Save rampageX/1b58f0a2cf3158581b52140f07c6ddf0 to your computer and use it in GitHub Desktop.
ss/ssr/v2ray/trojan subscribe decode
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/bin/sh | |
| # shadowsocks script for AM380 merlin firmware | |
| # by sadog (sadoneli@gmail.com) from koolshare.cn | |
| export KSROOT=/koolshare | |
| source $KSROOT/scripts/base.sh | |
| alias echo_date='echo 【$(TZ=UTC-8 date -R +%Y年%m月%d日\ %X)】:' | |
| eval `dbus export ss` | |
| LOCK_FILE=/tmp/online_update.lock | |
| CONFIG_FILE=/koolshare/ss/ss.json | |
| DEL_SUBSCRIBE=0 | |
| SOCKS_FLAG=0 | |
| # ============================== | |
| # ssconf_basic_ping_ | |
| # ssconf_basic_webtest_ | |
| # ssconf_basic_node_ | |
| # ssconf_basic_koolgame_udp_ | |
| # ssconf_basic_method_ | |
| # ssconf_basic_mode_ | |
| # ssconf_basic_name_ | |
| # ssconf_basic_password_ | |
| # ssconf_basic_port_ | |
| # ssconf_basic_rss_obfs_ | |
| # ssconf_basic_rss_obfs_param_ | |
| # ssconf_basic_rss_protocol_ | |
| # ssconf_basic_rss_protocol_param_ | |
| # ssconf_basic_server_ | |
| # ssconf_basic_ss_v2ray_plugin_ | |
| # ssconf_basic_ss_v2ray_plugin_opts_ | |
| # ssconf_basic_use_kcp_ | |
| # ssconf_basic_use_lb_ | |
| # ssconf_basic_lbmode_ | |
| # ssconf_basic_weight_ | |
| # ssconf_basic_v2ray_use_json_ | |
| # ssconf_basic_v2ray_uuid_ | |
| # ssconf_basic_v2ray_alterid_ | |
| # ssconf_basic_v2ray_security_ | |
| # ssconf_basic_v2ray_network_ | |
| # ssconf_basic_v2ray_headtype_tcp_ | |
| # ssconf_basic_v2ray_headtype_kcp_ | |
| # ssconf_basic_v2ray_network_path_ | |
| # ssconf_basic_v2ray_network_host_ | |
| # ssconf_basic_v2ray_network_security_ | |
| # ssconf_basic_v2ray_mux_enable_ | |
| # ssconf_basic_v2ray_mux_concurrency_ | |
| # ssconf_basic_v2ray_json_ | |
| # ssconf_basic_type_ | |
| # ============================== | |
| set_lock(){ | |
| exec 233>"$LOCK_FILE" | |
| flock -n 233 || { | |
| echo_date "订阅脚本已经在运行,请稍候再试!" | |
| exit 1 | |
| } | |
| } | |
| unset_lock(){ | |
| flock -u 233 | |
| rm -rf "$LOCK_FILE" | |
| } | |
| detect(){ | |
| # 检测版本号 | |
| firmware_version=`nvram get extendno|cut -d "X" -f2|cut -d "-" -f1|cut -d "_" -f1` | |
| if [ -f "/usr/bin/versioncmp" ];then | |
| firmware_comp=`versioncmp $firmware_version 7.7` | |
| else | |
| firmware_comp="1" | |
| fi | |
| if [ "$firmware_comp" == "0" -o "$firmware_comp" == "-1" ];then | |
| echo_date 检测到$firmware_version固件,支持订阅! | |
| else | |
| echo_date 订阅功能不支持X7.7以下的固件,当前固件版本$firmware_version,请更新固件! | |
| unset lock | |
| exit 1 | |
| fi | |
| } | |
| prepare(){ | |
| # 0 检测排序 | |
| seq_nu=`dbus list ssconf_basic_|grep _name_ | cut -d "=" -f1|cut -d "_" -f4|sort -n|wc -l` | |
| seq_max_nu=`dbus list ssconf_basic_|grep _name_ | cut -d "=" -f1|cut -d "_" -f4|sort -rn|head -n1` | |
| if [ "$seq_nu" == "$seq_max_nu" ];then | |
| echo_date "节点顺序正确,无需调整!" | |
| return 0 | |
| fi | |
| # 1 提取干净的节点配置,并重新排序 | |
| echo_date 备份shadowsocks节点信息... | |
| echo_date 如果节点数量过多,此处可能需要等待较长时间,请耐心等待... | |
| rm -rf /tmp/ss_conf.sh | |
| touch /tmp/ss_conf.sh | |
| chmod +x /tmp/ss_conf.sh | |
| echo "#!/bin/sh" >> /tmp/ss_conf.sh | |
| valid_nus=`dbus list ssconf_basic_|grep _name_ | cut -d "=" -f1|cut -d "_" -f4|sort -n` | |
| q=1 | |
| for nu in $valid_nus | |
| do | |
| [ -n "$(dbus get ssconf_basic_koolgame_udp_$nu)" ] && echo dbus set ssconf_basic_koolgame_udp_$q=$(dbus get ssconf_basic_koolgame_udp_$nu) >> /tmp/ss_conf.sh | |
| [ -n "$(dbus get ssconf_basic_method_$nu)" ] && echo dbus set ssconf_basic_method_$q=$(dbus get ssconf_basic_method_$nu) >> /tmp/ss_conf.sh | |
| [ -n "$(dbus get ssconf_basic_mode_$nu)" ] && echo dbus set ssconf_basic_mode_$q=$(dbus get ssconf_basic_mode_$nu) >> /tmp/ss_conf.sh | |
| [ -n "$(dbus get ssconf_basic_name_$nu)" ] && echo dbus set ssconf_basic_name_$q=$(dbus get ssconf_basic_name_$nu) >> /tmp/ss_conf.sh | |
| [ -n "$(dbus get ssconf_basic_password_$nu)" ] && echo dbus set ssconf_basic_password_$q=$(dbus get ssconf_basic_password_$nu) >> /tmp/ss_conf.sh | |
| [ -n "$(dbus get ssconf_basic_port_$nu)" ] && echo dbus set ssconf_basic_port_$q=$(dbus get ssconf_basic_port_$nu) >> /tmp/ss_conf.sh | |
| [ -n "$(dbus get ssconf_basic_rss_obfs_$nu)" ] && echo dbus set ssconf_basic_rss_obfs_$q=$(dbus get ssconf_basic_rss_obfs_$nu) >> /tmp/ss_conf.sh | |
| [ -n "$(dbus get ssconf_basic_rss_obfs_param_$nu)" ] && echo dbus set ssconf_basic_rss_obfs_param_$q=$(dbus get ssconf_basic_rss_obfs_param_$nu) >> /tmp/ss_conf.sh | |
| [ -n "$(dbus get ssconf_basic_rss_protocol_$nu)" ] && echo dbus set ssconf_basic_rss_protocol_$q=$(dbus get ssconf_basic_rss_protocol_$nu) >> /tmp/ss_conf.sh | |
| [ -n "$(dbus get ssconf_basic_rss_protocol_param_$nu)" ] && echo dbus set ssconf_basic_rss_protocol_param_$q=$(dbus get ssconf_basic_rss_protocol_param_$nu) >> /tmp/ss_conf.sh | |
| [ -n "$(dbus get ssconf_basic_server_$nu)" ] && echo dbus set ssconf_basic_server_$q=$(dbus get ssconf_basic_server_$nu) >> /tmp/ss_conf.sh | |
| [ -n "$(dbus get ssconf_basic_ss_v2ray_plugin_$nu)" ] && echo dbus set ssconf_basic_ss_v2ray_plugin_$q=$(dbus get ssconf_basic_ss_v2ray_plugin_$nu) >> /tmp/ss_conf.sh | |
| [ -n "$(dbus get ssconf_basic_ss_v2ray_plugin_opts_$nu)" ] && echo dbus set ssconf_basic_ss_v2ray_plugin_opts_$q=$(dbus get ssconf_basic_ss_v2ray_plugin_opts_$nu) >> /tmp/ss_conf.sh | |
| [ -n "$(dbus get ssconf_basic_use_kcp_$nu)" ] && echo dbus set ssconf_basic_use_kcp_$q=$(dbus get ssconf_basic_use_kcp_$nu) >> /tmp/ss_conf.sh | |
| [ -n "$(dbus get ssconf_basic_use_lb_$nu)" ] && echo dbus set ssconf_basic_use_lb_$q=$(dbus get ssconf_basic_use_lb_$nu) >> /tmp/ss_conf.sh | |
| [ -n "$(dbus get ssconf_basic_lbmode_$nu)" ] && echo dbus set ssconf_basic_lbmode_$q=$(dbus get ssconf_basic_lbmode_$nu) >> /tmp/ss_conf.sh | |
| [ -n "$(dbus get ssconf_basic_weight_$nu)" ] && echo dbus set ssconf_basic_weight_$q=$(dbus get ssconf_basic_weight_$nu) >> /tmp/ss_conf.sh | |
| [ -n "$(dbus get ssconf_basic_group_$nu)" ] && echo dbus set ssconf_basic_group_$q=$(dbus get ssconf_basic_group_$nu) >> /tmp/ss_conf.sh | |
| [ -n "$(dbus get ssconf_basic_v2ray_use_json_$nu)" ] && echo dbus set ssconf_basic_v2ray_use_json_$q=$(dbus get ssconf_basic_v2ray_use_json_$nu) >> /tmp/ss_conf.sh | |
| [ -n "$(dbus get ssconf_basic_v2ray_uuid_$nu)" ] && echo dbus set ssconf_basic_v2ray_uuid_$q=$(dbus get ssconf_basic_v2ray_uuid_$nu) >> /tmp/ss_conf.sh | |
| [ -n "$(dbus get ssconf_basic_v2ray_alterid_$nu)" ] && echo dbus set ssconf_basic_v2ray_alterid_$q=$(dbus get ssconf_basic_v2ray_alterid_$nu) >> /tmp/ss_conf.sh | |
| [ -n "$(dbus get ssconf_basic_v2ray_security_$nu)" ] && echo dbus set ssconf_basic_v2ray_security_$q=$(dbus get ssconf_basic_v2ray_security_$nu) >> /tmp/ss_conf.sh | |
| [ -n "$(dbus get ssconf_basic_v2ray_network_$nu)" ] && echo dbus set ssconf_basic_v2ray_network_$q=$(dbus get ssconf_basic_v2ray_network_$nu) >> /tmp/ss_conf.sh | |
| [ -n "$(dbus get ssconf_basic_v2ray_headtype_tcp_$nu)" ] && echo dbus set ssconf_basic_v2ray_headtype_tcp_$q=$(dbus get ssconf_basic_v2ray_headtype_tcp_$nu) >> /tmp/ss_conf.sh | |
| [ -n "$(dbus get ssconf_basic_v2ray_headtype_kcp_$nu)" ] && echo dbus set ssconf_basic_v2ray_headtype_kcp_$q=$(dbus get ssconf_basic_v2ray_headtype_kcp_$nu) >> /tmp/ss_conf.sh | |
| [ -n "$(dbus get ssconf_basic_v2ray_network_path_$nu)" ] && echo dbus set ssconf_basic_v2ray_network_path_$q=$(dbus get ssconf_basic_v2ray_network_path_$nu) >> /tmp/ss_conf.sh | |
| [ -n "$(dbus get ssconf_basic_v2ray_network_host_$nu)" ] && echo dbus set ssconf_basic_v2ray_network_host_$q=$(dbus get ssconf_basic_v2ray_network_host_$nu) >> /tmp/ss_conf.sh | |
| [ -n "$(dbus get ssconf_basic_v2ray_network_security_$nu)" ] && echo dbus set ssconf_basic_v2ray_network_security_$q=$(dbus get ssconf_basic_v2ray_network_security_$nu) >> /tmp/ss_conf.sh | |
| [ -n "$(dbus get ssconf_basic_v2ray_mux_enable_$nu)" ] && echo dbus set ssconf_basic_v2ray_mux_enable_$q=$(dbus get ssconf_basic_v2ray_mux_enable_$nu) >> /tmp/ss_conf.sh | |
| [ -n "$(dbus get ssconf_basic_v2ray_mux_concurrency_$nu)" ] && echo dbus set ssconf_basic_v2ray_mux_concurrency_$q=$(dbus get ssconf_basic_v2ray_mux_concurrency_$nu) >> /tmp/ss_conf.sh | |
| [ -n "$(dbus get ssconf_basic_v2ray_json_$nu)" ] && echo dbus set ssconf_basic_v2ray_json_$q=$(dbus get ssconf_basic_v2ray_json_$nu) >> /tmp/ss_conf.sh | |
| [ -n "$(dbus get ssconf_basic_type_$nu)" ] && echo dbus set ssconf_basic_type_$q=$(dbus get ssconf_basic_type_$nu) >> /tmp/ss_conf.sh | |
| echo "#------------------------" >> /tmp/ss_conf.sh | |
| if [ "$nu" == "$ssconf_basic_node" ];then | |
| echo dbus set ssconf_basic_node=$q >> /tmp/ss_conf.sh | |
| fi | |
| let q+=1 | |
| done | |
| #echo $q | |
| # ----------------- | |
| # 2 清除已有的ss节点配置 | |
| echo_date 一些必要的检查工作... | |
| confs=`dbus list ssconf_basic_ | cut -d "=" -f 1` | |
| for conf in $confs | |
| do | |
| #echo_date 移除$conf | |
| dbus remove $conf | |
| done | |
| # ----------------- | |
| # 3 应用之前提取的干净的ss配置 | |
| echo_date 检查完毕!节点信息备份在/koolshare/configs/ss_conf.sh | |
| cat /tmp/ss_conf.sh | sed 's/=/=\"/' | sed 's/$/\"/g' > /koolshare/configs/ss_conf.sh | |
| sh /koolshare/configs/ss_conf.sh | |
| # ============================== | |
| } | |
| decode_url_link(){ | |
| local link=$1 | |
| local len=`echo $link| wc -L` | |
| local mod4=$(($len%4)) | |
| if [ "$mod4" -gt "0" ]; then | |
| local var="====" | |
| local newlink=${link}${var:$mod4} | |
| echo -n "$newlink" | sed 's/-/+/g; s/_/\//g' | base64 -d 2>/dev/null | |
| else | |
| echo -n "$link" | sed 's/-/+/g; s/_/\//g' | base64 -d 2>/dev/null | |
| fi | |
| } | |
| add_ssr_servers(){ | |
| usleep 250000 | |
| ssrindex=$(($(dbus list ssconf_basic_|grep _name_ | cut -d "=" -f1|cut -d "_" -f4|sort -rn|head -n1)+1)) | |
| dbus set ssconf_basic_name_$ssrindex=$remarks | |
| [ -z "$1" ] && dbus set ssconf_basic_group_$ssrindex=$group | |
| dbus set ssconf_basic_mode_$ssrindex=$ssr_subscribe_mode | |
| dbus set ssconf_basic_server_$ssrindex=$server | |
| dbus set ssconf_basic_port_$ssrindex=$server_port | |
| dbus set ssconf_basic_rss_protocol_$ssrindex=$protocol | |
| dbus set ssconf_basic_rss_protocol_param_$ssrindex=$protoparam | |
| dbus set ssconf_basic_method_$ssrindex=$encrypt_method | |
| dbus set ssconf_basic_rss_obfs_$ssrindex=$obfs | |
| dbus set ssconf_basic_type_$ssrindex="1" | |
| [ -n "$1" ] && dbus set ssconf_basic_rss_obfs_param_$ssrindex=$obfsparam | |
| dbus set ssconf_basic_password_$ssrindex=$password | |
| echo_date SSR节点:新增加 【$remarks】 到节点列表第 $ssrindex 位。 | |
| } | |
| add_ss_servers(){ | |
| ssindex=$(($(dbus list ssconf_basic_|grep _name_ | cut -d "=" -f1|cut -d "_" -f4|sort -rn|head -n1)+1)) | |
| echo_date 添加SS节点:$remarks | |
| dbus set ssconf_basic_name_$ssindex=$remarks | |
| dbus set ssconf_basic_mode_$ssindex="2" | |
| dbus set ssconf_basic_server_$ssindex=$server | |
| dbus set ssconf_basic_port_$ssindex=$server_port | |
| dbus set ssconf_basic_method_$ssindex=$encrypt_method | |
| dbus set ssconf_basic_password_$ssindex=$password | |
| dbus set ssconf_basic_type_$ssindex="0" | |
| echo_date SS节点:新增加 【$remarks】 到节点列表第 $ssrindex 位。 | |
| } | |
| get_remote_config(){ | |
| decode_link="$1" | |
| action="$2" | |
| server=$(echo "$decode_link" |awk -F':' '{print $1}') | |
| server_port=$(echo "$decode_link" |awk -F':' '{print $2}') | |
| protocol=$(echo "$decode_link" |awk -F':' '{print $3}') | |
| encrypt_method=$(echo "$decode_link" |awk -F':' '{print $4}') | |
| obfs=$(echo "$decode_link" |awk -F':' '{print $5}'|sed 's/_compatible//g') | |
| password=$(decode_url_link $(echo "$decode_link" |awk -F':' '{print $6}'|awk -F'/' '{print $1}')) | |
| password=`echo $password|base64_encode` | |
| obfsparam_temp=$(echo "$decode_link" |awk -F':' '{print $6}'|grep -Eo "obfsparam.+"|sed 's/obfsparam=//g'|awk -F'&' '{print $1}') | |
| [ -n "$obfsparam_temp" ] && obfsparam=$(decode_url_link $obfsparam_temp) || obfsparam='' | |
| protoparam_temp=$(echo "$decode_link" |awk -F':' '{print $6}'|grep -Eo "protoparam.+"|sed 's/protoparam=//g'|awk -F'&' '{print $1}') | |
| [ -n "$protoparam_temp" ] && protoparam=$(decode_url_link $protoparam_temp|sed 's/_compatible//g') || protoparam='' | |
| remarks_temp=$(echo "$decode_link" |awk -F':' '{print $6}'|grep -Eo "remarks.+"|sed 's/remarks=//g'|awk -F'&' '{print $1}') | |
| if [ "$action" == "1" ];then | |
| #订阅 | |
| [ -n "$remarks_temp" ] && remarks=$(decode_url_link $remarks_temp) || remarks="" | |
| elif [ "$action" == "2" ];then | |
| # ssr://添加 | |
| [ -n "$remarks_temp" ] && remarks=$(decode_url_link $remarks_temp) || remarks='AutoSuB' | |
| fi | |
| group_temp=$(echo "$decode_link" |awk -F':' '{print $6}'|grep -Eo "group.+"|sed 's/group=//g'|awk -F'&' '{print $1}') | |
| if [ "$action" == "1" ];then | |
| #订阅 | |
| [ -n "$group_temp" ] && group=$(decode_url_link $group_temp) || group="" | |
| elif [ "$action" == "2" ];then | |
| # ssr://添加 | |
| [ -n "$group_temp" ] && group=$(decode_url_link $group_temp) || group='AutoSuBGroup' | |
| fi | |
| [ -n "$group" ] && group_base64=`echo $group | base64_encode | sed 's/ -//g'` | |
| [ -n "$server" ] && server_base64=`echo $server | base64_encode | sed 's/ -//g'` | |
| #把全部服务器节点写入文件 /usr/share/shadowsocks/serverconfig/all_onlineservers | |
| [ -n "$group" ] && [ -n "$server" ] && echo $server_base64 $group_base64 >> /tmp/all_onlineservers | |
| #echo ------ | |
| #echo group: $group | |
| #echo remarks: $remarks | |
| #echo server: $server | |
| #echo server_port: $server_port | |
| #echo password: $password | |
| #echo encrypt_method: $encrypt_method | |
| #echo protocol: $protocol | |
| #echo protoparam: $protoparam | |
| #echo obfs: $obfs | |
| #echo obfsparam: $obfsparam | |
| #echo ------ | |
| echo "$group" >> /tmp/all_group_info.txt | |
| [ -n "$group" ] && return 0 || return 1 | |
| } | |
| update_config(){ | |
| #isadded_server=$(uci show shadowsocks | grep -c "server=\'$server\'") | |
| isadded_server=$(cat /tmp/all_localservers | grep $group_base64 | awk '{print $1}' | grep -c $server_base64|head -n1) | |
| if [ "$isadded_server" == "0" ]; then | |
| add_ssr_servers | |
| [ "$ssr_subscribe_obfspara" == "0" ] && dbus set ssconf_basic_rss_obfs_param_$ssrindex="" | |
| [ "$ssr_subscribe_obfspara" == "1" ] && dbus set ssconf_basic_rss_obfs_param_$ssrindex="$obfsparam" | |
| [ "$ssr_subscribe_obfspara" == "2" ] && dbus set ssconf_basic_rss_obfs_param_$ssrindex="$ssr_subscribe_obfspara_val" | |
| let addnum+=1 | |
| else | |
| # 如果在本地的订阅节点中没找到该节点,检测下配置是否更改,如果更改,则更新配置 | |
| index=$(cat /tmp/all_localservers| grep $group_base64 | grep $server_base64 |awk '{print $3}'|head -n1) | |
| local_remarks=$(dbus get ssconf_basic_name_$index) | |
| local_server_port=$(dbus get ssconf_basic_port_$index) | |
| local_protocol=$(dbus get ssconf_basic_rss_protocol_$index) | |
| local_protocol_param=$(dbus get ssconf_basic_rss_protocol_param_$index) | |
| local_encrypt_method=$(dbus get ssconf_basic_method_$index) | |
| local_obfs=$(dbus get ssconf_basic_rss_obfs_$index) | |
| local_password=$(dbus get ssconf_basic_password_$index) | |
| #local_group=$(dbus get ssconf_basic_group_$index) | |
| #echo update $index | |
| local i=0 | |
| [ "$ssr_subscribe_obfspara" == "0" ] && dbus remove ssconf_basic_rss_obfs_param_$index | |
| [ "$ssr_subscribe_obfspara" == "1" ] && dbus set ssconf_basic_rss_obfs_param_$index="$obfsparam" | |
| [ "$ssr_subscribe_obfspara" == "2" ] && dbus set ssconf_basic_rss_obfs_param_$index="$ssr_subscribe_obfspara_val" | |
| dbus set ssconf_basic_mode_$index="$ssr_subscribe_mode" | |
| [ "$local_remarks" != "$remarks" ] && dbus set ssconf_basic_name_$index=$remarks | |
| [ "$local_server_port" != "$server_port" ] && dbus set ssconf_basic_port_$index=$server_port && let i+=1 | |
| [ "$local_protocol" != "$protocol" ] && dbus set ssconf_basic_rss_protocol_$index=$protocol && let i+=1 | |
| [ "$local_protocol_param"x != "$protoparam"x ] && dbus set ssconf_basic_rss_protocol_param_$index=$protoparam && let i+=1 | |
| [ "$local_encrypt_method" != "$encrypt_method" ] && dbus set ssconf_basic_method_$index=$encrypt_method && let i+=1 | |
| [ "$local_obfs" != "$obfs" ] && dbus set ssconf_basic_rss_obfs_$index=$obfs && let i+=1 | |
| [ "$local_password" != "$password" ] && dbus set ssconf_basic_password_$index=$password && let i+=1 | |
| if [ "$i" -gt "0" ];then | |
| echo_date 修改SSR节点:【$remarks】 && let updatenum+=1 | |
| else | |
| echo_date SSR节点:【$remarks】 参数未发生变化,跳过! | |
| fi | |
| fi | |
| } | |
| get_v2ray_remote_config(){ | |
| decode_link="$1" | |
| v2ray_group="$2" | |
| v2ray_v=$(echo "$decode_link" | jq -r .v) | |
| v2ray_ps=$(echo "$decode_link" | jq -r .ps | sed 's/[ \t]*//g') | |
| v2ray_add=$(echo "$decode_link" | jq -r .add | sed 's/[ \t]*//g') | |
| v2ray_port=$(echo "$decode_link" | jq -r .port | sed 's/[ \t]*//g') | |
| v2ray_id=$(echo "$decode_link" | jq -r .id | sed 's/[ \t]*//g') | |
| v2ray_aid=$(echo "$decode_link" | jq -r .aid | sed 's/[ \t]*//g') | |
| v2ray_net=$(echo "$decode_link" | jq -r .net) | |
| v2ray_type=$(echo "$decode_link" | jq -r .type) | |
| v2ray_tls_tmp=$(echo "$decode_link" | jq -r .tls) | |
| [ "$v2ray_tls_tmp"x == "tls"x ] && v2ray_tls="tls" || v2ray_tls="none" | |
| if [ "$v2ray_v" == "2" ];then | |
| #echo_date "new format" | |
| v2ray_path=$(echo "$decode_link" |jq -r .path) | |
| v2ray_host=$(echo "$decode_link" |jq -r .host) | |
| else | |
| #echo_date "old format" | |
| case $v2ray_net in | |
| tcp) | |
| v2ray_host=$(echo "$decode_link" |jq -r .host) | |
| v2ray_path="" | |
| ;; | |
| kcp) | |
| v2ray_host="" | |
| v2ray_path="" | |
| ;; | |
| ws) | |
| v2ray_host_tmp=$(echo "$decode_link" |jq -r .host) | |
| if [ -n "$v2ray_host_tmp" ];then | |
| format_ws=`echo $v2ray_host_tmp|grep -E ";"` | |
| if [ -n "$format_ws" ];then | |
| v2ray_host=`echo $v2ray_host_tmp|cut -d ";" -f1` | |
| v2ray_path=`echo $v2ray_host_tmp|cut -d ";" -f1` | |
| else | |
| v2ray_host="" | |
| v2ray_path=$v2ray_host | |
| fi | |
| fi | |
| ;; | |
| h2) | |
| v2ray_host="" | |
| v2ray_path=$(echo "$decode_link" |jq -r .path) | |
| ;; | |
| esac | |
| fi | |
| #把全部服务器节点编码后写入文件 /usr/share/shadowsocks/serverconfig/all_onlineservers | |
| [ -n "$v2ray_group" ] && group_base64=`echo $v2ray_group | base64_encode | sed 's/ -//g'` | |
| [ -n "$v2ray_add" ] && server_base64=`echo $v2ray_add | base64_encode | sed 's/ -//g'` | |
| [ -n "$v2ray_group" ] && [ -n "$v2ray_add" ] && echo $server_base64 $group_base64 >> /tmp/all_onlineservers | |
| #echo ------ | |
| #echo v2ray_v: $v2ray_v | |
| #echo v2ray_ps: $v2ray_ps | |
| #echo v2ray_add: $v2ray_add | |
| #echo v2ray_port: $v2ray_port | |
| #echo v2ray_id: $v2ray_id | |
| #echo v2ray_net: $v2ray_net | |
| #echo v2ray_type: $v2ray_type | |
| #echo v2ray_host: $v2ray_host | |
| #echo v2ray_path: $v2ray_path | |
| #echo v2ray_tls: $v2ray_tls | |
| #echo ------ | |
| [ -z "$v2ray_ps" -o -z "$v2ray_add" -o -z "$v2ray_port" -o -z "$v2ray_id" -o -z "$v2ray_aid" -o -z "$v2ray_net" -o -z "$v2ray_type" ] && return 1 || return 0 | |
| } | |
| add_v2ray_servers(){ | |
| usleep 250000 | |
| v2rayindex=$(($(dbus list ssconf_basic_|grep _name_ | cut -d "=" -f1|cut -d "_" -f4|sort -rn|head -n1)+1)) | |
| [ -z "$1" ] && dbus set ssconf_basic_group_$v2rayindex=$v2ray_group | |
| dbus set ssconf_basic_type_$v2rayindex=3 | |
| dbus set ssconf_basic_v2ray_mux_enable_$v2rayindex=0 | |
| dbus set ssconf_basic_v2ray_use_json_$v2rayindex=0 | |
| dbus set ssconf_basic_v2ray_security_$v2rayindex="auto" | |
| dbus set ssconf_basic_mode_$v2rayindex=$ssr_subscribe_mode | |
| dbus set ssconf_basic_name_$v2rayindex=$v2ray_ps | |
| dbus set ssconf_basic_port_$v2rayindex=$v2ray_port | |
| dbus set ssconf_basic_server_$v2rayindex=$v2ray_add | |
| dbus set ssconf_basic_v2ray_uuid_$v2rayindex=$v2ray_id | |
| dbus set ssconf_basic_v2ray_alterid_$v2rayindex=$v2ray_aid | |
| dbus set ssconf_basic_v2ray_network_security_$v2rayindex=$v2ray_tls | |
| dbus set ssconf_basic_v2ray_network_$v2rayindex=$v2ray_net | |
| case $v2ray_net in | |
| tcp) | |
| # tcp协议设置【 tcp伪装类型 (type)】和【伪装域名 (host)】 | |
| dbus set ssconf_basic_v2ray_headtype_tcp_$v2rayindex=$v2ray_type | |
| [ -n "$v2ray_host" ] && dbus set ssconf_basic_v2ray_network_host_$v2rayindex=$v2ray_host | |
| ;; | |
| kcp) | |
| # kcp协议设置【 kcp伪装类型 (type)】 | |
| dbus set ssconf_basic_v2ray_headtype_kcp_$v2rayindex=$v2ray_type | |
| ;; | |
| ws|h2) | |
| # ws/h2协议设置【 伪装域名 (host))】和【路径 (path)】 | |
| [ -n "$v2ray_host" ] && dbus set ssconf_basic_v2ray_network_host_$v2rayindex=$v2ray_host | |
| [ -n "$v2ray_path" ] && dbus set ssconf_basic_v2ray_network_path_$v2rayindex=$v2ray_path | |
| ;; | |
| esac | |
| echo_date v2ray节点:新增加 【$v2ray_ps】 到节点列表第 $v2rayindex 位。 | |
| } | |
| update_v2ray_config(){ | |
| isadded_server=$(cat /tmp/all_localservers | grep -w $group_base64 | awk '{print $1}' | grep -c $server_base64|head -n1) | |
| if [ "$isadded_server" == "0" ]; then | |
| add_v2ray_servers | |
| let addnum+=1 | |
| else | |
| # 如果在本地的订阅节点中已经有该节点(用group和server去判断),检测下配置是否更改,如果更改,则更新配置 | |
| index=$(cat /tmp/all_localservers| grep $group_base64 | grep $server_base64 |awk '{print $3}'|head -n1) | |
| local i=0 | |
| dbus set ssconf_basic_mode_$index="$ssr_subscribe_mode" | |
| local_v2ray_ps=$(dbus get ssconf_basic_name_$index) | |
| [ "$local_v2ray_ps" != "$v2ray_ps" ] && dbus set ssconf_basic_name_$index=$v2ray_ps && let i+=1 | |
| local_v2ray_add=$(dbus get ssconf_basic_server_$index) | |
| [ "$local_v2ray_add" != "$v2ray_add" ] && dbus set ssconf_basic_server_$index=$v2ray_add && let i+=1 | |
| local_v2ray_port=$(dbus get ssconf_basic_port_$index) | |
| [ "$local_v2ray_port" != "$v2ray_port" ] && dbus set ssconf_basic_port_$index=$v2ray_port && let i+=1 | |
| local_v2ray_id=$(dbus get ssconf_basic_v2ray_uuid_$index) | |
| [ "$local_v2ray_id" != "$v2ray_id" ] && dbus set ssconf_basic_v2ray_uuid_$index=$v2ray_id && let i+=1 | |
| local_v2ray_aid=$(dbus get ssconf_basic_v2ray_alterid_$index) | |
| [ "$local_v2ray_aid" != "$v2ray_aid" ] && dbus set ssconf_basic_v2ray_alterid_$index=$v2ray_aid && let i+=1 | |
| local_v2ray_tls=$(dbus get ssconf_basic_v2ray_network_security_$index) | |
| [ "$local_v2ray_tls" != "$v2ray_tls" ] && dbus set ssconf_basic_v2ray_network_security_$index=$v2ray_tls && let i+=1 | |
| local_v2ray_net=$(dbus get ssconf_basic_v2ray_network_$index) | |
| [ "$local_v2ray_net" != "$v2ray_net" ] && dbus set ssconf_basic_v2ray_network_$index=$v2ray_net && let i+=1 | |
| case $local_v2ray_net in | |
| tcp) | |
| # tcp协议 | |
| local_v2ray_type=$(dbus get ssconf_basic_v2ray_headtype_tcp_$index) | |
| local_v2ray_host=$(dbus get ssconf_basic_v2ray_network_host_$index) | |
| [ "$local_v2ray_type" != "$v2ray_type" ] && dbus set ssconf_basic_v2ray_headtype_tcp_$index=$v2ray_type && let i+=1 | |
| [ "$local_v2ray_host" != "$v2ray_host" ] && dbus set ssconf_basic_v2ray_network_host_$index=$v2ray_host && let i+=1 | |
| ;; | |
| kcp) | |
| # kcp协议 | |
| local_v2ray_type=$(dbus get ssconf_basic_v2ray_headtype_kcp_$index) | |
| [ "$local_v2ray_type" != "$v2ray_type" ] && dbus set ssconf_basic_v2ray_headtype_kcp_$index=$v2ray_type && let i+=1 | |
| ;; | |
| ws|h2) | |
| # ws/h2协议 | |
| local_v2ray_host=$(dbus get ssconf_basic_v2ray_network_host_$index) | |
| local_v2ray_path=$(dbus get ssconf_basic_v2ray_network_path_$index) | |
| [ "$local_v2ray_host" != "$v2ray_host" ] && dbus set ssconf_basic_v2ray_network_host_$index=$v2ray_host && let i+=1 | |
| [ "$local_v2ray_path" != "$v2ray_path" ] && dbus set ssconf_basic_v2ray_network_path_$index=$v2ray_path && let i+=1 | |
| ;; | |
| esac | |
| if [ "$i" -gt "0" ];then | |
| echo_date 修改v2ray节点:【$v2ray_ps】 && let updatenum+=1 | |
| else | |
| echo_date v2ray节点:【$v2ray_ps】 参数未发生变化,跳过! | |
| fi | |
| fi | |
| } | |
| del_none_exist(){ | |
| #删除订阅服务器已经不存在的节点 | |
| for localserver in $(cat /tmp/all_localservers| grep $group_base64|awk '{print $1}') | |
| do | |
| if [ "`cat /tmp/all_onlineservers | grep -c $localserver`" -eq "0" ];then | |
| del_index=`cat /tmp/all_localservers | grep $localserver | awk '{print $3}'` | |
| #for localindex in $(dbus list ssconf_basic_server|grep -v ssconf_basic_server_ip_|grep -w $localserver|cut -d "_" -f 4 |cut -d "=" -f1) | |
| for localindex in $del_index | |
| do | |
| echo_date 删除节点:`dbus get ssconf_basic_name_$localindex` ,因为该节点在订阅服务器上已经不存在... | |
| dbus remove ssconf_basic_group_$localindex | |
| dbus remove ssconf_basic_method_$localindex | |
| dbus remove ssconf_basic_mode_$localindex | |
| dbus remove ssconf_basic_name_$localindex | |
| dbus remove ssconf_basic_password_$localindex | |
| dbus remove ssconf_basic_port_$localindex | |
| dbus remove ssconf_basic_rss_obfs_$localindex | |
| dbus remove ssconf_basic_rss_obfs_param_$localindex | |
| dbus remove ssconf_basic_rss_protocol_$localindex | |
| dbus remove ssconf_basic_rss_protocol_param_$localindex | |
| dbus remove ssconf_basic_server_$localindex | |
| dbus remove ssconf_basic_server_ip_$localindex | |
| dbus remove ssconf_basic_ss_v2ray_plugin_$localindex | |
| dbus remove ssconf_basic_ss_v2ray_plugin_opts_$localindex | |
| dbus remove ssconf_basic_use_kcp_$localindex | |
| dbus remove ssconf_basic_use_lb_$localindex | |
| dbus remove ssconf_basic_lbmode_$localindex | |
| dbus remove ssconf_basic_weight_$localindex | |
| dbus remove ssconf_basic_koolgame_udp_$localindex | |
| dbus remove ssconf_basic_v2ray_use_json_$localindex | |
| dbus remove ssconf_basic_v2ray_uuid_$localindex | |
| dbus remove ssconf_basic_v2ray_alterid_$localindex | |
| dbus remove ssconf_basic_v2ray_security_$localindex | |
| dbus remove ssconf_basic_v2ray_network_$localindex | |
| dbus remove ssconf_basic_v2ray_headtype_tcp_$localindex | |
| dbus remove ssconf_basic_v2ray_headtype_kcp_$localindex | |
| dbus remove ssconf_basic_v2ray_network_path_$localindex | |
| dbus remove ssconf_basic_v2ray_network_host_$localindex | |
| dbus remove ssconf_basic_v2ray_network_security_$localindex | |
| dbus remove ssconf_basic_v2ray_mux_enable_$localindex | |
| dbus remove ssconf_basic_v2ray_mux_concurrency_$localindex | |
| dbus remove ssconf_basic_v2ray_json_$localindex | |
| let delnum+=1 | |
| done | |
| fi | |
| done | |
| } | |
| remove_node_gap(){ | |
| SEQ=$(dbus list ssconf_basic_|grep _name_|cut -d "_" -f 4|cut -d "=" -f 1|sort -n) | |
| MAX=$(dbus list ssconf_basic_|grep _name_|cut -d "_" -f 4|cut -d "=" -f 1|sort -rn|head -n1) | |
| NODE_NU=$(dbus list ssconf_basic_|grep _name_|wc -l) | |
| KCP_NODE=`dbus get ss_kcp_node` | |
| #echo_date 现有节点顺序:$SEQ | |
| echo_date 最大节点序号:$MAX | |
| echo_date 共有节点数量:$NODE_NU | |
| if [ "$MAX" != "$NODE_NU" ];then | |
| echo_date 节点排序需要调整! | |
| y=1 | |
| for nu in $SEQ | |
| do | |
| if [ "$y" == "$nu" ];then | |
| echo_date 节点 $y 不需要调整 ! | |
| else | |
| echo_date 调整节点 $nu 到 节点$y ! | |
| [ -n "$(dbus get ssconf_basic_group_$nu)" ] && dbus set ssconf_basic_group_"$y"="$(dbus get ssconf_basic_group_$nu)" && dbus remove ssconf_basic_group_$nu | |
| [ -n "$(dbus get ssconf_basic_method_$nu)" ] && dbus set ssconf_basic_method_"$y"="$(dbus get ssconf_basic_method_$nu)" && dbus remove ssconf_basic_method_$nu | |
| [ -n "$(dbus get ssconf_basic_mode_$nu)" ] && dbus set ssconf_basic_mode_"$y"="$(dbus get ssconf_basic_mode_$nu)" && dbus remove ssconf_basic_mode_$nu | |
| [ -n "$(dbus get ssconf_basic_name_$nu)" ] && dbus set ssconf_basic_name_"$y"="$(dbus get ssconf_basic_name_$nu)" && dbus remove ssconf_basic_name_$nu | |
| [ -n "$(dbus get ssconf_basic_password_$nu)" ] && dbus set ssconf_basic_password_"$y"="$(dbus get ssconf_basic_password_$nu)" && dbus remove ssconf_basic_password_$nu | |
| [ -n "$(dbus get ssconf_basic_port_$nu)" ] && dbus set ssconf_basic_port_"$y"="$(dbus get ssconf_basic_port_$nu)" && dbus remove ssconf_basic_port_$nu | |
| [ -n "$(dbus get ssconf_basic_rss_obfs_$nu)" ] && dbus set ssconf_basic_rss_obfs_"$y"="$(dbus get ssconf_basic_rss_obfs_$nu)" && dbus remove ssconf_basic_rss_obfs_$nu | |
| [ -n "$(dbus get ssconf_basic_rss_obfs_param_$nu)" ] && dbus set ssconf_basic_rss_obfs_param_"$y"="$(dbus get ssconf_basic_rss_obfs_param_$nu)" && dbus remove ssconf_basic_rss_obfs_param_$nu | |
| [ -n "$(dbus get ssconf_basic_rss_protocol_$nu)" ] && dbus set ssconf_basic_rss_protocol_"$y"="$(dbus get ssconf_basic_rss_protocol_$nu)" && dbus remove ssconf_basic_rss_protocol_$nu | |
| [ -n "$(dbus get ssconf_basic_rss_protocol_param_$nu)" ] && dbus set ssconf_basic_rss_protocol_param_"$y"="$(dbus get ssconf_basic_rss_protocol_param_$nu)" && dbus remove ssconf_basic_rss_protocol_param_$nu | |
| [ -n "$(dbus get ssconf_basic_server_$nu)" ] && dbus set ssconf_basic_server_"$y"="$(dbus get ssconf_basic_server_$nu)" && dbus remove ssconf_basic_server_$nu | |
| [ -n "$(dbus get ssconf_basic_server_ip_$nu)" ] && dbus set ssconf_basic_server_ip_"$y"="$(dbus get ssconf_basic_server_ip_$nu)" && dbus remove ssconf_basic_server_ip_$nu | |
| [ -n "$(dbus get ssconf_basic_ss_v2ray_plugin_opts_$nu)" ] && dbus set ssconf_basic_ss_v2ray_plugin_opts_"$y"="$(dbus get ssconf_basic_ss_v2ray_plugin_opts_$nu)" && dbus remove ssconf_basic_ss_v2ray_plugin_opts_$nu | |
| [ -n "$(dbus get ssconf_basic_use_kcp_$nu)" ] && dbus set ssconf_basic_use_kcp_"$y"="$(dbus get ssconf_basic_use_kcp_$nu)" && dbus remove ssconf_basic_use_kcp_$nu | |
| [ -n "$(dbus get ssconf_basic_use_lb_$nu)" ] && dbus set ssconf_basic_use_lb_"$y"="$(dbus get ssconf_basic_use_lb_$nu)" && dbus remove ssconf_basic_use_lb_$nu | |
| [ -n "$(dbus get ssconf_basic_lbmode_$nu)" ] && dbus set ssconf_basic_lbmode_"$y"="$(dbus get ssconf_basic_lbmode_$nu)" && dbus remove ssconf_basic_lbmode_$nu | |
| [ -n "$(dbus get ssconf_basic_weight_$nu)" ] && dbus set ssconf_basic_weight_"$y"="$(dbus get ssconf_basic_weight_$nu)" && dbus remove ssconf_basic_weight_$nu | |
| [ -n "$(dbus get ssconf_basic_koolgame_udp_$nu)" ] && dbus set ssconf_basic_koolgame_udp_"$y"="$(dbus get ssconf_basic_koolgame_udp_$nu)" && dbus remove ssconf_basic_koolgame_udp_$nu | |
| [ -n "$(dbus get ssconf_basic_v2ray_use_json_$nu)" ] && dbus set ssconf_basic_v2ray_use_json_"$y"="$(dbus get ssconf_basic_v2ray_use_json_$nu)" && dbus remove ssconf_basic_v2ray_use_json_$nu | |
| [ -n "$(dbus get ssconf_basic_v2ray_uuid_$nu)" ] && dbus set ssconf_basic_v2ray_uuid_"$y"="$(dbus get ssconf_basic_v2ray_uuid_$nu)" && dbus remove ssconf_basic_v2ray_uuid_$nu | |
| [ -n "$(dbus get ssconf_basic_v2ray_alterid_$nu)" ] && dbus set ssconf_basic_v2ray_alterid_"$y"="$(dbus get ssconf_basic_v2ray_alterid_$nu)" && dbus remove ssconf_basic_v2ray_alterid_$nu | |
| [ -n "$(dbus get ssconf_basic_v2ray_security_$nu)" ] && dbus set ssconf_basic_v2ray_security_"$y"="$(dbus get ssconf_basic_v2ray_security_$nu)" && dbus remove ssconf_basic_v2ray_security_$nu | |
| [ -n "$(dbus get ssconf_basic_v2ray_network_$nu)" ] && dbus set ssconf_basic_v2ray_network_"$y"="$(dbus get ssconf_basic_v2ray_network_$nu)" && dbus remove ssconf_basic_v2ray_network_$nu | |
| [ -n "$(dbus get ssconf_basic_v2ray_headtype_tcp_$nu)" ] && dbus set ssconf_basic_v2ray_headtype_tcp_"$y"="$(dbus get ssconf_basic_v2ray_headtype_tcp_$nu)" && dbus remove ssconf_basic_v2ray_headtype_tcp_$nu | |
| [ -n "$(dbus get ssconf_basic_v2ray_headtype_kcp_$nu)" ] && dbus set ssconf_basic_v2ray_headtype_kcp_"$y"="$(dbus get ssconf_basic_v2ray_headtype_kcp_$nu)" && dbus remove ssconf_basic_v2ray_headtype_kcp_$nu | |
| [ -n "$(dbus get ssconf_basic_v2ray_network_path_$nu)" ] && dbus set ssconf_basic_v2ray_network_path_"$y"="$(dbus get ssconf_basic_v2ray_network_path_$nu)" && dbus remove ssconf_basic_v2ray_network_path_$nu | |
| [ -n "$(dbus get ssconf_basic_v2ray_network_host_$nu)" ] && dbus set ssconf_basic_v2ray_network_host_"$y"="$(dbus get ssconf_basic_v2ray_network_host_$nu)" && dbus remove ssconf_basic_v2ray_network_host_$nu | |
| [ -n "$(dbus get ssconf_basic_v2ray_network_security_$nu)" ] && dbus set ssconf_basic_v2ray_network_security_"$y"="$(dbus get ssconf_basic_v2ray_network_security_$nu)" && dbus remove ssconf_basic_v2ray_network_security_$nu | |
| [ -n "$(dbus get ssconf_basic_v2ray_mux_enable_$nu)" ] && dbus set ssconf_basic_v2ray_mux_enable_"$y"="$(dbus get ssconf_basic_v2ray_mux_enable_$nu)" && dbus remove ssconf_basic_v2ray_mux_enable_$nu | |
| [ -n "$(dbus get ssconf_basic_v2ray_mux_concurrency_$nu)" ] && dbus set ssconf_basic_v2ray_mux_concurrency_"$y"="$(dbus get ssconf_basic_v2ray_mux_concurrency_$nu)" && dbus remove ssconf_basic_v2ray_mux_concurrency_$nu | |
| [ -n "$(dbus get ssconf_basic_v2ray_json_$nu)" ] && dbus set ssconf_basic_v2ray_json_"$y"="$(dbus get ssconf_basic_v2ray_json_$nu)" && dbus remove ssconf_basic_v2ray_json_$nu | |
| [ -n "$(dbus get ssconf_basic_type_$nu)" ] && dbus set ssconf_basic_type_"$y"="$(dbus get ssconf_basic_type_$nu)" && dbus remove ssconf_basic_type_$nu | |
| usleep 250000 | |
| # change node nu | |
| if [ "$nu" == "$ssconf_basic_node" ];then | |
| dbus set ssconf_basic_node="$y" | |
| fi | |
| fi | |
| let y+=1 | |
| done | |
| else | |
| echo_date 节点排序正确! | |
| fi | |
| } | |
| open_socks_23456(){ | |
| socksopen_a=`netstat -nlp|grep -w 23456|grep -E "local|v2ray"` | |
| if [ -z "$socksopen_a" ];then | |
| if [ "$ss_basic_type" == "1" ];then | |
| SOCKS_FLAG=1 | |
| echo_date 开启ssr-local,提供socks5代理端口:23456 | |
| rss-local -l 23456 -c $CONFIG_FILE -u -f /var/run/sslocal1.pid >/dev/null 2>&1 | |
| elif [ "$ss_basic_type" == "0" ];then | |
| SOCKS_FLAG=2 | |
| echo_date 开启ss-local,提供socks5代理端口:23456 | |
| if [ "$ss_basic_ss_v2ray_plugin" == "0" ];then | |
| ss-local -l 23456 -c $CONFIG_FILE -u -f /var/run/sslocal1.pid >/dev/null 2>&1 | |
| else | |
| ss-local -l 23456 -c $CONFIG_FILE $ARG_V2RAY_PLUGIN -u -f /var/run/sslocal1.pid >/dev/null 2>&1 | |
| fi | |
| fi | |
| fi | |
| sleep 2 | |
| } | |
| get_type_name() { | |
| case "$1" in | |
| 0) | |
| echo "SS" | |
| ;; | |
| 1) | |
| echo "SSR" | |
| ;; | |
| 2) | |
| echo "koolgame" | |
| ;; | |
| 3) | |
| echo "v2ray" | |
| ;; | |
| esac | |
| } | |
| get_oneline_rule_now(){ | |
| # ss订阅 | |
| ssr_subscribe_link="$1" | |
| LINK_FORMAT=`echo "$ssr_subscribe_link" | grep -E "^http://|^https://"` | |
| [ -z "$LINK_FORMAT" ] && return 4 | |
| echo_date "开始更新在线订阅列表..." | |
| echo_date "开始下载订阅链接到本地临时文件,请稍等..." | |
| rm -rf /tmp/ssr_subscribe_file* >/dev/null 2>&1 | |
| if [ "$ss_basic_online_links_goss" == "1" ];then | |
| open_socks_23456 | |
| socksopen_b=`netstat -nlp|grep -w 23456|grep -E "local|v2ray|trojan"` | |
| if [ -n "$socksopen_b" ];then | |
| echo_date "使用$(get_type_name $ss_basic_type)提供的socks代理网络下载..." | |
| curl --connect-timeout 8 -s -L --socks5-hostname 127.0.0.1:23456 $ssr_subscribe_link > /tmp/ssr_subscribe_file.txt | |
| else | |
| echo_date "没有可用的socks5代理端口,改用常规网络下载..." | |
| curl --connect-timeout 8 -s -L $ssr_subscribe_link > /tmp/ssr_subscribe_file.txt | |
| fi | |
| else | |
| echo_date "使用常规网络下载..." | |
| curl --connect-timeout 8 -s -L $ssr_subscribe_link > /tmp/ssr_subscribe_file.txt | |
| fi | |
| #虽然为0但是还是要检测下是否下载到正确的内容 | |
| if [ "$?" == "0" ];then | |
| #订阅地址有跳转 | |
| blank=`cat /tmp/ssr_subscribe_file.txt|grep -E " |Redirecting|301"` | |
| if [ -n "$blank" ];then | |
| echo_date 订阅链接可能有跳转,尝试更换wget进行下载... | |
| rm /tmp/ssr_subscribe_file.txt | |
| if [ "`echo $ssr_subscribe_link|grep ^https`" ];then | |
| wget --no-check-certificate -qO /tmp/ssr_subscribe_file.txt $ssr_subscribe_link | |
| else | |
| wget -qO /tmp/ssr_subscribe_file.txt $ssr_subscribe_link | |
| fi | |
| fi | |
| #下载为空... | |
| if [ -z "`cat /tmp/ssr_subscribe_file.txt`" ];then | |
| echo_date 下载为空... | |
| return 3 | |
| fi | |
| #产品信息错误 | |
| wrong1=`cat /tmp/ssr_subscribe_file.txt|grep "{"` | |
| wrong2=`cat /tmp/ssr_subscribe_file.txt|grep "<"` | |
| if [ -n "$wrong1" -o -n "$wrong2" ];then | |
| return 2 | |
| fi | |
| else | |
| return 1 | |
| fi | |
| if [ "$?" == "0" ];then | |
| echo_date 下载订阅成功... | |
| echo_date 开始解析节点信息... | |
| decode_url_link `cat /tmp/ssr_subscribe_file.txt` > /tmp/ssr_subscribe_file_temp1.txt | |
| # 检测ss ssr vmess | |
| NODE_FORMAT1=`cat /tmp/ssr_subscribe_file_temp1.txt | grep -E "^ss://"` | |
| NODE_FORMAT2=`cat /tmp/ssr_subscribe_file_temp1.txt | grep -E "^ssr://"` | |
| NODE_FORMAT3=`cat /tmp/ssr_subscribe_file_temp1.txt | grep -E "^vmess://"` | |
| NODE_FORMAT_TROJAN=`cat /tmp/ssr_subscribe_file_temp1.txt | grep -E "^trojan://"` | |
| if [ -n "$NODE_FORMAT2" ];then | |
| # SSR 订阅 | |
| NODE_NU=`cat /tmp/ssr_subscribe_file_temp1.txt | grep -c "ssr://"` | |
| echo_date 检测到ssr节点格式,共计$NODE_NU个节点... | |
| #判断格式 | |
| maxnum=$(decode_url_link `cat /tmp/ssr_subscribe_file.txt` | grep "MAX=" | awk -F"=" '{print $2}' | grep -Eo "[0-9]+") | |
| if [ -n "$maxnum" ]; then | |
| urllinks=$(decode_url_link `cat /tmp/ssr_subscribe_file.txt` | sed '/MAX=/d' | shuf -n $maxnum | sed 's/ssr:\/\///g') | |
| else | |
| urllinks=$(decode_url_link `cat /tmp/ssr_subscribe_file.txt` | sed 's/ssr:\/\///g') | |
| fi | |
| [ -z "$urllinks" ] && continue | |
| for link in $urllinks | |
| do | |
| decode_link=$(decode_url_link $link) | |
| get_remote_config $decode_link 1 | |
| [ "$?" == "0" ] && update_config || echo_date "检测到一个错误节点,已经跳过!" | |
| done | |
| # 储存对应订阅链接的group信息 | |
| if [ -n "$group" ];then | |
| dbus set ss_online_group_$z=$group | |
| echo $group >> /tmp/group_info.txt | |
| else | |
| # 如果最后一个节点是空的,那么使用这种方式去获取group名字 | |
| group=`cat /tmp/all_group_info.txt | sort -u | tail -n1` | |
| [ -n "$group" ] && dbus set ss_online_group_$z=$group | |
| [ -n "$group" ] && echo $group >> /tmp/group_info.txt | |
| fi | |
| # 去除订阅服务器上已经删除的节点 | |
| del_none_exist | |
| # 节点重新排序 | |
| remove_node_gap | |
| USER_ADD=$(($(dbus list ssconf_basic_|grep _name_|wc -l) - $(dbus list ssconf_basic_|grep _group_|wc -l))) || 0 | |
| ONLINE_GET=$(dbus list ssconf_basic_|grep _group_|wc -l) || 0 | |
| echo_date "本次更新订阅来源 【$group】, 新增节点 $addnum 个,修改 $updatenum 个,删除 $delnum 个;" | |
| echo_date "现共有自添加SSR节点:$USER_ADD 个。" | |
| echo_date "现共有订阅SSR节点:$ONLINE_GET 个。" | |
| echo_date "在线订阅列表更新完成!" | |
| elif [ -n "$NODE_FORMAT3" ];then | |
| # v2ray 订阅 | |
| # use domain as group | |
| v2ray_group_tmp=`echo $ssr_subscribe_link|awk -F'[/:]' '{print $4}'` | |
| # 储存对应订阅链接的group信息 | |
| dbus set ss_online_group_$z=$v2ray_group_tmp | |
| echo $v2ray_group_tmp >> /tmp/group_info.txt | |
| # detect format again | |
| if [ -n "$NODE_FORMAT1" ];then | |
| #vmess://里夹杂着ss:// | |
| NODE_NU=`cat /tmp/ssr_subscribe_file_temp1.txt | grep -Ec "vmess://|ss://"` | |
| echo_date 检测到vmess和ss节点格式,共计$NODE_NU个节点... | |
| urllinks=$(decode_url_link `cat /tmp/ssr_subscribe_file.txt` | sed 's/ssr:\/\///g') | |
| else | |
| #纯vmess:// | |
| NODE_NU=`cat /tmp/ssr_subscribe_file_temp1.txt | grep -Ec "vmess://"` | |
| echo_date 检测到vmess节点格式,共计$NODE_NU个节点... | |
| urllinks=$(decode_url_link `cat /tmp/ssr_subscribe_file.txt` | sed 's/vmess:\/\///g') | |
| for link in $urllinks | |
| do | |
| decode_link=$(decode_url_link $link) | |
| decode_link=$(echo $decode_link|jq -c .) | |
| if [ -n "$decode_link" ];then | |
| get_v2ray_remote_config "$decode_link" "$v2ray_group_tmp" | |
| [ "$?" == "0" ] && update_v2ray_config || echo_date "检测到一个错误节点,已经跳过!" | |
| else | |
| echo_date "解析失败!!!" | |
| fi | |
| done | |
| fi | |
| # 去除订阅服务器上已经删除的节点 | |
| del_none_exist | |
| # 节点重新排序 | |
| remove_node_gap | |
| USER_ADD=$(($(dbus list ssconf_basic_|grep _name_|wc -l) - $(dbus list ssconf_basic_|grep _group_|wc -l))) || 0 | |
| #TOTAL_V2=$(dbus list ssconf_basic_|grep _uuid_|wc -l) || 0 | |
| #TOTAL_GET_SSR=$(dbus list ssconf_basic_|grep _rss_protocol_|wc -l) || 0 | |
| ONLINE_GET=$(dbus list ssconf_basic_|grep _group_|wc -l) || 0 | |
| echo_date "本次更新订阅来源 【$v2ray_group】, 新增节点 $addnum 个,修改 $updatenum 个,删除 $delnum 个;" | |
| echo_date "现共有自添加节点:$USER_ADD 个。" | |
| echo_date "现共有订阅 SSR/v2ray/Trojan 节点:$ONLINE_GET 个。" | |
| echo_date "在线订阅列表更新完成!" | |
| elif [ -n "$NODE_FORMAT1" ];then | |
| echo_date 暂时不支持ss节点订阅... | |
| echo_date 退出订阅程序... | |
| elif [ -n "$NODE_FORMAT_TROJAN" ];then | |
| # Trojan 订阅 | |
| # use domain as group | |
| group=`echo $ssr_subscribe_link|awk -F'[/:]' '{print $4}'` | |
| # 储存对应订阅链接的group信息 | |
| dbus set ss_online_group_$z=$group | |
| echo $group >> /tmp/group_info.txt | |
| NODE_NU=`cat /tmp/ssr_subscribe_file_temp1.txt | grep -c "trojan://"` | |
| echo_date "检测到 Trojan 节点格式,共计 $NODE_NU 个节点..." | |
| urllinks=$(decode_url_link `cat /tmp/ssr_subscribe_file.txt` | sed 's/trojan:\/\///g') | |
| [ -z "$urllinks" ] && continue | |
| for link in $urllinks | |
| do | |
| if [ -n "`echo -n "$link" | grep "#"`" ];then | |
| new_sslink=`echo -n "$link" | awk -F'#' '{print $1}' | sed 's/trojan:\/\///g'` | |
| # 因为订阅的 trojan 里面有 \r\n ,所以需要先去除,否则就炸了,只能卸载重装 | |
| remarks=`echo -n "$link" | awk -F'#' '{print $2}' | tr '\r\n' ' '` | |
| else | |
| new_sslink=`echo -n "$link" | sed 's/trojan:\/\///g'` | |
| remarks='AddByLink' | |
| fi | |
| get_trojan_config $new_sslink | |
| [ "$?" == "0" ] && update_trojan_config || echo_date "检测到一个错误节点,已经跳过!" | |
| done | |
| # 去除订阅服务器上已经删除的节点 | |
| del_none_exist | |
| # 节点重新排序 | |
| remove_node_gap | |
| USER_ADD=$(($(dbus list ssconf_basic_|grep _name_|wc -l) - $(dbus list ssconf_basic_|grep _group_|wc -l))) || 0 | |
| ONLINE_GET=$(dbus list ssconf_basic_|grep _group_|wc -l) || 0 | |
| echo_date "本次更新订阅来源 【$group】, 新增节点 $addnum 个,修改 $updatenum 个,删除 $delnum 个;" | |
| echo_date "现共有自添加 SSR/v2ray/Trojan 节点:$USER_ADD 个。" | |
| echo_date "现共有订阅 SSR/v2ray/Trojan 节点:$ONLINE_GET 个。" | |
| echo_date "在线订阅列表更新完成!" | |
| else | |
| return 3 | |
| fi | |
| else | |
| return 1 | |
| fi | |
| } | |
| start_update(){ | |
| prepare | |
| rm -rf /tmp/ssr_subscribe_file.txt >/dev/null 2>&1 | |
| rm -rf /tmp/ssr_subscribe_file_temp1.txt >/dev/null 2>&1 | |
| rm -rf /tmp/all_localservers >/dev/null 2>&1 | |
| rm -rf /tmp/all_onlineservers >/dev/null 2>&1 | |
| rm -rf /tmp/all_group_info.txt >/dev/null 2>&1 | |
| rm -rf /tmp/group_info.txt >/dev/null 2>&1 | |
| usleep 250000 | |
| echo_date 收集本地节点名到文件 | |
| LOCAL_NODES=`dbus list ssconf_basic_|grep _group_|cut -d "_" -f 4|cut -d "=" -f 1|sort -n` | |
| if [ -n "$LOCAL_NODES" ];then | |
| for LOCAL_NODE in $LOCAL_NODES | |
| do | |
| # write: server group nu | |
| echo `dbus get ssconf_basic_server_$LOCAL_NODE|base64_encode` `dbus get ssconf_basic_group_$LOCAL_NODE|base64_encode`| eval echo `sed 's/$/ $LOCAL_NODE/g'` >> /tmp/all_localservers | |
| done | |
| else | |
| touch /tmp/all_localservers | |
| fi | |
| z=0 | |
| online_url_nu=`dbus get ss_online_links|base64_decode|sed 's/$/\n/'|sed '/^$/d'|wc -l` | |
| #echo_date online_url_nu $online_url_nu | |
| until [ "$z" == "$online_url_nu" ] | |
| do | |
| z=$(($z+1)) | |
| #url=`dbus get ss_online_link_$z` | |
| url=`dbus get ss_online_links|base64_decode|awk '{print $1}'|sed -n "$z p"|sed '/^#/d'` | |
| [ -z "$url" ] && continue | |
| echo_date "===================================================================" | |
| echo_date " 服务器订阅程序(Shell by stones & sadog)" | |
| echo_date "===================================================================" | |
| echo_date "从 $url 获取订阅..." | |
| addnum=0 | |
| updatenum=0 | |
| delnum=0 | |
| get_oneline_rule_now "$url" | |
| case $? in | |
| 0) | |
| continue | |
| ;; | |
| 2) | |
| echo_date "无法获取产品信息!请检查你的服务商是否更换了订阅链接!" | |
| rm -rf /tmp/ssr_subscribe_file.txt >/dev/null 2>&1 & | |
| let DEL_SUBSCRIBE+=1 | |
| sleep 2 | |
| echo_date "退出订阅程序..." | |
| ;; | |
| 3) | |
| echo_date "该订阅链接不包含任何节点信息!请检查你的服务商是否更换了订阅链接!" | |
| rm -rf /tmp/ssr_subscribe_file.txt >/dev/null 2>&1 & | |
| let DEL_SUBSCRIBE+=1 | |
| sleep 2 | |
| echo_date "退出订阅程序..." | |
| ;; | |
| 4) | |
| echo_date "订阅地址错误!检测到你输入的订阅地址并不是标准网址格式!" | |
| rm -rf /tmp/ssr_subscribe_file.txt >/dev/null 2>&1 & | |
| let DEL_SUBSCRIBE+=1 | |
| sleep 2 | |
| echo_date "退出订阅程序..." | |
| ;; | |
| 1|*) | |
| echo_date "下载订阅失败...请检查你的网络..." | |
| rm -rf /tmp/ssr_subscribe_file.txt >/dev/null 2>&1 & | |
| let DEL_SUBSCRIBE+=1 | |
| sleep 2 | |
| echo_date "退出订阅程序..." | |
| ;; | |
| esac | |
| done | |
| if [ "$DEL_SUBSCRIBE" == "0" ];then | |
| # 尝试删除去掉订阅链接对应的节点 | |
| local_groups=`dbus list ssconf_basic_group_|cut -d "=" -f2|sort -u` | |
| if [ -f "/tmp/group_info.txt" ];then | |
| for local_group in $local_groups | |
| do | |
| MATCH=`cat /tmp/group_info.txt | grep $local_group` | |
| if [ -z "$MATCH" ];then | |
| echo_date "===================================================================" | |
| echo_date 【$local_group】 节点已经不再订阅,将进行删除... | |
| confs_nu=`dbus list ssconf |grep "$local_group"| cut -d "=" -f 1|cut -d "_" -f 4` | |
| for conf_nu in $confs_nu | |
| do | |
| dbus remove ssconf_basic_group_$conf_nu | |
| dbus remove ssconf_basic_method_$conf_nu | |
| dbus remove ssconf_basic_mode_$conf_nu | |
| dbus remove ssconf_basic_name_$conf_nu | |
| dbus remove ssconf_basic_password_$conf_nu | |
| dbus remove ssconf_basic_port_$conf_nu | |
| dbus remove ssconf_basic_rss_obfs_$conf_nu | |
| dbus remove ssconf_basic_rss_obfs_param_$conf_nu | |
| dbus remove ssconf_basic_rss_protocol_$conf_nu | |
| dbus remove ssconf_basic_rss_protocol_param_$conf_nu | |
| dbus remove ssconf_basic_server_$conf_nu | |
| dbus remove ssconf_basic_server_ip_$conf_nu | |
| dbus remove ssconf_basic_ss_v2ray_plugin_$conf_nu | |
| dbus remove ssconf_basic_ss_v2ray_plugin_opts_$conf_nu | |
| dbus remove ssconf_basic_use_kcp_$conf_nu | |
| dbus remove ssconf_basic_use_lb_$conf_nu | |
| dbus remove ssconf_basic_lbmode_$conf_nu | |
| dbus remove ssconf_basic_weight_$conf_nu | |
| dbus remove ssconf_basic_koolgame_udp_$conf_nu | |
| dbus remove ssconf_basic_v2ray_use_json_$conf_nu | |
| dbus remove ssconf_basic_v2ray_uuid_$conf_nu | |
| dbus remove ssconf_basic_v2ray_alterid_$conf_nu | |
| dbus remove ssconf_basic_v2ray_security_$conf_nu | |
| dbus remove ssconf_basic_v2ray_network_$conf_nu | |
| dbus remove ssconf_basic_v2ray_headtype_tcp_$conf_nu | |
| dbus remove ssconf_basic_v2ray_headtype_kcp_$conf_nu | |
| dbus remove ssconf_basic_v2ray_network_path_$conf_nu | |
| dbus remove ssconf_basic_v2ray_network_host_$conf_nu | |
| dbus remove ssconf_basic_v2ray_network_security_$conf_nu | |
| dbus remove ssconf_basic_v2ray_mux_enable_$conf_nu | |
| dbus remove ssconf_basic_v2ray_mux_concurrency_$conf_nu | |
| dbus remove ssconf_basic_v2ray_json_$conf_nu | |
| dbus remove ssconf_basic_type_$conf_nu | |
| done | |
| # 删除不再订阅节点的group信息 | |
| confs_nu_2=`dbus list ss_online_group_|grep "$local_group"| cut -d "=" -f 1|cut -d "_" -f 4` | |
| if [ -n "$confs_nu_2" ];then | |
| for conf_nu_2 in $confs_nu_2 | |
| do | |
| dbus remove ss_online_group_$conf_nu_2 | |
| done | |
| fi | |
| echo_date 删除完成完成! | |
| need_adjust=1 | |
| fi | |
| done | |
| usleep 250000 | |
| # 再次排序 | |
| if [ "$need_adjust" == "1" ];then | |
| echo_date 因为进行了删除订阅节点操作,需要对节点顺序进行检查! | |
| remove_node_gap | |
| fi | |
| fi | |
| else | |
| echo_date "由于订阅过程有失败,本次不检测需要删除的订阅,以免误伤;下次成功订阅后再进行检测。" | |
| fi | |
| # 结束 | |
| echo_date "-------------------------------------------------------------------" | |
| if [ "$SOCKS_FLAG" == "1" ];then | |
| ssrlocal=`ps | grep -w rss-local | grep -v "grep" | grep -w "23456" | awk '{print $1}'` | |
| if [ -n "$ssrlocal" ];then | |
| echo_date 关闭因订阅临时开启的ssr-local进程:23456端口... | |
| kill $ssrlocal >/dev/null 2>&1 | |
| fi | |
| elif [ "$SOCKS_FLAG" == "2" ];then | |
| sslocal=`ps | grep -w ss-local | grep -v "grep" | grep -w "23456" | awk '{print $1}'` | |
| if [ -n "$sslocal" ];then | |
| echo_date 关闭因订阅临时开启ss-local进程:23456端口... | |
| kill $sslocal >/dev/null 2>&1 | |
| fi | |
| fi | |
| usleep 250000 | |
| echo_date "一点点清理工作..." | |
| rm -rf /tmp/ssr_subscribe_file.txt >/dev/null 2>&1 | |
| rm -rf /tmp/ssr_subscribe_file_temp1.txt >/dev/null 2>&1 | |
| rm -rf /tmp/all_localservers >/dev/null 2>&1 | |
| rm -rf /tmp/all_onlineservers >/dev/null 2>&1 | |
| rm -rf /tmp/all_group_info.txt >/dev/null 2>&1 | |
| rm -rf /tmp/group_info.txt >/dev/null 2>&1 | |
| echo_date "===================================================================" | |
| echo_date "所有订阅任务完成,请等待6秒,或者手动关闭本窗口!" | |
| echo_date "===================================================================" | |
| } | |
| get_ss_config(){ | |
| decode_link=$1 | |
| server=$(echo "$decode_link" |awk -F':' '{print $2}'|awk -F'@' '{print $2}') | |
| server_port=$(echo "$decode_link" |awk -F':' '{print $3}') | |
| encrypt_method=$(echo "$decode_link" |awk -F':' '{print $1}') | |
| password=$(echo "$decode_link" |awk -F':' '{print $2}'|awk -F'@' '{print $1}') | |
| password=`echo $password|base64_encode` | |
| } | |
| get_trojan_config(){ | |
| link=$1 | |
| server=$(echo "$link" |awk -F':' '{print $1}'|awk -F'@' '{print $2}') | |
| server_port=$(echo "$link" |awk -F':' '{print $2}') | |
| password=$(echo "$link" |awk -F':' '{print $1}'|awk -F'@' '{print $1}') | |
| password=`echo $password|base64_encode` | |
| [ -n "$group" ] && group_base64=`echo $group | base64_encode | sed 's/ -//g'` | |
| [ -n "$server" ] && server_base64=`echo $server | base64_encode | sed 's/ -//g'` | |
| #把全部服务器节点写入文件 /usr/share/shadowsocks/serverconfig/all_onlineservers | |
| [ -n "$group" ] && [ -n "$server" ] && echo $server_base64 $group_base64 >> /tmp/all_onlineservers | |
| #echo ------ | |
| #echo group: $group | |
| #echo remarks: $remarks | |
| #echo server: $server | |
| #echo server_port: $server_port | |
| #echo password: $password | |
| #echo ------ | |
| echo "$group" >> /tmp/all_group_info.txt | |
| [ -n "$group" ] && return 0 || return 1 | |
| } | |
| add_trojan_servers(){ | |
| trojanindex=$(($(dbus list ssconf_basic_|grep _name_ | cut -d "=" -f1|cut -d "_" -f4|sort -rn|head -n1)+1)) | |
| echo_date "添加 Trojan 节点:$remarks" | |
| dbus set ssconf_basic_name_$trojanindex=$remarks | |
| dbus set ssconf_basic_mode_$trojanindex=$ssr_subscribe_mode | |
| dbus set ssconf_basic_server_$trojanindex=$server | |
| dbus set ssconf_basic_port_$trojanindex=$server_port | |
| dbus set ssconf_basic_password_$trojanindex=$password | |
| dbus set ssconf_basic_type_$trojanindex="3" | |
| echo_date "Trojan 节点:新增加 【$remarks】 到节点列表第 $trojanindex 位。" | |
| } | |
| update_trojan_config(){ | |
| isadded_server=$(cat /tmp/all_localservers | grep -w $group_base64 | awk '{print $1}' | grep -c $server_base64|head -n1) | |
| if [ "$isadded_server" == "0" ]; then | |
| add_trojan_servers | |
| let addnum+=1 | |
| else | |
| # 如果在本地的订阅节点中已经有该节点(用group和server去判断),检测下配置是否更改,如果更改,则更新配置 | |
| index=$(cat /tmp/all_localservers| grep $group_base64 | grep $server_base64 |awk '{print $3}'|head -n1) | |
| local i=0 | |
| dbus set ssconf_basic_mode_$index="$ssr_subscribe_mode" | |
| local_remarks=$(dbus get ssconf_basic_name_$index) | |
| [ "$local_remarks" != "$remarks" ] && dbus set ssconf_basic_name_$index=$remarks && let i+=1 | |
| local_mode=$(dbus get ssconf_basic_name_$index) | |
| [ "$local_mode" != "$ssr_subscribe_mode" ] && dbus set ssconf_basic_name_$index=$ssr_subscribe_mode && let i+=1 | |
| local_server=$(dbus get ssconf_basic_server_$index) | |
| [ "$local_server" != "$server" ] && dbus set ssconf_basic_server_$index=$server && let i+=1 | |
| local_server_port=$(dbus get ssconf_basic_port_$index) | |
| [ "$local_server_port" != "$server_port" ] && dbus set ssconf_basic_port_$index=$server_port && let i+=1 | |
| local_password=$(dbus get ssconf_basic_password_$index) | |
| [ "$local_password" != "$password" ] && dbus set ssconf_basic_port_$index=$password && let i+=1 | |
| if [ "$i" -gt "0" ];then | |
| echo_date "修改 Trojan 节点:【$remarks】" && let updatenum+=1 | |
| else | |
| echo_date "Trojan 节点:【$remarks】 参数未发生变化,跳过!" | |
| fi | |
| fi | |
| } | |
| add() { | |
| echo_date "===================================================================" | |
| usleep 250000 | |
| echo_date 通过 SS/SSR/v2ray/Trojan 链接添加节点... | |
| rm -rf /tmp/ssr_subscribe_file.txt >/dev/null 2>&1 | |
| rm -rf /tmp/ssr_subscribe_file_temp1.txt >/dev/null 2>&1 | |
| rm -rf /tmp/all_localservers >/dev/null 2>&1 | |
| rm -rf /tmp/all_onlineservers >/dev/null 2>&1 | |
| rm -rf /tmp/all_group_info.txt >/dev/null 2>&1 | |
| rm -rf /tmp/group_info.txt >/dev/null 2>&1 | |
| #echo_date 添加链接为:`dbus get ss_base64_links` | |
| ssrlinks=`dbus get ss_base64_links|sed 's/$/\n/'|sed '/^$/d'` | |
| for ssrlink in $ssrlinks | |
| do | |
| if [ -n "$ssrlink" ];then | |
| if [ -n "`echo -n "$ssrlink" | grep "ssr://"`" ]; then | |
| echo_date 检测到SSR链接...开始尝试解析... | |
| new_ssrlink=`echo -n "$ssrlink" | sed 's/ssr:\/\///g'` | |
| decode_ssrlink=$(decode_url_link $new_ssrlink) | |
| get_remote_config $decode_ssrlink 2 | |
| add_ssr_servers 1 | |
| elif [ -n "`echo -n "$ssrlink" | grep "vmess://"`" ]; then | |
| echo_date 检测到vmess链接...开始尝试解析... | |
| new_v2raylink=`echo -n "$ssrlink" | sed 's/vmess:\/\///g'` | |
| decode_v2raylink=$(decode_url_link $new_v2raylink) | |
| decode_v2raylink=$(echo $decode_v2raylink|jq -c .) | |
| get_v2ray_remote_config $decode_v2raylink | |
| add_v2ray_servers 1 | |
| elif [ -n "`echo -n "$ssrlink" | grep "ss://"`" ]; then | |
| echo_date 检测到SS链接...开始尝试解析... | |
| if [ -n "`echo -n "$ssrlink" | grep "#"`" ];then | |
| new_sslink=`echo -n "$ssrlink" | awk -F'#' '{print $1}' | sed 's/ss:\/\///g'` | |
| remarks=`echo -n "$ssrlink" | awk -F'#' '{print $2}'` | |
| else | |
| new_sslink=`echo -n "$ssrlink" | sed 's/ss:\/\///g'` | |
| remarks='AddByLink' | |
| fi | |
| decode_sslink=$(decode_url_link $new_sslink) | |
| get_ss_config $decode_sslink | |
| add_ss_servers | |
| elif [ -n "`echo -n "$ssrlink" | grep "trojan://"`" ]; then | |
| echo_date 检测到 Trojan 链接...开始尝试解析... | |
| if [ -n "`echo -n "$ssrlink" | grep "#"`" ];then | |
| new_sslink=`echo -n "$ssrlink" | awk -F'#' '{print $1}' | sed 's/trojan:\/\///g'` | |
| remarks=`echo -n "$ssrlink" | awk -F'#' '{print $2}'` | |
| echo "【$remarks】" | |
| else | |
| new_sslink=`echo -n "$ssrlink" | sed 's/trojan:\/\///g'` | |
| remarks='AddByLink' | |
| fi | |
| get_trojan_config $new_sslink | |
| add_trojan_servers | |
| fi | |
| fi | |
| dbus remove ss_base64_links | |
| done | |
| echo_date "===================================================================" | |
| } | |
| remove_all(){ | |
| # 2 清除已有的ss节点配置 | |
| echo_date 删除所有节点信息! | |
| confs=`dbus list ssconf_basic_ | cut -d "=" -f 1` | |
| for conf in $confs | |
| do | |
| echo_date 移除$conf | |
| dbus remove $conf | |
| done | |
| } | |
| remove_online(){ | |
| # 2 清除已有的ss节点配置 | |
| echo_date 删除所有订阅节点信息...自添加的节点不受影响! | |
| remove_nus=`dbus list ssconf_basic_|grep _group_ | cut -d "=" -f 1 | cut -d "_" -f4 | sort -n` | |
| for remove_nu in $remove_nus | |
| do | |
| echo_date 移除第 $remove_nu 节点... | |
| dbus remove ssconf_basic_group_$remove_nu | |
| dbus remove ssconf_basic_method_$remove_nu | |
| dbus remove ssconf_basic_mode_$remove_nu | |
| dbus remove ssconf_basic_name_$remove_nu | |
| dbus remove ssconf_basic_password_$remove_nu | |
| dbus remove ssconf_basic_port_$remove_nu | |
| dbus remove ssconf_basic_rss_obfs_$remove_nu | |
| dbus remove ssconf_basic_rss_obfs_param_$remove_nu | |
| dbus remove ssconf_basic_rss_protocol_$remove_nu | |
| dbus remove ssconf_basic_rss_protocol_param_$remove_nu | |
| dbus remove ssconf_basic_server_$remove_nu | |
| dbus remove ssconf_basic_server_ip_$remove_nu | |
| dbus remove ssconf_basic_ss_v2ray_plugin_$remove_nu | |
| dbus remove ssconf_basic_ss_v2ray_plugin_opts_$remove_nu | |
| dbus remove ssconf_basic_use_kcp_$remove_nu | |
| dbus remove ssconf_basic_use_lb_$remove_nu | |
| dbus remove ssconf_basic_lbmode_$remove_nu | |
| dbus remove ssconf_basic_weight_$remove_nu | |
| dbus remove ssconf_basic_koolgame_udp_$remove_nu | |
| dbus remove ssconf_basic_v2ray_use_json_$remove_nu | |
| dbus remove ssconf_basic_v2ray_uuid_$remove_nu | |
| dbus remove ssconf_basic_v2ray_alterid_$remove_nu | |
| dbus remove ssconf_basic_v2ray_security_$remove_nu | |
| dbus remove ssconf_basic_v2ray_network_$remove_nu | |
| dbus remove ssconf_basic_v2ray_headtype_tcp_$remove_nu | |
| dbus remove ssconf_basic_v2ray_headtype_kcp_$remove_nu | |
| dbus remove ssconf_basic_v2ray_network_path_$remove_nu | |
| dbus remove ssconf_basic_v2ray_network_host_$remove_nu | |
| dbus remove ssconf_basic_v2ray_network_security_$remove_nu | |
| dbus remove ssconf_basic_v2ray_mux_enable_$remove_nu | |
| dbus remove ssconf_basic_v2ray_mux_concurrency_$remove_nu | |
| dbus remove ssconf_basic_v2ray_json_$remove_nu | |
| dbus remove ssconf_basic_type_$remove_nu | |
| done | |
| } | |
| case $ss_online_action in | |
| 0) | |
| # 删除所有节点 | |
| set_lock | |
| detect | |
| remove_all | |
| unset_lock | |
| ;; | |
| 1) | |
| # 删除所有订阅节点 | |
| set_lock | |
| detect | |
| remove_online | |
| unset_lock | |
| ;; | |
| 2) | |
| # 保存订阅设置但是不订阅 | |
| set_lock | |
| detect | |
| local_groups=`dbus list ssconf_basic_|grep group|cut -d "=" -f2|sort -u|wc -l` | |
| online_group=`dbus get ss_online_links|base64_decode|sed 's/$/\n/'|sed '/^$/d'|wc -l` | |
| echo_date "保存订阅节点成功,现共有 $online_group 组订阅来源,当前节点列表内已经订阅了 $local_groups 组..." | |
| sed -i '/ssnodeupdate/d' /var/spool/cron/crontabs/* >/dev/null 2>&1 | |
| if [ "$ss_basic_node_update" = "1" ];then | |
| if [ "$ss_basic_node_update_day" = "7" ];then | |
| cru a ssnodeupdate "0 $ss_basic_node_update_hr * * * /koolshare/scripts/ss_online_update.sh 3" | |
| echo_date "设置自动更新订阅服务在每天 $ss_basic_node_update_hr 点。" | |
| else | |
| cru a ssnodeupdate "0 $ss_basic_node_update_hr * * ss_basic_node_update_day /koolshare/scripts/ss_online_update.sh 3" | |
| echo_date "设置自动更新订阅服务在星期 $ss_basic_node_update_day 的 $ss_basic_node_update_hr 点。" | |
| fi | |
| else | |
| echo_date "关闭自动更新订阅服务!" | |
| sed -i '/ssnodeupdate/d' /var/spool/cron/crontabs/* >/dev/null 2>&1 | |
| fi | |
| unset_lock | |
| ;; | |
| 3) | |
| # 订阅节点 | |
| set_lock | |
| detect | |
| echo_date "开始订阅" | |
| start_update | |
| unset_lock | |
| ;; | |
| 4) | |
| # 通过链接添加ss:// ssr:// vmess:// | |
| set_lock | |
| detect | |
| add | |
| unset_lock | |
| ;; | |
| esac |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment