From c12d59231de1c0fba0cf25259b053334a0a238b8 Mon Sep 17 00:00:00 2001 From: juewuy Date: Sat, 12 Dec 2020 13:30:00 +0800 Subject: [PATCH] =?UTF-8?q?v1.0.0beta17.7=20~=E4=BF=AE=E5=A4=8D=E5=AE=9A?= =?UTF-8?q?=E6=97=B6=E6=9B=B4=E6=96=B0=E8=AE=A2=E9=98=85=E6=97=B6=E4=B8=8D?= =?UTF-8?q?=E4=BC=9A=E9=87=8D=E5=90=AFclash=E6=9C=8D=E5=8A=A1=E7=9A=84bug?= =?UTF-8?q?=20~=E4=BC=98=E5=8C=96=E8=AF=AD=E5=8F=A5=E7=BB=93=E6=9E=84?= =?UTF-8?q?=EF=BC=8C=E4=BF=AE=E5=A4=8D=E9=83=A8=E5=88=86=E6=83=85=E5=86=B5?= =?UTF-8?q?=E4=B8=8B=E8=8F=9C=E5=8D=95=E5=B1=82=E7=BA=A7=E9=94=99=E4=B9=B1?= =?UTF-8?q?=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/clash.sh | 207 +++++++++++++++++++++++---------------------- scripts/getdate.sh | 1 + 2 files changed, 108 insertions(+), 100 deletions(-) diff --git a/scripts/clash.sh b/scripts/clash.sh index 74f24ae..4f59825 100644 --- a/scripts/clash.sh +++ b/scripts/clash.sh @@ -124,6 +124,8 @@ clashstart(){ } #功能相关 setport(){ + [ -z "$secret" ] && secret=未设置 + [ -z "$authentication" ] && authentication=未设置 inputport(){ read -p "请输入端口号(1000-65535) > " portx if [ -z "$portx" ]; then @@ -143,19 +145,6 @@ setport(){ setport fi } - source $ccfg - [ -z "$secret" ] && secret=未设置 - [ -z "$authentication" ] && authentication=未设置 - if [ -n "$(pidof clash)" ];then - echo ----------------------------------------------- - echo -e "\033[33m检测到clash服务正在运行,需要先停止clash服务!\033[0m" - read -p "是否停止clash服务?(1/0) > " res - if [ "$res" = "1" ];then - $clashdir/start.sh stop - else - clashadv - fi - fi echo ----------------------------------------------- echo -e " 1 修改Http/Sock5端口: \033[36m$mix_port\033[0m" echo -e " 2 设置Http/Sock5密码: \033[36m$authentication\033[0m" @@ -234,22 +223,13 @@ setport(){ fi } setdns(){ - source $ccfg - if [ "$dns_no" = "已禁用" ];then - read -p "检测到内置DNS已被禁用,是否启用内置DNS?(1/0) > " res - if [ "$res" = "1" ];then - sed -i "/dns_no*/"d $ccfg - else - clashadv - fi - fi [ -z "$dns_nameserver" ] && dns_nameserver='114.114.114.114, 223.5.5.5' [ -z "$dns_fallback" ] && dns_fallback='1.0.0.1, 8.8.4.4' echo ----------------------------------------------- echo -e "当前基础DNS:\033[32m$dns_nameserver\033[0m" echo -e "fallbackDNS:\033[36m$dns_fallback\033[0m" echo -e "多个DNS地址请用\033[30;47m | \033[0m分隔一次性输入" - echo -e "\033[33m使用redir-host时,fallback组暂不支持tls或者https形式的DNS\033[0m" + echo -e "\033[33m必须拥有本地根证书文件才能使用dot/doh类型的加密dns\033[0m" echo ----------------------------------------------- echo -e " 1 修改\033[32m基础DNS\033[0m" echo -e " 2 修改\033[36mfallback_DNS\033[0m" @@ -260,7 +240,6 @@ setdns(){ read -p "请输入对应数字 > " num if [ -z "$num" ]; then errornum - clashadv elif [ "$num" = 1 ]; then read -p "请输入新的DNS > " dns_nameserver dns_nameserver=$(echo $dns_nameserver | sed 's/|/\,\ /g') @@ -268,30 +247,30 @@ setdns(){ setconfig dns_nameserver \'"$dns_nameserver"\' echo -e "\033[32m设置成功!!!\033[0m" fi + setdns elif [ "$num" = 2 ]; then read -p "请输入新的DNS > " dns_fallback dns_fallback=$(echo $dns_fallback | sed 's/|/\,\ /g') if [ -n "$dns_fallback" ]; then setconfig dns_fallback \'"$dns_fallback"\' echo -e "\033[32m设置成功!!!\033[0m" - fi + fi + setdns elif [ "$num" = 3 ]; then dns_nameserver="" dns_fallback="" sed -i "/dns_nameserver*/"d $ccfg sed -i "/dns_fallback*/"d $ccfg echo -e "\033[33mDNS配置已重置!!!\033[0m" + setdns elif [ "$num" = 4 ]; then echo ----------------------------------------------- echo -e "\033[31m仅限搭配其他DNS服务(比如dnsmasq、smartDNS)时使用!\033[0m" dns_no=已禁用 setconfig dns_no $dns_no echo -e "\033[33m已禁用内置DNS!!!\033[0m" - clashadv - else - clashadv + setdns fi - setdns } checkport(){ for portx in $dns_port $mix_port $redir_port $db_port ;do @@ -321,7 +300,7 @@ macfilter(){ echo ----------------------------------------------- read -p "请输入对应序号或直接输入mac地址 > " num if [ -z "$num" -o "$num" = 0 ]; then - macfilter + i= elif [ -n "$(echo $num | grep -E '^([0-9A-Fa-f]{2}[:]){5}([0-9A-Fa-f]{2})$')" ];then if [ -z "$(cat $clashdir/mac | grep -E "$num")" ];then echo $num | grep -oE '^([0-9A-Fa-f]{2}[:]){5}([0-9A-Fa-f]{2})$' >> $clashdir/mac @@ -329,6 +308,7 @@ macfilter(){ echo ----------------------------------------------- echo -e "\033[31m已添加的设备,请勿重复添加!\033[0m" fi + add_mac elif [ $num -le $(cat $dhcpdir | awk 'END{print NR}') 2>/dev/null ]; then macadd=$(cat $dhcpdir | awk '{print $2}' | sed -n "$num"p) if [ -z "$(cat $clashdir/mac | grep -E "$macadd")" ];then @@ -337,41 +317,43 @@ macfilter(){ echo ----------------------------------------------- echo -e "\033[31m已添加的设备,请勿重复添加!\033[0m" fi + add_mac else echo ----------------------------------------------- echo -e "\033[31m输入有误,请重新输入!\033[0m" + add_mac fi - add_mac } del_mac(){ echo ----------------------------------------------- if [ -z "$(cat $clashdir/mac)" ];then echo -e "\033[31m列表中没有需要移除的设备!\033[0m" - macfilter - fi - echo -e "\033[33m序号 设备IP 设备mac地址 设备名称\033[0m" - i=1 - for mac in $(cat $clashdir/mac); do - dev_ip=$(cat $dhcpdir | grep $mac | awk '{print $3}') && [ -z "$dev_ip" ] && dev_ip='000.000.00.00' - dev_mac=$(cat $dhcpdir | grep $mac | awk '{print $2}') && [ -z "$dev_mac" ] && dev_mac=$mac - dev_name=$(cat $dhcpdir | grep $mac | awk '{print $4}') && [ -z "$dev_name" ] && dev_name='未知设备' - 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 - if [ -z "$num" ]||[ "$num" -le 0 ]; then - macfilter - elif [ $num -le $(cat $clashdir/mac | wc -l) ];then - sed -i "${num}d" $clashdir/mac - echo ----------------------------------------------- - echo -e "\033[32m对应设备已移除!\033[0m" else + echo -e "\033[33m序号 设备IP 设备mac地址 设备名称\033[0m" + i=1 + for mac in $(cat $clashdir/mac); do + dev_ip=$(cat $dhcpdir | grep $mac | awk '{print $3}') && [ -z "$dev_ip" ] && dev_ip='000.000.00.00' + dev_mac=$(cat $dhcpdir | grep $mac | awk '{print $2}') && [ -z "$dev_mac" ] && dev_mac=$mac + dev_name=$(cat $dhcpdir | grep $mac | awk '{print $4}') && [ -z "$dev_name" ] && dev_name='未知设备' + 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[31m输入有误,请重新输入!\033[0m" + echo -e "\033[0m 0 或回车 结束删除" + read -p "请输入需要移除的设备的对应序号 > " num + if [ -z "$num" ]||[ "$num" -le 0 ]; then + n= + elif [ $num -le $(cat $clashdir/mac | wc -l) ];then + sed -i "${num}d" $clashdir/mac + echo ----------------------------------------------- + echo -e "\033[32m对应设备已移除!\033[0m" + del_mac + else + echo ----------------------------------------------- + echo -e "\033[31m输入有误,请重新输入!\033[0m" + del_mac + fi fi - del_mac } echo ----------------------------------------------- [ -f /var/lib/dhcp/dhcpd.leases ] && dhcpdir='/var/lib/dhcp/dhcpd.leases' @@ -403,9 +385,8 @@ macfilter(){ read -p "请输入对应数字 > " num if [ -z "$num" ]; then errornum - clashcfg elif [ "$num" = 0 ]; then - clashcfg + i= elif [ "$num" = 1 ]; then macfilter_type=$macfilter_over setconfig macfilter_type $macfilter_type @@ -414,8 +395,10 @@ macfilter(){ macfilter elif [ "$num" = 2 ]; then add_mac + macfilter elif [ "$num" = 3 ]; then del_mac + macfilter elif [ "$num" = 4 ]; then :>$clashdir/mac echo ----------------------------------------------- @@ -493,32 +476,38 @@ localproxy(){ } clashcfg(){ set_redir_mod(){ + set_redir_config(){ + setconfig redir_mod $redir_mod + setconfig dns_mod $dns_mod + echo ----------------------------------------------- + echo -e "\033[36m已设为 $redir_mod !!\033[0m" + } echo ----------------------------------------------- echo -e "当前代理模式为:\033[47;30m $redir_mod \033[0m;Clash核心为:\033[47;30m $clashcore \033[0m" echo -e "\033[33m切换模式后需要手动重启clash服务以生效!\033[0m" echo -e "\033[36mTun及混合模式必须使用clashpre核心!\033[0m" echo ----------------------------------------------- - echo " 1 Redir模式:CPU以及内存占用较低" - echo " 但不支持UDP流量转发" - echo " 适合非游戏用户使用" - echo " 2 Tun模式: 支持UDP转发且延迟最低" - echo " CPU占用极高,只支持fake-ip模式" - echo " 适合游戏用户、非大流量用户" - echo " 3 混合模式: 使用redir转发TCP,Tun转发UPD" - echo " 速度较快,内存占用略高" - echo " 适合游戏用户、综合用户" - echo " 4 纯净模式: 不设置iptables静态路由" - echo " 必须手动配置http/sock5代理" - echo " 或使用内置的PAC文件配置代理" + echo -e " 1 Redir模式:CPU以及内存\033[33m占用较低\033[0m" + echo -e " 但\033[31m不支持UDP\033[0m流量转发" + echo -e " 适合\033[32m非游戏用户\033[0m使用" + echo -e " 2 Tun模式: \033[33m支持UDP转发\033[0m且延迟最低" + echo -e " \033[31mCPU占用极高\033[0m,只支持fake-ip模式" + echo -e " 适合\033[32m游戏用户、非大流量用户\033[0m" + echo -e " 3 混合模式: 使用redir转发TCP,Tun转发UPD" + echo -e " \033[33m速度较快\033[0m,\033[31m内存占用略高\033[0m" + echo -e " 适合\033[32m游戏用户、综合用户\033[0m" + echo -e " 4 纯净模式: 不设置iptables静态路由" + echo -e " 必须\033[33m手动配置\033[0mhttp/sock5代理" + echo -e " 或使用内置的PAC文件配置代理" echo " 0 返回上级菜单" read -p "请输入对应数字 > " num if [ -z "$num" ]; then errornum - clashcfg elif [ "$num" = 0 ]; then - clashcfg + i= elif [ "$num" = 1 ]; then redir_mod=Redir模式 + set_redir_config elif [ "$num" = 2 ]; then modinfo tun >/dev/null 2>&1 if [ "$?" != 0 ];then @@ -528,6 +517,7 @@ clashcfg(){ if [ "$res" = 1 ];then redir_mod=Tun模式 dns_mod=fake-ip + set_redir_config else set_redir_mod fi @@ -535,10 +525,10 @@ clashcfg(){ echo ----------------------------------------------- echo -e "\033[31m当前核心不支持开启Tun模式!请先切换clash核心!!!\033[0m" sleep 1 - clashcfg else redir_mod=Tun模式 dns_mod=fake-ip + set_redir_config fi elif [ "$num" = 3 ]; then modinfo tun >/dev/null 2>&1 @@ -547,6 +537,7 @@ clashcfg(){ read -p "是否强制开启?可能无法正常使用!(1/0) > " res if [ "$res" = 1 ];then redir_mod=混合模式 + set_redir_config else set_redir_mod fi @@ -554,12 +545,13 @@ clashcfg(){ echo ----------------------------------------------- echo -e "\033[31m当前核心不支持开启Tun模式!请先切换clash核心!!!\033[0m" sleep 1 - clashcfg else redir_mod=混合模式 + set_redir_config fi elif [ "$num" = 4 ]; then - redir_mod=纯净模式 + redir_mod=纯净模式 + set_redir_config echo ----------------------------------------------- echo -e "\033[33m当前模式需要手动在设备WiFi或应用中配置HTTP或sock5代理\033[0m" echo -e "HTTP/SOCK5代理服务器地址:\033[30;47m$host\033[0m;端口均为:\033[30;47m$mix_port\033[0m" @@ -569,40 +561,37 @@ clashcfg(){ sleep 2 else errornum - clashcfg fi - setconfig redir_mod $redir_mod - setconfig dns_mod $dns_mod - echo ----------------------------------------------- - echo -e "\033[36m已设为 $redir_mod !!\033[0m" + } set_dns_mod(){ echo ----------------------------------------------- echo -e "当前DNS运行模式为:\033[47;30m $dns_mod \033[0m" echo -e "\033[33m切换模式后需要手动重启clash服务以生效!\033[0m" echo ----------------------------------------------- - echo " 1 fake-ip模式: 响应速度更快" - echo " 可能与某些局域网设备有冲突" - echo " 2 redir_host模式:兼容性更好" - echo " 不支持Tun模式,可能存在DNS污染" + echo -e " 1 fake-ip模式: \033[32m响应速度更快\033[0m" + echo -e " 可能与某些局域网设备有冲突" + echo -e " 2 redir_host模式:\033[32m兼容性更好\033[0m" + echo -e " 不支持Tun模式,可能存在DNS污染" echo " 0 返回上级菜单" read -p "请输入对应数字 > " num if [ -z "$num" ]; then errornum - clashcfg elif [ "$num" = 0 ]; then - clashcfg + i= elif [ "$num" = 1 ]; then dns_mod=fake-ip + setconfig dns_mod $dns_mod + echo ----------------------------------------------- + echo -e "\033[36m已设为 $dns_mod 模式!!\033[0m" elif [ "$num" = 2 ]; then dns_mod=redir_host + setconfig dns_mod $dns_mod + echo ----------------------------------------------- + echo -e "\033[36m已设为 $dns_mod 模式!!\033[0m" else errornum - clashcfg fi - setconfig dns_mod $dns_mod - echo ----------------------------------------------- - echo -e "\033[36m已设为 $dns_mod 模式!!\033[0m" } #获取设置默认显示 @@ -620,7 +609,7 @@ clashcfg(){ echo -e " 2 切换DNS运行模式: \033[36m$dns_mod\033[0m" echo -e " 3 跳过本地证书验证: \033[36m$skip_cert\033[0m ————解决节点证书验证错误" echo -e " 4 只代理常用端口: \033[36m$common_ports\033[0m ————用于过滤P2P流量" - echo -e " 5 过滤局域网设备: \033[36m$mac_return\033[0m ————当前为$macfilter_type模式" + echo -e " 5 过滤局域网设备: \033[36m$mac_return\033[0m ————使用黑名单/白名单进行过滤" echo -e " 6 设置本机代理服务: \033[36m$local_proxy\033[0m ————使用环境变量或GUI/api配置本机代理" echo ----------------------------------------------- echo -e " 9 \033[32m重启\033[0mclash服务" @@ -671,6 +660,7 @@ clashcfg(){ elif [ "$num" = 5 ]; then macfilter + clashcfg elif [ "$num" = 6 ]; then localproxy @@ -796,11 +786,31 @@ clashadv(){ clashadv elif [ "$num" = 5 ]; then - setdns + source $ccfg + if [ "$dns_no" = "已禁用" ];then + read -p "检测到内置DNS已被禁用,是否启用内置DNS?(1/0) > " res + if [ "$res" = "1" ];then + sed -i "/dns_no*/"d $ccfg + setdns + fi + else + setdns + fi clashadv elif [ "$num" = 6 ]; then - setport + source $ccfg + if [ -n "$(pidof clash)" ];then + echo ----------------------------------------------- + echo -e "\033[33m检测到clash服务正在运行,需要先停止clash服务!\033[0m" + read -p "是否停止clash服务?(1/0) > " res + if [ "$res" = "1" ];then + $clashdir/start.sh stop + setport + fi + else + setport + fi clashadv elif [ "$num" = 7 ]; then @@ -864,15 +874,13 @@ clashcron(){ read -p "请输入对应数字 > " num if [ -z "$num" ]; then errornum - clashcron elif [ "$num" = 0 ]; then - clashcron + i= elif [ "$num" = 9 ]; then crontab -l > /tmp/conf && sed -i "/$cronname/d" /tmp/conf && crontab /tmp/conf rm -f /tmp/conf echo ----------------------------------------------- echo -e "\033[31m定时任务:$cronname已删除!\033[0m" - clashcron elif [ "$num" = 8 ]; then week='*' week1=每天 @@ -917,7 +925,6 @@ clashcron(){ echo ----------------------------------------------- echo -e "\033[31m定时任务已添加!!!\033[0m" fi - clashcron } #定时任务菜单 echo ----------------------------------------------- @@ -936,31 +943,30 @@ clashcron(){ read -p "请输入对应数字 > " num if [ -z "$num" ]; then errornum - clashsh - elif [ "$num" = 0 ]; then - clashsh - + i= elif [ "$num" = 1 ]; then cronname=重启clash服务 cronset="$clashdir/start.sh restart" setcron + clashcron elif [ "$num" = 2 ]; then cronname=停止clash服务 cronset="$clashdir/start.sh stop" setcron + clashcron elif [ "$num" = 3 ]; then cronname=开启clash服务 cronset="$clashdir/start.sh start" setcron + clashcron elif [ "$num" = 4 ]; then cronname=更新订阅链接 cronset="$clashdir/start.sh updateyaml" setcron - + clashcron else errornum - clashsh fi } #主菜单 @@ -1024,6 +1030,7 @@ clashsh(){ elif [ "$num" = 5 ]; then clashcron + clashsh elif [ "$num" = 6 ]; then source $clashdir/getdate.sh && clashlink diff --git a/scripts/getdate.sh b/scripts/getdate.sh index b49fb60..23ca75b 100644 --- a/scripts/getdate.sh +++ b/scripts/getdate.sh @@ -309,6 +309,7 @@ clashlink(){ elif [ "$num" = 5 ];then clashcron + clashlink else errornum clashlink