@ -2,14 +2,14 @@
export LANG = en_US.UTF-8
# 当前脚本版本号和新增功能
VERSION = 2.42
VERSION = 2.43
declare -A T
T[ E0] = "\n Language:\n 1.English (default) \n 2.简体中文\n"
T[ C0] = " ${ T [E0] } "
T[ E1] = "1.Add shortcut hints in the menu; 2.Remove the shortcut of S. Single and dual stacks swithing can directly use [warp 4/6/d] "
T[ C1] = "1.在菜单中增加快捷方式的提示; 2.移除快捷方式 s,单双栈相互切换可以直接 [warp 4/6/d] "
T[ E1] = "1. Support NAT VPS "
T[ C1] = "1. 支持 NAT 服务器 "
T[ E2] = "The script must be run as root, you can enter sudo -i and then download and run again. Feedback: [https://github.com/fscarmen/warp/issues]"
T[ C2] = "必须以root方式运行脚本,可以输入 sudo -i 后重新下载运行,问题反馈:[https://github.com/fscarmen/warp/issues]"
T[ E3] = "The TUN module is not loaded. You should turn it on in the control panel. Ask the supplier for more help. Feedback: [https://github.com/fscarmen/warp/issues]"
@ -422,8 +422,8 @@ check_operating_system(){
# 安装 curl
check_dependencies( ) {
type -P curl >/dev/null 2>& 1 || ( yellow " ${ T [ ${ L } 7 ] } " && ${ PACKAGE_INSTALL [int] } curl) || ( yellow " ${ T [ ${ L } 8 ] } " && ${ PACKAGE_UPDATE [int] } && ${ PACKAGE_INSTALL [int] } curl)
! type -P curl >/dev/null 2>& 1 && red " ${ T [ ${ L } 9 ] } " && exit 1
type -p curl >/dev/null 2>& 1 || ( yellow " ${ T [ ${ L } 7 ] } " && ${ PACKAGE_INSTALL [int] } curl 2>/dev/nul l) || ( yellow " ${ T [ ${ L } 8 ] } " && ${ PACKAGE_UPDATE [int] } && ${ PACKAGE_INSTALL [int] } curl 2>/dev/nul l)
! type -p curl >/dev/null 2>& 1 && red " ${ T [ ${ L } 9 ] } " && exit 1
[ [ $SYSTEM = Alpine ] ] && ! type -P curl >/dev/null 2>& 1 && ${ PACKAGE_UPDATE [int] } && ${ PACKAGE_INSTALL [int] } curl wget grep
}
@ -431,7 +431,6 @@ check_dependencies(){
ip4_info( ) {
unset IP4 LAN4 COUNTRY4 ASNORG4 TRACE4 PLUS4 WARPSTATUS4
IP4 = $( curl -ks4m8 https://ip.gs/json $INTERFACE )
LAN4 = $( ip route get 162.159.193.10 2>/dev/null | grep -oP 'src \K\S+' )
WAN4 = $( expr " $IP4 " : '.*ip\":\"\([^"]*\).*' )
COUNTRY4 = $( expr " $IP4 " : '.*country\":\"\([^"]*\).*' )
ASNORG4 = $( expr " $IP4 " : '.*asn_org\":\"\([^"]*\).*' )
@ -445,7 +444,6 @@ ip4_info(){
ip6_info( ) {
unset IP6 LAN6 COUNTRY6 ASNORG6 TRACE6 PLUS6 WARPSTATUS6
IP6 = $( curl -ks6m8 https://ip.gs/json)
LAN6 = $( ip route get 2606:4700:d0::a29f:c001 2>/dev/null | grep -oP 'src \K\S+' )
WAN6 = $( expr " $IP6 " : '.*ip\":\"\([^"]*\).*' )
COUNTRY6 = $( expr " $IP6 " : '.*country\":\"\([^"]*\).*' )
ASNORG6 = $( expr " $IP6 " : '.*asn_org\":\"\([^"]*\).*' )
@ -859,23 +857,29 @@ check_stack(){
if [ [ -e /etc/wireguard/wgcf.conf ] ] ; then
grep -q "^#.*0\.\0\/0" /etc/wireguard/wgcf.conf && T4 = 0 || T4 = 1
grep -q "^#.*\:\:\/0" /etc/wireguard/wgcf.conf && T6 = 0 || T6 = 1
else
else
case " $TRACE4 " in off ) T4 = '0' ; ; 'on' | 'plus' ) T4 = '1' ; ; esac
case " $TRACE6 " in off ) T6 = '0' ; ; 'on' | 'plus' ) T6 = '1' ; ; esac
fi
CASE = ( "@0" "0@" "0@0" "@1" "0@1" "1@" "1@0" "1@1" )
for ( ( m = 0; m<${# CASE [@] } ; m++) ) ; do [ [ $T4 @$T6 = ${ CASE [m] } ] ] && break; done
NATIVE = ( "IPv6 only" "IPv4 only" " ${ T [ ${ L } 69 ] } " )
CONF1 = ( "014" "104" "114" )
CONF2 = ( "016" "106" "116" )
CONF3 = ( "01D" "10D" "11D" )
WARP_BEFORE = ( "" "" "" "WARP IPv6 only" "WARP IPv6" "WARP IPv4 only" "WARP IPv4" " ${ T [ ${ L } 70 ] } " )
WARP_AFTER1 = ( "" "" "" "WARP IPv4" "WARP IPv4" "WARP IPv6" "WARP IPv6" "WARP IPv4" )
WARP_AFTER2 = ( "" "" "" " ${ T [ ${ L } 70 ] } " " ${ T [ ${ L } 70 ] } " " ${ T [ ${ L } 70 ] } " " ${ T [ ${ L } 70 ] } " "WARP IPv6" )
TO1 = ( "" "" "" "014" "014" "106" "106" "114" )
TO2 = ( "" "" "" "01D" "01D" "10D" "10D" "116" )
SHORTCUT1 = ( "" "" "" "(warp-go 4)" "(warp-go 4)" "(warp-go 6)" "(warp-go 6)" "(warp-go 4)" )
SHORTCUT2 = ( "" "" "" "(warp-go d)" "(warp-go d)" "(warp-go d)" "(warp-go d)" "(warp-go 6)" )
SHORTCUT1 = ( "" "" "" "(warp 4)" "(warp 4)" "(warp 6)" "(warp 6)" "(warp 4)" )
SHORTCUT2 = ( "" "" "" "(warp d)" "(warp d)" "(warp d)" "(warp d)" "(warp 6)" )
# 判断用于检测 NAT VSP,以选择正确配置文件
if [ " $m " -le 3 ] ; then
NAT = ( "0@1" "0@1" "1@1" )
for ( ( n = 0; n<${# NAT [@] } ; n++) ) ; do [ " $IPV4 @ $IPV6 " = " ${ NAT [n] } " ] && break; done
CONF1 = ( "014" "104" "114" )
CONF2 = ( "016" "106" "116" )
CONF3 = ( "01D" "10D" "11D" )
fi
}
# 单双栈在线互换。先看菜单是否有选择,再看传参数值,再没有显示2个可选项
@ -932,33 +936,30 @@ EOF
fi
fi
# 判断是否大陆 VPS。先尝试连接 CloudFlare WARP 服务的 Endpoint IP,如遇到 WARP 断网则先关闭、杀进程后重试一次,仍然不通则 WARP 项目不可用。
ping6 -c2 -w8 2606:4700:d0::a29f:c001 >/dev/null 2>& 1 && IPV6 = 1 && CDN = -6 || IPV6 = 0
ping -c2 -W8 162.159.193.10 >/dev/null 2>& 1 && IPV4 = 1 && CDN = -4 || IPV4 = 0
if [ [ $IPV4 $IPV6 = 00 && -n $( wg 2>/dev/null) ] ] ; then
wg-quick down wgcf >/dev/null 2>& 1
kill -9 $( pgrep -f wireguard 2>/dev/null)
ping6 -c2 -w10 2606:4700:d0::a29f:c001 >/dev/null 2>& 1 && IPV6 = 1 && CDN = -6
ping -c2 -W10 162.159.193.10 >/dev/null 2>& 1 && IPV4 = 1 && CDN = -4
fi
# 判断处理器架构
case $( uname -m) in
aarch64 ) ARCHITECTURE = arm64; AMD64_ONLY = " ${ T [ ${ L } 156 ] } " ; ;
x86_64 ) ARCHITECTURE = amd64; ;
s390x ) ARCHITECTURE = s390x; AMD64_ONLY = " ${ T [ ${ L } 156 ] } " ; ;
* ) red " $( eval echo " ${ T [ ${ L } 134 ] } " ) " && exit 1; ;
esac
# 判断机器原生状态类型
LAN4 = $( ip route get 192.168.193.10 2>/dev/null | grep -oP 'src \K\S+' )
LAN6 = $( ip route get 2606:4700:d0::a29f:c001 2>/dev/null | grep -oP 'src \K\S+' )
[ -n " $LAN4 " ] && IPV4 = 1 || IPV4 = 0
[ -n " $LAN6 " ] && IPV6 = 1 || IPV6 = 0
[ -n " $LAN4 " ] && ping -c2 -W3 162.159.193.10 >/dev/null 2>& 1 && CDN = -4 || CDN = -6
# 判断当前 IPv4 与 IPv6 ,IP归属 及 WARP 方案, Linux Client 是否开启
[ [ $IPV4 = 1 ] ] && ip4_info
[ [ $IPV6 = 1 ] ] && ip6_info
[ " $IPV4 " = 1 ] && ip4_info
[ " $IPV6 " = 1 ] && ip6_info
[ [ $L = C && -n " $COUNTRY4 " ] ] && COUNTRY4 = $( translate " $COUNTRY4 " )
[ [ $L = C && -n " $COUNTRY6 " ] ] && COUNTRY6 = $( translate " $COUNTRY6 " )
# 判断当前 WARP 状态,决定变量 PLAN,变量 PLAN 含义:1=单栈 2=双栈 3=WARP已开启
[ [ $TRACE4 $TRACE6 = ~ on| plus ] ] && PLAN = 3 || PLAN = $(( IPV4+IPV6))
# 判断处理器架构
case $( uname -m) in
aarch64 ) ARCHITECTURE = arm64; AMD64_ONLY = " ${ T [ ${ L } 156 ] } " ; ;
x86_64 ) ARCHITECTURE = amd64; ;
s390x ) ARCHITECTURE = s390x; AMD64_ONLY = " ${ T [ ${ L } 156 ] } " ; ;
* ) red " $( eval echo " ${ T [ ${ L } 134 ] } " ) " && exit 1; ;
esac
# 判断当前 Linux Client 状态,决定变量 CLIENT,变量 CLIENT 含义:0=未安装 1=已安装未激活 2=状态激活 3=Clinet proxy 已开启 5=Clinet warp 已开启
CLIENT = 0
if type -P warp-cli >/dev/null 2>& 1; then