@ -68,6 +68,44 @@ T[E29]="New features"
T[ C29] = "功能新增"
T[ C29] = "功能新增"
T[ E30] = "Upgrade failed. Feedback:[https://github.com/fscarmen/warp/issues]"
T[ E30] = "Upgrade failed. Feedback:[https://github.com/fscarmen/warp/issues]"
T[ C30] = "升级失败,问题反馈:[https://github.com/fscarmen/warp/issues]"
T[ C30] = "升级失败,问题反馈:[https://github.com/fscarmen/warp/issues]"
T[ E31] = "WARP+ or Teams account is working now. No need to upgrade."
T[ C31] = "已经是 WARP+ 或者 Teams 账户,不需要升级"
T[ E32] = "Cannot find the account file: /etc/wireguard/wgcf-account.toml, you can reinstall with the WARP+ License"
T[ C32] = "找不到账户文件:/etc/wireguard/wgcf-account.toml,可以卸载后重装,输入 WARP+ License"
T[ E33] = "Cannot find the configuration file: /etc/wireguard/wgcf.conf, you can reinstall with the WARP+ License"
T[ C33] = "找不到配置文件: /etc/wireguard/wgcf.conf,可以卸载后重装,输入 WARP+ Licens"
T[ E34] = "\n 1.Update with WARP+ license\n 2.Update with Teams (You need upload the Teams file to a private storage space before. For example: gist.github.com)\n"
T[ C34] = "\n 1.使用 WARP+ license 升级\n 2.使用 Teams 升级 (你须事前把 Teams 文件上传到私密存储空间,比如:gist.github.com )\n"
T[ E35] = "Successfully upgraded to a WARP+ account"
T[ C35] = "已升级为 WARP+ 账户"
T[ E36] = "Device name"
T[ C36] = "设备名"
T[ E37] = "WARP+ quota"
T[ C37] = "剩余流量"
T[ E38] = "The upgrade failed, WARP+ account error or more than 5 devices have been activated. Free WARP account to continu."
T[ C38] = "升级失败,WARP+ 账户错误或者已激活超过5台设备,自动更换免费 WARP 账户继续"
T[ E39] = "Successfully upgraded to a WARP Teams account"
T[ C39] = "已升级为 WARP Teams 账户"
T[ E40] = "Please enter the correct number"
T[ C40] = "请输入正确数字"
T[ E41] = "Please Input WARP+ license:"
T[ C41] = "请输入WARP+ License:"
T[ E42] = "License should be 26 characters, please re-enter WARP+ License. Otherwise press Enter to continue. \(\${i} times remaining\): "
T[ C42] = "License 应为26位字符,请重新输入 WARP+ License \(剩余\${i}次\): "
T[ E43] = "Please customize the WARP+ device name (Default is [WARP] if left blank):"
T[ C43] = "请自定义 WARP+ 设备名 (如果不输入,默认为 [WARP]):"
T[ E44] = "Please input Teams file URL (To use the one provided by the script if left blank):"
T[ C44] = "请输入 Teams 文件 URL (如果留空,则使用脚本提供的):"
T[ E45] = "( match √ )"
T[ C45] = "( 符合 √ )"
T[ E46] = "( mismatch X )"
T[ C46] = "( 不符合 X )"
T[ E47] = "\\\n Please confirm\\\n Private key\\\t: \$PRIVATEKEY \$MATCH1\\\n Public key\\\t: \$PUBLICKEY \$MATCH2\\\n Address IPv4\\\t: \$ADDRESS4/32 \$MATCH3\\\n Address IPv6\\\t: \$ADDRESS6/128 \$MATCH4\\\n"
T[ C47] = "\\\n 请确认Teams 信息\\\n Private key\\\t: \$PRIVATEKEY \$MATCH1\\\n Public key\\\t: \$PUBLICKEY \$MATCH2\\\n Address IPv4\\\t: \$ADDRESS4/32 \$MATCH3\\\n Address IPv6\\\t: \$ADDRESS6/128 \$MATCH4\\\n"
T[ E48] = "comfirm please enter [y] , and other keys to use free account:"
T[ C48] = "确认请按 y ,其他按键则使用免费账户:"
# 自定义字体彩色,read 函数,友道翻译函数
# 自定义字体彩色,read 函数,友道翻译函数
@ -159,7 +197,7 @@ net(){
# WARP 开关,先检查是否已安装,再根据当前状态转向相反状态
# WARP 开关,先检查是否已安装,再根据当前状态转向相反状态
onoff( ) {
onoff( ) {
! type -P wg-quick >/dev/null 2>& 1 && red " ${ T [ ${ L } 21 ] } " && exit 1
! type -p wg-quick >/dev/null 2>& 1 && red " ${ T [ ${ L } 21 ] } " && exit 1
[ [ -n $( sudo wg 2>/dev/null) ] ] && ( wg-quick down wgcf >/dev/null 2>& 1; green " ${ T [ ${ L } 22 ] } " ) || net
[ [ -n $( sudo wg 2>/dev/null) ] ] && ( wg-quick down wgcf >/dev/null 2>& 1; green " ${ T [ ${ L } 22 ] } " ) || net
}
}
@ -168,7 +206,7 @@ ver(){
sudo wget -N -P /etc/wireguard https://raw.githubusercontents.com/fscarmen/warp/main/pc/mac.sh
sudo wget -N -P /etc/wireguard https://raw.githubusercontents.com/fscarmen/warp/main/pc/mac.sh
chmod +x /etc/wireguard/mac.sh
chmod +x /etc/wireguard/mac.sh
sudo ln -sf /etc/wireguard/mac.sh /usr/local/bin/warp
sudo ln -sf /etc/wireguard/mac.sh /usr/local/bin/warp
green " ${ T [ ${ L } 28 ] } : $( grep ^VERSION /etc/wireguard/mac.sh | sed "s/.*=//g" ) ${ T [ ${ L } 29 ] } : $( grep " T\[ ${ L } 1] " /etc/wireguard/menu .sh | cut -d \" -f2) " || red " ${ T [ ${ L } 30 ] } "
green " ${ T [ ${ L } 28 ] } : $( grep ^VERSION /etc/wireguard/mac.sh | sed "s/.*=//g" ) ${ T [ ${ L } 29 ] } : $( grep " T\[ ${ L } 1] " /etc/wireguard/mac .sh | cut -d \" -f2) " || red " ${ T [ ${ L } 30 ] } "
exit
exit
}
}
@ -186,7 +224,7 @@ uninstall(){
install( ) {
install( ) {
# 进入工作目录
# 进入工作目录
cd /usr/local/bin
cd /usr/local/bin || exit
sudo mkdir -p /etc/wireguard/ >/dev/null 2>& 1
sudo mkdir -p /etc/wireguard/ >/dev/null 2>& 1
# 输入 Warp+ 账户(如有),限制位数为空或者26位以防输入错误
# 输入 Warp+ 账户(如有),限制位数为空或者26位以防输入错误
@ -204,12 +242,12 @@ install(){
start = $( date +%s)
start = $( date +%s)
# 安装 brew 和 wireguard-tools
# 安装 brew 和 wireguard-tools
green " \n${ T [ ${ L } 10 ] } \n "
green " \n ${ T [ ${ L } 10 ] } \n "
! type -p brew >/dev/null 2>& 1 && /bin/zsh -c " $( curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh) "
! type -p brew >/dev/null 2>& 1 && /bin/zsh -c " $( curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh) "
! type -p wg >/dev/null 2>& 1 && brew install wireguard-tools
! type -p wg >/dev/null 2>& 1 && brew install wireguard-tools
# 判断 wgcf 的最新版本并安装
# 判断 wgcf 的最新版本并安装
green " \n${ T [ ${ L } 11 ] } \n "
green " \n ${ T [ ${ L } 11 ] } \n "
latest = $( curl -fsSL "https://api.github.com/repos/ViRb3/wgcf/releases/latest" | grep "tag_name" | head -n 1 | cut -d : -f2 | sed 's/[ \"v,]//g' )
latest = $( curl -fsSL "https://api.github.com/repos/ViRb3/wgcf/releases/latest" | grep "tag_name" | head -n 1 | cut -d : -f2 | sed 's/[ \"v,]//g' )
latest = ${ latest :- '2.2.13' }
latest = ${ latest :- '2.2.13' }
curl -m8 -o /usr/local/bin/wgcf https://raw.githubusercontents.com/fscarmen/warp/main/wgcf/wgcf_" $latest " _darwin_amd64
curl -m8 -o /usr/local/bin/wgcf https://raw.githubusercontents.com/fscarmen/warp/main/wgcf/wgcf_" $latest " _darwin_amd64
@ -240,12 +278,13 @@ install(){
# 把 wgcf-profile.conf 复制到/etc/wireguard/ 并命名为 wgcf.conf
# 把 wgcf-profile.conf 复制到/etc/wireguard/ 并命名为 wgcf.conf
sudo cp -f wgcf-profile.conf /etc/wireguard/wgcf.conf
sudo cp -f wgcf-profile.conf /etc/wireguard/wgcf.conf
sudo cp -f /usr/local/bin/t.sh /etc/wireguard/mac.sh
sudo cp -f wgcf-profile.conf /etc/wireguard/wgcf-profile.conf
sudo cp -f /usr/local/bin/mac.sh /etc/wireguard/mac.sh
ln -sf /etc/wireguard/mac.sh /usr/local/bin/warp && green " ${ T [ ${ L } 27 ] } " && chmod +x /usr/local/bin/warp
ln -sf /etc/wireguard/mac.sh /usr/local/bin/warp && green " ${ T [ ${ L } 27 ] } " && chmod +x /usr/local/bin/warp
echo " $L " 2>& 1 | sudo tee /etc/wireguard/language
echo " $L " 2>& 1 | sudo tee /etc/wireguard/language
# 自动刷直至成功( warp bug,有时候获取不了ip地址)
# 自动刷直至成功( warp bug,有时候获取不了ip地址)
green " \n${ T [ ${ L } 12 ] } \n "
green " \n ${ T [ ${ L } 12 ] } \n "
unset IP4 IP6 WAN4 WAN6 COUNTRY4 COUNTRY6 ASNORG4 ASNORG6 TRACE4 TRACE6 PLUS4 PLUS6 WARPSTATUS4 WARPSTATUS6
unset IP4 IP6 WAN4 WAN6 COUNTRY4 COUNTRY6 ASNORG4 ASNORG6 TRACE4 TRACE6 PLUS4 PLUS6 WARPSTATUS4 WARPSTATUS6
net
net
@ -265,6 +304,66 @@ install(){
rm -f mac.sh wgcf-account.toml wgcf-profile.conf
rm -f mac.sh wgcf-account.toml wgcf-profile.conf
}
}
# 升级 WARP+ 账户(如有),限制位数为空或者26位以防输入错误,WARP interface 可以自定义设备名(不允许字符串间有空格,如遇到将会以_代替)
update_license( ) {
[ [ -z $LICENSE ] ] && reading " ${ T [ ${ L } 41 ] } " LICENSE
i = 5
until [ [ $LICENSE = ~ ^[ A-Z0-9a-z] { 8} -[ A-Z0-9a-z] { 8} -[ A-Z0-9a-z] { 8} $ ] ]
do ( ( i-- ) ) || true
[ [ $i = 0 ] ] && red " ${ T [ ${ L } 7 ] } " && exit 1 || reading " $( eval echo " ${ T [ ${ L } 42 ] } " ) " LICENSE
done
[ [ -z $NAME ] ] && reading " ${ T [ ${ L } 43 ] } " NAME
[ [ -n $NAME ] ] && NAME = " ${ NAME //[[ : space : ]]/_ } " || NAME = ${ NAME :- 'WARP' }
}
# 输入 Teams 账户 URL(如有)
input_url( ) {
[ [ -z $URL ] ] && reading " ${ T [ ${ L } 44 ] } " URL
URL = ${ URL :- 'https://gist.githubusercontent.com/fscarmen/56aaf02d743551737c9973b8be7a3496/raw/61bf63e68e4e91152545679b8f11c72cac215128/2021.12.21' }
TEAMS = $( curl -sSL " $URL " | sed "s/\"/\"/g" )
PRIVATEKEY = $( expr " $TEAMS " : '.*private_key">\([^<]*\).*' )
PUBLICKEY = $( expr " $TEAMS " : '.*public_key":"\([^&]*\).*' )
ADDRESS4 = $( expr " $TEAMS " : '.*v4":"\(172[^&]*\).*' )
ADDRESS6 = $( expr " $TEAMS " : '.*v6":"\([^[&]*\).*' )
[ [ $PRIVATEKEY = ~ ^[ A-Z0-9a-z/+] { 43} = $ ] ] && MATCH1 = ${ T [ ${ L } 45 ] } || MATCH1 = ${ T [ ${ L } 46 ] }
[ [ $PUBLICKEY = ~ ^[ A-Z0-9a-z/+] { 43} = $ ] ] && MATCH2 = ${ T [ ${ L } 45 ] } || MATCH2 = ${ T [ ${ L } 46 ] }
[ [ $ADDRESS4 = ~ ^172.16.[ 01] .[ 0-9] { 1,3} $ ] ] && MATCH3 = ${ T [ ${ L } 45 ] } || MATCH3 = ${ T [ ${ L } 46 ] }
[ [ $ADDRESS6 = ~ ^fd01( :[ 0-9a-f] { 0,4} ) { 7} $ ] ] && MATCH4 = ${ T [ ${ L } 45 ] } || MATCH4 = ${ T [ ${ L } 46 ] }
yellow " $( eval echo " ${ T [ ${ L } 47 ] } " ) " && reading " ${ T [ ${ L } 48 ] } " CONFIRM
}
update( ) {
# 不符合条件的脚本退出
! type -p wg-quick >/dev/null 2>& 1 && red " ${ T [ ${ L } 21 ] } " && exit 1
[ [ ! -e /etc/wireguard/wgcf-account.toml ] ] && red " ${ T [ ${ L } 32 ] } " && exit 1
[ [ ! -e /etc/wireguard/wgcf.conf ] ] && red " ${ T [ ${ L } 33 ] } " && exit 1
ip4_info; [ [ $TRACE4 = ~ plus ] ] && red " ${ T [ ${ L } 31 ] } " && exit 1
ip6_info; [ [ $TRACE6 = ~ plus ] ] && red " ${ T [ ${ L } 31 ] } " && exit 1
# 选择账户升级的类型
[ [ -z $LICENSETYPE ] ] && yellow " ${ T [ ${ L } 34 ] } " && reading " ${ T [ ${ L } 3 ] } " LICENSETYPE
case $LICENSETYPE in
1 ) update_license
cd /etc/wireguard || exit
sed -i '' " s#license_key.*#license_key = \" $LICENSE \"#g " wgcf-account.toml &&
wgcf update --name " $NAME " | sudo tee /etc/wireguard/info.log 2>& 1 &&
( wgcf generate >/dev/null 2>& 1
sed -i '' " 2s#.*# $( sed -ne 2p wgcf-profile.conf) #;3s#.*# $( sed -ne 3p wgcf-profile.conf) #;4s#.*# $( sed -ne 4p wgcf-profile.conf) # " wgcf.conf
wg-quick down wgcf >/dev/null 2>& 1
net
[ [ $( curl -ks4 https://www.cloudflare.com/cdn-cgi/trace | grep warp | sed "s/warp=//g" ) = plus || $( curl -ks6 https://www.cloudflare.com/cdn-cgi/trace | grep warp | sed "s/warp=//g" ) = plus ] ] &&
green " ${ T [ ${ L } 35 ] } \n ${ T [ ${ L } 36 ] } : $( grep 'Device name' /etc/wireguard/info.log | awk '{ print $NF }' ) \n ${ T [ ${ L } 37 ] } : $( grep Quota /etc/wireguard/info.log | awk '{ print $(NF-1), $NF }' ) " ) || red " ${ T [ ${ L } 38 ] } " ; ;
2 ) input_url
[ [ $CONFIRM = [ Yy] ] ] && ( echo " $TEAMS " | sudo tee /etc/wireguard/info.log 2>& 1
sed -i '' " s#PrivateKey.*#PrivateKey = $PRIVATEKEY #g;s#Address.*32#Address = ${ ADDRESS4 } /32#g;s#Address.*128#Address = ${ ADDRESS6 } /128#g;s#PublicKey.*#PublicKey = $PUBLICKEY #g " /etc/wireguard/wgcf.conf
wg-quick down wgcf >/dev/null 2>& 1; net
[ [ $( curl -ks4 https://www.cloudflare.com/cdn-cgi/trace | grep warp | sed "s/warp=//g" ) = plus || $( curl -ks6 https://www.cloudflare.com/cdn-cgi/trace | grep warp | sed "s/warp=//g" ) = plus ] ] && green " ${ T [ ${ L } 39 ] } " ) ; ;
* ) red " ${ T [ ${ L } 40 ] } [1-2] " ; sleep 1; update
esac
}
# 传参选项 OPTION
# 传参选项 OPTION
[ [ $1 != '[option]' ] ] && OPTION = $( tr '[:upper:]' '[:lower:]' <<< " $1 " )
[ [ $1 != '[option]' ] ] && OPTION = $( tr '[:upper:]' '[:lower:]' <<< " $1 " )
@ -276,6 +375,7 @@ e ) L=E; check_operating_system; install;;
c ) L = C; check_operating_system; install; ;
c ) L = C; check_operating_system; install; ;
u ) uninstall; ;
u ) uninstall; ;
v ) ver; ;
v ) ver; ;
a ) update; ;
n ) net; ;
n ) net; ;
o ) onoff; ;
o ) onoff; ;
* ) help; ;
* ) help; ;