mirror of
https://github.com/juewuy/ShellCrash.git
synced 2026-03-11 07:51:45 +00:00
Merge branch 'dev' into patch-2
This commit is contained in:
@@ -12,7 +12,7 @@ startover() {
|
||||
if [ "$redir_mod" = "纯净模式" ]; then
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "其他设备可以使用PAC配置连接:\033[4;32mhttp://$host:$db_port/ui/pac\033[0m"
|
||||
echo -e "或者使用HTTP/SOCK5方式连接:IP{\033[36m$host\033[0m}端口{\033[36m$mix_port\033[0m}"
|
||||
echo -e "或者使用HTTP/SOCK5方式连接:IP{\033[36m$host\033[0m}Port{\033[36m$mix_port\033[0m}"
|
||||
fi
|
||||
return 0
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -69,7 +69,7 @@ task_user_del(){ #自定义命令删除
|
||||
echo "-----------------------------------------------"
|
||||
cat "$CRASHDIR"/task/task.user 2>/dev/null | grep -Ev '^#' | awk -F '#' '{print $1" "$3}'
|
||||
echo "-----------------------------------------------"
|
||||
echo 0 返回上级菜单
|
||||
echo "0 返回上级菜单"
|
||||
echo "-----------------------------------------------"
|
||||
read -p "请输入对应数字 > " num
|
||||
if [ -n "$num" ];then
|
||||
@@ -211,102 +211,114 @@ task_type(){ #任务条件选择菜单
|
||||
;;
|
||||
esac
|
||||
}
|
||||
task_manager(){ #任务管理列表
|
||||
echo "-----------------------------------------------"
|
||||
#抽取并生成临时列表
|
||||
croncmd -l > "$TMPDIR"/task_cronlist
|
||||
cat "$TMPDIR"/task_cronlist "$CRASHDIR"/task/running 2>/dev/null | sort -u | grep -oE "task/task.sh .*" | awk -F ' ' '{print $2" "$3}' > "$TMPDIR"/task_list
|
||||
cat "$CRASHDIR"/task/bfstart "$CRASHDIR"/task/afstart "$CRASHDIR"/task/affirewall 2>/dev/null | awk -F ' ' '{print $2" "$3}' >> "$TMPDIR"/task_list
|
||||
cat "$TMPDIR"/task_cronlist 2>/dev/null | sort -u | grep -oE " #.*" | grep -v "守护" | awk -F '#' '{print "0 旧版任务-"$2}' >> "$TMPDIR"/task_list
|
||||
sed -i '/^ *$/d' "$TMPDIR"/task_list
|
||||
rm -rf "$TMPDIR"/task_cronlist
|
||||
#判断为空则返回
|
||||
if [ ! -s "$TMPDIR"/task_list ];then
|
||||
echo -e "\033[31m当前没有可供管理的任务!\033[36m"
|
||||
sleep 1
|
||||
else
|
||||
echo -e "\033[33m已添加的任务:\033[0m"
|
||||
echo "-----------------------------------------------"
|
||||
cat "$TMPDIR"/task_list | awk '{print " " NR " " $2}'
|
||||
echo "-----------------------------------------------"
|
||||
echo -e " a 清空旧版任务"
|
||||
echo -e " d 清空任务列表"
|
||||
echo -e " 0 返回上级菜单"
|
||||
read -p "请输入对应数字 > " num
|
||||
case "$num" in
|
||||
0)
|
||||
;;
|
||||
a)
|
||||
task_del "#"
|
||||
echo -e "\033[31m旧版任务已清空!\033[36m"
|
||||
sleep 1
|
||||
;;
|
||||
d)
|
||||
task_del "task.sh"
|
||||
echo -e "\033[31m全部任务已清空!\033[36m"
|
||||
sleep 1
|
||||
;;
|
||||
[1-9]|[1-9][0-9])
|
||||
|
||||
task_txt=$(sed -n "$num p" "$TMPDIR"/task_list)
|
||||
task_id=$(echo $task_txt | awk '{print $1}')
|
||||
if [ "$task_id" = 0 ];then
|
||||
read -p "旧版任务不支持管理,是否移除?(1/0) > " res
|
||||
[ "$res" = 1 ] && {
|
||||
cronname=$(echo $task_txt | awk -F '-' '{print $2}')
|
||||
croncmd -l > $TMPDIR/conf && sed -i "/$cronname/d" $TMPDIR/conf && croncmd $TMPDIR/conf
|
||||
sed -i "/$cronname/d" $clashdir/tools/cron 2>/dev/null
|
||||
rm -f $TMPDIR/conf
|
||||
}
|
||||
else
|
||||
task_des=$(echo $task_txt | awk '{print $2}')
|
||||
task_name=$(cat "$CRASHDIR"/task/task.list "$CRASHDIR"/task/task.user 2>/dev/null | grep "$task_id" | awk -F '#' '{print $3}')
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "当前任务为:\033[36m $task_des\033[0m"
|
||||
echo -e " 1 \033[33m修改\033[0m当前任务"
|
||||
echo -e " 2 \033[31m删除\033[0m当前任务"
|
||||
echo -e " 3 \033[32m立即执行\033[0m一次"
|
||||
echo -e " 4 查看\033[33m执行记录\033[0m"
|
||||
echo "-----------------------------------------------"
|
||||
echo -e " 0 返回上级菜单"
|
||||
read -p "请选择需要执行的操作 > " num
|
||||
case "$num" in
|
||||
0)
|
||||
;;
|
||||
1)
|
||||
task_type && task_del $task_des
|
||||
;;
|
||||
2)
|
||||
task_del $task_des
|
||||
;;
|
||||
3)
|
||||
task_command=$(cat "$CRASHDIR"/task/task.list "$CRASHDIR"/task/task.user 2>/dev/null | grep "$task_id" | awk -F '#' '{print $2}')
|
||||
eval $task_command && task_res='执行成功!' || task_res='执行失败!'
|
||||
echo -e "\033[33m任务【$task_des】$task_res\033[0m"
|
||||
sleep 1
|
||||
;;
|
||||
4)
|
||||
echo "-----------------------------------------------"
|
||||
if [ -n "$(cat "$TMPDIR"/ShellCrash.log | grep "$task_name")" ];then
|
||||
cat "$TMPDIR"/ShellCrash.log | grep "$task_name"
|
||||
else
|
||||
echo -e "\033[31m未找到相关执行记录!\033[0m"
|
||||
fi
|
||||
sleep 1
|
||||
;;
|
||||
*)
|
||||
errornum
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
task_manager
|
||||
;;
|
||||
*)
|
||||
errornum
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
# 任务管理列表
|
||||
task_manager() {
|
||||
while true; do
|
||||
echo "-----------------------------------------------"
|
||||
# 抽取并生成临时列表
|
||||
croncmd -l >"$TMPDIR"/task_cronlist
|
||||
cat "$TMPDIR"/task_cronlist "$CRASHDIR"/task/running 2>/dev/null | sort -u | grep -oE "task/task.sh .*" | awk -F ' ' '{print $2" "$3}' >"$TMPDIR"/task_list
|
||||
cat "$CRASHDIR"/task/bfstart "$CRASHDIR"/task/afstart "$CRASHDIR"/task/affirewall 2>/dev/null | awk -F ' ' '{print $2" "$3}' >>"$TMPDIR"/task_list
|
||||
cat "$TMPDIR"/task_cronlist 2>/dev/null | sort -u | grep -oE " #.*" | grep -v "守护" | awk -F '#' '{print "0 旧版任务-"$2}' >>"$TMPDIR"/task_list
|
||||
sed -i '/^ *$/d' "$TMPDIR"/task_list
|
||||
rm -rf "$TMPDIR"/task_cronlist
|
||||
# 判断为空则返回
|
||||
if [ ! -s "$TMPDIR"/task_list ]; then
|
||||
echo -e "\033[31m当前没有可供管理的任务!\033[36m"
|
||||
sleep 1
|
||||
break
|
||||
else
|
||||
echo -e "\033[33m已添加的任务:\033[0m"
|
||||
echo "-----------------------------------------------"
|
||||
cat "$TMPDIR"/task_list | awk '{print " " NR " " $2}'
|
||||
echo "-----------------------------------------------"
|
||||
echo -e " a 清空旧版任务"
|
||||
echo -e " d 清空任务列表"
|
||||
echo -e " 0 返回上级菜单"
|
||||
read -p "请输入对应数字 > " num
|
||||
case "$num" in
|
||||
"" | 0)
|
||||
break
|
||||
;;
|
||||
a)
|
||||
task_del "#"
|
||||
echo -e "\033[31m旧版任务已清空!\033[36m"
|
||||
sleep 1
|
||||
break
|
||||
;;
|
||||
d)
|
||||
task_del "task.sh"
|
||||
echo -e "\033[31m全部任务已清空!\033[36m"
|
||||
sleep 1
|
||||
break
|
||||
;;
|
||||
[1-9] | [1-9][0-9])
|
||||
task_txt=$(sed -n "$num p" "$TMPDIR"/task_list)
|
||||
task_id=$(echo $task_txt | awk '{print $1}')
|
||||
if [ "$task_id" = 0 ]; then
|
||||
read -p "旧版任务不支持管理,是否移除?(1/0) > " res
|
||||
[ "$res" = 1 ] && {
|
||||
cronname=$(echo $task_txt | awk -F '-' '{print $2}')
|
||||
croncmd -l >$TMPDIR/conf && sed -i "/$cronname/d" $TMPDIR/conf && croncmd $TMPDIR/conf
|
||||
sed -i "/$cronname/d" $clashdir/tools/cron 2>/dev/null
|
||||
rm -f $TMPDIR/conf
|
||||
}
|
||||
break
|
||||
else
|
||||
task_des=$(echo $task_txt | awk '{print $2}')
|
||||
task_name=$(cat "$CRASHDIR"/task/task.list "$CRASHDIR"/task/task.user 2>/dev/null | grep "$task_id" | awk -F '#' '{print $3}')
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "当前任务为:\033[36m $task_des\033[0m"
|
||||
echo -e " 1 \033[33m修改\033[0m当前任务"
|
||||
echo -e " 2 \033[31m删除\033[0m当前任务"
|
||||
echo -e " 3 \033[32m立即执行\033[0m一次"
|
||||
echo -e " 4 查看\033[33m执行记录\033[0m"
|
||||
echo "-----------------------------------------------"
|
||||
echo -e " 0 返回上级菜单"
|
||||
read -p "请选择需要执行的操作 > " num
|
||||
case "$num" in
|
||||
"" | 0)
|
||||
return 0
|
||||
;;
|
||||
1)
|
||||
task_type && task_del $task_des
|
||||
;;
|
||||
2)
|
||||
task_del $task_des
|
||||
;;
|
||||
3)
|
||||
task_command=$(cat "$CRASHDIR"/task/task.list "$CRASHDIR"/task/task.user 2>/dev/null | grep "$task_id" | awk -F '#' '{print $2}')
|
||||
eval $task_command && task_res='执行成功!' || task_res='执行失败!'
|
||||
echo -e "\033[33m任务【$task_des】$task_res\033[0m"
|
||||
sleep 1
|
||||
;;
|
||||
4)
|
||||
echo "-----------------------------------------------"
|
||||
if [ -n "$(cat "$TMPDIR"/ShellCrash.log | grep "$task_name")" ]; then
|
||||
cat "$TMPDIR"/ShellCrash.log | grep "$task_name"
|
||||
else
|
||||
echo -e "\033[31m未找到相关执行记录!\033[0m"
|
||||
fi
|
||||
sleep 1
|
||||
;;
|
||||
*)
|
||||
errornum
|
||||
sleep 1
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
errornum
|
||||
sleep 1
|
||||
break
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
task_recom(){ #任务推荐
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[32m启用推荐的自动任务配置?这包括:\033[0m"
|
||||
@@ -323,65 +335,64 @@ task_recom(){ #任务推荐
|
||||
echo -e "任务【在每日的3点0分重启服务】\033[32m添加成功!\033[0m"
|
||||
}
|
||||
}
|
||||
task_menu(){ #任务菜单
|
||||
#检测并创建自定义任务文件
|
||||
[ -f "$CRASHDIR"/task/task.user ] || echo '#任务ID(必须>200并顺序排列)#任务命令#任务说明(#号隔开,任务命令和说明中都不允许包含#号)' > "$CRASHDIR"/task/task.user
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[30;47m欢迎使用自动任务功能:\033[0m"
|
||||
echo "-----------------------------------------------"
|
||||
echo -e " 1 添加\033[32m自动任务\033[0m"
|
||||
echo -e " 2 管理\033[33m任务列表\033[0m"
|
||||
echo -e " 3 查看\033[36m任务日志\033[0m"
|
||||
echo -e " 4 配置\033[36m日志推送\033[0m"
|
||||
echo -e " 5 添加\033[33m自定义任务\033[0m"
|
||||
echo -e " 6 删除\033[33m自定义任务\033[0m"
|
||||
echo -e " 7 使用\033[32m推荐设置\033[0m"
|
||||
echo "-----------------------------------------------"
|
||||
echo -e " 0 返回上级菜单"
|
||||
read -p "请输入对应数字 > " num
|
||||
case "$num" in
|
||||
0)
|
||||
;;
|
||||
1)
|
||||
task_add
|
||||
task_menu
|
||||
;;
|
||||
2)
|
||||
task_manager
|
||||
rm -rf "$TMPDIR"/task_list
|
||||
task_menu
|
||||
;;
|
||||
3)
|
||||
if [ -n "$(cat "$TMPDIR"/ShellCrash.log | grep '任务【')" ];then
|
||||
echo "-----------------------------------------------"
|
||||
cat "$TMPDIR"/ShellCrash.log | grep '任务【'
|
||||
else
|
||||
echo -e "\033[31m未找到任务相关执行日志!\033[0m"
|
||||
fi
|
||||
sleep 1
|
||||
task_menu
|
||||
;;
|
||||
4)
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[36m请在日志工具中配置相关推送通道及推送开关\033[0m"
|
||||
. "$CRASHDIR"/menus/8_tools.sh && log_pusher
|
||||
task_menu
|
||||
;;
|
||||
5)
|
||||
task_user_add
|
||||
task_menu
|
||||
;;
|
||||
6)
|
||||
task_user_del
|
||||
task_menu
|
||||
;;
|
||||
7)
|
||||
task_recom
|
||||
task_menu
|
||||
;;
|
||||
*)
|
||||
errornum
|
||||
;;
|
||||
|
||||
esac
|
||||
# 任务菜单
|
||||
task_menu() {
|
||||
while true; do
|
||||
#检测并创建自定义任务文件
|
||||
[ -f "$CRASHDIR"/task/task.user ] || echo '#任务ID(必须>200并顺序排列)#任务命令#任务说明(#号隔开,任务命令和说明中都不允许包含#号)' >"$CRASHDIR"/task/task.user
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[30;47m欢迎使用自动任务功能:\033[0m"
|
||||
echo "-----------------------------------------------"
|
||||
echo -e " 1 添加\033[32m自动任务\033[0m"
|
||||
echo -e " 2 管理\033[33m任务列表\033[0m"
|
||||
echo -e " 3 查看\033[36m任务日志\033[0m"
|
||||
echo -e " 4 配置\033[36m日志推送\033[0m"
|
||||
echo -e " 5 添加\033[33m自定义任务\033[0m"
|
||||
echo -e " 6 删除\033[33m自定义任务\033[0m"
|
||||
echo -e " 7 使用\033[32m推荐设置\033[0m"
|
||||
echo "-----------------------------------------------"
|
||||
echo -e " 0 返回上级菜单"
|
||||
read -p "请输入对应数字 > " num
|
||||
case "$num" in
|
||||
"" | 0)
|
||||
break
|
||||
;;
|
||||
1)
|
||||
task_add
|
||||
;;
|
||||
2)
|
||||
task_manager
|
||||
rm -rf "$TMPDIR"/task_list
|
||||
;;
|
||||
3)
|
||||
if [ -n "$(cat "$TMPDIR"/ShellCrash.log | grep '任务【')" ]; then
|
||||
echo "-----------------------------------------------"
|
||||
cat "$TMPDIR"/ShellCrash.log | grep '任务【'
|
||||
else
|
||||
echo -e "\033[31m未找到任务相关执行日志!\033[0m"
|
||||
fi
|
||||
sleep 1
|
||||
;;
|
||||
4)
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[36m请在日志工具中配置相关推送通道及推送开关\033[0m"
|
||||
. "$CRASHDIR"/menus/8_tools.sh && log_pusher
|
||||
;;
|
||||
5)
|
||||
task_user_add
|
||||
;;
|
||||
6)
|
||||
task_user_del
|
||||
;;
|
||||
7)
|
||||
task_recom
|
||||
;;
|
||||
*)
|
||||
errornum
|
||||
sleep 1
|
||||
break
|
||||
;;
|
||||
esac
|
||||
done
|
||||
}
|
||||
|
||||
@@ -535,176 +535,176 @@ EOF
|
||||
rm -rf "$TMPDIR"/providers
|
||||
fi
|
||||
}
|
||||
setproviders(){ #自定义providers
|
||||
. "$CRASHDIR"/libs/set_cron.sh
|
||||
. "$CRASHDIR"/libs/web_get_bin.sh
|
||||
#获取模版名称
|
||||
if [ -z "$(grep "provider_temp_${coretype}" "$CRASHDIR"/configs/ShellCrash.cfg)" ];then
|
||||
provider_temp_des=$(sed -n "1 p" "$CRASHDIR"/configs/${coretype}_providers.list | awk '{print $1}')
|
||||
else
|
||||
provider_temp_file=$(grep "provider_temp_${coretype}" "$CRASHDIR"/configs/ShellCrash.cfg | awk -F '=' '{print $2}')
|
||||
provider_temp_des=$(grep "$provider_temp_file" "$CRASHDIR"/configs/${coretype}_providers.list | awk '{print $1}')
|
||||
[ -z "$provider_temp_des" ] && provider_temp_des=$provider_temp_file
|
||||
fi
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[33m你可以在这里快捷管理与生成自定义的providers服务商\033[0m"
|
||||
echo -e "\033[33m支持在线及本地的Yaml格式配置导入\033[0m"
|
||||
[ -s "$CRASHDIR"/configs/providers.cfg ] && {
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[36m输入对应数字可管理providers服务商\033[0m"
|
||||
cat "$CRASHDIR"/configs/providers.cfg | awk -F "#" '{print " "NR" "$1" "$2}'
|
||||
}
|
||||
echo -e " d \033[31m清空\033[0mproviders服务商列表"
|
||||
echo -e " e \033[33m清理\033[0mproviders目录文件"
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[36m按照a-b-c的顺序即可完成配置生成\033[0m"
|
||||
echo -e " a \033[36m添加\033[0mproviders服务商/节点"
|
||||
echo -e " b 选择\033[33m规则模版\033[0m \033[32m$provider_temp_des\033[0m"
|
||||
echo -e " c \033[32m生成\033[0m基于providers的配置文件"
|
||||
echo "-----------------------------------------------"
|
||||
echo -e " 0 返回上级菜单"
|
||||
read -p "请输入对应字母或数字 > " num
|
||||
case "$num" in
|
||||
0)
|
||||
;;
|
||||
[1-9]|[1-9][0-9])
|
||||
provider_name=$(sed -n "$num p" "$CRASHDIR"/configs/providers.cfg | awk '{print $1}')
|
||||
provider_url=$(sed -n "$num p" "$CRASHDIR"/configs/providers.cfg | awk '{print $2}')
|
||||
if [ -z "$provider_name" ];then
|
||||
errornum
|
||||
else
|
||||
echo "-----------------------------------------------"
|
||||
echo -e " 1 修改名称:\033[36m$provider_name\033[0m"
|
||||
echo -e " 2 修改链接地址:\033[32m$provider_url\033[0m"
|
||||
echo -e " 3 生成\033[33m仅包含此链接\033[0m的配置文件"
|
||||
echo -e " 4 \033[31m移除此链接\033[0m"
|
||||
echo "-----------------------------------------------"
|
||||
echo -e " 0 返回上级菜单"
|
||||
read -p "请选择需要执行的操作 > " num
|
||||
case "$num" in
|
||||
0)
|
||||
;;
|
||||
1)
|
||||
read -p "请输入名称或者代号(不可重复,不支持纯数字) > " name
|
||||
if [ -n "$name" ] && [ -z "$(echo "$name" | grep -E '^[0-9]+$')" ] && ! grep -q "$name" "$CRASHDIR"/configs/providers.cfg;then
|
||||
sed -i "s|$provider_name $provider_url|$name $provider_url|" "$CRASHDIR"/configs/providers.cfg
|
||||
else
|
||||
echo -e "\033[31m输入错误,请重新输入!\033[0m"
|
||||
fi
|
||||
;;
|
||||
2)
|
||||
read -p "请输入链接地址或本地相对路径 > " link
|
||||
if [ -n "$(echo $link | grep -E '.*\..*|^\./')" ] && [ -z "$(grep "$link" "$CRASHDIR"/configs/providers.cfg)" ];then
|
||||
link=$(echo $link | sed 's/\&/\\\&/g') #特殊字符添加转义
|
||||
sed -i "s|$provider_name $provider_url|$provider_name $link|" "$CRASHDIR"/configs/providers.cfg
|
||||
else
|
||||
echo -e "\033[31m输入错误,请重新输入!\033[0m"
|
||||
fi
|
||||
;;
|
||||
3)
|
||||
gen_${coretype}_providers $provider_name $provider_url
|
||||
;;
|
||||
4)
|
||||
sed -i "/^$provider_name /d" "$CRASHDIR"/configs/providers.cfg
|
||||
;;
|
||||
*)
|
||||
errornum
|
||||
;;
|
||||
esac
|
||||
sleep 1
|
||||
fi
|
||||
setproviders
|
||||
;;
|
||||
a)
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "支持填写在线的\033[32mYClash订阅地址\033[0m或者\033[32m本地Clash配置文件\033[0m"
|
||||
echo -e "本地配置文件请放在\033[32m$CRASHDIR\033[0m目录下,并填写相对路径如【\033[32m./providers/test.yaml\033[0m】"
|
||||
echo "-----------------------------------------------"
|
||||
read -p "请输入链接地址或本地相对路径 > " link
|
||||
link=$(echo $link | sed 's/ //g') #去空格
|
||||
[ -n "$(echo $link | grep -E '.*\..*|^\./')" ] && {
|
||||
read -p "请输入名称或代号(不可重复,不支持纯数字) > " name
|
||||
name=$(echo $name | sed 's/ //g')
|
||||
[ -n "$name" ] && [ -z "$(echo "$name" | grep -E '^[0-9]+$')" ] && ! grep -q "$name" "$CRASHDIR"/configs/providers.cfg && {
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "名称:\033[36m$name\033[0m"
|
||||
echo -e "链接地址/路径:\033[32m$link\033[0m"
|
||||
read -p "确认添加?(1/0) > " res
|
||||
[ "$res" = 1 ] && {
|
||||
echo "$name $link" >> "$CRASHDIR"/configs/providers.cfg
|
||||
echo -e "\033[32mproviders已添加!\033[0m"
|
||||
}
|
||||
}
|
||||
}
|
||||
[ "$?" != 0 ] && echo -e "\033[31m输入错误,操作已取消!\033[0m"
|
||||
sleep 1
|
||||
setproviders
|
||||
;;
|
||||
c)
|
||||
echo "-----------------------------------------------"
|
||||
if [ -s "$CRASHDIR"/configs/providers.cfg ];then
|
||||
echo -e "\033[33msingboxr与mihomo内核的providers配置文件不互通!\033[0m"
|
||||
echo "-----------------------------------------------"
|
||||
read -p "确认生成${coretype}配置文件?(1/0) > " res
|
||||
[ "$res" = "1" ] && {
|
||||
gen_${coretype}_providers
|
||||
}
|
||||
else
|
||||
echo -e "\033[31m你还未添加链接或本地配置文件,请先添加!\033[0m"
|
||||
sleep 1
|
||||
fi
|
||||
setproviders
|
||||
;;
|
||||
b)
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "当前规则模版为:\033[32m$provider_temp_des\033[0m"
|
||||
echo -e "\033[33m请选择在线模版:\033[0m"
|
||||
echo "-----------------------------------------------"
|
||||
cat "$CRASHDIR"/configs/${coretype}_providers.list | awk '{print " "NR" "$1}'
|
||||
echo "-----------------------------------------------"
|
||||
echo -e " a 使用\033[36m本地模版\033[0m"
|
||||
echo "-----------------------------------------------"
|
||||
read -p "请输入对应字母或数字 > " num
|
||||
case "$num" in
|
||||
0)
|
||||
;;
|
||||
a)
|
||||
read -p "请输入模版的路径(绝对路径) > " dir
|
||||
if [ -s $dir ];then
|
||||
provider_temp_file=$dir
|
||||
setconfig provider_temp_${coretype} $provider_temp_file
|
||||
echo -e "\033[32m设置成功!\033[0m"
|
||||
else
|
||||
echo -e "\033[31m输入错误,找不到对应模版文件!\033[0m"
|
||||
fi
|
||||
sleep 1
|
||||
;;
|
||||
*)
|
||||
provider_temp_file=$(sed -n "$num p" "$CRASHDIR"/configs/${coretype}_providers.list 2>/dev/null | awk '{print $2}')
|
||||
if [ -z "$provider_temp_file" ];then
|
||||
errornum
|
||||
else
|
||||
setconfig provider_temp_${coretype} $provider_temp_file
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
setproviders
|
||||
;;
|
||||
d)
|
||||
read -p "确认清空全部链接?(1/0) > " res
|
||||
[ "$res" = "1" ] && rm -rf "$CRASHDIR"/configs/providers.cfg
|
||||
setproviders
|
||||
;;
|
||||
e)
|
||||
echo -e "\033[33m将清空 $CRASHDIR/providers 目录下所有内容\033[0m"
|
||||
read -p "是否继续?(1/0) > " res
|
||||
[ "$res" = "1" ] && rm -rf "$CRASHDIR"/providers
|
||||
setproviders
|
||||
;;
|
||||
*)
|
||||
errornum
|
||||
;;
|
||||
esac
|
||||
|
||||
# 自定义providers
|
||||
setproviders() {
|
||||
. "$CRASHDIR"/libs/set_cron.sh
|
||||
. "$CRASHDIR"/libs/web_get_bin.sh
|
||||
while true; do
|
||||
# 获取模版名称
|
||||
if [ -z "$(grep "provider_temp_${coretype}" "$CRASHDIR"/configs/ShellCrash.cfg)" ]; then
|
||||
provider_temp_des=$(sed -n "1 p" "$CRASHDIR"/configs/${coretype}_providers.list | awk '{print $1}')
|
||||
else
|
||||
provider_temp_file=$(grep "provider_temp_${coretype}" "$CRASHDIR"/configs/ShellCrash.cfg | awk -F '=' '{print $2}')
|
||||
provider_temp_des=$(grep "$provider_temp_file" "$CRASHDIR"/configs/${coretype}_providers.list | awk '{print $1}')
|
||||
[ -z "$provider_temp_des" ] && provider_temp_des=$provider_temp_file
|
||||
fi
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[33m你可以在这里快捷管理与生成自定义的providers服务商\033[0m"
|
||||
echo -e "\033[33m支持在线及本地的Yaml格式配置导入\033[0m"
|
||||
[ -s "$CRASHDIR"/configs/providers.cfg ] && {
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[36m输入对应数字可管理providers服务商\033[0m"
|
||||
cat "$CRASHDIR"/configs/providers.cfg | awk -F "#" '{print " "NR" "$1" "$2}'
|
||||
}
|
||||
echo -e " d \033[31m清空\033[0mproviders服务商列表"
|
||||
echo -e " e \033[33m清理\033[0mproviders目录文件"
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[36m按照a-b-c的顺序即可完成配置生成\033[0m"
|
||||
echo -e " a \033[36m添加\033[0mproviders服务商/节点"
|
||||
echo -e " b 选择\033[33m规则模版\033[0m \033[32m$provider_temp_des\033[0m"
|
||||
echo -e " c \033[32m生成\033[0m基于providers的配置文件"
|
||||
echo "-----------------------------------------------"
|
||||
echo -e " 0 返回上级菜单"
|
||||
read -p "请输入对应字母或数字 > " num
|
||||
case "$num" in
|
||||
"" | 0)
|
||||
break
|
||||
;;
|
||||
[1-9] | [1-9][0-9])
|
||||
provider_name=$(sed -n "$num p" "$CRASHDIR"/configs/providers.cfg | awk '{print $1}')
|
||||
provider_url=$(sed -n "$num p" "$CRASHDIR"/configs/providers.cfg | awk '{print $2}')
|
||||
if [ -z "$provider_name" ]; then
|
||||
errornum
|
||||
else
|
||||
echo "-----------------------------------------------"
|
||||
echo -e " 1 修改名称:\033[36m$provider_name\033[0m"
|
||||
echo -e " 2 修改链接地址:\033[32m$provider_url\033[0m"
|
||||
echo -e " 3 生成\033[33m仅包含此链接\033[0m的配置文件"
|
||||
echo -e " 4 \033[31m移除此链接\033[0m"
|
||||
echo "-----------------------------------------------"
|
||||
echo -e " 0 返回上级菜单"
|
||||
read -p "请选择需要执行的操作 > " num
|
||||
case "$num" in
|
||||
"" | 0) ;;
|
||||
1)
|
||||
read -p "请输入名称或者代号(不可重复,不支持纯数字) > " name
|
||||
if [ -n "$name" ] && [ -z "$(echo "$name" | grep -E '^[0-9]+$')" ] && ! grep -q "$name" "$CRASHDIR"/configs/providers.cfg; then
|
||||
sed -i "s|$provider_name $provider_url|$name $provider_url|" "$CRASHDIR"/configs/providers.cfg
|
||||
else
|
||||
echo -e "\033[31m输入错误,请重新输入!\033[0m"
|
||||
fi
|
||||
;;
|
||||
2)
|
||||
read -p "请输入链接地址或本地相对路径 > " link
|
||||
if [ -n "$(echo $link | grep -E '.*\..*|^\./')" ] && [ -z "$(grep "$link" "$CRASHDIR"/configs/providers.cfg)" ]; then
|
||||
link=$(echo $link | sed 's/\&/\\\&/g') #特殊字符添加转义
|
||||
sed -i "s|$provider_name $provider_url|$provider_name $link|" "$CRASHDIR"/configs/providers.cfg
|
||||
else
|
||||
echo -e "\033[31m输入错误,请重新输入!\033[0m"
|
||||
fi
|
||||
;;
|
||||
3)
|
||||
gen_${coretype}_providers $provider_name $provider_url
|
||||
;;
|
||||
4)
|
||||
sed -i "/^$provider_name /d" "$CRASHDIR"/configs/providers.cfg
|
||||
;;
|
||||
*)
|
||||
errornum
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
sleep 1
|
||||
;;
|
||||
a)
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "支持填写在线的\033[32mYClash订阅地址\033[0m或者\033[32m本地Clash配置文件\033[0m"
|
||||
echo -e "本地配置文件请放在\033[32m$CRASHDIR\033[0m目录下,并填写相对路径如【\033[32m./providers/test.yaml\033[0m】"
|
||||
echo "-----------------------------------------------"
|
||||
read -p "请输入链接地址或本地相对路径 > " link
|
||||
link=$(echo $link | sed 's/ //g') #去空格
|
||||
[ -n "$(echo $link | grep -E '.*\..*|^\./')" ] && {
|
||||
read -p "请输入名称或代号(不可重复,不支持纯数字) > " name
|
||||
name=$(echo $name | sed 's/ //g')
|
||||
[ -n "$name" ] && [ -z "$(echo "$name" | grep -E '^[0-9]+$')" ] && ! grep -q "$name" "$CRASHDIR"/configs/providers.cfg && {
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "名称:\033[36m$name\033[0m"
|
||||
echo -e "链接地址/路径:\033[32m$link\033[0m"
|
||||
read -p "确认添加?(1/0) > " res
|
||||
[ "$res" = 1 ] && {
|
||||
echo "$name $link" >>"$CRASHDIR"/configs/providers.cfg
|
||||
echo -e "\033[32mproviders已添加!\033[0m"
|
||||
}
|
||||
}
|
||||
}
|
||||
[ "$?" != 0 ] && echo -e "\033[31m输入错误,操作已取消!\033[0m"
|
||||
sleep 1
|
||||
;;
|
||||
c)
|
||||
echo "-----------------------------------------------"
|
||||
if [ -s "$CRASHDIR"/configs/providers.cfg ]; then
|
||||
echo -e "\033[33msingboxr与mihomo内核的providers配置文件不互通!\033[0m"
|
||||
echo "-----------------------------------------------"
|
||||
read -p "确认生成${coretype}配置文件?(1/0) > " res
|
||||
[ "$res" = "1" ] && {
|
||||
gen_${coretype}_providers
|
||||
}
|
||||
else
|
||||
echo -e "\033[31m你还未添加链接或本地配置文件,请先添加!\033[0m"
|
||||
sleep 1
|
||||
fi
|
||||
;;
|
||||
b)
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "当前规则模版为:\033[32m$provider_temp_des\033[0m"
|
||||
echo -e "\033[33m请选择在线模版:\033[0m"
|
||||
echo "-----------------------------------------------"
|
||||
cat "$CRASHDIR"/configs/${coretype}_providers.list | awk '{print " "NR" "$1}'
|
||||
echo "-----------------------------------------------"
|
||||
echo -e " a 使用\033[36m本地模版\033[0m"
|
||||
echo "-----------------------------------------------"
|
||||
read -p "请输入对应字母或数字 > " num
|
||||
case "$num" in
|
||||
"" | 0) ;;
|
||||
a)
|
||||
read -p "请输入模版的路径(绝对路径) > " dir
|
||||
if [ -s $dir ]; then
|
||||
provider_temp_file=$dir
|
||||
setconfig provider_temp_${coretype} $provider_temp_file
|
||||
echo -e "\033[32m设置成功!\033[0m"
|
||||
else
|
||||
echo -e "\033[31m输入错误,找不到对应模版文件!\033[0m"
|
||||
fi
|
||||
sleep 1
|
||||
;;
|
||||
*)
|
||||
provider_temp_file=$(sed -n "$num p" "$CRASHDIR"/configs/${coretype}_providers.list 2>/dev/null | awk '{print $2}')
|
||||
if [ -z "$provider_temp_file" ]; then
|
||||
errornum
|
||||
sleep 1
|
||||
else
|
||||
setconfig provider_temp_${coretype} $provider_temp_file
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
d)
|
||||
read -p "确认清空全部链接?(1/0) > " res
|
||||
[ "$res" = "1" ] && rm -rf "$CRASHDIR"/configs/providers.cfg
|
||||
;;
|
||||
e)
|
||||
echo -e "\033[33m将清空 $CRASHDIR/providers 目录下所有内容\033[0m"
|
||||
read -p "是否继续?(1/0) > " res
|
||||
[ "$res" = "1" ] && rm -rf "$CRASHDIR"/providers
|
||||
;;
|
||||
*)
|
||||
errornum
|
||||
sleep 1
|
||||
break
|
||||
;;
|
||||
esac
|
||||
done
|
||||
}
|
||||
|
||||
set_clash_adv(){ #自定义clash高级规则
|
||||
@@ -746,77 +746,78 @@ set_singbox_adv(){ #自定义singbox配置文件
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "使用前请务必参考配置教程:\033[32;4m https://juewuy.github.io/nWTjEpkSK \033[0m"
|
||||
}
|
||||
override(){ #配置文件覆写
|
||||
[ -z "$rule_link" ] && rule_link=1
|
||||
[ -z "$server_link" ] && server_link=1
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[30;47m 欢迎使用配置文件覆写功能!\033[0m"
|
||||
echo "-----------------------------------------------"
|
||||
echo -e " 1 自定义\033[32m端口及秘钥\033[0m"
|
||||
echo -e " 2 管理\033[36m自定义规则\033[0m"
|
||||
echo "$crashcore" | grep -q 'singbox' || {
|
||||
echo -e " 3 管理\033[33m自定义节点\033[0m"
|
||||
echo -e " 4 管理\033[36m自定义策略组\033[0m"
|
||||
}
|
||||
echo -e " 5 \033[32m自定义\033[0m高级功能"
|
||||
[ "$disoverride" != 1 ] && echo -e " 9 \033[33m禁用\033[0m配置文件覆写"
|
||||
echo "-----------------------------------------------"
|
||||
[ "$inuserguide" = 1 ] || echo -e " 0 返回上级菜单"
|
||||
read -p "请输入对应数字 > " num
|
||||
case "$num" in
|
||||
0)
|
||||
;;
|
||||
1)
|
||||
if [ -n "$(pidof CrashCore)" ];then
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[33m检测到服务正在运行,需要先停止服务!\033[0m"
|
||||
read -p "是否停止服务?(1/0) > " res
|
||||
if [ "$res" = "1" ];then
|
||||
"$CRASHDIR"/start.sh stop
|
||||
setport
|
||||
fi
|
||||
else
|
||||
setport
|
||||
fi
|
||||
override
|
||||
;;
|
||||
2)
|
||||
setrules
|
||||
override
|
||||
;;
|
||||
3)
|
||||
setproxies
|
||||
override
|
||||
;;
|
||||
4)
|
||||
setgroups
|
||||
override
|
||||
;;
|
||||
5)
|
||||
echo "$crashcore" | grep -q 'singbox' && set_singbox_adv || set_clash_adv
|
||||
sleep 3
|
||||
override
|
||||
;;
|
||||
9)
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[33m此功能可能会导致严重问题!启用后脚本中大部分功能都将禁用!!!\033[0m"
|
||||
echo -e "如果你不是非常了解$crashcore的运行机制,切勿开启!\033[0m"
|
||||
echo -e "\033[33m继续后如出现任何问题,请务必自行解决,一切提问恕不受理!\033[0m"
|
||||
echo "-----------------------------------------------"
|
||||
sleep 2
|
||||
read -p "我确认遇到问题可以自行解决[1/0] > " res
|
||||
[ "$res" = '1' ] && {
|
||||
disoverride=1
|
||||
setconfig disoverride $disoverride
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[32m设置成功!\033[0m"
|
||||
}
|
||||
override
|
||||
;;
|
||||
*)
|
||||
errornum
|
||||
;;
|
||||
esac
|
||||
|
||||
# 配置文件覆写
|
||||
override() {
|
||||
while true; do
|
||||
[ -z "$rule_link" ] && rule_link=1
|
||||
[ -z "$server_link" ] && server_link=1
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[30;47m 欢迎使用配置文件覆写功能!\033[0m"
|
||||
echo "-----------------------------------------------"
|
||||
echo -e " 1 自定义\033[32m端口及秘钥\033[0m"
|
||||
echo -e " 2 管理\033[36m自定义规则\033[0m"
|
||||
echo "$crashcore" | grep -q 'singbox' || {
|
||||
echo -e " 3 管理\033[33m自定义节点\033[0m"
|
||||
echo -e " 4 管理\033[36m自定义策略组\033[0m"
|
||||
}
|
||||
echo -e " 5 \033[32m自定义\033[0m高级功能"
|
||||
[ "$disoverride" != 1 ] && echo -e " 9 \033[33m禁用\033[0m配置文件覆写"
|
||||
echo "-----------------------------------------------"
|
||||
[ "$inuserguide" = 1 ] || echo -e " 0 返回上级菜单"
|
||||
read -p "请输入对应数字 > " num
|
||||
case "$num" in
|
||||
"" | 0)
|
||||
break
|
||||
;;
|
||||
1)
|
||||
if [ -n "$(pidof CrashCore)" ]; then
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[33m检测到服务正在运行,需要先停止服务!\033[0m"
|
||||
read -p "是否停止服务?(1/0) > " res
|
||||
if [ "$res" = "1" ]; then
|
||||
"$CRASHDIR"/start.sh stop
|
||||
setport
|
||||
fi
|
||||
else
|
||||
setport
|
||||
fi
|
||||
;;
|
||||
2)
|
||||
setrules
|
||||
;;
|
||||
3)
|
||||
setproxies
|
||||
;;
|
||||
4)
|
||||
setgroups
|
||||
;;
|
||||
5)
|
||||
echo "$crashcore" | grep -q 'singbox' && set_singbox_adv || set_clash_adv
|
||||
sleep 3
|
||||
;;
|
||||
9)
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[33m此功能可能会导致严重问题!启用后脚本中大部分功能都将禁用!!!\033[0m"
|
||||
echo -e "如果你不是非常了解$crashcore的运行机制,切勿开启!\033[0m"
|
||||
echo -e "\033[33m继续后如出现任何问题,请务必自行解决,一切提问恕不受理!\033[0m"
|
||||
echo "-----------------------------------------------"
|
||||
sleep 2
|
||||
read -p "我确认遇到问题可以自行解决[1/0] > " res
|
||||
[ "$res" = '1' ] && {
|
||||
disoverride=1
|
||||
setconfig disoverride $disoverride
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[32m设置成功!\033[0m"
|
||||
}
|
||||
;;
|
||||
*)
|
||||
errornum
|
||||
sleep 1
|
||||
break
|
||||
;;
|
||||
esac
|
||||
done
|
||||
}
|
||||
|
||||
gen_link_config(){ #选择在线规则
|
||||
@@ -987,205 +988,206 @@ gen_core_config_link(){ #在线生成工具
|
||||
fi
|
||||
done
|
||||
}
|
||||
set_core_config_link(){ #直接导入配置
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[32m仅限导入完整的配置文件链接!!!\033[0m"
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "注意:\033[31m此功能不兼容“跳过证书验证”功能,部分老旧\n设备可能出现x509报错导致节点不通\033[0m"
|
||||
echo -e "你也可以搭配在线订阅转换网站或者自建SubStore使用"
|
||||
echo "$crashcore" | grep -q 'singbox' &&echo -e "singbox内核建议使用\033[32;4mhttps://subv.jwsc.eu.org/\033[0m转换"
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[33m0 返回上级菜单\033[0m"
|
||||
echo "-----------------------------------------------"
|
||||
read -p "请输入完整链接 > " link
|
||||
test=$(echo $link | grep -iE "tp.*://" )
|
||||
link=`echo ${link/\ \(*\)/''}` #删除恶心的超链接内容
|
||||
link=`echo ${link//\&/\\\&}` #处理分隔符
|
||||
if [ -n "$link" -a -n "$test" ];then
|
||||
echo "-----------------------------------------------"
|
||||
echo -e 请检查输入的链接是否正确:
|
||||
echo -e "\033[4;32m$link\033[0m"
|
||||
read -p "确认导入配置文件?原配置文件将被备份![1/0] > " res
|
||||
if [ "$res" = '1' ]; then
|
||||
#将用户链接写入配置
|
||||
Url=''
|
||||
Https="$link"
|
||||
setconfig Https "'$Https'"
|
||||
setconfig Url
|
||||
#获取在线yaml文件
|
||||
jump_core_config
|
||||
else
|
||||
set_core_config_link
|
||||
fi
|
||||
elif [ "$link" = 0 ];then
|
||||
i=
|
||||
else
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[31m请输入正确的配置文件链接地址!!!\033[0m"
|
||||
echo -e "\033[33m仅支持http、https、ftp以及ftps链接!\033[0m"
|
||||
sleep 1
|
||||
set_core_config_link
|
||||
fi
|
||||
|
||||
# 直接导入配置
|
||||
set_core_config_link() {
|
||||
while true; do
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[32m仅限导入完整的配置文件链接!!!\033[0m"
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "注意:\033[31m此功能不兼容“跳过证书验证”功能,部分老旧\n设备可能出现x509报错导致节点不通\033[0m"
|
||||
echo -e "你也可以搭配在线订阅转换网站或者自建SubStore使用"
|
||||
echo "$crashcore" | grep -q 'singbox' && echo -e "singbox内核建议使用\033[32;4mhttps://subv.jwsc.eu.org/\033[0m转换"
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[33m0 返回上级菜单\033[0m"
|
||||
echo "-----------------------------------------------"
|
||||
read -p "请输入完整链接 > " link
|
||||
test=$(echo $link | grep -iE "tp.*://")
|
||||
link=$(echo ${link/\ \(*\)/''}) # 删除恶心的超链接内容
|
||||
link=$(echo ${link//\&/\\&}) # 处理分隔符
|
||||
if [ -n "$link" -a -n "$test" ]; then
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "请检查输入的链接是否正确:"
|
||||
echo -e "\033[4;32m$link\033[0m"
|
||||
read -p "确认导入配置文件?原配置文件将被备份![1/0] > " res
|
||||
if [ "$res" = '1' ]; then
|
||||
# 将用户链接写入配置
|
||||
Url=''
|
||||
Https="$link"
|
||||
setconfig Https "'$Https'"
|
||||
setconfig Url
|
||||
# 获取在线yaml文件
|
||||
jump_core_config
|
||||
break
|
||||
fi
|
||||
elif [ "$link" = 0 ]; then
|
||||
i=
|
||||
break
|
||||
else
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[31m请输入正确的配置文件链接地址!!!\033[0m"
|
||||
echo -e "\033[33m仅支持http、https、ftp以及ftps链接!\033[0m"
|
||||
sleep 1
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
#配置文件主界面
|
||||
set_core_config(){
|
||||
[ -z "$rule_link" ] && rule_link=1
|
||||
[ -z "$server_link" ] && server_link=1
|
||||
echo "$crashcore" | grep -q 'singbox' && config_path="$JSONSDIR"/config.json || config_path="$YAMLSDIR"/config.yaml
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[30;47m ShellCrash配置文件管理\033[0m"
|
||||
echo "-----------------------------------------------"
|
||||
echo -e " 1 在线\033[32m生成配置文件\033[0m(基于Subconverter订阅转换)"
|
||||
if [ -f "$CRASHDIR"/v2b_api.sh ];then
|
||||
echo -e " 2 登录\033[33m获取订阅(推荐!)\033[0m"
|
||||
else
|
||||
echo -e " 2 在线\033[33m获取配置文件\033[0m(基于订阅提供者)"
|
||||
fi
|
||||
echo -e " 3 本地\033[32m生成配置文件\033[0m(基于内核providers,推荐!)"
|
||||
echo -e " 4 本地\033[33m上传完整配置文件\033[0m"
|
||||
echo -e " 5 设置\033[36m自动更新\033[0m"
|
||||
echo -e " 6 \033[32m自定义\033[0m配置文件"
|
||||
echo -e " 7 \033[33m更新\033[0m配置文件"
|
||||
echo -e " 8 \033[36m还原\033[0m配置文件"
|
||||
echo -e " 9 自定义浏览器UA \033[32m$user_agent\033[0m"
|
||||
echo "-----------------------------------------------"
|
||||
[ "$inuserguide" = 1 ] || echo -e " 0 返回上级菜单"
|
||||
read -p "请输入对应数字 > " num
|
||||
case "$num" in
|
||||
0)
|
||||
;;
|
||||
1)
|
||||
if [ -n "$Url" ];then
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[33m检测到已记录的链接内容:\033[0m"
|
||||
echo -e "\033[4;32m$Url\033[0m"
|
||||
echo "-----------------------------------------------"
|
||||
read -p "清空链接/追加导入?[1/0] > " res
|
||||
if [ "$res" = '1' ]; then
|
||||
Url_link=""
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[31m链接已清空!\033[0m"
|
||||
else
|
||||
Url_link=$Url
|
||||
fi
|
||||
fi
|
||||
gen_core_config_link
|
||||
set_core_config
|
||||
;;
|
||||
2)
|
||||
if [ -f "$CRASHDIR"/v2b_api.sh ];then
|
||||
. "$CRASHDIR"/v2b_api.sh
|
||||
set_core_config
|
||||
else
|
||||
set_core_config_link
|
||||
fi
|
||||
set_core_config
|
||||
;;
|
||||
3)
|
||||
if [ "$crashcore" = meta -o "$crashcore" = clashpre ];then
|
||||
coretype=clash
|
||||
setproviders
|
||||
elif [ "$crashcore" = singboxr ];then
|
||||
coretype=singbox
|
||||
setproviders
|
||||
else
|
||||
echo -e "\033[33msingbox官方内核及Clash基础内核不支持此功能,请先更换内核!\033[0m"
|
||||
sleep 1
|
||||
checkupdate && setcore
|
||||
fi
|
||||
set_core_config
|
||||
;;
|
||||
4)
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[33m请将本地配置文件上传到/tmp目录并重命名为config.yaml或者config.json\033[0m"
|
||||
echo -e "\033[32m之后重新运行本脚本即可自动弹出导入提示!\033[0m"
|
||||
exit
|
||||
;;
|
||||
5)
|
||||
. "$CRASHDIR"/menus/5_task.sh && task_menu
|
||||
set_core_config
|
||||
;;
|
||||
6)
|
||||
checkcfg=$(cat $CFG_PATH)
|
||||
override
|
||||
if [ -n "$PID" ];then
|
||||
checkcfg_new=$(cat $CFG_PATH)
|
||||
[ "$checkcfg" != "$checkcfg_new" ] && checkrestart
|
||||
fi
|
||||
set_core_config
|
||||
;;
|
||||
7)
|
||||
if [ -z "$Url" -a -z "$Https" ];then
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[31m没有找到你的配置文件/订阅链接!请先输入链接!\033[0m"
|
||||
sleep 1
|
||||
set_core_config
|
||||
else
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[33m当前系统记录的链接为:\033[0m"
|
||||
echo -e "\033[4;32m$Url$Https\033[0m"
|
||||
echo "-----------------------------------------------"
|
||||
read -p "确认更新配置文件?[1/0] > " res
|
||||
if [ "$res" = '1' ]; then
|
||||
jump_core_config
|
||||
else
|
||||
set_core_config
|
||||
fi
|
||||
fi
|
||||
;;
|
||||
8)
|
||||
if [ ! -f ${config_path}.bak ];then
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[31m没有找到配置文件的备份!\033[0m"
|
||||
set_core_config
|
||||
else
|
||||
echo "-----------------------------------------------"
|
||||
echo -e 备份文件共有"\033[32m`wc -l < ${config_path}.bak`\033[0m"行内容,当前文件共有"\033[32m`wc -l < ${config_path}`\033[0m"行内容
|
||||
read -p "确认还原配置文件?此操作不可逆![1/0] > " res
|
||||
if [ "$res" = '1' ]; then
|
||||
mv ${config_path}.bak ${config_path}
|
||||
echo "----------------------------------------------"
|
||||
echo -e "\033[32m配置文件已还原!请手动重启服务!\033[0m"
|
||||
sleep 1
|
||||
else
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[31m操作已取消!返回上级菜单!\033[0m"
|
||||
set_core_config
|
||||
fi
|
||||
fi
|
||||
;;
|
||||
9)
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[36m如果6-1或者6-2无法正确获取配置文件时可以尝试使用\033[0m"
|
||||
echo -e " 1 使用自动UA"
|
||||
echo -e " 2 不使用UA"
|
||||
echo -e " 3 使用自定义UA:\033[32m$user_agent\033[0m"
|
||||
echo "-----------------------------------------------"
|
||||
read -p "请输入对应数字 > " num
|
||||
case "$num" in
|
||||
0)
|
||||
user_agent=''
|
||||
;;
|
||||
1)
|
||||
user_agent='auto'
|
||||
;;
|
||||
2)
|
||||
user_agent='none'
|
||||
;;
|
||||
3)
|
||||
read -p "请输入自定义UA(不要包含空格和特殊符号!) > " text
|
||||
[ -n "$text" ] && user_agent="$text"
|
||||
;;
|
||||
*)
|
||||
errornum
|
||||
;;
|
||||
esac
|
||||
[ "$num" -le 3 ] && setconfig user_agent "$user_agent"
|
||||
set_core_config
|
||||
;;
|
||||
*)
|
||||
errornum
|
||||
;;
|
||||
esac
|
||||
# 配置文件主界面
|
||||
set_core_config() {
|
||||
while true; do
|
||||
[ -z "$rule_link" ] && rule_link=1
|
||||
[ -z "$server_link" ] && server_link=1
|
||||
echo "$crashcore" | grep -q 'singbox' && config_path="$JSONSDIR"/config.json || config_path="$YAMLSDIR"/config.yaml
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[30;47m ShellCrash配置文件管理\033[0m"
|
||||
echo "-----------------------------------------------"
|
||||
echo -e " 1 在线\033[32m生成配置文件\033[0m(基于Subconverter订阅转换)"
|
||||
if [ -f "$CRASHDIR"/v2b_api.sh ]; then
|
||||
echo -e " 2 登录\033[33m获取订阅(推荐!)\033[0m"
|
||||
else
|
||||
echo -e " 2 在线\033[33m获取配置文件\033[0m(基于订阅提供者)"
|
||||
fi
|
||||
echo -e " 3 本地\033[32m生成配置文件\033[0m(基于内核providers,推荐!)"
|
||||
echo -e " 4 本地\033[33m上传完整配置文件\033[0m"
|
||||
echo -e " 5 设置\033[36m自动更新\033[0m"
|
||||
echo -e " 6 \033[32m自定义\033[0m配置文件"
|
||||
echo -e " 7 \033[33m更新\033[0m配置文件"
|
||||
echo -e " 8 \033[36m还原\033[0m配置文件"
|
||||
echo -e " 9 自定义浏览器UA \033[32m$user_agent\033[0m"
|
||||
echo "-----------------------------------------------"
|
||||
[ "$inuserguide" = 1 ] || echo -e " 0 返回上级菜单"
|
||||
read -p "请输入对应数字 > " num
|
||||
case "$num" in
|
||||
"" | 0)
|
||||
break
|
||||
;;
|
||||
1)
|
||||
if [ -n "$Url" ]; then
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[33m检测到已记录的链接内容:\033[0m"
|
||||
echo -e "\033[4;32m$Url\033[0m"
|
||||
echo "-----------------------------------------------"
|
||||
read -p "清空链接/追加导入?[1/0] > " res
|
||||
if [ "$res" = '1' ]; then
|
||||
Url_link=""
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[31m链接已清空!\033[0m"
|
||||
else
|
||||
Url_link=$Url
|
||||
fi
|
||||
fi
|
||||
gen_core_config_link
|
||||
;;
|
||||
2)
|
||||
if [ -f "$CRASHDIR"/v2b_api.sh ]; then
|
||||
. "$CRASHDIR"/v2b_api.sh
|
||||
else
|
||||
set_core_config_link
|
||||
fi
|
||||
;;
|
||||
3)
|
||||
if [ "$crashcore" = meta -o "$crashcore" = clashpre ]; then
|
||||
coretype=clash
|
||||
setproviders
|
||||
elif [ "$crashcore" = singboxr ]; then
|
||||
coretype=singbox
|
||||
setproviders
|
||||
else
|
||||
echo -e "\033[33msingbox官方内核及Clash基础内核不支持此功能,请先更换内核!\033[0m"
|
||||
sleep 1
|
||||
checkupdate && setcore
|
||||
fi
|
||||
;;
|
||||
4)
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[33m请将本地配置文件上传到/tmp目录并重命名为config.yaml或者config.json\033[0m"
|
||||
echo -e "\033[32m之后重新运行本脚本即可自动弹出导入提示!\033[0m"
|
||||
sleep 2
|
||||
exit
|
||||
;;
|
||||
5)
|
||||
. "$CRASHDIR"/menus/5_task.sh && task_menu
|
||||
break
|
||||
;;
|
||||
6)
|
||||
checkcfg=$(cat $CFG_PATH)
|
||||
override
|
||||
if [ -n "$PID" ]; then
|
||||
checkcfg_new=$(cat $CFG_PATH)
|
||||
[ "$checkcfg" != "$checkcfg_new" ] && checkrestart
|
||||
fi
|
||||
;;
|
||||
7)
|
||||
if [ -z "$Url" -a -z "$Https" ]; then
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[31m没有找到你的配置文件/订阅链接!请先输入链接!\033[0m"
|
||||
sleep 1
|
||||
else
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[33m当前系统记录的链接为:\033[0m"
|
||||
echo -e "\033[4;32m$Url$Https\033[0m"
|
||||
echo "-----------------------------------------------"
|
||||
read -p "确认更新配置文件?[1/0] > " res
|
||||
if [ "$res" = '1' ]; then
|
||||
jump_core_config
|
||||
break
|
||||
fi
|
||||
fi
|
||||
;;
|
||||
8)
|
||||
if [ ! -f ${config_path}.bak ]; then
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[31m没有找到配置文件的备份!\033[0m"
|
||||
else
|
||||
echo "-----------------------------------------------"
|
||||
echo -e 备份文件共有"\033[32m$(wc -l <${config_path}.bak)\033[0m"行内容,当前文件共有"\033[32m$(wc -l <${config_path})\033[0m"行内容
|
||||
read -p "确认还原配置文件?此操作不可逆![1/0] > " res
|
||||
if [ "$res" = '1' ]; then
|
||||
mv ${config_path}.bak ${config_path}
|
||||
echo "----------------------------------------------"
|
||||
echo -e "\033[32m配置文件已还原!请手动重启服务!\033[0m"
|
||||
sleep 1
|
||||
break
|
||||
else
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[31m操作已取消!返回上级菜单!\033[0m"
|
||||
sleep 1
|
||||
fi
|
||||
fi
|
||||
;;
|
||||
9)
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[36m如果6-1或者6-2无法正确获取配置文件时可以尝试使用\033[0m"
|
||||
echo -e " 1 使用自动UA"
|
||||
echo -e " 2 不使用UA"
|
||||
echo -e " 3 使用自定义UA:\033[32m$user_agent\033[0m"
|
||||
echo "-----------------------------------------------"
|
||||
read -p "请输入对应数字 > " num
|
||||
case "$num" in
|
||||
0)
|
||||
user_agent=''
|
||||
;;
|
||||
1)
|
||||
user_agent='auto'
|
||||
;;
|
||||
2)
|
||||
user_agent='none'
|
||||
;;
|
||||
3)
|
||||
read -p "请输入自定义UA(不要包含空格和特殊符号!) > " text
|
||||
[ -n "$text" ] && user_agent="$text"
|
||||
;;
|
||||
*)
|
||||
errornum
|
||||
;;
|
||||
esac
|
||||
[ "$num" -le 3 ] && setconfig user_agent "$user_agent"
|
||||
;;
|
||||
*)
|
||||
errornum
|
||||
sleep 1
|
||||
break
|
||||
;;
|
||||
esac
|
||||
done
|
||||
}
|
||||
|
||||
@@ -8,72 +8,74 @@ __IS_MODULE_7_GATEWAY_LOADED=1
|
||||
. "$CRASHDIR"/menus/check_port.sh
|
||||
. "$CRASHDIR"/libs/gen_base64.sh
|
||||
|
||||
#访问与控制主菜单
|
||||
gateway(){
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[30;47m欢迎使用访问与控制菜单:\033[0m"
|
||||
echo "-----------------------------------------------"
|
||||
echo -e " 1 配置\033[33m公网访问防火墙 \033[32m$fw_wan\033[0m"
|
||||
echo -e " 2 配置\033[36mTelegram专属控制机器人 \033[32m$bot_tg_service\033[0m"
|
||||
echo -e " 3 配置\033[36mDDNS自动域名\033[0m"
|
||||
[ "$disoverride" != "1" ] && {
|
||||
echo -e " 4 自定义\033[33m公网Vmess入站\033[0m节点 \033[32m$vms_service\033[0m"
|
||||
echo -e " 5 自定义\033[33m公网ShadowSocks入站\033[0m节点 \033[32m$sss_service\033[0m"
|
||||
echo -e " 6 配置\033[36mTailscale内网穿透\033[0m(限Singbox) \033[32m$ts_service\033[0m"
|
||||
echo -e " 7 配置\033[36mWireguard客户端\033[0m(限Singbox) \033[32m$wg_service\033[0m"
|
||||
}
|
||||
echo -e " 0 返回上级菜单"
|
||||
echo "-----------------------------------------------"
|
||||
read -p "请输入对应数字 > " num
|
||||
case "$num" in
|
||||
0) ;;
|
||||
1)
|
||||
# 访问与控制主菜单
|
||||
gateway() {
|
||||
while true; do
|
||||
echo "-----------------------------------------------"
|
||||
if [ -n "$(pidof CrashCore)" ] && [ "$firewall_mod" = 'iptables' ]; then
|
||||
read -p "需要先停止服务,是否继续?(1/0) > " res
|
||||
[ "$res" = 1 ] && "$CRASHDIR"/start.sh stop && set_fw_wan
|
||||
else
|
||||
set_fw_wan
|
||||
fi
|
||||
gateway
|
||||
;;
|
||||
2)
|
||||
set_bot_tg
|
||||
gateway
|
||||
;;
|
||||
3)
|
||||
. "$CRASHDIR"/menus/ddns.sh && ddns_menu
|
||||
gateway
|
||||
;;
|
||||
4)
|
||||
set_vmess
|
||||
gateway
|
||||
;;
|
||||
5)
|
||||
set_shadowsocks
|
||||
gateway
|
||||
;;
|
||||
6)
|
||||
if echo "$crashcore" | grep -q 'sing';then
|
||||
set_tailscale
|
||||
else
|
||||
echo -e "\033[33m$crashcore内核暂不支持此功能,请先更换内核!\033[0m"
|
||||
sleep 1
|
||||
fi
|
||||
gateway
|
||||
;;
|
||||
7)
|
||||
if echo "$crashcore" | grep -q 'sing';then
|
||||
set_wireguard
|
||||
else
|
||||
echo -e "\033[33m$crashcore内核暂不支持此功能,请先更换内核!\033[0m"
|
||||
sleep 1
|
||||
fi
|
||||
gateway
|
||||
;;
|
||||
*) errornum ;;
|
||||
esac
|
||||
echo -e "\033[30;47m欢迎使用访问与控制菜单:\033[0m"
|
||||
echo "-----------------------------------------------"
|
||||
echo -e " 1 配置\033[33m公网访问防火墙 \033[32m$fw_wan\033[0m"
|
||||
echo -e " 2 配置\033[36mTelegram专属控制机器人 \033[32m$bot_tg_service\033[0m"
|
||||
echo -e " 3 配置\033[36mDDNS自动域名\033[0m"
|
||||
[ "$disoverride" != "1" ] && {
|
||||
echo -e " 4 自定义\033[33m公网Vmess入站\033[0m节点 \033[32m$vms_service\033[0m"
|
||||
echo -e " 5 自定义\033[33m公网ShadowSocks入站\033[0m节点 \033[32m$sss_service\033[0m"
|
||||
echo -e " 6 配置\033[36mTailscale内网穿透\033[0m(限Singbox) \033[32m$ts_service\033[0m"
|
||||
echo -e " 7 配置\033[36mWireguard客户端\033[0m(限Singbox) \033[32m$wg_service\033[0m"
|
||||
}
|
||||
echo -e " 0 返回上级菜单"
|
||||
echo "-----------------------------------------------"
|
||||
read -p "请输入对应数字 > " num
|
||||
case "$num" in
|
||||
"" | 0)
|
||||
break
|
||||
;;
|
||||
1)
|
||||
echo "-----------------------------------------------"
|
||||
if [ -n "$(pidof CrashCore)" ] && [ "$firewall_mod" = 'iptables' ]; then
|
||||
read -p "需要先停止服务,是否继续?(1/0) > " res
|
||||
[ "$res" = 1 ] && "$CRASHDIR"/start.sh stop && set_fw_wan
|
||||
else
|
||||
set_fw_wan
|
||||
fi
|
||||
;;
|
||||
2)
|
||||
set_bot_tg
|
||||
;;
|
||||
3)
|
||||
. "$CRASHDIR"/menus/ddns.sh && ddns_menu
|
||||
;;
|
||||
4)
|
||||
set_vmess
|
||||
;;
|
||||
5)
|
||||
set_shadowsocks
|
||||
;;
|
||||
6)
|
||||
if echo "$crashcore" | grep -q 'sing'; then
|
||||
set_tailscale
|
||||
else
|
||||
echo -e "\033[33m$crashcore内核暂不支持此功能,请先更换内核!\033[0m"
|
||||
sleep 1
|
||||
fi
|
||||
;;
|
||||
7)
|
||||
if echo "$crashcore" | grep -q 'sing'; then
|
||||
set_wireguard
|
||||
else
|
||||
echo -e "\033[33m$crashcore内核暂不支持此功能,请先更换内核!\033[0m"
|
||||
sleep 1
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
errornum
|
||||
sleep 1
|
||||
break
|
||||
;;
|
||||
esac
|
||||
done
|
||||
}
|
||||
|
||||
#公网防火墙
|
||||
set_fw_wan() {
|
||||
[ -z "$fw_wan" ] && fw_wan=ON
|
||||
@@ -228,104 +230,103 @@ set_bot_tg(){
|
||||
;;
|
||||
esac
|
||||
}
|
||||
#自定义入站
|
||||
set_vmess(){
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[31m注意:\033[0m设置的端口会添加到公网访问防火墙并自动放行!\n 脚本只提供基础功能,更多需求请用自定义配置文件功能!"
|
||||
echo -e " \033[31m切勿用于搭建违法翻墙节点,违者后果自负!\033[0m"
|
||||
echo "-----------------------------------------------"
|
||||
echo -e " 1 \033[32m启用/关闭\033[0mVmess入站 \033[32m$vms_service\033[0m"
|
||||
echo "-----------------------------------------------"
|
||||
echo -e " 2 设置\033[36m监听端口\033[0m: \033[36m$vms_port\033[0m"
|
||||
echo -e " 3 设置\033[33mWS-path(可选)\033[0m: \033[33m$vms_ws_path\033[0m"
|
||||
echo -e " 4 设置\033[36m秘钥-uuid\033[0m: \033[36m$vms_uuid\033[0m"
|
||||
echo -e " 5 一键生成\033[32m随机秘钥\033[0m"
|
||||
echo -e " 6 设置\033[36m混淆host(可选)\033[0m: \033[33m$vms_host\033[0m"
|
||||
gen_base64 1 >/dev/null 2>&1 &&
|
||||
echo -e " 7 一键生成\033[32m分享链接\033[0m"
|
||||
echo -e " 0 返回上级菜单 \033[0m"
|
||||
echo "-----------------------------------------------"
|
||||
read -p "请输入对应数字 > " num
|
||||
case "$num" in
|
||||
0) ;;
|
||||
1)
|
||||
if [ "$vms_service" = ON ];then
|
||||
vms_service=OFF
|
||||
setconfig vms_service "$vms_service"
|
||||
else
|
||||
if [ -n "$vms_port" ] && [ -n "$vms_uuid" ];then
|
||||
vms_service=ON
|
||||
setconfig vms_service "$vms_service"
|
||||
else
|
||||
echo -e "\033[31m请先完成必选设置!\033[0m"
|
||||
sleep 1
|
||||
fi
|
||||
fi
|
||||
set_vmess
|
||||
;;
|
||||
2)
|
||||
read -p "请输入端口号(输入0删除) > " text
|
||||
if [ "$text" = 0 ];then
|
||||
vms_port=''
|
||||
setconfig vms_port "" "$GT_CFG_PATH"
|
||||
elif check_port "$text"; then
|
||||
vms_port="$text"
|
||||
setconfig vms_port "$text" "$GT_CFG_PATH"
|
||||
else
|
||||
sleep 1
|
||||
fi
|
||||
set_vmess
|
||||
;;
|
||||
3)
|
||||
read -p "请输入ws-path路径(输入0删除) > " text
|
||||
if [ "$text" = 0 ];then
|
||||
vms_ws_path=''
|
||||
setconfig vms_ws_path "" "$GT_CFG_PATH"
|
||||
elif echo "$text" |grep -qE '^/';then
|
||||
vms_ws_path="$text"
|
||||
setconfig vms_ws_path "$text" "$GT_CFG_PATH"
|
||||
else
|
||||
echo -e "\033[31m不是合法的path路径,必须以【/】开头!\033[0m"
|
||||
sleep 1
|
||||
fi
|
||||
set_vmess
|
||||
;;
|
||||
4)
|
||||
read -p "请输入UUID(输入0删除) > " text
|
||||
if [ "$text" = 0 ];then
|
||||
vms_uuid=''
|
||||
setconfig vms_uuid "" "$GT_CFG_PATH"
|
||||
elif echo "$text" |grep -qiE '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$';then
|
||||
vms_uuid="$text"
|
||||
setconfig vms_uuid "$text" "$GT_CFG_PATH"
|
||||
else
|
||||
echo -e "\033[31m不是合法的UUID格式,请重新输入或使用随机生成功能!\033[0m"
|
||||
sleep 1
|
||||
fi
|
||||
set_vmess
|
||||
;;
|
||||
5)
|
||||
vms_uuid=$(cat /proc/sys/kernel/random/uuid)
|
||||
setconfig vms_uuid "$vms_uuid" "$GT_CFG_PATH"
|
||||
sleep 1
|
||||
set_vmess
|
||||
;;
|
||||
6)
|
||||
read -p "请输入免流混淆host(输入0删除) > " text
|
||||
if [ "$text" = 0 ];then
|
||||
vms_host=''
|
||||
setconfig vms_host "" "$GT_CFG_PATH"
|
||||
else
|
||||
vms_host="$text"
|
||||
setconfig vms_host "$text" "$GT_CFG_PATH"
|
||||
fi
|
||||
set_vmess
|
||||
;;
|
||||
7)
|
||||
read -p "请输入本机公网IP(4/6)或域名 > " host_wan
|
||||
if [ -n "$host_wan" ] && [ -n "$vms_port" ] && [ -n "$vms_uuid" ];then
|
||||
[ -n "$vms_ws_path" ] && vms_net=ws
|
||||
vms_json=$(cat <<EOF
|
||||
|
||||
# 自定义入站
|
||||
set_vmess() {
|
||||
while true; do
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[31m注意:\033[0m设置的端口会添加到公网访问防火墙并自动放行!\n 脚本只提供基础功能,更多需求请用自定义配置文件功能!"
|
||||
echo -e " \033[31m切勿用于搭建违法翻墙节点,违者后果自负!\033[0m"
|
||||
echo "-----------------------------------------------"
|
||||
echo -e " 1 \033[32m启用/关闭\033[0mVmess入站 \033[32m$vms_service\033[0m"
|
||||
echo "-----------------------------------------------"
|
||||
echo -e " 2 设置\033[36m监听端口\033[0m: \033[36m$vms_port\033[0m"
|
||||
echo -e " 3 设置\033[33mWS-path(可选)\033[0m: \033[33m$vms_ws_path\033[0m"
|
||||
echo -e " 4 设置\033[36m秘钥-uuid\033[0m: \033[36m$vms_uuid\033[0m"
|
||||
echo -e " 5 一键生成\033[32m随机秘钥\033[0m"
|
||||
echo -e " 6 设置\033[36m混淆host(可选)\033[0m: \033[33m$vms_host\033[0m"
|
||||
gen_base64 1 >/dev/null 2>&1 &&
|
||||
echo -e " 7 一键生成\033[32m分享链接\033[0m"
|
||||
echo -e " 0 返回上级菜单 \033[0m"
|
||||
echo "-----------------------------------------------"
|
||||
read -p "请输入对应数字 > " num
|
||||
case "$num" in
|
||||
"" | 0)
|
||||
break
|
||||
;;
|
||||
1)
|
||||
if [ "$vms_service" = ON ]; then
|
||||
vms_service=OFF
|
||||
setconfig vms_service "$vms_service"
|
||||
else
|
||||
if [ -n "$vms_port" ] && [ -n "$vms_uuid" ]; then
|
||||
vms_service=ON
|
||||
setconfig vms_service "$vms_service"
|
||||
else
|
||||
echo -e "\033[31m请先完成必选设置!\033[0m"
|
||||
sleep 1
|
||||
fi
|
||||
fi
|
||||
;;
|
||||
2)
|
||||
read -p "请输入端口号(输入0删除) > " text
|
||||
if [ "$text" = 0 ]; then
|
||||
vms_port=''
|
||||
setconfig vms_port "" "$GT_CFG_PATH"
|
||||
elif check_port "$text"; then
|
||||
vms_port="$text"
|
||||
setconfig vms_port "$text" "$GT_CFG_PATH"
|
||||
else
|
||||
sleep 1
|
||||
fi
|
||||
;;
|
||||
3)
|
||||
read -p "请输入ws-path路径(输入0删除) > " text
|
||||
if [ "$text" = 0 ]; then
|
||||
vms_ws_path=''
|
||||
setconfig vms_ws_path "" "$GT_CFG_PATH"
|
||||
elif echo "$text" | grep -qE '^/'; then
|
||||
vms_ws_path="$text"
|
||||
setconfig vms_ws_path "$text" "$GT_CFG_PATH"
|
||||
else
|
||||
echo -e "\033[31m不是合法的path路径,必须以【/】开头!\033[0m"
|
||||
sleep 1
|
||||
fi
|
||||
;;
|
||||
4)
|
||||
read -p "请输入UUID(输入0删除) > " text
|
||||
if [ "$text" = 0 ]; then
|
||||
vms_uuid=''
|
||||
setconfig vms_uuid "" "$GT_CFG_PATH"
|
||||
elif echo "$text" | grep -qiE '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$'; then
|
||||
vms_uuid="$text"
|
||||
setconfig vms_uuid "$text" "$GT_CFG_PATH"
|
||||
else
|
||||
echo -e "\033[31m不是合法的UUID格式,请重新输入或使用随机生成功能!\033[0m"
|
||||
sleep 1
|
||||
fi
|
||||
;;
|
||||
5)
|
||||
vms_uuid=$(cat /proc/sys/kernel/random/uuid)
|
||||
setconfig vms_uuid "$vms_uuid" "$GT_CFG_PATH"
|
||||
sleep 1
|
||||
;;
|
||||
6)
|
||||
read -p "请输入免流混淆host(输入0删除) > " text
|
||||
if [ "$text" = 0 ]; then
|
||||
vms_host=''
|
||||
setconfig vms_host "" "$GT_CFG_PATH"
|
||||
else
|
||||
vms_host="$text"
|
||||
setconfig vms_host "$text" "$GT_CFG_PATH"
|
||||
fi
|
||||
;;
|
||||
7)
|
||||
read -p "请输入本机公网IP(4/6)或域名 > " host_wan
|
||||
if [ -n "$host_wan" ] && [ -n "$vms_port" ] && [ -n "$vms_uuid" ]; then
|
||||
[ -n "$vms_ws_path" ] && vms_net=ws
|
||||
vms_json=$(
|
||||
cat <<EOF
|
||||
{
|
||||
"v": "2",
|
||||
"ps": "ShellCrash_vms_in",
|
||||
@@ -339,19 +340,24 @@ set_vmess(){
|
||||
"host": "$vms_host"
|
||||
}
|
||||
EOF
|
||||
)
|
||||
vms_link="vmess://$(gen_base64 "$vms_json")"
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "你的分享链接是(请勿随意分享给他人):\n\033[32m$vms_link\033[0m"
|
||||
else
|
||||
echo -e "\033[31m请先完成必选设置!\033[0m"
|
||||
fi
|
||||
sleep 1
|
||||
set_vmess
|
||||
;;
|
||||
*) errornum ;;
|
||||
esac
|
||||
)
|
||||
vms_link="vmess://$(gen_base64 "$vms_json")"
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "你的分享链接是(请勿随意分享给他人):\n\033[32m$vms_link\033[0m"
|
||||
else
|
||||
echo -e "\033[31m请先完成必选设置!\033[0m"
|
||||
fi
|
||||
sleep 1
|
||||
;;
|
||||
*)
|
||||
errornum
|
||||
sleep 1
|
||||
break
|
||||
;;
|
||||
esac
|
||||
done
|
||||
}
|
||||
|
||||
set_shadowsocks(){
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[31m注意:\033[0m设置的端口会添加到公网访问防火墙并自动放行!\n 脚本只提供基础功能,更多需求请用自定义配置文件功能!"
|
||||
|
||||
@@ -111,7 +111,7 @@ tools() {
|
||||
break
|
||||
;;
|
||||
2)
|
||||
userguide
|
||||
. "$CRASHDIR"/menus/userguide.sh && userguide
|
||||
break
|
||||
;;
|
||||
3)
|
||||
@@ -685,124 +685,3 @@ debug(){
|
||||
esac
|
||||
}
|
||||
|
||||
#新手引导
|
||||
userguide(){
|
||||
. "$CRASHDIR"/libs/check_dir_avail.sh
|
||||
forwhat(){
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[30;46m 欢迎使用ShellCrash新手引导! \033[0m"
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[33m请先选择你的使用环境: \033[0m"
|
||||
echo -e "\033[0m(你之后依然可以在设置中更改各种配置)\033[0m"
|
||||
echo "-----------------------------------------------"
|
||||
echo -e " 1 \033[32m路由设备配置局域网透明代理\033[0m"
|
||||
echo -e " 2 \033[36mLinux设备仅配置本机代理\033[0m"
|
||||
[ -f "$CFG_PATH.bak" ] && echo -e " 3 \033[33m还原之前备份的设置\033[0m"
|
||||
echo "-----------------------------------------------"
|
||||
read -p "请输入对应数字 > " num
|
||||
case "$num" in
|
||||
1)
|
||||
#设置运行模式
|
||||
redir_mod="混合模式"
|
||||
[ -n "$(echo $cputype | grep -E "linux.*mips.*")" ] && {
|
||||
if grep -qE '^TPROXY$' /proc/net/ip_tables_targets || modprobe xt_TPROXY >/dev/null 2>&1; then
|
||||
redir_mod="Tproxy模式"
|
||||
else
|
||||
redir_mod="Redir模式"
|
||||
fi
|
||||
}
|
||||
[ -z "$crashcore" ] && crashcore=meta
|
||||
setconfig crashcore "$crashcore"
|
||||
setconfig redir_mod "$redir_mod"
|
||||
setconfig dns_mod mix
|
||||
setconfig firewall_area '1'
|
||||
#默认启用绕过CN-IP
|
||||
setconfig cn_ip_route ON
|
||||
#自动识别IPV6
|
||||
[ -n "$(ip a 2>&1 | grep -w 'inet6' | grep -E 'global' | sed 's/.*inet6.//g' | sed 's/scope.*$//g')" ] && {
|
||||
setconfig ipv6_redir ON
|
||||
setconfig ipv6_support ON
|
||||
setconfig ipv6_dns ON
|
||||
setconfig cn_ipv6_route ON
|
||||
}
|
||||
#设置开机启动
|
||||
[ -f /etc/rc.common -a "$(cat /proc/1/comm)" = "procd" ] && /etc/init.d/shellcrash enable
|
||||
ckcmd systemctl && [ "$(cat /proc/1/comm)" = "systemd" ] && systemctl enable shellcrash.service > /dev/null 2>&1
|
||||
rm -rf "$CRASHDIR"/.dis_startup
|
||||
autostart=enable
|
||||
#检测IP转发
|
||||
if [ "$(cat /proc/sys/net/ipv4/ip_forward)" = "0" ];then
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[33m检测到你的设备尚未开启ip转发,局域网设备将无法正常连接网络,是否立即开启?\033[0m"
|
||||
read -p "是否开启?(1/0) > " res
|
||||
[ "$res" = 1 ] && {
|
||||
echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
|
||||
sysctl -w net.ipv4.ip_forward=1
|
||||
} && echo "已成功开启ipv4转发,如未正常开启,请手动重启设备!" || echo "开启失败!请自行谷歌查找当前设备的开启方法!"
|
||||
fi
|
||||
#禁止docker启用的net.bridge.bridge-nf-call-iptables
|
||||
sysctl -w net.bridge.bridge-nf-call-iptables=0 > /dev/null 2>&1
|
||||
sysctl -w net.bridge.bridge-nf-call-ip6tables=0 > /dev/null 2>&1
|
||||
;;
|
||||
2)
|
||||
setconfig redir_mod "Redir模式"
|
||||
[ -n "$(echo $cputype | grep -E "linux.*mips.*")" ] && setconfig crashcore "clash"
|
||||
setconfig common_ports "OFF"
|
||||
setconfig firewall_area '2'
|
||||
;;
|
||||
3)
|
||||
mv -f $CFG_PATH.bak $CFG_PATH
|
||||
echo -e "\033[32m脚本设置已还原!\033[0m"
|
||||
echo -e "\033[33m请重新启动脚本!\033[0m"
|
||||
exit 0
|
||||
;;
|
||||
*)
|
||||
errornum
|
||||
forwhat
|
||||
;;
|
||||
esac
|
||||
}
|
||||
forwhat
|
||||
#检测小内存模式
|
||||
dir_size=$(dir_avail "$CRASHDIR")
|
||||
if [ "$dir_size" -lt 10240 ];then
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[33m检测到你的安装目录空间不足10M,是否开启小闪存模式?\033[0m"
|
||||
echo -e "\033[0m开启后核心及数据库文件将被下载到内存中,这将占用一部分内存空间\033[0m"
|
||||
echo -e "\033[0m每次开机后首次运行服务时都会自动的重新下载相关文件\033[0m"
|
||||
echo "-----------------------------------------------"
|
||||
read -p "是否开启?(1/0) > " res
|
||||
[ "$res" = 1 ] && {
|
||||
BINDIR=/tmp/ShellCrash
|
||||
setconfig BINDIR /tmp/ShellCrash "$CRASHDIR"/configs/command.env
|
||||
}
|
||||
fi
|
||||
#启用推荐的自动任务配置
|
||||
. "$CRASHDIR"/menus/5_task.sh && task_recom
|
||||
#小米设备软固化
|
||||
if [ "$systype" = "mi_snapshot" ];then
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[33m检测到为小米路由设备,启用软固化可防止路由升级后丢失SSH\033[0m"
|
||||
read -p "是否启用软固化功能?(1/0) > " res
|
||||
[ "$res" = 1 ] && mi_autoSSH
|
||||
fi
|
||||
#提示导入订阅或者配置文件
|
||||
[ ! -s "$CRASHDIR"/yamls/config.yaml -a ! -s "$CRASHDIR"/jsons/config.json ] && {
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[32m是否导入配置文件?\033[0m(这是运行前的最后一步)"
|
||||
echo -e "\033[0m你必须拥有一份配置文件才能运行服务!\033[0m"
|
||||
echo "-----------------------------------------------"
|
||||
read -p "现在开始导入?(1/0) > " res
|
||||
[ "$res" = 1 ] && inuserguide=1 && {
|
||||
. "$CRASHDIR"/menus/6_core_config.sh && set_core_config
|
||||
inuserguide=""
|
||||
}
|
||||
}
|
||||
#回到主界面
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[36m很好!现在只需要执行启动就可以愉快的使用了!\033[0m"
|
||||
echo "-----------------------------------------------"
|
||||
read -p "立即启动服务?(1/0) > " res
|
||||
[ "$res" = 1 ] && start_core && sleep 2
|
||||
main_menu
|
||||
}
|
||||
|
||||
@@ -317,140 +317,158 @@ switch_core(){ #clash与singbox内核切换
|
||||
}
|
||||
}
|
||||
}
|
||||
getcore(){ #下载内核文件
|
||||
. "$CRASHDIR"/libs/core_tools.sh #调用下载工具
|
||||
[ -z "$crashcore" ] && crashcore=meta
|
||||
[ -z "$cpucore" ] && check_cpucore
|
||||
[ "$crashcore" = unknow ] && setcoretype
|
||||
echo "$crashcore" | grep -q 'singbox' && core_new=singbox || core_new=clash
|
||||
#获取在线内核文件
|
||||
echo "-----------------------------------------------"
|
||||
echo "正在在线获取$crashcore核心文件……"
|
||||
core_webget
|
||||
case "$?" in
|
||||
0)
|
||||
echo -e "\033[32m$crashcore核心下载成功!\033[0m"
|
||||
sleep 1
|
||||
switch_core
|
||||
;;
|
||||
1)
|
||||
echo -e "\033[31m核心文件下载失败!\033[0m"
|
||||
[ -z "$custcorelink" ] && error_down
|
||||
;;
|
||||
*)
|
||||
echo -e "\033[31m核心文件下载成功但校验失败!请尝试手动指定CPU版本\033[0m"
|
||||
rm -rf ${TMPDIR}/core_new
|
||||
rm -rf ${TMPDIR}/core_new.tar.gz
|
||||
setcpucore
|
||||
;;
|
||||
esac
|
||||
|
||||
# 下载内核文件
|
||||
getcore() {
|
||||
# 调用下载工具
|
||||
. "$CRASHDIR"/libs/core_tools.sh
|
||||
|
||||
[ -z "$crashcore" ] && crashcore=meta
|
||||
[ -z "$cpucore" ] && check_cpucore
|
||||
[ "$crashcore" = unknow ] && setcoretype
|
||||
echo "$crashcore" | grep -q 'singbox' && core_new=singbox || core_new=clash
|
||||
# 获取在线内核文件
|
||||
echo "-----------------------------------------------"
|
||||
echo "正在在线获取$crashcore核心文件......"
|
||||
core_webget
|
||||
case "$?" in
|
||||
0)
|
||||
echo -e "\033[32m$crashcore核心下载成功!\033[0m"
|
||||
sleep 1
|
||||
switch_core
|
||||
;;
|
||||
1)
|
||||
echo -e "\033[31m核心文件下载失败!\033[0m"
|
||||
[ -z "$custcorelink" ] && error_down
|
||||
;;
|
||||
*)
|
||||
echo -e "\033[31m核心文件下载成功但校验失败!请尝试手动指定CPU版本\033[0m"
|
||||
rm -rf ${TMPDIR}/core_new
|
||||
rm -rf ${TMPDIR}/core_new.tar.gz
|
||||
setcpucore
|
||||
;;
|
||||
esac
|
||||
}
|
||||
setcustcore(){ #自定义内核
|
||||
checkcustcore(){
|
||||
[ "$api_tag" = "latest" ] && api_url=latest || api_url="tags/$api_tag"
|
||||
#通过githubapi获取内核信息
|
||||
echo -e "\033[32m正在获取内核文件链接!\033[0m"
|
||||
webget "$TMPDIR"/github_api https://api.github.com/repos/${project}/releases/${api_url}
|
||||
if [ "$?" = 0 ];then
|
||||
release_tag=$(cat "$TMPDIR"/github_api | grep '"tag_name":' | awk -F '"' '{print $4}')
|
||||
release_date=$(cat "$TMPDIR"/github_api | grep '"published_at":' | awk -F '"' '{print $4}')
|
||||
update_date=$(cat "$TMPDIR"/github_api | grep '"updated_at":' | head -n 1 | awk -F '"' '{print $4}')
|
||||
[ -n "$(echo $cpucore | grep mips)" ] && cpu_type=mips || cpu_type=$cpucore
|
||||
cat "$TMPDIR"/github_api | grep "browser_download_url" | grep -oE "https://github.com/${project}/releases/download.*linux.*${cpu_type}.*\.gz\"$" | sed 's/"//' > "$TMPDIR"/core.list
|
||||
rm -rf "$TMPDIR"/github_api
|
||||
#
|
||||
if [ -s "$TMPDIR"/core.list ];then
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "内核版本:\033[36m$release_tag\033[0m"
|
||||
echo -e "发布时间:\033[33m$release_date\033[0m"
|
||||
echo -e "更新时间:\033[32m$update_date\033[0m"
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[33m请确认内核信息并选择:\033[0m"
|
||||
cat "$TMPDIR"/core.list | grep -oE "$release_tag.*" | sed 's|.*/||' | awk '{print " "NR" "$1}'
|
||||
echo -e " 0 返回上级菜单"
|
||||
echo "-----------------------------------------------"
|
||||
read -p "请输入对应数字 > " num
|
||||
case "$num" in
|
||||
0)
|
||||
setcustcore
|
||||
;;
|
||||
[1-9]|[1-9][0-9])
|
||||
if [ "$num" -le "$(wc -l < "$TMPDIR"/core.list)" ];then
|
||||
custcorelink=$(sed -n "$num"p "$TMPDIR"/core.list)
|
||||
getcore
|
||||
else
|
||||
errornum
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
errornum
|
||||
;;
|
||||
esac
|
||||
else
|
||||
echo -e "\033[31m找不到可用内核,可能是作者没有编译相关CPU架构版本的内核文件!\033[0m"
|
||||
sleep 1
|
||||
fi
|
||||
else
|
||||
echo -e "\033[31m查找失败,请尽量在服务启动后再使用本功能!\033[0m"
|
||||
sleep 1
|
||||
fi
|
||||
rm -rf "$TMPDIR"/core.list
|
||||
}
|
||||
[ -z "$cpucore" ] && check_cpucore
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[36m此处内核通常源自互联网采集,此处致谢各位开发者!\033[0m"
|
||||
echo -e "\033[33m自定义内核未经过完整适配,使用出现问题请自行解决!\033[0m"
|
||||
echo -e "\033[31m自定义内核已适配定时任务,但不支持小闪存模式!\033[0m"
|
||||
echo -e "\033[32m如遇到网络错误请先启动ShellCrash服务!\033[0m"
|
||||
[ -n "$custcore" ] && {
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "当前内核为:\033[36m$custcore\033[0m"
|
||||
}
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[33m请选择需要使用的核心!\033[0m"
|
||||
echo -e "1 \033[36mMetaCubeX/mihomo\033[32m@release\033[0m版本官方内核"
|
||||
echo -e "2 \033[36mvernesong/mihomo\033[32m@alpha\033[0m版本内核(支持Smart策略)"
|
||||
echo -e "3 \033[36mSagerNet/sing-box\033[32m@release\033[0m版本官方内核"
|
||||
echo -e "4 Premium-2023.08.17内核(已停止维护)"
|
||||
echo -e "9 \033[33m自定义内核链接 \033[0m"
|
||||
echo "-----------------------------------------------"
|
||||
echo -e " 0 返回上级菜单"
|
||||
read -p "请输入对应数字 > " num
|
||||
case "$num" in
|
||||
1)
|
||||
project=MetaCubeX/mihomo
|
||||
api_tag=latest
|
||||
crashcore=meta
|
||||
checkcustcore
|
||||
;;
|
||||
2)
|
||||
project=vernesong/mihomo
|
||||
api_tag=Prerelease-Alpha
|
||||
crashcore=meta
|
||||
checkcustcore
|
||||
;;
|
||||
3)
|
||||
project=SagerNet/sing-box
|
||||
api_tag=latest
|
||||
crashcore=singbox
|
||||
checkcustcore
|
||||
;;
|
||||
4)
|
||||
project=juewuy/ShellCrash
|
||||
api_tag=clash.premium.latest
|
||||
crashcore=clashpre
|
||||
checkcustcore
|
||||
;;
|
||||
9)
|
||||
read -p "请输入自定义内核的链接地址(必须是以.tar.gz或.gz结尾的压缩文件) > " link
|
||||
[ -n "$link" ] && custcorelink="$link"
|
||||
setcoretype
|
||||
getcore
|
||||
;;
|
||||
*)
|
||||
;;
|
||||
esac
|
||||
|
||||
checkcustcore() {
|
||||
[ "$api_tag" = "latest" ] && api_url=latest || api_url="tags/$api_tag"
|
||||
# 通过githubapi获取内核信息
|
||||
echo -e "\033[32m正在获取内核文件链接!\033[0m"
|
||||
webget "$TMPDIR"/github_api https://api.github.com/repos/${project}/releases/${api_url}
|
||||
if [ "$?" = 0 ]; then
|
||||
release_tag=$(cat "$TMPDIR"/github_api | grep '"tag_name":' | awk -F '"' '{print $4}')
|
||||
release_date=$(cat "$TMPDIR"/github_api | grep '"published_at":' | awk -F '"' '{print $4}')
|
||||
update_date=$(cat "$TMPDIR"/github_api | grep '"updated_at":' | head -n 1 | awk -F '"' '{print $4}')
|
||||
[ -n "$(echo $cpucore | grep mips)" ] && cpu_type=mips || cpu_type=$cpucore
|
||||
cat "$TMPDIR"/github_api | grep "browser_download_url" | grep -oE "https://github.com/${project}/releases/download.*linux.*${cpu_type}.*\.gz\"$" | sed 's/"//' >"$TMPDIR"/core.list
|
||||
rm -rf "$TMPDIR"/github_api
|
||||
|
||||
if [ -s "$TMPDIR"/core.list ]; then
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "内核版本:\033[36m$release_tag\033[0m"
|
||||
echo -e "发布时间:\033[33m$release_date\033[0m"
|
||||
echo -e "更新时间:\033[32m$update_date\033[0m"
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[33m请确认内核信息并选择:\033[0m"
|
||||
cat "$TMPDIR"/core.list | grep -oE "$release_tag.*" | sed 's|.*/||' | awk '{print " "NR" "$1}'
|
||||
echo -e " 0 返回上级菜单"
|
||||
echo "-----------------------------------------------"
|
||||
read -p "请输入对应数字 > " num
|
||||
case "$num" in
|
||||
0)
|
||||
return 0
|
||||
;;
|
||||
[1-9] | [1-9][0-9])
|
||||
if [ "$num" -le "$(wc -l <"$TMPDIR"/core.list)" ]; then
|
||||
custcorelink=$(sed -n "$num"p "$TMPDIR"/core.list)
|
||||
getcore
|
||||
else
|
||||
errornum
|
||||
sleep 1
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
errornum
|
||||
sleep 1
|
||||
;;
|
||||
esac
|
||||
else
|
||||
echo -e "\033[31m找不到可用内核,可能是作者没有编译相关CPU架构版本的内核文件!\033[0m"
|
||||
sleep 1
|
||||
fi
|
||||
else
|
||||
echo -e "\033[31m查找失败,请尽量在服务启动后再使用本功能!\033[0m"
|
||||
sleep 1
|
||||
fi
|
||||
rm -rf "$TMPDIR"/core.list
|
||||
}
|
||||
|
||||
# 自定义内核
|
||||
setcustcore() {
|
||||
while true; do
|
||||
[ -z "$cpucore" ] && check_cpucore
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[36m此处内核通常源自互联网采集,此处致谢各位开发者!\033[0m"
|
||||
echo -e "\033[33m自定义内核未经过完整适配,使用出现问题请自行解决!\033[0m"
|
||||
echo -e "\033[31m自定义内核已适配定时任务,但不支持小闪存模式!\033[0m"
|
||||
echo -e "\033[32m如遇到网络错误请先启动ShellCrash服务!\033[0m"
|
||||
[ -n "$custcore" ] && {
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "当前内核为:\033[36m$custcore\033[0m"
|
||||
}
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[33m请选择需要使用的核心!\033[0m"
|
||||
echo -e "1 \033[36mMetaCubeX/mihomo\033[32m@release\033[0m版本官方内核"
|
||||
echo -e "2 \033[36mvernesong/mihomo\033[32m@alpha\033[0m版本内核(支持Smart策略)"
|
||||
echo -e "3 \033[36mSagerNet/sing-box\033[32m@release\033[0m版本官方内核"
|
||||
echo -e "4 Premium-2023.08.17内核(已停止维护)"
|
||||
echo -e "9 \033[33m自定义内核链接 \033[0m"
|
||||
echo "-----------------------------------------------"
|
||||
echo -e " 0 返回上级菜单"
|
||||
read -p "请输入对应数字 > " num
|
||||
case "$num" in
|
||||
"" | 0)
|
||||
break
|
||||
;;
|
||||
1)
|
||||
project=MetaCubeX/mihomo
|
||||
api_tag=latest
|
||||
crashcore=meta
|
||||
checkcustcore
|
||||
;;
|
||||
2)
|
||||
project=vernesong/mihomo
|
||||
api_tag=Prerelease-Alpha
|
||||
crashcore=meta
|
||||
checkcustcore
|
||||
;;
|
||||
3)
|
||||
project=SagerNet/sing-box
|
||||
api_tag=latest
|
||||
crashcore=singbox
|
||||
checkcustcore
|
||||
;;
|
||||
4)
|
||||
project=juewuy/ShellCrash
|
||||
api_tag=clash.premium.latest
|
||||
crashcore=clashpre
|
||||
checkcustcore
|
||||
;;
|
||||
9)
|
||||
read -p "请输入自定义内核的链接地址(必须是以.tar.gz或.gz结尾的压缩文件) > " link
|
||||
[ -n "$link" ] && custcorelink="$link"
|
||||
setcoretype
|
||||
getcore
|
||||
;;
|
||||
*)
|
||||
errornum
|
||||
sleep 1
|
||||
break
|
||||
;;
|
||||
esac
|
||||
done
|
||||
}
|
||||
|
||||
setziptype(){
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "请选择内核内核分支及压缩方式:\033[0m"
|
||||
|
||||
@@ -84,7 +84,12 @@ set_dns_mod() { #DNS模式设置
|
||||
dns_redir_port="$dns_port"
|
||||
setconfig dns_redir_port
|
||||
elif [ "$num" -lt 65535 -a "$num" -ge 1 ];then
|
||||
if [ -n "$(netstat -ntul | grep -E ":$num[[:space:]]")" ];then
|
||||
if ckcmd netstat;then
|
||||
port_test=$(netstat -ntul | grep -E ":$num[[:space:]]")
|
||||
else
|
||||
port_test=0
|
||||
fi
|
||||
if [ -n "$port_test" ];then
|
||||
dns_redir_port="$num"
|
||||
setconfig dns_redir_port "$dns_redir_port"
|
||||
else
|
||||
|
||||
412
scripts/menus/fw_filter.sh
Normal file
412
scripts/menus/fw_filter.sh
Normal file
@@ -0,0 +1,412 @@
|
||||
#!/bin/sh
|
||||
# Copyright (C) Juewuy
|
||||
|
||||
[ -n "$__IS_MODULE_FW_FILTER_LOADED" ] && return
|
||||
__IS_MODULE_FW_FILTER_LOADED=1
|
||||
|
||||
set_fw_filter(){ #流量过滤
|
||||
[ -z "$common_ports" ] && common_ports=ON
|
||||
[ -z "$quic_rj" ] && quic_rj=OFF
|
||||
[ -z "$cn_ip_route" ] && cn_ip_route=OFF
|
||||
touch "$CRASHDIR"/configs/mac "$CRASHDIR"/configs/ip_filter
|
||||
[ -z "$(cat "$CRASHDIR"/configs/mac "$CRASHDIR"/configs/ip_filter 2>/dev/null)" ] && mac_return=OFF || mac_return=ON
|
||||
echo "-----------------------------------------------"
|
||||
echo -e " 1 过滤非常用端口: \033[36m$common_ports\033[0m ————用于过滤P2P流量"
|
||||
echo -e " 2 过滤局域网设备: \033[36m$mac_return\033[0m ————使用黑/白名单进行过滤"
|
||||
echo -e " 3 过滤QUIC协议: \033[36m$quic_rj\033[0m ————优化视频性能"
|
||||
echo -e " 4 过滤CN_IP(6)列表: \033[36m$cn_ip_route\033[0m ————优化性能,不兼容Fake-ip"
|
||||
echo -e " 5 自定义透明路由ipv4网段: 适合vlan等复杂网络环境"
|
||||
echo -e " 6 自定义保留地址ipv4网段: 需要以保留地址为访问目标的环境"
|
||||
echo "-----------------------------------------------"
|
||||
echo -e " 0 返回上级菜单 \033[0m"
|
||||
echo "-----------------------------------------------"
|
||||
read -p "请输入对应数字 > " num
|
||||
case "$num" in
|
||||
0)
|
||||
;;
|
||||
1)
|
||||
echo "-----------------------------------------------"
|
||||
if [ -n "$(pidof CrashCore)" ] && [ "$firewall_mod" = 'iptables' ]; then
|
||||
read -p "切换时将停止服务,是否继续?(1/0) > " res
|
||||
[ "$res" = 1 ] && "$CRASHDIR"/start.sh stop && set_common_ports
|
||||
else
|
||||
set_common_ports
|
||||
fi
|
||||
set_fw_filter
|
||||
;;
|
||||
2)
|
||||
checkcfg_mac=$(cat "$CRASHDIR"/configs/mac)
|
||||
fw_filter_lan
|
||||
if [ -n "$PID" ]; then
|
||||
checkcfg_mac_new=$(cat "$CRASHDIR"/configs/mac)
|
||||
[ "$checkcfg_mac" != "$checkcfg_mac_new" ] && checkrestart
|
||||
fi
|
||||
set_fw_filter
|
||||
;;
|
||||
3)
|
||||
echo "-----------------------------------------------"
|
||||
if [ -n "$(echo "$redir_mod" | grep -oE '混合|Tproxy|Tun')" ]; then
|
||||
if [ "$quic_rj" = "OFF" ]; then
|
||||
echo -e "\033[33m已禁止QUIC流量通过ShellCrash内核!!\033[0m"
|
||||
quic_rj=ON
|
||||
else
|
||||
echo -e "\033[33m已取消禁止QUIC协议流量!!\033[0m"
|
||||
quic_rj=OFF
|
||||
fi
|
||||
setconfig quic_rj $quic_rj
|
||||
else
|
||||
echo -e "\033[33m当前模式默认不会代理UDP流量,无需设置!!\033[0m"
|
||||
fi
|
||||
sleep 1
|
||||
set_fw_filter
|
||||
;;
|
||||
4)
|
||||
if [ -n "$(ipset -v 2>/dev/null)" ] || [ "$firewall_mod" = 'nftables' ]; then
|
||||
if [ "$cn_ip_route" = "OFF" ]; then
|
||||
echo -e "\033[32m已开启CN_IP绕过内核功能!!\033[0m"
|
||||
echo -e "\033[31m注意!!!此功能会导致全局模式及一切CN相关规则失效!!!\033[0m"
|
||||
cn_ip_route=ON
|
||||
sleep 2
|
||||
else
|
||||
echo -e "\033[33m已禁用CN_IP绕过内核功能!!\033[0m"
|
||||
cn_ip_route=OFF
|
||||
fi
|
||||
setconfig cn_ip_route $cn_ip_route
|
||||
else
|
||||
echo -e "\033[31m当前设备缺少ipset模块或未使用nftables模式,无法启用绕过功能!!\033[0m"
|
||||
sleep 1
|
||||
fi
|
||||
set_fw_filter
|
||||
;;
|
||||
5)
|
||||
set_cust_host_ipv4
|
||||
set_fw_filter
|
||||
;;
|
||||
6)
|
||||
[ -z "$reserve_ipv4" ] && reserve_ipv4="0.0.0.0/8 10.0.0.0/8 127.0.0.0/8 100.64.0.0/10 169.254.0.0/16 172.16.0.0/12 192.168.0.0/16 224.0.0.0/4 240.0.0.0/4"
|
||||
echo -e "当前网段:\033[36m$reserve_ipv4\033[0m"
|
||||
echo -e "\033[33m地址必须是空格分隔,错误的设置可能导致网络回环或启动报错,请务必谨慎!\033[0m"
|
||||
read -p "请输入 > " text
|
||||
if [ -n "$(
|
||||
echo $text | grep -E "(((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])/(3[0-2]|[1-2]?[0-9]))( +|$)+"
|
||||
)" ]; then
|
||||
reserve_ipv4="$text"
|
||||
echo -e "已将保留地址网段设为:\033[32m$reserve_ipv4\033[0m"
|
||||
setconfig reserve_ipv4 "'$reserve_ipv4'"
|
||||
else
|
||||
echo -e "\033[31m输入有误,操作已取消!\033[0m"
|
||||
fi
|
||||
sleep 1
|
||||
set_fw_filter
|
||||
;;
|
||||
*)
|
||||
errornum
|
||||
;;
|
||||
esac
|
||||
}
|
||||
set_common_ports() {
|
||||
[ -z "$multiport" ] && multiport='22,80,443,8080,8443'
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[31m注意:\033[0mMIX模式下,所有fake-ip来源的非常用端口流量不会被过滤"
|
||||
[ -n "$common_ports" ] &&
|
||||
echo -e "当前放行端口:\033[36m$multiport\033[0m"
|
||||
echo "-----------------------------------------------"
|
||||
echo -e " 1 启用/关闭端口过滤: \033[36m$common_ports\033[0m"
|
||||
echo -e " 2 添加放行端口"
|
||||
echo -e " 3 移除指定放行端口"
|
||||
echo -e " 4 重置默认放行端口"
|
||||
echo -e " 5 重置为旧版放行端口"
|
||||
echo -e " 0 返回上级菜单"
|
||||
echo "-----------------------------------------------"
|
||||
read -p "请输入对应数字 > " num
|
||||
case $num in
|
||||
1)
|
||||
if [ "$common_ports" = ON ];then
|
||||
common_ports=OFF
|
||||
else
|
||||
common_ports=ON
|
||||
fi
|
||||
setconfig common_ports "$common_ports"
|
||||
set_common_ports
|
||||
;;
|
||||
2)
|
||||
port_count=$(echo "$multiport" | awk -F',' '{print NF}' )
|
||||
if [ "$port_count" -ge 15 ];then
|
||||
echo -e "\033[31m最多支持设置放行15个端口,请先减少一些!\033[0m"
|
||||
else
|
||||
read -p "请输入要放行的端口号 > " port
|
||||
if echo ",$multiport," | grep -q ",$port,";then
|
||||
echo -e "\033[31m输入错误!请勿重复添加!\033[0m"
|
||||
elif [ "$port" -lt 1 ] || [ "$port" -gt 65535 ]; then
|
||||
echo -e "\033[31m输入错误!请输入正确的数值(1-65535)!\033[0m"
|
||||
else
|
||||
multiport=$(echo "$multiport,$port" | sed "s/^,//")
|
||||
setconfig multiport "$multiport"
|
||||
fi
|
||||
fi
|
||||
sleep 1
|
||||
set_common_ports
|
||||
;;
|
||||
3)
|
||||
read -p "请输入要移除的端口号 > " port
|
||||
if echo ",$multiport," | grep -q ",$port,";then
|
||||
if [ "$port" -lt 1 ] || [ "$port" -gt 65535 ]; then
|
||||
echo -e "\033[31m输入错误!请输入正确的数值(1-65535)!\033[0m"
|
||||
else
|
||||
multiport=$(echo ",$multiport," | sed "s/,$port//; s/^,//; s/,$//")
|
||||
setconfig multiport "$multiport"
|
||||
fi
|
||||
else
|
||||
echo -e "\033[31m输入错误!请输入已添加过的端口!\033[0m"
|
||||
fi
|
||||
sleep 1
|
||||
set_common_ports
|
||||
;;
|
||||
4)
|
||||
multiport=''
|
||||
setconfig multiport
|
||||
sleep 1
|
||||
set_common_ports
|
||||
;;
|
||||
5)
|
||||
multiport='22,80,143,194,443,465,587,853,993,995,5222,8080,8443'
|
||||
setconfig multiport "$multiport"
|
||||
sleep 1
|
||||
set_common_ports
|
||||
;;
|
||||
*)
|
||||
errornum
|
||||
;;
|
||||
esac
|
||||
}
|
||||
set_cust_host_ipv4() { #自定义ipv4透明路由网段
|
||||
[ -z "$replace_default_host_ipv4" ] && replace_default_host_ipv4="OFF"
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "当前默认透明路由的网段为: \033[32m$(ip a 2>&1 | grep -w 'inet' | grep 'global' | grep 'br' | grep -v 'iot' | grep -E ' 1(92|0|72)\.' | sed 's/.*inet.//g' | sed 's/br.*$//g' | sed 's/metric.*$//g' | tr '\n' ' ' && echo) \033[0m"
|
||||
echo -e "当前已添加的自定义网段为:\033[36m$cust_host_ipv4\033[0m"
|
||||
echo "-----------------------------------------------"
|
||||
echo -e " 1 移除所有自定义网段"
|
||||
echo -e " 2 使用自定义网段覆盖默认网段 \033[36m$replace_default_host_ipv4\033[0m"
|
||||
echo -e " 0 返回上级菜单"
|
||||
read -p "请输入对应的序号或需要额外添加的网段 > " text
|
||||
case "$text" in
|
||||
2)
|
||||
if [ "$replace_default_host_ipv4" == "OFF" ]; then
|
||||
replace_default_host_ipv4="ON"
|
||||
else
|
||||
replace_default_host_ipv4="OFF"
|
||||
fi
|
||||
setconfig replace_default_host_ipv4 "$replace_default_host_ipv4"
|
||||
set_cust_host_ipv4
|
||||
;;
|
||||
1)
|
||||
unset cust_host_ipv4
|
||||
setconfig cust_host_ipv4
|
||||
set_cust_host_ipv4
|
||||
;;
|
||||
0) ;;
|
||||
*)
|
||||
if [ -n "$(echo $text | grep -Eo '^([0-9]{1,3}\.){3}[0-9]{1,3}/[0-9]{1,2}'$)" -a -z "$(echo $cust_host_ipv4 | grep "$text")" ]; then
|
||||
cust_host_ipv4="$cust_host_ipv4 $text"
|
||||
setconfig cust_host_ipv4 "'$cust_host_ipv4'"
|
||||
else
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[31m请输入正确的网段地址!\033[0m"
|
||||
fi
|
||||
sleep 1
|
||||
set_cust_host_ipv4
|
||||
;;
|
||||
esac
|
||||
}
|
||||
fw_filter_lan() { #局域网设备过滤
|
||||
get_devinfo() {
|
||||
dev_ip=$(cat $dhcpdir | grep " $dev " | awk '{print $3}') && [ -z "$dev_ip" ] && dev_ip=$dev
|
||||
dev_mac=$(cat $dhcpdir | grep " $dev " | awk '{print $2}') && [ -z "$dev_mac" ] && dev_mac=$dev
|
||||
dev_name=$(cat $dhcpdir | grep " $dev " | awk '{print $4}') && [ -z "$dev_name" ] && dev_name='未知设备'
|
||||
}
|
||||
add_mac() {
|
||||
echo "-----------------------------------------------"
|
||||
echo 已添加的mac地址:
|
||||
cat "$CRASHDIR"/configs/mac 2>/dev/null
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[33m序号 设备IP 设备mac地址 设备名称\033[32m"
|
||||
cat $dhcpdir | awk '{print " "NR" "$3,$2,$4}'
|
||||
echo -e "\033[0m-----------------------------------------------"
|
||||
echo -e "手动输入mac地址时仅支持\033[32mxx:xx:xx:xx:xx:xx\033[0m的形式"
|
||||
echo -e " 0 或回车 结束添加"
|
||||
echo "-----------------------------------------------"
|
||||
read -p "请输入对应序号或直接输入mac地址 > " num
|
||||
if [ -z "$num" -o "$num" = 0 ]; then
|
||||
i=
|
||||
elif [ -n "$(echo $num | grep -aE '^([0-9A-Fa-f]{2}[:]){5}([0-9A-Fa-f]{2})$')" ]; then
|
||||
if [ -z "$(cat "$CRASHDIR"/configs/mac | grep -E "$num")" ]; then
|
||||
echo $num | grep -oE '^([0-9A-Fa-f]{2}[:]){5}([0-9A-Fa-f]{2})$' >>"$CRASHDIR"/configs/mac
|
||||
else
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[31m已添加的设备,请勿重复添加!\033[0m"
|
||||
fi
|
||||
add_mac
|
||||
elif [ $num -le $(cat $dhcpdir 2>/dev/null | awk 'END{print NR}') ]; then
|
||||
macadd=$(cat $dhcpdir | awk '{print $2}' | sed -n "$num"p)
|
||||
if [ -z "$(cat "$CRASHDIR"/configs/mac | grep -E "$macadd")" ]; then
|
||||
echo $macadd >>"$CRASHDIR"/configs/mac
|
||||
else
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[31m已添加的设备,请勿重复添加!\033[0m"
|
||||
fi
|
||||
add_mac
|
||||
else
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[31m输入有误,请重新输入!\033[0m"
|
||||
add_mac
|
||||
fi
|
||||
}
|
||||
add_ip() {
|
||||
echo "-----------------------------------------------"
|
||||
echo "已添加的IP地址(段):"
|
||||
cat "$CRASHDIR"/configs/ip_filter 2>/dev/null
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[33m序号 设备IP 设备名称\033[32m"
|
||||
cat $dhcpdir | awk '{print " "NR" "$3,$4}'
|
||||
echo -e "\033[0m-----------------------------------------------"
|
||||
echo -e "手动输入时仅支持\033[32m 192.168.1.0/24\033[0m 或 \033[32m192.168.1.0\033[0m 的形式"
|
||||
echo -e "不支持ipv6地址过滤,如有需求请使用mac地址过滤"
|
||||
echo -e " 0 或回车 结束添加"
|
||||
echo "-----------------------------------------------"
|
||||
read -p "请输入对应序号或直接输入IP地址段 > " num
|
||||
if [ -z "$num" -o "$num" = 0 ]; then
|
||||
i=
|
||||
elif [ -n "$(echo $num | grep -aE '^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(/(3[0-2]|[12]?[0-9]))?$')" ]; then
|
||||
if [ -z "$(cat "$CRASHDIR"/configs/ip_filter | grep -E "$num")" ]; then
|
||||
echo $num | grep -oE '^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(/(3[0-2]|[12]?[0-9]))?$' >>"$CRASHDIR"/configs/ip_filter
|
||||
else
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[31m已添加的地址,请勿重复添加!\033[0m"
|
||||
fi
|
||||
add_ip
|
||||
elif [ $num -le $(cat $dhcpdir 2>/dev/null | awk 'END{print NR}') ]; then
|
||||
ipadd=$(cat $dhcpdir | awk '{print $3}' | sed -n "$num"p)
|
||||
if [ -z "$(cat "$CRASHDIR"/configs/mac | grep -E "$ipadd")" ]; then
|
||||
echo $ipadd >>"$CRASHDIR"/configs/ip_filter
|
||||
else
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[31m已添加的地址,请勿重复添加!\033[0m"
|
||||
fi
|
||||
add_ip
|
||||
else
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[31m输入有误,请重新输入!\033[0m"
|
||||
add_ip
|
||||
fi
|
||||
}
|
||||
del_all() {
|
||||
echo "-----------------------------------------------"
|
||||
if [ -z "$(cat "$CRASHDIR"/configs/mac "$CRASHDIR"/configs/ip_filter 2>/dev/null)" ]; then
|
||||
echo -e "\033[31m列表中没有需要移除的设备!\033[0m"
|
||||
sleep 1
|
||||
else
|
||||
echo -e "请选择需要移除的设备:\033[36m"
|
||||
echo -e "\033[33m 设备IP 设备mac地址 设备名称\033[0m"
|
||||
i=1
|
||||
for dev in $(cat "$CRASHDIR"/configs/mac "$CRASHDIR"/configs/ip_filter 2>/dev/null); do
|
||||
get_devinfo
|
||||
echo -e " $i \033[32m$dev_ip \033[36m$dev_mac \033[32m$dev_name\033[0m"
|
||||
i=$((i + 1))
|
||||
done
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[0m 0 或回车 结束删除"
|
||||
read -p "请输入需要移除的设备的对应序号 > " num
|
||||
mac_filter_rows=$(cat "$CRASHDIR"/configs/mac 2>/dev/null | wc -l)
|
||||
ip_filter_rows=$(cat "$CRASHDIR"/configs/ip_filter 2>/dev/null | wc -l)
|
||||
if [ -z "$num" ] || [ "$num" -le 0 ]; then
|
||||
n=
|
||||
elif [ $num -le $mac_filter_rows ]; then
|
||||
sed -i "${num}d" "$CRASHDIR"/configs/mac
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[32m对应设备已移除!\033[0m"
|
||||
del_all
|
||||
elif [ $num -le $((mac_filter_rows + ip_filter_rows)) ]; then
|
||||
num=$((num - mac_filter_rows))
|
||||
sed -i "${num}d" "$CRASHDIR"/configs/ip_filter
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[32m对应设备已移除!\033[0m"
|
||||
del_all
|
||||
else
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[31m输入有误,请重新输入!\033[0m"
|
||||
del_all
|
||||
fi
|
||||
fi
|
||||
}
|
||||
echo "-----------------------------------------------"
|
||||
[ -z "$dhcpdir" ] && [ -f /var/lib/dhcp/dhcpd.leases ] && dhcpdir='/var/lib/dhcp/dhcpd.leases'
|
||||
[ -z "$dhcpdir" ] && [ -f /var/lib/dhcpd/dhcpd.leases ] && dhcpdir='/var/lib/dhcpd/dhcpd.leases'
|
||||
[ -z "$dhcpdir" ] && [ -f /tmp/dhcp.leases ] && dhcpdir='/tmp/dhcp.leases'
|
||||
[ -z "$dhcpdir" ] && [ -f /tmp/dnsmasq.leases ] && dhcpdir='/tmp/dnsmasq.leases'
|
||||
[ -z "$dhcpdir" ] && dhcpdir='/dev/null'
|
||||
[ -z "$macfilter_type" ] && macfilter_type='黑名单'
|
||||
if [ "$macfilter_type" = "黑名单" ]; then
|
||||
fw_filter_lan_over='白名单'
|
||||
fw_filter_lan_scrip='不'
|
||||
else
|
||||
fw_filter_lan_over='黑名单'
|
||||
fw_filter_lan_scrip=''
|
||||
fi
|
||||
######
|
||||
echo -e "\033[30;47m请在此添加或移除设备\033[0m"
|
||||
echo -e "当前过滤方式为:\033[33m$fw_filter_lan_type模式\033[0m"
|
||||
echo -e "仅列表内设备流量\033[36m$fw_filter_lan_scrip经过\033[0m内核"
|
||||
if [ -n "$(cat "$CRASHDIR"/configs/mac)" ]; then
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "当前已过滤设备为:\033[36m"
|
||||
echo -e "\033[33m 设备mac/ip地址 设备名称\033[0m"
|
||||
for dev in $(cat "$CRASHDIR"/configs/mac 2>/dev/null); do
|
||||
get_devinfo
|
||||
echo -e "\033[36m$dev_mac \033[0m$dev_name"
|
||||
done
|
||||
for dev in $(cat "$CRASHDIR"/configs/ip_filter 2>/dev/null); do
|
||||
get_devinfo
|
||||
echo -e "\033[32m$dev_ip \033[0m$dev_name"
|
||||
done
|
||||
echo "-----------------------------------------------"
|
||||
fi
|
||||
echo -e " 1 切换为\033[33m$fw_filter_lan_over模式\033[0m"
|
||||
echo -e " 2 \033[32m添加指定设备(mac地址)\033[0m"
|
||||
echo -e " 3 \033[32m添加指定设备(IP地址/网段)\033[0m"
|
||||
echo -e " 4 \033[36m移除指定设备\033[0m"
|
||||
echo -e " 9 \033[31m清空整个列表\033[0m"
|
||||
echo -e " 0 返回上级菜单"
|
||||
read -p "请输入对应数字 > " num
|
||||
case "$num" in
|
||||
0) ;;
|
||||
1)
|
||||
macfilter_type=$fw_filter_lan_over
|
||||
setconfig macfilter_type $macfilter_type
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[32m已切换为$fw_filter_lan_type模式!\033[0m"
|
||||
fw_filter_lan
|
||||
;;
|
||||
2)
|
||||
add_mac
|
||||
fw_filter_lan
|
||||
;;
|
||||
3)
|
||||
add_ip
|
||||
fw_filter_lan
|
||||
;;
|
||||
4)
|
||||
del_all
|
||||
fw_filter_lan
|
||||
;;
|
||||
9)
|
||||
: >"$CRASHDIR"/configs/mac
|
||||
: >"$CRASHDIR"/configs/ip_filter
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[31m设备列表已清空!\033[0m"
|
||||
fw_filter_lan
|
||||
;;
|
||||
*)
|
||||
errornum
|
||||
;;
|
||||
esac
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
|
||||
running_status(){
|
||||
VmRSS=$(cat /proc/$PID/status | grep -w VmRSS | awk 'unit="MB" {printf "%.2f %s\n", $2/1000, unit}')
|
||||
VmRSS=$(awk '/^VmRSS:/ {printf "%.2f MB\n", ($2 * 1024) / 1000000}' /proc/$PID/status)
|
||||
#获取运行时长
|
||||
touch "$TMPDIR"/crash_start_time #用于延迟启动的校验
|
||||
start_time=$(cat "$TMPDIR"/crash_start_time)
|
||||
|
||||
127
scripts/menus/userguide.sh
Normal file
127
scripts/menus/userguide.sh
Normal file
@@ -0,0 +1,127 @@
|
||||
#!/bin/sh
|
||||
# Copyright (C) Juewuy
|
||||
|
||||
[ -n "$__IS_MODULE_USERGUIDE_LOADED" ] && return
|
||||
__IS_MODULE_USERGUIDE_LOADED=1
|
||||
|
||||
#新手引导
|
||||
userguide(){
|
||||
. "$CRASHDIR"/libs/check_dir_avail.sh
|
||||
forwhat(){
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[30;46m 欢迎使用ShellCrash新手引导! \033[0m"
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[33m请先选择你的使用环境: \033[0m"
|
||||
echo -e "\033[0m(你之后依然可以在设置中更改各种配置)\033[0m"
|
||||
echo "-----------------------------------------------"
|
||||
echo -e " 1 \033[32m路由设备配置局域网透明代理\033[0m"
|
||||
echo -e " 2 \033[36mLinux设备仅配置本机代理\033[0m"
|
||||
[ -f "$CFG_PATH.bak" ] && echo -e " 3 \033[33m还原之前备份的设置\033[0m"
|
||||
echo "-----------------------------------------------"
|
||||
read -p "请输入对应数字 > " num
|
||||
case "$num" in
|
||||
1)
|
||||
#设置运行模式
|
||||
redir_mod="混合模式"
|
||||
[ -n "$(echo $cputype | grep -E "linux.*mips.*")" ] && {
|
||||
if grep -qE '^TPROXY$' /proc/net/ip_tables_targets || modprobe xt_TPROXY >/dev/null 2>&1; then
|
||||
redir_mod="Tproxy模式"
|
||||
else
|
||||
redir_mod="Redir模式"
|
||||
fi
|
||||
}
|
||||
[ -z "$crashcore" ] && crashcore=meta
|
||||
setconfig crashcore "$crashcore"
|
||||
setconfig redir_mod "$redir_mod"
|
||||
setconfig dns_mod mix
|
||||
setconfig firewall_area '1'
|
||||
#默认启用绕过CN-IP
|
||||
setconfig cn_ip_route ON
|
||||
#自动识别IPV6
|
||||
[ -n "$(ip a 2>&1 | grep -w 'inet6' | grep -E 'global' | sed 's/.*inet6.//g' | sed 's/scope.*$//g')" ] && {
|
||||
setconfig ipv6_redir ON
|
||||
setconfig ipv6_support ON
|
||||
setconfig ipv6_dns ON
|
||||
setconfig cn_ipv6_route ON
|
||||
}
|
||||
#设置开机启动
|
||||
[ -f /etc/rc.common -a "$(cat /proc/1/comm)" = "procd" ] && /etc/init.d/shellcrash enable
|
||||
ckcmd systemctl && [ "$(cat /proc/1/comm)" = "systemd" ] && systemctl enable shellcrash.service > /dev/null 2>&1
|
||||
rm -rf "$CRASHDIR"/.dis_startup
|
||||
autostart=enable
|
||||
#检测IP转发
|
||||
if [ "$(cat /proc/sys/net/ipv4/ip_forward)" = "0" ];then
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[33m检测到你的设备尚未开启ip转发,局域网设备将无法正常连接网络,是否立即开启?\033[0m"
|
||||
read -p "是否开启?(1/0) > " res
|
||||
[ "$res" = 1 ] && {
|
||||
echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
|
||||
sysctl -w net.ipv4.ip_forward=1
|
||||
} && echo "已成功开启ipv4转发,如未正常开启,请手动重启设备!" || echo "开启失败!请自行谷歌查找当前设备的开启方法!"
|
||||
fi
|
||||
#禁止docker启用的net.bridge.bridge-nf-call-iptables
|
||||
sysctl -w net.bridge.bridge-nf-call-iptables=0 > /dev/null 2>&1
|
||||
sysctl -w net.bridge.bridge-nf-call-ip6tables=0 > /dev/null 2>&1
|
||||
;;
|
||||
2)
|
||||
setconfig redir_mod "Redir模式"
|
||||
[ -n "$(echo $cputype | grep -E "linux.*mips.*")" ] && setconfig crashcore "clash"
|
||||
setconfig common_ports "OFF"
|
||||
setconfig firewall_area '2'
|
||||
;;
|
||||
3)
|
||||
mv -f $CFG_PATH.bak $CFG_PATH
|
||||
echo -e "\033[32m脚本设置已还原!\033[0m"
|
||||
echo -e "\033[33m请重新启动脚本!\033[0m"
|
||||
exit 0
|
||||
;;
|
||||
*)
|
||||
errornum
|
||||
forwhat
|
||||
;;
|
||||
esac
|
||||
}
|
||||
forwhat
|
||||
#检测小内存模式
|
||||
dir_size=$(dir_avail "$CRASHDIR")
|
||||
if [ "$dir_size" -lt 10240 ];then
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[33m检测到你的安装目录空间不足10M,是否开启小闪存模式?\033[0m"
|
||||
echo -e "\033[0m开启后核心及数据库文件将被下载到内存中,这将占用一部分内存空间\033[0m"
|
||||
echo -e "\033[0m每次开机后首次运行服务时都会自动的重新下载相关文件\033[0m"
|
||||
echo "-----------------------------------------------"
|
||||
read -p "是否开启?(1/0) > " res
|
||||
[ "$res" = 1 ] && {
|
||||
BINDIR=/tmp/ShellCrash
|
||||
setconfig BINDIR /tmp/ShellCrash "$CRASHDIR"/configs/command.env
|
||||
}
|
||||
fi
|
||||
#启用推荐的自动任务配置
|
||||
. "$CRASHDIR"/menus/5_task.sh && task_recom
|
||||
#小米设备软固化
|
||||
if [ "$systype" = "mi_snapshot" ];then
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[33m检测到为小米路由设备,启用软固化可防止路由升级后丢失SSH\033[0m"
|
||||
read -p "是否启用软固化功能?(1/0) > " res
|
||||
[ "$res" = 1 ] && mi_autoSSH
|
||||
fi
|
||||
#提示导入订阅或者配置文件
|
||||
[ ! -s "$CRASHDIR"/yamls/config.yaml -a ! -s "$CRASHDIR"/jsons/config.json ] && {
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[32m是否导入配置文件?\033[0m(这是运行前的最后一步)"
|
||||
echo -e "\033[0m你必须拥有一份配置文件才能运行服务!\033[0m"
|
||||
echo "-----------------------------------------------"
|
||||
read -p "现在开始导入?(1/0) > " res
|
||||
[ "$res" = 1 ] && inuserguide=1 && {
|
||||
. "$CRASHDIR"/menus/6_core_config.sh && set_core_config
|
||||
inuserguide=""
|
||||
}
|
||||
}
|
||||
#回到主界面
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[36m很好!现在只需要执行启动就可以愉快的使用了!\033[0m"
|
||||
echo "-----------------------------------------------"
|
||||
read -p "立即启动服务?(1/0) > " res
|
||||
[ "$res" = 1 ] && start_core && sleep 2
|
||||
return 0
|
||||
}
|
||||
Reference in New Issue
Block a user