IPv6 Only VPS

Share on:

IPv6-only VPS可用的V2ray和SS脚本

一键安装

1bash <(curl -sL https://scaleya.netlify.com/share/v2ray233_6.sh)

Ubuntu刷新dns缓存

1sudo systemd-resolve --flush-caches

vultr特别版

tcp

 1#!/bin/bash
 2# tcp 
 3# 9184
 4apt-get update
 5echo "1
 6
 7
 8
 9
10
11
12
13
14
15
16"|bash <(curl -sL https://scaleya.netlify.com/share/v2ray233_6.sh)

kcp

 1#!/bin/bash
 2# mkcp 
 3# 9184
 4apt-get update
 5echo "1
 66
 7
 8
 9
10
11
12
13
14
15
16"|bash <(curl -sL https://scaleya.netlify.com/share/v2ray233_6.sh)

ss + tcp v2ray

 1#!/bin/bash
 2# ss tcp v2ray
 3# 9184
 4apt-get update
 5echo "1
 6
 7
 8
 9y
10
11
12
13
14
15
16
17
18"|bash <(curl -sL https://scaleya.netlify.com/share/v2ray233_6.sh)
19

ss + mkcp v2ray

 1#!/bin/bash
 2# ss mkcp v2ray
 3# 9184
 4apt-get update
 5echo "1
 66
 7
 8
 9y
10
11
12
13
14
15
16
17
18"|bash <(curl -sL https://scaleya.netlify.com/share/v2ray233_6.sh)
19

content install.sh

   1#!/bin/bash
   2
   3red='\e[91m'
   4green='\e[92m'
   5yellow='\e[93m'
   6magenta='\e[95m'
   7cyan='\e[96m'
   8none='\e[0m'
   9_red() { echo -e ${red}$*${none}; }
  10_green() { echo -e ${green}$*${none}; }
  11_yellow() { echo -e ${yellow}$*${none}; }
  12_magenta() { echo -e ${magenta}$*${none}; }
  13_cyan() { echo -e ${cyan}$*${none}; }
  14
  15# Root
  16[[ $(id -u) != 0 ]] && echo -e "\n 哎呀……请使用 ${red}root ${none}用户运行 ${yellow}~(^_^) ${none}\n" && exit 1
  17
  18cmd="apt-get"
  19
  20sys_bit=$(uname -m)
  21
  22case $sys_bit in
  23i[36]86)
  24	v2ray_bit="32"
  25	caddy_arch="386"
  26	;;
  27x86_64)
  28	v2ray_bit="64"
  29	caddy_arch="amd64"
  30	;;
  31*armv6*)
  32	v2ray_bit="arm"
  33	caddy_arch="arm6"
  34	;;
  35*armv7*)
  36	v2ray_bit="arm"
  37	caddy_arch="arm7"
  38	;;
  39*aarch64* | *armv8*)
  40	v2ray_bit="arm64"
  41	caddy_arch="arm64"
  42	;;
  43*)
  44	echo -e " 
  45	哈哈……这个 ${red}辣鸡脚本${none} 不支持你的系统。 ${yellow}(-_-) ${none}
  46
  47	备注: 仅支持 Ubuntu 16+ / Debian 8+ / CentOS 7+ 系统
  48	" && exit 1
  49	;;
  50esac
  51
  52# 笨笨的检测方法
  53if [[ $(command -v apt-get) || $(command -v yum) ]] && [[ $(command -v systemctl) ]]; then
  54
  55	if [[ $(command -v yum) ]]; then
  56
  57		cmd="yum"
  58
  59	fi
  60
  61else
  62
  63	echo -e " 
  64	哈哈……这个 ${red}辣鸡脚本${none} 不支持你的系统。 ${yellow}(-_-) ${none}
  65
  66	备注: 仅支持 Ubuntu 16+ / Debian 8+ / CentOS 7+ 系统
  67	" && exit 1
  68
  69fi
  70
  71uuid=$(cat /proc/sys/kernel/random/uuid)
  72old_id="e55c8d17-2cf3-b21a-bcf1-eeacb011ed79"
  73v2ray_server_config="/etc/v2ray/config.json"
  74v2ray_client_config="/etc/v2ray/233blog_v2ray_config.json"
  75backup="/etc/v2ray/233blog_v2ray_backup.conf"
  76_v2ray_sh="/usr/local/sbin/v2ray"
  77systemd=true
  78# _test=true
  79
  80transport=(
  81	TCP
  82	TCP_HTTP
  83	WebSocket
  84	"WebSocket + TLS"
  85	HTTP/2
  86	mKCP
  87	mKCP_utp
  88	mKCP_srtp
  89	mKCP_wechat-video
  90	mKCP_dtls
  91	mKCP_wireguard
  92	QUIC
  93	QUIC_utp
  94	QUIC_srtp
  95	QUIC_wechat-video
  96	QUIC_dtls
  97	QUIC_wireguard
  98	TCP_dynamicPort
  99	TCP_HTTP_dynamicPort
 100	WebSocket_dynamicPort
 101	mKCP_dynamicPort
 102	mKCP_utp_dynamicPort
 103	mKCP_srtp_dynamicPort
 104	mKCP_wechat-video_dynamicPort
 105	mKCP_dtls_dynamicPort
 106	mKCP_wireguard_dynamicPort
 107	QUIC_dynamicPort
 108	QUIC_utp_dynamicPort
 109	QUIC_srtp_dynamicPort
 110	QUIC_wechat-video_dynamicPort
 111	QUIC_dtls_dynamicPort
 112	QUIC_wireguard_dynamicPort
 113)
 114
 115ciphers=(
 116	aes-128-cfb
 117	aes-256-cfb
 118	chacha20
 119	chacha20-ietf
 120	aes-128-gcm
 121	aes-256-gcm
 122	chacha20-ietf-poly1305
 123)
 124
 125_load() {
 126	local _dir="/etc/v2ray/233boy/v2ray/src/"
 127	. "${_dir}$@"
 128}
 129_sys_timezone() {
 130	IS_OPENVZ=
 131	if hostnamectl status | grep -q openvz; then
 132		IS_OPENVZ=1
 133	fi
 134
 135	echo
 136	timedatectl set-timezone Asia/Shanghai
 137	timedatectl set-ntp true
 138	echo "已将你的主机设置为Asia/Shanghai时区并通过systemd-timesyncd自动同步时间。"
 139	echo
 140
 141	if [[ $IS_OPENVZ ]]; then
 142		echo
 143		echo -e "你的主机环境为 ${yellow}Openvz${none} ,建议使用${yellow}v2ray mkcp${none}系列协议。"
 144		echo -e "注意:${yellow}Openvz${none} 系统时间无法由虚拟机内程序控制同步。"
 145		echo -e "如果主机时间跟实际相差${yellow}超过90秒${none},v2ray将无法正常通信,请发ticket联系vps主机商调整。"
 146	fi
 147}
 148
 149_sys_time() {
 150	echo -e "\n主机时间:${yellow}"
 151	timedatectl status | sed -n '1p;4p'
 152	echo -e "${none}"
 153	[[ $IS_OPENV ]] && pause
 154}
 155v2ray_config() {
 156	# clear
 157	echo
 158	while :; do
 159		echo -e "请选择 "$yellow"V2Ray"$none" 传输协议 [${magenta}1-${#transport[*]}$none]"
 160		echo
 161		for ((i = 1; i <= ${#transport[*]}; i++)); do
 162			Stream="${transport[$i - 1]}"
 163			if [[ "$i" -le 9 ]]; then
 164				# echo
 165				echo -e "$yellow  $i. $none${Stream}"
 166			else
 167				# echo
 168				echo -e "$yellow $i. $none${Stream}"
 169			fi
 170		done
 171		echo
 172		echo "备注1: 含有 [dynamicPort] 的即启用动态端口.."
 173		echo "备注2: [utp | srtp | wechat-video | dtls | wireguard] 分别伪装成 [BT下载 | 视频通话 | 微信视频通话 | DTLS 1.2 数据包 | WireGuard 数据包]"
 174		echo
 175		read -p "$(echo -e "(默认协议: ${cyan}TCP$none)"):" v2ray_transport
 176		[ -z "$v2ray_transport" ] && v2ray_transport=1
 177		case $v2ray_transport in
 178		[1-9] | [1-2][0-9] | 3[0-2])
 179			echo
 180			echo
 181			echo -e "$yellow V2Ray 传输协议 = $cyan${transport[$v2ray_transport - 1]}$none"
 182			echo "----------------------------------------------------------------"
 183			echo
 184			break
 185			;;
 186		*)
 187			error
 188			;;
 189		esac
 190	done
 191	v2ray_port_config
 192}
 193v2ray_port_config() {
 194	case $v2ray_transport in
 195	4 | 5)
 196		tls_config
 197		;;
 198	*)
 199		local random=$(shuf -i20001-65535 -n1)
 200		while :; do
 201			echo -e "请输入 "$yellow"V2Ray"$none" 端口 ["$magenta"1-65535"$none"]"
 202			read -p "$(echo -e "(默认端口: ${cyan}${random}$none):")" v2ray_port
 203			[ -z "$v2ray_port" ] && v2ray_port=$random
 204			case $v2ray_port in
 205			[1-9] | [1-9][0-9] | [1-9][0-9][0-9] | [1-9][0-9][0-9][0-9] | [1-5][0-9][0-9][0-9][0-9] | 6[0-4][0-9][0-9][0-9] | 65[0-4][0-9][0-9] | 655[0-3][0-5])
 206				echo
 207				echo
 208				echo -e "$yellow V2Ray 端口 = $cyan$v2ray_port$none"
 209				echo "----------------------------------------------------------------"
 210				echo
 211				break
 212				;;
 213			*)
 214				error
 215				;;
 216			esac
 217		done
 218		if [[ $v2ray_transport -ge 18 ]]; then
 219			v2ray_dynamic_port_start
 220		fi
 221		;;
 222	esac
 223}
 224
 225v2ray_dynamic_port_start() {
 226
 227	while :; do
 228		echo -e "请输入 "$yellow"V2Ray 动态端口开始 "$none"范围 ["$magenta"1-65535"$none"]"
 229		read -p "$(echo -e "(默认开始端口: ${cyan}10000$none):")" v2ray_dynamic_port_start_input
 230		[ -z $v2ray_dynamic_port_start_input ] && v2ray_dynamic_port_start_input=10000
 231		case $v2ray_dynamic_port_start_input in
 232		$v2ray_port)
 233			echo
 234			echo " 不能和 V2Ray 端口一毛一样...."
 235			echo
 236			echo -e " 当前 V2Ray 端口:${cyan}$v2ray_port${none}"
 237			error
 238			;;
 239		[1-9] | [1-9][0-9] | [1-9][0-9][0-9] | [1-9][0-9][0-9][0-9] | [1-5][0-9][0-9][0-9][0-9] | 6[0-4][0-9][0-9][0-9] | 65[0-4][0-9][0-9] | 655[0-3][0-5])
 240			echo
 241			echo
 242			echo -e "$yellow V2Ray 动态端口开始 = $cyan$v2ray_dynamic_port_start_input$none"
 243			echo "----------------------------------------------------------------"
 244			echo
 245			break
 246			;;
 247		*)
 248			error
 249			;;
 250		esac
 251
 252	done
 253
 254	if [[ $v2ray_dynamic_port_start_input -lt $v2ray_port ]]; then
 255		lt_v2ray_port=true
 256	fi
 257
 258	v2ray_dynamic_port_end
 259}
 260v2ray_dynamic_port_end() {
 261
 262	while :; do
 263		echo -e "请输入 "$yellow"V2Ray 动态端口结束 "$none"范围 ["$magenta"1-65535"$none"]"
 264		read -p "$(echo -e "(默认结束端口: ${cyan}20000$none):")" v2ray_dynamic_port_end_input
 265		[ -z $v2ray_dynamic_port_end_input ] && v2ray_dynamic_port_end_input=20000
 266		case $v2ray_dynamic_port_end_input in
 267		[1-9] | [1-9][0-9] | [1-9][0-9][0-9] | [1-9][0-9][0-9][0-9] | [1-5][0-9][0-9][0-9][0-9] | 6[0-4][0-9][0-9][0-9] | 65[0-4][0-9][0-9] | 655[0-3][0-5])
 268
 269			if [[ $v2ray_dynamic_port_end_input -le $v2ray_dynamic_port_start_input ]]; then
 270				echo
 271				echo " 不能小于或等于 V2Ray 动态端口开始范围"
 272				echo
 273				echo -e " 当前 V2Ray 动态端口开始:${cyan}$v2ray_dynamic_port_start_input${none}"
 274				error
 275			elif [ $lt_v2ray_port ] && [[ ${v2ray_dynamic_port_end_input} -ge $v2ray_port ]]; then
 276				echo
 277				echo " V2Ray 动态端口结束范围 不能包括 V2Ray 端口..."
 278				echo
 279				echo -e " 当前 V2Ray 端口:${cyan}$v2ray_port${none}"
 280				error
 281			else
 282				echo
 283				echo
 284				echo -e "$yellow V2Ray 动态端口结束 = $cyan$v2ray_dynamic_port_end_input$none"
 285				echo "----------------------------------------------------------------"
 286				echo
 287				break
 288			fi
 289			;;
 290		*)
 291			error
 292			;;
 293		esac
 294
 295	done
 296
 297}
 298
 299tls_config() {
 300
 301	echo
 302	local random=$(shuf -i20001-65535 -n1)
 303	while :; do
 304		echo -e "请输入 "$yellow"V2Ray"$none" 端口 ["$magenta"1-65535"$none"],不能选择 "$magenta"80"$none" 或 "$magenta"443"$none" 端口"
 305		read -p "$(echo -e "(默认端口: ${cyan}${random}$none):")" v2ray_port
 306		[ -z "$v2ray_port" ] && v2ray_port=$random
 307		case $v2ray_port in
 308		80)
 309			echo
 310			echo " ...都说了不能选择 80 端口了咯....."
 311			error
 312			;;
 313		443)
 314			echo
 315			echo " ..都说了不能选择 443 端口了咯....."
 316			error
 317			;;
 318		[1-9] | [1-9][0-9] | [1-9][0-9][0-9] | [1-9][0-9][0-9][0-9] | [1-5][0-9][0-9][0-9][0-9] | 6[0-4][0-9][0-9][0-9] | 65[0-4][0-9][0-9] | 655[0-3][0-5])
 319			echo
 320			echo
 321			echo -e "$yellow V2Ray 端口 = $cyan$v2ray_port$none"
 322			echo "----------------------------------------------------------------"
 323			echo
 324			break
 325			;;
 326		*)
 327			error
 328			;;
 329		esac
 330	done
 331
 332	while :; do
 333		echo
 334		echo -e "请输入一个 $magenta正确的域名$none,一定一定一定要正确,不!能!出!错!"
 335		read -p "(例如:233blog.com): " domain
 336		[ -z "$domain" ] && error && continue
 337		echo
 338		echo
 339		echo -e "$yellow 你的域名 = $cyan$domain$none"
 340		echo "----------------------------------------------------------------"
 341		break
 342	done
 343	get_ip
 344	echo
 345	echo
 346	echo -e "$yellow 请将 $magenta$domain$none $yellow解析到: $cyan$ip$none"
 347	echo
 348	echo -e "$yellow 请将 $magenta$domain$none $yellow解析到: $cyan$ip$none"
 349	echo
 350	echo -e "$yellow 请将 $magenta$domain$none $yellow解析到: $cyan$ip$none"
 351	echo "----------------------------------------------------------------"
 352	echo
 353
 354	while :; do
 355
 356		read -p "$(echo -e "(是否已经正确解析: [${magenta}Y$none]):") " record
 357		if [[ -z "$record" ]]; then
 358			error
 359		else
 360			if [[ "$record" == [Yy] ]]; then
 361				domain_check
 362				echo
 363				echo
 364				echo -e "$yellow 域名解析 = ${cyan}我确定已经有解析了$none"
 365				echo "----------------------------------------------------------------"
 366				echo
 367				break
 368			else
 369				error
 370			fi
 371		fi
 372
 373	done
 374
 375	if [[ $v2ray_transport -ne 5 ]]; then
 376		auto_tls_config
 377	else
 378		caddy=true
 379		install_caddy_info="打开"
 380	fi
 381
 382	if [[ $caddy ]]; then
 383		path_config_ask
 384	fi
 385}
 386auto_tls_config() {
 387	echo -e "
 388
 389		安装 Caddy 来实现 自动配置 TLS
 390		
 391		如果你已经安装 Nginx 或 Caddy
 392
 393		$yellow并且..自己能搞定配置 TLS$none
 394
 395		那么就不需要 打开自动配置 TLS
 396		"
 397	echo "----------------------------------------------------------------"
 398	echo
 399
 400	while :; do
 401
 402		read -p "$(echo -e "(是否自动配置 TLS: [${magenta}Y/N$none]):") " auto_install_caddy
 403		if [[ -z "$auto_install_caddy" ]]; then
 404			error
 405		else
 406			if [[ "$auto_install_caddy" == [Yy] ]]; then
 407				caddy=true
 408				install_caddy_info="打开"
 409				echo
 410				echo
 411				echo -e "$yellow 自动配置 TLS = $cyan$install_caddy_info$none"
 412				echo "----------------------------------------------------------------"
 413				echo
 414				break
 415			elif [[ "$auto_install_caddy" == [Nn] ]]; then
 416				install_caddy_info="关闭"
 417				echo
 418				echo
 419				echo -e "$yellow 自动配置 TLS = $cyan$install_caddy_info$none"
 420				echo "----------------------------------------------------------------"
 421				echo
 422				break
 423			else
 424				error
 425			fi
 426		fi
 427
 428	done
 429}
 430path_config_ask() {
 431	echo
 432	while :; do
 433		echo -e "是否开启 网站伪装 和 路径分流 [${magenta}Y/N$none]"
 434		read -p "$(echo -e "(默认: [${cyan}N$none]):")" path_ask
 435		[[ -z $path_ask ]] && path_ask="n"
 436
 437		case $path_ask in
 438		Y | y)
 439			path_config
 440			break
 441			;;
 442		N | n)
 443			echo
 444			echo
 445			echo -e "$yellow 网站伪装 和 路径分流 = $cyan不想配置$none"
 446			echo "----------------------------------------------------------------"
 447			echo
 448			break
 449			;;
 450		*)
 451			error
 452			;;
 453		esac
 454	done
 455}
 456path_config() {
 457	echo
 458	while :; do
 459		echo -e "请输入想要 ${magenta}用来分流的路径$none , 例如 /233blog , 那么只需要输入 233blog 即可"
 460		read -p "$(echo -e "(默认: [${cyan}233blog$none]):")" path
 461		[[ -z $path ]] && path="233blog"
 462
 463		case $path in
 464		*[/$]*)
 465			echo
 466			echo -e " 由于这个脚本太辣鸡了..所以分流的路径不能包含$red / $none或$red $ $none这两个符号.... "
 467			echo
 468			error
 469			;;
 470		*)
 471			echo
 472			echo
 473			echo -e "$yellow 分流的路径 = ${cyan}/${path}$none"
 474			echo "----------------------------------------------------------------"
 475			echo
 476			break
 477			;;
 478		esac
 479	done
 480	is_path=true
 481	proxy_site_config
 482}
 483proxy_site_config() {
 484	echo
 485	while :; do
 486		echo -e "请输入 ${magenta}一个正确的$none ${cyan}网址$none 用来作为 ${cyan}网站的伪装$none , 例如 https://liyafly.com"
 487		echo -e "举例...你当前的域名是 $green$domain$none , 伪装的网址的是 https://liyafly.com"
 488		echo -e "然后打开你的域名时候...显示出来的内容就是来自 https://liyafly.com 的内容"
 489		echo -e "其实就是一个反代...明白就好..."
 490		echo -e "如果不能伪装成功...可以使用 v2ray config 修改伪装的网址"
 491		read -p "$(echo -e "(默认: [${cyan}https://liyafly.com$none]):")" proxy_site
 492		[[ -z $proxy_site ]] && proxy_site="https://liyafly.com"
 493
 494		case $proxy_site in
 495		*[#$]*)
 496			echo
 497			echo -e " 由于这个脚本太辣鸡了..所以伪装的网址不能包含$red # $none或$red $ $none这两个符号.... "
 498			echo
 499			error
 500			;;
 501		*)
 502			echo
 503			echo
 504			echo -e "$yellow 伪装的网址 = ${cyan}${proxy_site}$none"
 505			echo "----------------------------------------------------------------"
 506			echo
 507			break
 508			;;
 509		esac
 510	done
 511}
 512
 513blocked_hosts() {
 514	echo
 515	while :; do
 516		echo -e "是否开启广告拦截(会影响性能) [${magenta}Y/N$none]"
 517		read -p "$(echo -e "(默认 [${cyan}N$none]):")" blocked_ad
 518		[[ -z $blocked_ad ]] && blocked_ad="n"
 519
 520		case $blocked_ad in
 521		Y | y)
 522			blocked_ad_info="开启"
 523			ban_ad=true
 524			echo
 525			echo
 526			echo -e "$yellow 广告拦截 = $cyan开启$none"
 527			echo "----------------------------------------------------------------"
 528			echo
 529			break
 530			;;
 531		N | n)
 532			blocked_ad_info="关闭"
 533			echo
 534			echo
 535			echo -e "$yellow 广告拦截 = $cyan关闭$none"
 536			echo "----------------------------------------------------------------"
 537			echo
 538			break
 539			;;
 540		*)
 541			error
 542			;;
 543		esac
 544	done
 545}
 546shadowsocks_config() {
 547
 548	echo
 549
 550	while :; do
 551		echo -e "是否配置 ${yellow}Shadowsocks${none} [${magenta}Y/N$none]"
 552		read -p "$(echo -e "(默认 [${cyan}N$none]):") " install_shadowsocks
 553		[[ -z "$install_shadowsocks" ]] && install_shadowsocks="n"
 554		if [[ "$install_shadowsocks" == [Yy] ]]; then
 555			echo
 556			shadowsocks=true
 557			shadowsocks_port_config
 558			break
 559		elif [[ "$install_shadowsocks" == [Nn] ]]; then
 560			break
 561		else
 562			error
 563		fi
 564
 565	done
 566
 567}
 568
 569shadowsocks_port_config() {
 570	local random=$(shuf -i20001-65535 -n1)
 571	while :; do
 572		echo -e "请输入 "$yellow"Shadowsocks"$none" 端口 ["$magenta"1-65535"$none"],不能和 "$yellow"V2Ray"$none" 端口相同"
 573		read -p "$(echo -e "(默认端口: ${cyan}${random}$none):") " ssport
 574		[ -z "$ssport" ] && ssport=$random
 575		case $ssport in
 576		$v2ray_port)
 577			echo
 578			echo " 不能和 V2Ray 端口一毛一样...."
 579			error
 580			;;
 581		[1-9] | [1-9][0-9] | [1-9][0-9][0-9] | [1-9][0-9][0-9][0-9] | [1-5][0-9][0-9][0-9][0-9] | 6[0-4][0-9][0-9][0-9] | 65[0-4][0-9][0-9] | 655[0-3][0-5])
 582			if [[ $v2ray_transport == [45] ]]; then
 583				local tls=ture
 584			fi
 585			if [[ $tls && $ssport == "80" ]] || [[ $tls && $ssport == "443" ]]; then
 586				echo
 587				echo -e "由于你已选择了 "$green"WebSocket + TLS $none或$green HTTP/2"$none" 传输协议."
 588				echo
 589				echo -e "所以不能选择 "$magenta"80"$none" 或 "$magenta"443"$none" 端口"
 590				error
 591			elif [[ $v2ray_dynamic_port_start_input == $ssport || $v2ray_dynamic_port_end_input == $ssport ]]; then
 592				local multi_port="${v2ray_dynamic_port_start_input} - ${v2ray_dynamic_port_end_input}"
 593				echo
 594				echo " 抱歉,此端口和 V2Ray 动态端口 冲突,当前 V2Ray 动态端口范围为:$multi_port"
 595				error
 596			elif [[ $v2ray_dynamic_port_start_input -lt $ssport && $ssport -le $v2ray_dynamic_port_end_input ]]; then
 597				local multi_port="${v2ray_dynamic_port_start_input} - ${v2ray_dynamic_port_end_input}"
 598				echo
 599				echo " 抱歉,此端口和 V2Ray 动态端口 冲突,当前 V2Ray 动态端口范围为:$multi_port"
 600				error
 601			else
 602				echo
 603				echo
 604				echo -e "$yellow Shadowsocks 端口 = $cyan$ssport$none"
 605				echo "----------------------------------------------------------------"
 606				echo
 607				break
 608			fi
 609			;;
 610		*)
 611			error
 612			;;
 613		esac
 614
 615	done
 616
 617	shadowsocks_password_config
 618}
 619shadowsocks_password_config() {
 620
 621	while :; do
 622		echo -e "请输入 "$yellow"Shadowsocks"$none" 密码"
 623		read -p "$(echo -e "(默认密码: ${cyan}233blog.com$none)"): " sspass
 624		[ -z "$sspass" ] && sspass="233blog.com"
 625		case $sspass in
 626		*[/$]*)
 627			echo
 628			echo -e " 由于这个脚本太辣鸡了..所以密码不能包含$red / $none或$red $ $none这两个符号.... "
 629			echo
 630			error
 631			;;
 632		*)
 633			echo
 634			echo
 635			echo -e "$yellow Shadowsocks 密码 = $cyan$sspass$none"
 636			echo "----------------------------------------------------------------"
 637			echo
 638			break
 639			;;
 640		esac
 641
 642	done
 643
 644	shadowsocks_ciphers_config
 645}
 646shadowsocks_ciphers_config() {
 647
 648	while :; do
 649		echo -e "请选择 "$yellow"Shadowsocks"$none" 加密协议 [${magenta}1-${#ciphers[*]}$none]"
 650		for ((i = 1; i <= ${#ciphers[*]}; i++)); do
 651			ciphers_show="${ciphers[$i - 1]}"
 652			echo
 653			echo -e "$yellow $i. $none${ciphers_show}"
 654		done
 655		echo
 656		read -p "$(echo -e "(默认加密协议: ${cyan}${ciphers[6]}$none)"):" ssciphers_opt
 657		[ -z "$ssciphers_opt" ] && ssciphers_opt=7
 658		case $ssciphers_opt in
 659		[1-7])
 660			ssciphers=${ciphers[$ssciphers_opt - 1]}
 661			echo
 662			echo
 663			echo -e "$yellow Shadowsocks 加密协议 = $cyan${ssciphers}$none"
 664			echo "----------------------------------------------------------------"
 665			echo
 666			break
 667			;;
 668		*)
 669			error
 670			;;
 671		esac
 672
 673	done
 674	pause
 675}
 676
 677install_info() {
 678	clear
 679	echo
 680	echo " ....准备安装了咯..看看有毛有配置正确了..."
 681	echo
 682	echo "---------- 安装信息 -------------"
 683	echo
 684	echo -e "$yellow V2Ray 传输协议 = $cyan${transport[$v2ray_transport - 1]}$none"
 685
 686	if [[ $v2ray_transport == [45] ]]; then
 687		echo
 688		echo -e "$yellow V2Ray 端口 = $cyan$v2ray_port$none"
 689		echo
 690		echo -e "$yellow 你的域名 = $cyan$domain$none"
 691		echo
 692		echo -e "$yellow 域名解析 = ${cyan}我确定已经有解析了$none"
 693		echo
 694		echo -e "$yellow 自动配置 TLS = $cyan$install_caddy_info$none"
 695
 696		if [[ $ban_ad ]]; then
 697			echo
 698			echo -e "$yellow 广告拦截 = $cyan$blocked_ad_info$none"
 699		fi
 700		if [[ $is_path ]]; then
 701			echo
 702			echo -e "$yellow 路径分流 = ${cyan}/${path}$none"
 703		fi
 704	elif [[ $v2ray_transport -ge 18 ]]; then
 705		echo
 706		echo -e "$yellow V2Ray 端口 = $cyan$v2ray_port$none"
 707		echo
 708		echo -e "$yellow V2Ray 动态端口范围 = $cyan${v2ray_dynamic_port_start_input} - ${v2ray_dynamic_port_end_input}$none"
 709
 710		if [[ $ban_ad ]]; then
 711			echo
 712			echo -e "$yellow 广告拦截 = $cyan$blocked_ad_info$none"
 713		fi
 714	else
 715		echo
 716		echo -e "$yellow V2Ray 端口 = $cyan$v2ray_port$none"
 717
 718		if [[ $ban_ad ]]; then
 719			echo
 720			echo -e "$yellow 广告拦截 = $cyan$blocked_ad_info$none"
 721		fi
 722	fi
 723	if [ $shadowsocks ]; then
 724		echo
 725		echo -e "$yellow Shadowsocks 端口 = $cyan$ssport$none"
 726		echo
 727		echo -e "$yellow Shadowsocks 密码 = $cyan$sspass$none"
 728		echo
 729		echo -e "$yellow Shadowsocks 加密协议 = $cyan${ssciphers}$none"
 730	else
 731		echo
 732		echo -e "$yellow 是否配置 Shadowsocks = ${cyan}未配置${none}"
 733	fi
 734	echo
 735	echo "---------- END -------------"
 736	echo
 737	pause
 738	echo
 739}
 740
 741domain_check() {
 742	# if [[ $cmd == "yum" ]]; then
 743	# 	yum install bind-utils -y
 744	# else
 745	# 	$cmd install dnsutils -y
 746	# fi
 747	# test_domain=$(dig $domain +short)
 748	#edit by Scaleya
 749	test_domain=$(ping $domain -c 1 | grep -oE -m1 "([0-9]{1,3}\.){3}[0-9]{1,3}") || test_domain=$(ping $domain -6 -c 1 | grep -oE -m1 "([0-9a-fA-F]{0,4}:){1,7}([0-9a-fA-F]){0,4}")
 750	if [[ $test_domain != $ip ]]; then
 751		echo
 752		echo -e "$red 检测域名解析错误....$none"
 753		echo
 754		echo -e " 你的域名: $yellow$domain$none 未解析到: $cyan$ip$none"
 755		echo
 756		echo -e " 你的域名当前解析到: $cyan$test_domain$none"
 757		echo
 758		echo "备注...如果你的域名是使用 Cloudflare 解析的话..在 Status 那里点一下那图标..让它变灰"
 759		echo
 760		exit 1
 761	fi
 762}
 763
 764install_caddy() {
 765	# download caddy file then install
 766	_load download-caddy.sh
 767	_download_caddy_file
 768	_install_caddy_service
 769	caddy_config
 770
 771}
 772caddy_config() {
 773	# local email=$(shuf -i1-10000000000 -n1)
 774	_load caddy-config.sh
 775
 776	# systemctl restart caddy
 777	do_service restart caddy
 778}
 779
 780install_v2ray() {
 781	$cmd update -y
 782	if [[ $cmd == "apt-get" ]]; then
 783		$cmd install -y lrzsz git zip unzip curl wget qrencode libcap2-bin dbus
 784	else
 785		# $cmd install -y lrzsz git zip unzip curl wget qrencode libcap iptables-services
 786		$cmd install -y lrzsz git zip unzip curl wget qrencode libcap
 787	fi
 788	ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
 789	[ -d /etc/v2ray ] && rm -rf /etc/v2ray
 790	# date -s "$(curl -sI g.cn | grep Date | cut -d' ' -f3-6)Z"
 791	_sys_timezone
 792	_sys_time
 793
 794	if [[ $local_install ]]; then
 795		if [[ ! -d $(pwd)/config ]]; then
 796			echo
 797			echo -e "$red 哎呀呀...安装失败了咯...$none"
 798			echo
 799			echo -e " 请确保你有完整的上传 233v2.com 的 V2Ray 一键安装脚本 & 管理脚本到当前 ${green}$(pwd) $none目录下"
 800			echo
 801			exit 1
 802		fi
 803		mkdir -p /etc/v2ray/233boy/v2ray
 804		cp -rf $(pwd)/* /etc/v2ray/233boy/v2ray
 805	else
 806		pushd /tmp
 807		git clone https://scaleya@bitbucket.org/scaleya/888.git -b "$_gitbranch" /etc/v2ray/233boy/v2ray --depth=1
 808		popd
 809
 810	fi
 811
 812	if [[ ! -d /etc/v2ray/233boy/v2ray ]]; then
 813		echo
 814		echo -e "$red 哎呀呀...克隆脚本仓库出错了...$none"
 815		echo
 816		echo -e " 温馨提示..... 请尝试自行安装 Git: ${green}$cmd install -y git $none 之后再安装此脚本"
 817		echo
 818		exit 1
 819	fi
 820
 821	# download v2ray file then install
 822	_load download-v2ray.sh
 823	_download_v2ray_file
 824	_install_v2ray_service
 825	_mkdir_dir
 826}
 827
 828open_port() {
 829	if [[ $cmd == "apt-get" ]]; then
 830		if [[ $1 != "multiport" ]]; then
 831
 832			iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport $1 -j ACCEPT
 833			iptables -I INPUT -m state --state NEW -m udp -p udp --dport $1 -j ACCEPT
 834			ip6tables -I INPUT -m state --state NEW -m tcp -p tcp --dport $1 -j ACCEPT
 835			ip6tables -I INPUT -m state --state NEW -m udp -p udp --dport $1 -j ACCEPT
 836
 837			# firewall-cmd --permanent --zone=public --add-port=$1/tcp
 838			# firewall-cmd --permanent --zone=public --add-port=$1/udp
 839			# firewall-cmd --reload
 840
 841		else
 842
 843			local multiport="${v2ray_dynamic_port_start_input}:${v2ray_dynamic_port_end_input}"
 844			iptables -I INPUT -p tcp --match multiport --dports $multiport -j ACCEPT
 845			iptables -I INPUT -p udp --match multiport --dports $multiport -j ACCEPT
 846			ip6tables -I INPUT -p tcp --match multiport --dports $multiport -j ACCEPT
 847			ip6tables -I INPUT -p udp --match multiport --dports $multiport -j ACCEPT
 848
 849			# local multi_port="${v2ray_dynamic_port_start_input}-${v2ray_dynamic_port_end_input}"
 850			# firewall-cmd --permanent --zone=public --add-port=$multi_port/tcp
 851			# firewall-cmd --permanent --zone=public --add-port=$multi_port/udp
 852			# firewall-cmd --reload
 853
 854		fi
 855		iptables-save >/etc/iptables.rules.v4
 856		ip6tables-save >/etc/iptables.rules.v6
 857		# else
 858		# 	service iptables save >/dev/null 2>&1
 859		# 	service ip6tables save >/dev/null 2>&1
 860	fi
 861}
 862del_port() {
 863	if [[ $cmd == "apt-get" ]]; then
 864		if [[ $1 != "multiport" ]]; then
 865			# if [[ $cmd == "apt-get" ]]; then
 866			iptables -D INPUT -m state --state NEW -m tcp -p tcp --dport $1 -j ACCEPT
 867			iptables -D INPUT -m state --state NEW -m udp -p udp --dport $1 -j ACCEPT
 868			ip6tables -D INPUT -m state --state NEW -m tcp -p tcp --dport $1 -j ACCEPT
 869			ip6tables -D INPUT -m state --state NEW -m udp -p udp --dport $1 -j ACCEPT
 870			# else
 871			# 	firewall-cmd --permanent --zone=public --remove-port=$1/tcp
 872			# 	firewall-cmd --permanent --zone=public --remove-port=$1/udp
 873			# fi
 874		else
 875			# if [[ $cmd == "apt-get" ]]; then
 876			local ports="${v2ray_dynamicPort_start}:${v2ray_dynamicPort_end}"
 877			iptables -D INPUT -p tcp --match multiport --dports $ports -j ACCEPT
 878			iptables -D INPUT -p udp --match multiport --dports $ports -j ACCEPT
 879			ip6tables -D INPUT -p tcp --match multiport --dports $ports -j ACCEPT
 880			ip6tables -D INPUT -p udp --match multiport --dports $ports -j ACCEPT
 881			# else
 882			# 	local ports="${v2ray_dynamicPort_start}-${v2ray_dynamicPort_end}"
 883			# 	firewall-cmd --permanent --zone=public --remove-port=$ports/tcp
 884			# 	firewall-cmd --permanent --zone=public --remove-port=$ports/udp
 885			# fi
 886		fi
 887		iptables-save >/etc/iptables.rules.v4
 888		ip6tables-save >/etc/iptables.rules.v6
 889		# else
 890		# 	service iptables save >/dev/null 2>&1
 891		# 	service ip6tables save >/dev/null 2>&1
 892	fi
 893
 894}
 895
 896config() {
 897	cp -f /etc/v2ray/233boy/v2ray/config/backup.conf $backup
 898	cp -f /etc/v2ray/233boy/v2ray/v2ray.sh $_v2ray_sh
 899	chmod +x $_v2ray_sh
 900
 901	v2ray_id=$uuid
 902	alterId=233
 903	ban_bt=true
 904	if [[ $v2ray_transport -ge 18 ]]; then
 905		v2ray_dynamicPort_start=${v2ray_dynamic_port_start_input}
 906		v2ray_dynamicPort_end=${v2ray_dynamic_port_end_input}
 907	fi
 908	_load config.sh
 909
 910	if [[ $cmd == "apt-get" ]]; then
 911		cat >/etc/network/if-pre-up.d/iptables <<-EOF
 912			#!/bin/sh
 913			/sbin/iptables-restore < /etc/iptables.rules.v4
 914			/sbin/ip6tables-restore < /etc/iptables.rules.v6
 915		EOF
 916		chmod +x /etc/network/if-pre-up.d/iptables
 917		# else
 918		# 	[ $(pgrep "firewall") ] && systemctl stop firewalld
 919		# 	systemctl mask firewalld
 920		# 	systemctl disable firewalld
 921		# 	systemctl enable iptables
 922		# 	systemctl enable ip6tables
 923		# 	systemctl start iptables
 924		# 	systemctl start ip6tables
 925	fi
 926
 927	[[ $shadowsocks ]] && open_port $ssport
 928	if [[ $v2ray_transport == [45] ]]; then
 929		open_port "80"
 930		open_port "443"
 931		open_port $v2ray_port
 932	elif [[ $v2ray_transport -ge 18 ]]; then
 933		open_port $v2ray_port
 934		open_port "multiport"
 935	else
 936		open_port $v2ray_port
 937	fi
 938	# systemctl restart v2ray
 939	do_service restart v2ray
 940	backup_config
 941
 942}
 943
 944backup_config() {
 945	sed -i "18s/=1/=$v2ray_transport/; 21s/=2333/=$v2ray_port/; 24s/=$old_id/=$uuid/" $backup
 946	if [[ $v2ray_transport -ge 18 ]]; then
 947		sed -i "30s/=10000/=$v2ray_dynamic_port_start_input/; 33s/=20000/=$v2ray_dynamic_port_end_input/" $backup
 948	fi
 949	if [[ $shadowsocks ]]; then
 950		sed -i "42s/=/=true/; 45s/=6666/=$ssport/; 48s/=233blog.com/=$sspass/; 51s/=chacha20-ietf/=$ssciphers/" $backup
 951	fi
 952	[[ $v2ray_transport == [45] ]] && sed -i "36s/=233blog.com/=$domain/" $backup
 953	[[ $caddy ]] && sed -i "39s/=/=true/" $backup
 954	[[ $ban_ad ]] && sed -i "54s/=/=true/" $backup
 955	if [[ $is_path ]]; then
 956		sed -i "57s/=/=true/; 60s/=233blog/=$path/" $backup
 957		sed -i "63s#=https://liyafly.com#=$proxy_site#" $backup
 958	fi
 959}
 960
 961get_ip() {
 962
 963	ipv4=$(curl -4 -s ipv4.icanhazip.com)
 964	[[ -z $ipv4 ]] && ipv4=$(curl -s -4 https://api.ip.sb/ip)
 965	[[ -z $ipv4 ]] && ipv4=$(curl -s -4 https://api.ipify.org)
 966	[[ -z $ipv4 ]] && ipv4=$(curl -s -4 https://ip.seeip.org)
 967	[[ -z $ipv4 ]] && ipv4=$(curl -s -4 https://ifconfig.co/ip)
 968	[[ -z $ipv4 ]] && ipv4=$(curl -s -4 https://api.myip.com | grep -oE "([0-9]{1,3}\.){3}[0-9]{1,3}")
 969	[[ -z $ipv4 ]] && ipv4=$(curl -s -4 icanhazip.com)
 970	[[ -z $ipv4 ]] && ipv4=$(curl -s -4 myip.ipip.net | grep -oE "([0-9]{1,3}\.){3}[0-9]{1,3}")
 971	[[ -z $ipv4 ]] && echo -e "\n$red 这垃圾小鸡扔了吧!$none\n" && exit
 972    
 973    ipv6=$(curl -6 -s ipv6.icanhazip.com)
 974	[[ -z $ipv6 ]] && ipv6=$(curl -s -6 https://api.ip.sb/ip)
 975	[[ -z $ipv6 ]] && ipv6=$(curl -s -6 https://ip.seeip.org)
 976	[[ -z $ipv6 ]] && ipv6=$(curl -s -6 https://ifconfig.co/ip)	
 977	[[ -z $ipv6 ]] && ipv6=$(curl -s -6 icanhazip.com)
 978	[[ -z $ipv6 ]] && echo -e "\n$red 这垃圾小鸡扔了吧!$none\n" && exit
 979	
 980	if [ $ipv6 ]; then
 981	ip=$ipv6 ##默认ipv6 edit by Scaleya
 982	else ip=$ipv4
 983	fi
 984}
 985
 986error() {
 987
 988	echo -e "\n$red 输入错误!$none\n"
 989
 990}
 991
 992pause() {
 993
 994	read -rsp "$(echo -e "按$green Enter 回车键 $none继续....或按$red Ctrl + C $none取消.")" -d $'\n'
 995	echo
 996}
 997do_service() {
 998	if [[ $systemd ]]; then
 999		systemctl $1 $2
1000	else
1001		service $2 $1
1002	fi
1003}
1004show_config_info() {
1005	clear
1006	_load v2ray-info.sh
1007	_v2_args
1008	_v2_info
1009	_load ss-info.sh
1010
1011}
1012
1013install() {
1014	if [[ -f /usr/bin/v2ray/v2ray && -f /etc/v2ray/config.json ]] && [[ -f $backup && -d /etc/v2ray/233boy/v2ray ]]; then
1015		echo
1016		echo " 大佬...你已经安装 V2Ray 啦...无需重新安装"
1017		echo
1018		echo -e " $yellow输入 ${cyan}v2ray${none} $yellow即可管理 V2Ray${none}"
1019		echo
1020		exit 1
1021	elif [[ -f /usr/bin/v2ray/v2ray && -f /etc/v2ray/config.json ]] && [[ -f /etc/v2ray/233blog_v2ray_backup.txt && -d /etc/v2ray/233boy/v2ray ]]; then
1022		echo
1023		echo "  如果你需要继续安装.. 请先卸载旧版本"
1024		echo
1025		echo -e " $yellow输入 ${cyan}v2ray uninstall${none} $yellow即可卸载${none}"
1026		echo
1027		exit 1
1028	fi
1029	v2ray_config
1030	blocked_hosts
1031	shadowsocks_config
1032	install_info
1033	# [[ $caddy ]] && domain_check
1034	install_v2ray
1035	if [[ $caddy || $v2ray_port == "80" ]]; then
1036		if [[ $cmd == "yum" ]]; then
1037			[[ $(pgrep "httpd") ]] && systemctl stop httpd
1038			[[ $(command -v httpd) ]] && yum remove httpd -y
1039		else
1040			[[ $(pgrep "apache2") ]] && service apache2 stop
1041			[[ $(command -v apache2) ]] && apt-get remove apache2* -y
1042		fi
1043	fi
1044	[[ $caddy ]] && install_caddy
1045
1046	## bbr
1047	_load bbr.sh
1048	_try_enable_bbr
1049
1050	get_ip
1051	config
1052	show_config_info
1053}
1054uninstall() {
1055
1056	if [[ -f /usr/bin/v2ray/v2ray && -f /etc/v2ray/config.json ]] && [[ -f $backup && -d /etc/v2ray/233boy/v2ray ]]; then
1057		. $backup
1058		if [[ $mark ]]; then
1059			_load uninstall.sh
1060		else
1061			echo
1062			echo -e " $yellow输入 ${cyan}v2ray uninstall${none} $yellow即可卸载${none}"
1063			echo
1064		fi
1065
1066	elif [[ -f /usr/bin/v2ray/v2ray && -f /etc/v2ray/config.json ]] && [[ -f /etc/v2ray/233blog_v2ray_backup.txt && -d /etc/v2ray/233boy/v2ray ]]; then
1067		echo
1068		echo -e " $yellow输入 ${cyan}v2ray uninstall${none} $yellow即可卸载${none}"
1069		echo
1070	else
1071		echo -e "
1072		$red 大胸弟...你貌似毛有安装 V2Ray ....卸载个鸡鸡哦...$none
1073
1074		备注...仅支持卸载使用我 (233v2.com) 提供的 V2Ray 一键安装脚本
1075		" && exit 1
1076	fi
1077
1078}
1079
1080args=$1
1081_gitbranch=$2
1082[ -z $1 ] && args="online"
1083case $args in
1084online)
1085	#hello world
1086	[[ -z $_gitbranch ]] && _gitbranch="master"
1087	;;
1088local)
1089	local_install=true
1090	;;
1091*)
1092	echo
1093	echo -e " 你输入的这个参数 <$red $args $none> ...这个是什么鬼啊...脚本不认识它哇"
1094	echo
1095	echo -e " 这个辣鸡脚本仅支持输入$green local / online $none参数"
1096	echo
1097	echo -e " 输入$yellow local $none即是使用本地安装"
1098	echo
1099	echo -e " 输入$yellow online $none即是使用在线安装 (默认)"
1100	echo
1101	exit 1
1102	;;
1103esac
1104
1105clear
1106while :; do
1107	echo
1108	echo "........... V2Ray 一键安装脚本 & 管理脚本 by 233v2.com .........."
1109	echo
1110	echo "帮助说明: https://233v2.com/post/1/"
1111	echo
1112	echo "搭建教程: https://233v2.com/post/2/"
1113	echo
1114	echo " 1. 安装"
1115	echo
1116	echo " 2. 卸载"
1117	echo
1118	if [[ $local_install ]]; then
1119		echo -e "$yellow 温馨提示.. 本地安装已启用 ..$none"
1120		echo
1121	fi
1122	read -p "$(echo -e "请选择 [${magenta}1-2$none]:")" choose
1123	case $choose in
1124	1)
1125		install
1126		break
1127		;;
1128	2)
1129		uninstall
1130		break
1131		;;
1132	*)
1133		error
1134		;;
1135	esac
1136done
1137
1138

content v2ray.sh

   1#!/bin/bash
   2
   3red='\e[91m'
   4green='\e[92m'
   5yellow='\e[93m'
   6magenta='\e[95m'
   7cyan='\e[96m'
   8none='\e[0m'
   9
  10# Root
  11[[ $(id -u) != 0 ]] && echo -e " 哎呀……请使用 ${red}root ${none}用户运行 ${yellow}~(^_^) ${none}" && exit 1
  12
  13_version="v3.14"
  14
  15cmd="apt-get"
  16
  17sys_bit=$(uname -m)
  18
  19case $sys_bit in
  20i[36]86)
  21	v2ray_bit="32"
  22	caddy_arch="386"
  23	;;
  24x86_64)
  25	v2ray_bit="64"
  26	caddy_arch="amd64"
  27	;;
  28*armv6*)
  29	v2ray_bit="arm"
  30	caddy_arch="arm6"
  31	;;
  32*armv7*)
  33	v2ray_bit="arm"
  34	caddy_arch="arm7"
  35	;;
  36*aarch64* | *armv8*)
  37	v2ray_bit="arm64"
  38	caddy_arch="arm64"
  39	;;
  40*)
  41	echo -e " 
  42	哈哈……这个 ${red}辣鸡脚本${none} 不支持你的系统。 ${yellow}(-_-) ${none}
  43
  44	备注: 仅支持 Ubuntu 16+ / Debian 8+ / CentOS 7+ 系统
  45	" && exit 1
  46	;;
  47esac
  48
  49if [[ $(command -v yum) ]]; then
  50
  51	cmd="yum"
  52
  53fi
  54
  55backup="/etc/v2ray/233blog_v2ray_backup.conf"
  56
  57if [[ -f /usr/bin/v2ray/v2ray && -f /etc/v2ray/config.json ]] && [[ -f $backup && -d /etc/v2ray/233boy/v2ray ]]; then
  58
  59	. $backup
  60
  61elif [[ -f /usr/bin/v2ray/v2ray && -f /etc/v2ray/config.json ]] && [[ -f /etc/v2ray/233blog_v2ray_backup.txt && -d /etc/v2ray/233boy/v2ray ]]; then
  62
  63	. /etc/v2ray/233boy/v2ray/tools/v1xx_to_v3xx.sh
  64
  65else
  66	echo -e " 哎呀哎呀…… ${red}出错咯...请重新安装V2Ray${none} ${yellow}~(^_^) ${none}" && exit 1
  67fi
  68
  69if [[ $mark != "v3" ]]; then
  70	. /etc/v2ray/233boy/v2ray/tools/v3.sh
  71fi
  72if [[ $v2ray_transport -ge 18 ]]; then
  73	dynamicPort=true
  74	port_range="${v2ray_dynamicPort_start}-${v2ray_dynamicPort_end}"
  75fi
  76if [[ $path_status ]]; then
  77	is_path=true
  78fi
  79
  80uuid=$(cat /proc/sys/kernel/random/uuid)
  81old_id="e55c8d17-2cf3-b21a-bcf1-eeacb011ed79"
  82v2ray_server_config="/etc/v2ray/config.json"
  83v2ray_client_config="/etc/v2ray/233blog_v2ray_config.json"
  84v2ray_pid=$(pgrep -f /usr/bin/v2ray/v2ray)
  85caddy_pid=$(pgrep -f /usr/local/bin/caddy)
  86_v2ray_sh="/usr/local/sbin/v2ray"
  87v2ray_ver="$(/usr/bin/v2ray/v2ray -version | head -n 1 | cut -d " " -f2)"
  88. /etc/v2ray/233boy/v2ray/src/init.sh
  89systemd=true
  90# _test=true
  91
  92if [[ $v2ray_ver != v* ]]; then
  93	v2ray_ver="v$v2ray_ver"
  94fi
  95if [[ ! -f $_v2ray_sh ]]; then
  96	mv -f /usr/local/bin/v2ray $_v2ray_sh
  97	chmod +x $_v2ray_sh
  98	echo -e "\n $yellow 警告: 请重新登录 SSH 以避免出现 v2ray 命令未找到的情况。$none  \n" && exit 1
  99fi
 100
 101if [ $v2ray_pid ]; then
 102	v2ray_status="$green正在运行$none"
 103else
 104	v2ray_status="$red未在运行$none"
 105fi
 106if [[ $v2ray_transport == [45] && $caddy ]] && [[ $caddy_pid ]]; then
 107	caddy_run_status="$green正在运行$none"
 108else
 109	caddy_run_status="$red未在运行$none"
 110fi
 111
 112_load transport.sh
 113ciphers=(
 114	aes-128-cfb
 115	aes-256-cfb
 116	chacha20
 117	chacha20-ietf
 118	aes-128-gcm
 119	aes-256-gcm
 120	chacha20-ietf-poly1305
 121)
 122
 123get_transport_args() {
 124	_load v2ray-info.sh
 125	_v2_args
 126}
 127create_vmess_URL_config() {
 128
 129	[[ -z $net ]] && get_transport_args
 130
 131	if [[ $v2ray_transport == [45] ]]; then
 132		cat >/etc/v2ray/vmess_qr.json <<-EOF
 133		{
 134			"v": "2",
 135			"ps": "233v2.com_${domain}",
 136			"add": "${domain}",
 137			"port": "443",
 138			"id": "${v2ray_id}",
 139			"aid": "${alterId}",
 140			"net": "${net}",
 141			"type": "none",
 142			"host": "${domain}",
 143			"path": "$_path",
 144			"tls": "tls"
 145		}
 146		EOF
 147	else
 148		[[ -z $ip ]] && get_ip
 149		cat >/etc/v2ray/vmess_qr.json <<-EOF
 150		{
 151			"v": "2",
 152			"ps": "233v2.com_${ip}",
 153			"add": "${ip}",
 154			"port": "${v2ray_port}",
 155			"id": "${v2ray_id}",
 156			"aid": "${alterId}",
 157			"net": "${net}",
 158			"type": "${header}",
 159			"host": "${host}",
 160			"path": "",
 161			"tls": ""
 162		}
 163		EOF
 164	fi
 165}
 166view_v2ray_config_info() {
 167
 168	_load v2ray-info.sh
 169	_v2_args
 170	_v2_info
 171}
 172get_shadowsocks_config() {
 173	if [[ $shadowsocks ]]; then
 174
 175		while :; do
 176			echo
 177			echo -e "$yellow 1. $none查看 Shadowsocks 配置信息"
 178			echo
 179			echo -e "$yellow 2. $none生成二维码链接"
 180			echo
 181			read -p "$(echo -e "请选择 [${magenta}1-2$none]:")" _opt
 182			if [[ -z $_opt ]]; then
 183				error
 184			else
 185				case $_opt in
 186				1)
 187					view_shadowsocks_config_info
 188					break
 189					;;
 190				2)
 191					get_shadowsocks_config_qr_link
 192					break
 193					;;
 194				*)
 195					error
 196					;;
 197				esac
 198			fi
 199
 200		done
 201	else
 202		shadowsocks_config
 203	fi
 204}
 205view_shadowsocks_config_info() {
 206	if [[ $shadowsocks ]]; then
 207		_load ss-info.sh
 208	else
 209		shadowsocks_config
 210	fi
 211}
 212get_shadowsocks_config_qr_link() {
 213	if [[ $shadowsocks ]]; then
 214		get_ip
 215		_load qr.sh
 216		_ss_qr
 217	else
 218		shadowsocks_config
 219	fi
 220
 221}
 222
 223get_shadowsocks_config_qr_ask() {
 224	echo
 225	while :; do
 226		echo -e "是否需要生成$yellow Shadowsocks 配置信息 $none二维码链接 [${magenta}Y/N$none]"
 227		read -p "$(echo -e "默认 [${magenta}N$none]:")" y_n
 228		[ -z $y_n ] && y_n="n"
 229		if [[ $y_n == [Yy] ]]; then
 230			get_shadowsocks_config_qr_link
 231			break
 232		elif [[ $y_n == [Nn] ]]; then
 233			break
 234		else
 235			error
 236		fi
 237	done
 238
 239}
 240change_shadowsocks_config() {
 241	if [[ $shadowsocks ]]; then
 242
 243		while :; do
 244			echo
 245			echo -e "$yellow 1. $none修改 Shadowsocks 端口"
 246			echo
 247			echo -e "$yellow 2. $none修改 Shadowsocks 密码"
 248			echo
 249			echo -e "$yellow 3. $none修改 Shadowsocks 加密协议"
 250			echo
 251			echo -e "$yellow 4. $none关闭 Shadowsocks"
 252			echo
 253			read -p "$(echo -e "请选择 [${magenta}1-4$none]:")" _opt
 254			if [[ -z $_opt ]]; then
 255				error
 256			else
 257				case $_opt in
 258				1)
 259					change_shadowsocks_port
 260					break
 261					;;
 262				2)
 263					change_shadowsocks_password
 264					break
 265					;;
 266				3)
 267					change_shadowsocks_ciphers
 268					break
 269					;;
 270				4)
 271					disable_shadowsocks
 272					break
 273					;;
 274				*)
 275					error
 276					;;
 277				esac
 278			fi
 279
 280		done
 281	else
 282
 283		shadowsocks_config
 284	fi
 285}
 286shadowsocks_config() {
 287	echo
 288	echo
 289	echo -e " $red大佬...你没有配置 Shadowsocks $none...不过现在想要配置的话也是可以的 ^_^"
 290	echo
 291	echo
 292
 293	while :; do
 294		echo -e "是否配置 ${yellow}Shadowsocks${none} [${magenta}Y/N$none]"
 295		read -p "$(echo -e "(默认 [${cyan}N$none]):") " install_shadowsocks
 296		[[ -z "$install_shadowsocks" ]] && install_shadowsocks="n"
 297		if [[ "$install_shadowsocks" == [Yy] ]]; then
 298			echo
 299			shadowsocks=true
 300			shadowsocks_port_config
 301			shadowsocks_password_config
 302			shadowsocks_ciphers_config
 303			pause
 304			open_port $new_ssport
 305			backup_config +ss
 306			ssport=$new_ssport
 307			sspass=$new_sspass
 308			ssciphers=$new_ssciphers
 309			config
 310			clear
 311			view_shadowsocks_config_info
 312			# get_shadowsocks_config_qr_ask
 313			break
 314		elif [[ "$install_shadowsocks" == [Nn] ]]; then
 315			echo
 316			echo -e " $green已取消配置 Shadowsocks ....$none"
 317			echo
 318			break
 319		else
 320			error
 321		fi
 322
 323	done
 324}
 325shadowsocks_port_config() {
 326	local random=$(shuf -i20001-65535 -n1)
 327	while :; do
 328		echo -e "请输入 "$yellow"Shadowsocks"$none" 端口 ["$magenta"1-65535"$none"],不能和 "$yellow"V2ray"$none" 端口相同"
 329		read -p "$(echo -e "(默认端口: ${cyan}${random}$none):") " new_ssport
 330		[ -z "$new_ssport" ] && new_ssport=$random
 331		case $new_ssport in
 332		$v2ray_port)
 333			echo
 334			echo -e " 不能和$cyan V2Ray 端口 $none一毛一样...."
 335			echo
 336			echo -e " 当前 V2Ray 端口:${cyan}$v2ray_port${none}"
 337			error
 338			;;
 339		[1-9] | [1-9][0-9] | [1-9][0-9][0-9] | [1-9][0-9][0-9][0-9] | [1-5][0-9][0-9][0-9][0-9] | 6[0-4][0-9][0-9][0-9] | 65[0-4][0-9][0-9] | 655[0-3][0-5])
 340			if [[ $v2ray_transport == [45] ]]; then
 341				local tls=ture
 342			fi
 343			if [[ $tls && $new_ssport == "80" ]] || [[ $tls && $new_ssport == "443" ]]; then
 344				echo
 345				echo -e "由于你当前已使用了 "$green"WebSocket + TLS $none或$green HTTP/2"$none" 传输协议."
 346				echo
 347				echo -e "所以不能选择 "$magenta"80"$none" 或 "$magenta"443"$none" 端口"
 348				error
 349			elif [[ $dynamicPort ]] && [[ $v2ray_dynamicPort_start == $new_ssport || $v2ray_dynamicPort_end == $new_ssport ]]; then
 350				echo
 351				echo -e " 抱歉,此端口和 V2Ray 动态端口 冲突,当前 V2Ray 动态端口范围为:${cyan}$port_range${none}"
 352				error
 353			elif [[ $dynamicPort ]] && [[ $v2ray_dynamicPort_start -lt $new_ssport && $new_ssport -le $v2ray_dynamicPort_end ]]; then
 354				echo
 355				echo -e " 抱歉,此端口和 V2Ray 动态端口 冲突,当前 V2Ray 动态端口范围为:${cyan}$port_range${none}"
 356				error
 357			elif [[ $socks && $new_ssport == $socks_port ]]; then
 358				echo
 359				echo -e "抱歉, 此端口跟 Socks 端口冲突...当前 Socks 端口: ${cyan}$socks_port$none"
 360				error
 361			elif [[ $mtproto && $new_ssport == $mtproto_port ]]; then
 362				echo
 363				echo -e "抱歉, 此端口跟 MTProto 端口冲突...当前 MTProto 端口: ${cyan}$mtproto_port$none"
 364				error
 365			else
 366				echo
 367				echo
 368				echo -e "$yellow Shadowsocks 端口 = $cyan$new_ssport$none"
 369				echo "----------------------------------------------------------------"
 370				echo
 371				break
 372			fi
 373			;;
 374		*)
 375			error
 376			;;
 377		esac
 378
 379	done
 380
 381}
 382
 383shadowsocks_password_config() {
 384
 385	while :; do
 386		echo -e "请输入 "$yellow"Shadowsocks"$none" 密码"
 387		read -p "$(echo -e "(默认密码: ${cyan}233blog.com$none)"): " new_sspass
 388		[ -z "$new_sspass" ] && new_sspass="233blog.com"
 389		case $new_sspass in
 390		*[/$]*)
 391			echo
 392			echo -e " 由于这个脚本太辣鸡了..所以密码不能包含$red / $none或$red $ $none这两个符号.... "
 393			echo
 394			error
 395			;;
 396		*)
 397			echo
 398			echo
 399			echo -e "$yellow Shadowsocks 密码 = $cyan$new_sspass$none"
 400			echo "----------------------------------------------------------------"
 401			echo
 402			break
 403			;;
 404		esac
 405
 406	done
 407
 408}
 409
 410shadowsocks_ciphers_config() {
 411
 412	while :; do
 413		echo -e "请选择 "$yellow"Shadowsocks"$none" 加密协议 [${magenta}1-7$none]"
 414		for ((i = 1; i <= ${#ciphers[*]}; i++)); do
 415			ciphers_show="${ciphers[$i - 1]}"
 416			echo
 417			echo -e "$yellow $i. $none${ciphers_show}"
 418		done
 419		echo
 420		read -p "$(echo -e "(默认加密协议: ${cyan}${ciphers[6]}$none)"):" ssciphers_opt
 421		[ -z "$ssciphers_opt" ] && ssciphers_opt=7
 422		case $ssciphers_opt in
 423		[1-7])
 424			new_ssciphers=${ciphers[$ssciphers_opt - 1]}
 425			echo
 426			echo
 427			echo -e "$yellow Shadowsocks 加密协议 = $cyan${new_ssciphers}$none"
 428			echo "----------------------------------------------------------------"
 429			echo
 430			break
 431			;;
 432		*)
 433			error
 434			;;
 435		esac
 436
 437	done
 438}
 439
 440change_shadowsocks_port() {
 441	echo
 442	while :; do
 443		echo -e "请输入 "$yellow"Shadowsocks"$none" 端口 ["$magenta"1-65535"$none"]"
 444		read -p "$(echo -e "(当前端口: ${cyan}$ssport$none):") " new_ssport
 445		[ -z "$new_ssport" ] && error && continue
 446		case $new_ssport in
 447		$ssport)
 448			echo
 449			echo " 跟当前端口一毛一样....修改个鸡鸡哦"
 450			error
 451			;;
 452		$v2ray_port)
 453			echo
 454			echo -e " 不能和$cyan V2Ray 端口 $none一毛一样...."
 455			error
 456			;;
 457		[1-9] | [1-9][0-9] | [1-9][0-9][0-9] | [1-9][0-9][0-9][0-9] | [1-5][0-9][0-9][0-9][0-9] | 6[0-4][0-9][0-9][0-9] | 65[0-4][0-9][0-9] | 655[0-3][0-5])
 458			if [[ $v2ray_transport == [45] ]]; then
 459				local tls=ture
 460			fi
 461			if [[ $tls && $new_ssport == "80" ]] || [[ $tls && $new_ssport == "443" ]]; then
 462				echo
 463				echo -e "由于你已选择了 "$green"WebSocket + TLS $none或$green HTTP/2"$none" 传输协议."
 464				echo
 465				echo -e "所以不能选择 "$magenta"80"$none" 或 "$magenta"443"$none" 端口"
 466				error
 467			elif [[ $dynamicPort ]] && [[ $v2ray_dynamicPort_start == $new_ssport || $v2ray_dynamicPort_end == $new_ssport ]]; then
 468				echo
 469				echo -e " 抱歉,此端口和 V2Ray 动态端口 冲突,当前 V2Ray 动态端口范围为:${cyan}$port_range${none}"
 470				error
 471			elif [[ $dynamicPort ]] && [[ $v2ray_dynamicPort_start -lt $new_ssport && $new_ssport -le $v2ray_dynamicPort_end ]]; then
 472				echo
 473				echo -e " 抱歉,此端口和 V2Ray 动态端口 冲突,当前 V2Ray 动态端口范围为:${cyan}$port_range${none}"
 474				error
 475			elif [[ $socks && $new_ssport == $socks_port ]]; then
 476				echo
 477				echo -e "抱歉, 此端口跟 Socks 端口冲突...当前 Socks 端口: ${cyan}$socks_port$none"
 478				error
 479			elif [[ $mtproto && $new_ssport == $mtproto_port ]]; then
 480				echo
 481				echo -e "抱歉, 此端口跟 MTProto 端口冲突...当前 MTProto 端口: ${cyan}$mtproto_port$none"
 482				error
 483			else
 484				echo
 485				echo
 486				echo -e "$yellow Shadowsocks 端口 = $cyan$new_ssport$none"
 487				echo "----------------------------------------------------------------"
 488				echo
 489				pause
 490				backup_config ssport
 491				del_port $ssport
 492				open_port $new_ssport
 493				ssport=$new_ssport
 494				config
 495				clear
 496				view_shadowsocks_config_info
 497				# get_shadowsocks_config_qr_ask
 498				break
 499			fi
 500			;;
 501		*)
 502			error
 503			;;
 504		esac
 505
 506	done
 507}
 508change_shadowsocks_password() {
 509	echo
 510	while :; do
 511		echo -e "请输入 "$yellow"Shadowsocks"$none" 密码"
 512		read -p "$(echo -e "(当前密码:${cyan}$sspass$none)"): " new_sspass
 513		[ -z "$new_sspass" ] && error && continue
 514		case $new_sspass in
 515		$sspass)
 516			echo
 517			echo " 跟当前密码一毛一样....修改个鸡鸡哦"
 518			error
 519			;;
 520		*[/$]*)
 521			echo
 522			echo -e " 由于这个脚本太辣鸡了..所以密码不能包含$red / $none或$red $ $none这两个符号.... "
 523			echo
 524			error
 525			;;
 526		*)
 527			echo
 528			echo
 529			echo -e "$yellow Shadowsocks 密码 = $cyan$new_sspass$none"
 530			echo "----------------------------------------------------------------"
 531			echo
 532			pause
 533			backup_config sspass
 534			sspass=$new_sspass
 535			config
 536			clear
 537			view_shadowsocks_config_info
 538			# get_shadowsocks_config_qr_ask
 539			break
 540			;;
 541		esac
 542
 543	done
 544
 545}
 546
 547change_shadowsocks_ciphers() {
 548	echo
 549	while :; do
 550		echo -e "请选择 "$yellow"Shadowsocks"$none" 加密协议 [${magenta}1-${#ciphers[*]}$none]"
 551		for ((i = 1; i <= ${#ciphers[*]}; i++)); do
 552			ciphers_show="${ciphers[$i - 1]}"
 553			echo
 554			echo -e "$yellow $i. $none${ciphers_show}"
 555		done
 556		echo
 557		read -p "$(echo -e "(当前加密协议: ${cyan}${ssciphers}$none)"):" ssciphers_opt
 558		[ -z "$ssciphers_opt" ] && error && continue
 559		case $ssciphers_opt in
 560		[1-7])
 561			new_ssciphers=${ciphers[$ssciphers_opt - 1]}
 562			if [[ $new_ssciphers == $ssciphers ]]; then
 563				echo
 564				echo " 跟当前加密协议一毛一样....修改个鸡鸡哦"
 565				error && continue
 566			fi
 567			echo
 568			echo
 569			echo -e "$yellow Shadowsocks 加密协议 = $cyan${new_ssciphers}$none"
 570			echo "----------------------------------------------------------------"
 571			echo
 572			pause
 573			backup_config ssciphers
 574			ssciphers=$new_ssciphers
 575			config
 576			clear
 577			view_shadowsocks_config_info
 578			# get_shadowsocks_config_qr_ask
 579			break
 580			;;
 581		*)
 582			error
 583			;;
 584		esac
 585
 586	done
 587
 588}
 589disable_shadowsocks() {
 590	echo
 591
 592	while :; do
 593		echo -e "是否关闭 ${yellow}Shadowsocks${none} [${magenta}Y/N$none]"
 594		read -p "$(echo -e "(默认 [${cyan}N$none]):") " y_n
 595		[[ -z "$y_n" ]] && y_n="n"
 596		if [[ "$y_n" == [Yy] ]]; then
 597			echo
 598			echo
 599			echo -e "$yellow 关闭 Shadowsocks = $cyan是$none"
 600			echo "----------------------------------------------------------------"
 601			echo
 602			pause
 603			backup_config -ss
 604			del_port $ssport
 605			shadowsocks=''
 606			config
 607			# clear
 608			echo
 609			echo
 610			echo
 611			echo -e "$green Shadowsocks 已关闭...不过你也可以随时重新启用 Shadowsocks ...只要你喜欢$none"
 612			echo
 613			break
 614		elif [[ "$y_n" == [Nn] ]]; then
 615			echo
 616			echo -e " $green已取消关闭 Shadowsocks ....$none"
 617			echo
 618			break
 619		else
 620			error
 621		fi
 622
 623	done
 624}
 625change_v2ray_config() {
 626	local _menu=(
 627		"修改 V2Ray 端口"
 628		"修改 V2Ray 传输协议"
 629		"修改 V2Ray 动态端口 (如果可以)"
 630		"修改 用户ID ( UUID )"
 631		"修改 TLS 域名 (如果可以)"
 632		"修改 分流的路径 (如果可以)"
 633		"修改 伪装的网址 (如果可以)"
 634		"关闭 网站伪装 和 路径分流 (如果可以)"
 635		"开启 / 关闭 广告拦截"
 636	)
 637	while :; do
 638		for ((i = 1; i <= ${#_menu[*]}; i++)); do
 639			if [[ "$i" -le 9 ]]; then
 640				echo
 641				echo -e "$yellow  $i. $none${_menu[$i - 1]}"
 642			else
 643				echo
 644				echo -e "$yellow $i. $none${_menu[$i - 1]}"
 645			fi
 646		done
 647		echo
 648		read -p "$(echo -e "请选择 [${magenta}1-${#_menu[*]}$none]:")" _opt
 649		if [[ -z $_opt ]]; then
 650			error
 651		else
 652			case $_opt in
 653			1)
 654				change_v2ray_port
 655				break
 656				;;
 657			2)
 658				change_v2ray_transport
 659				break
 660				;;
 661			3)
 662				change_v2ray_dynamicport
 663				break
 664				;;
 665			4)
 666				change_v2ray_id
 667				break
 668				;;
 669			5)
 670				change_domain
 671				break
 672				;;
 673			6)
 674				change_path_config
 675				break
 676				;;
 677			7)
 678				change_proxy_site_config
 679				break
 680				;;
 681			8)
 682				disable_path
 683				break
 684				;;
 685			9)
 686				blocked_hosts
 687				break
 688				;;
 689			[aA][Ii][aA][Ii] | [Dd][Dd])
 690				custom_uuid
 691				break
 692				;;
 693			[Dd] | [Aa][Ii] | 233 | 233[Bb][Ll][Oo][Gg] | 233[Bb][Ll][Oo][Gg].[Cc][Oo][Mm] | 233[Bb][Oo][Yy] | [Aa][Ll][Tt][Ee][Rr][Ii][Dd])
 694				change_v2ray_alterId
 695				break
 696				;;
 697			*)
 698				error
 699				;;
 700			esac
 701		fi
 702	done
 703}
 704change_v2ray_port() {
 705	if [[ $v2ray_transport == 4 ]]; then
 706		echo
 707		echo -e " 由于你目前使用的是$yellow WebSocket + TLS $none传输协议...所以修不修改 V2Ray 端口没有什么不一样的"
 708		echo
 709		echo " 如果你想要使用其他端口...可以先修改 V2Ray 的传输协议..之后再修改 V2Ray 端口"
 710		echo
 711		change_v2ray_transport_ask
 712	elif [[ $v2ray_transport == 5 ]]; then
 713		echo
 714		echo -e " 由于你目前使用的是$yellow HTTP/2 $none传输协议...所以修不修改 V2Ray 端口没有什么不一样的"
 715		echo
 716		echo " 如果你想要使用其他端口...可以先修改 V2Ray 的传输协议..之后再修改 V2Ray 端口"
 717		echo
 718		change_v2ray_transport_ask
 719	else
 720		echo
 721		while :; do
 722			echo -e "请输入 "$yellow"V2Ray"$none" 端口 ["$magenta"1-65535"$none"]"
 723			read -p "$(echo -e "(当前端口: ${cyan}${v2ray_port}$none):")" v2ray_port_opt
 724			[[ -z $v2ray_port_opt ]] && error && continue
 725			case $v2ray_port_opt in
 726			$v2ray_port)
 727				echo
 728				echo " 哎呀...跟当前端口一毛一样呀...修改个鸡鸡哦"
 729				error
 730				;;
 731			[1-9] | [1-9][0-9] | [1-9][0-9][0-9] | [1-9][0-9][0-9][0-9] | [1-5][0-9][0-9][0-9][0-9] | 6[0-4][0-9][0-9][0-9] | 65[0-4][0-9][0-9] | 655[0-3][0-5])
 732				if [[ $dynamicPort ]] && [[ $v2ray_dynamicPort_start == $v2ray_port_opt || $v2ray_dynamicPort_end == $v2ray_port_opt ]]; then
 733					echo
 734					echo -e " 抱歉,此端口和 V2Ray 动态端口 冲突,当前 V2Ray 动态端口范围为:${cyan}$port_range${none}"
 735					error
 736				elif [[ $dynamicPort ]] && [[ $v2ray_dynamicPort_start -lt $v2ray_port_opt && $v2ray_port_opt -le $v2ray_dynamicPort_end ]]; then
 737					echo
 738					echo -e " 抱歉,此端口和 V2Ray 动态端口 冲突,当前 V2Ray 动态端口范围为:${cyan}$port_range${none}"
 739					error
 740				elif [[ $shadowsocks && $v2ray_port_opt == $ssport ]]; then
 741					echo
 742					echo -e "抱歉, 此端口跟 Shadowsocks 端口冲突...当前 Shadowsocks 端口: ${cyan}$ssport$none"
 743					error
 744				elif [[ $socks && $v2ray_port_opt == $socks_port ]]; then
 745					echo
 746					echo -e "抱歉, 此端口跟 Socks 端口冲突...当前 Socks 端口: ${cyan}$socks_port$none"
 747					error
 748				elif [[ $mtproto && $v2ray_port_opt == $mtproto_port ]]; then
 749					echo
 750					echo -e "抱歉, 此端口跟 MTProto 端口冲突...当前 MTProto 端口: ${cyan}$mtproto_port$none"
 751					error
 752				else
 753					echo
 754					echo
 755					echo -e "$yellow V2Ray 端口 = $cyan$v2ray_port_opt$none"
 756					echo "----------------------------------------------------------------"
 757					echo
 758					pause
 759					backup_config v2ray_port
 760					del_port $v2ray_port
 761					open_port $v2ray_port_opt
 762					v2ray_port=$v2ray_port_opt
 763					config
 764					clear
 765					view_v2ray_config_info
 766					# download_v2ray_config_ask
 767					break
 768				fi
 769				;;
 770			*)
 771				error
 772				;;
 773			esac
 774
 775		done
 776	fi
 777
 778}
 779download_v2ray_config_ask() {
 780	echo
 781	while :; do
 782		echo -e "是否需要 下载 V2Ray 配置 / 生成配置信息链接 / 生成二维码链接 [${magenta}Y/N$none]"
 783		read -p "$(echo -e "默认 [${cyan}N$none]:")" y_n
 784		[ -z $y_n ] && y_n="n"
 785		if [[ $y_n == [Yy] ]]; then
 786			download_v2ray_config
 787			break
 788		elif [[ $y_n == [Nn] ]]; then
 789			break
 790		else
 791			error
 792		fi
 793	done
 794
 795}
 796change_v2ray_transport_ask() {
 797	echo
 798	while :; do
 799		echo -e "是否需要修改$yellow V2Ray $none传输协议 [${magenta}Y/N$none]"
 800		read -p "$(echo -e "默认 [${cyan}N$none]:")" y_n
 801		[ -z $y_n ] && break
 802		if [[ $y_n == [Yy] ]]; then
 803			change_v2ray_transport
 804			break
 805		elif [[ $y_n == [Nn] ]]; then
 806			break
 807		else
 808			error
 809		fi
 810	done
 811}
 812change_v2ray_transport() {
 813	echo
 814	while :; do
 815		echo -e "请选择 "$yellow"V2Ray"$none" 传输协议 [${magenta}1-${#transport[*]}$none]"
 816		echo
 817		for ((i = 1; i <= ${#transport[*]}; i++)); do
 818			Stream="${transport[$i - 1]}"
 819			if [[ "$i" -le 9 ]]; then
 820				# echo
 821				echo -e "$yellow  $i. $none${Stream}"
 822			else
 823				# echo
 824				echo -e "$yellow $i. $none${Stream}"
 825			fi
 826		done
 827		echo
 828		echo "备注1: 含有 [dynamicPort] 的即启用动态端口.."
 829		echo "备注2: [utp | srtp | wechat-video | dtls | wireguard] 分别伪装成 [BT下载 | 视频通话 | 微信视频通话 | DTLS 1.2 数据包 | WireGuard 数据包]"
 830		echo
 831		read -p "$(echo -e "(当前传输协议: ${cyan}${transport[$v2ray_transport - 1]}$none)"):" v2ray_transport_opt
 832		if [ -z "$v2ray_transport_opt" ]; then
 833			error
 834		else
 835			case $v2ray_transport_opt in
 836			$v2ray_transport)
 837				echo
 838				echo " 哎呀...跟当前传输协议一毛一样呀...修改个鸡鸡哦"
 839				error
 840				;;
 841			4 | 5)
 842				if [[ $v2ray_port == "80" || $v2ray_port == "443" ]]; then
 843					echo
 844					echo -e " 抱歉...如果你想要使用${cyan} ${transport[$v2ray_transport_opt - 1]} $none传输协议.. ${red}V2Ray 端口不能为 80 或者 443 ...$none"
 845					echo
 846					echo -e " 当前 V2Ray 端口: ${cyan}$v2ray_port$none"
 847					error
 848				elif [[ $shadowsocks ]] && [[ $ssport == "80" || $ssport == "443" ]]; then
 849					echo
 850					echo -e " 抱歉...如果你想要使用${cyan} ${transport[$v2ray_transport_opt - 1]} $none传输协议.. ${red}Shadowsocks 端口不能为 80 或者 443 ...$none"
 851					echo
 852					echo -e " 当前 Shadowsocks 端口: ${cyan}$ssport$none"
 853					error
 854				elif [[ $socks ]] && [[ $socks_port == "80" || $socks_port == "443" ]]; then
 855					echo
 856					echo -e " 抱歉...如果你想要使用${cyan} ${transport[$v2ray_transport_opt - 1]} $none传输协议.. ${red}Socks 端口不能为 80 或者 443 ...$none"
 857					echo
 858					echo -e " 当前 Socks 端口: ${cyan}$socks_port$none"
 859					error
 860				elif [[ $mtproto ]] && [[ $mtproto_port == "80" || $mtproto_port == "443" ]]; then
 861					echo
 862					echo -e " 抱歉...如果你想要使用${cyan} ${transport[$v2ray_transport_opt - 1]} $none传输协议.. ${red}MTProto 端口不能为 80 或者 443 ...$none"
 863					echo
 864					echo -e " 当前 MTProto 端口: ${cyan}$mtproto_port$none"
 865					error
 866				else
 867					echo
 868					echo
 869					echo -e "$yellow V2Ray 传输协议 = $cyan${transport[$v2ray_transport_opt - 1]}$none"
 870					echo "----------------------------------------------------------------"
 871					echo
 872					break
 873				fi
 874				;;
 875			[1-9] | [1-2][0-9] | 3[0-2])
 876				echo
 877				echo
 878				echo -e "$yellow V2Ray 传输协议 = $cyan${transport[$v2ray_transport_opt - 1]}$none"
 879				echo "----------------------------------------------------------------"
 880				echo
 881				break
 882				;;
 883			*)
 884				error
 885				;;
 886			esac
 887		fi
 888
 889	done
 890	pause
 891
 892	if [[ $v2ray_transport_opt == [45] ]]; then
 893		tls_config
 894	elif [[ $v2ray_transport_opt -ge 18 ]]; then
 895		v2ray_dynamic_port_start
 896		v2ray_dynamic_port_end
 897		pause
 898		old_transport
 899		open_port "multiport"
 900		backup_config v2ray_transport v2ray_dynamicPort_start v2ray_dynamicPort_end
 901		port_range="${v2ray_dynamic_port_start_input}-${v2ray_dynamic_port_end_input}"
 902		v2ray_transport=$v2ray_transport_opt
 903		config
 904		clear
 905		view_v2ray_config_info
 906		# download_v2ray_config_ask
 907	else
 908		old_transport
 909		backup_config v2ray_transport
 910		v2ray_transport=$v2ray_transport_opt
 911		config
 912		clear
 913		view_v2ray_config_info
 914		# download_v2ray_config_ask
 915	fi
 916
 917}
 918old_transport() {
 919	if [[ $v2ray_transport == [45] ]]; then
 920		del_port "80"
 921		del_port "443"
 922		if [[ $caddy && $caddy_pid ]]; then
 923			do_service stop caddy
 924			if [[ $systemd ]]; then
 925				systemctl disable caddy >/dev/null 2>&1
 926			else
 927				update-rc.d -f caddy remove >/dev/null 2>&1
 928			fi
 929		elif [[ $caddy ]]; then
 930			if [[ $systemd ]]; then
 931				systemctl disable caddy >/dev/null 2>&1
 932			else
 933				update-rc.d -f caddy remove >/dev/null 2>&1
 934			fi
 935		fi
 936		if [[ $is_path ]]; then
 937			backup_config -path
 938		fi
 939	elif [[ $v2ray_transport -ge 18 ]]; then
 940		del_port "multiport"
 941	fi
 942}
 943
 944tls_config() {
 945	while :; do
 946		echo
 947		echo
 948		echo
 949		echo -e "请输入一个 $magenta正确的域名$none,一定一定一定要正确,不!能!出!错!"
 950		read -p "(例如:233blog.com): " new_domain
 951		[ -z "$new_domain" ] && error && continue
 952		echo
 953		echo
 954		echo -e "$yellow 你的域名 = $cyan$new_domain$none"
 955		echo "----------------------------------------------------------------"
 956		break
 957	done
 958	get_ip
 959	echo
 960	echo
 961	echo -e "$yellow 请将 $magenta$new_domain$none $yellow解析到: $cyan$ip$none"
 962	echo
 963	echo -e "$yellow 请将 $magenta$new_domain$none $yellow解析到: $cyan$ip$none"
 964	echo
 965	echo -e "$yellow 请将 $magenta$new_domain$none $yellow解析到: $cyan$ip$none"
 966	echo "----------------------------------------------------------------"
 967	echo
 968
 969	while :; do
 970
 971		read -p "$(echo -e "(是否已经正确解析: [${magenta}Y$none]):") " record
 972		if [[ -z "$record" ]]; then
 973			error
 974		else
 975			if [[ "$record" == [Yy] ]]; then
 976				domain_check
 977				echo
 978				echo
 979				echo -e "$yellow 域名解析 = ${cyan}我确定已经有解析了$none"
 980				echo "----------------------------------------------------------------"
 981				echo
 982				break
 983			else
 984				error
 985			fi
 986		fi
 987
 988	done
 989
 990	if [[ $caddy ]]; then
 991		path_config_ask
 992		pause
 993		# domain_check
 994		backup_config v2ray_transport domain
 995		if [[ $new_path ]]; then
 996			backup_config +path
 997			path=$new_path
 998			proxy_site=$new_proxy_site
 999			is_path=true
1000		fi
1001
1002		if [[ $v2ray_transport -ge 18 ]]; then
1003			del_port "multiport"
1004		fi
1005		domain=$new_domain
1006
1007		open_port "80"
1008		open_port "443"
1009		if [[ $systemd ]]; then
1010			systemctl enable caddy >/dev/null 2>&1
1011		else
1012			update-rc.d -f caddy defaults >/dev/null 2>&1
1013		fi
1014		v2ray_transport=$v2ray_transport_opt
1015		caddy_config
1016		config
1017		clear
1018		view_v2ray_config_info
1019		# download_v2ray_config_ask
1020	else
1021		if [[ $v2ray_transport_opt == 5 ]]; then
1022			path_config_ask
1023			pause
1024			domain_check
1025			backup_config v2ray_transport domain caddy
1026			if [[ $new_path ]]; then
1027				backup_config +path
1028				path=$new_path
1029				proxy_site=$new_proxy_site
1030				is_path=true
1031			fi
1032			if [[ $v2ray_transport -ge 18 ]]; then
1033				del_port "multiport"
1034			fi
1035			domain=$new_domain
1036			install_caddy
1037			open_port "80"
1038			open_port "443"
1039			v2ray_transport=$v2ray_transport_opt
1040			caddy_config
1041			config
1042			caddy=true
1043			clear
1044			view_v2ray_config_info
1045			# download_v2ray_config_ask
1046		else
1047			auto_tls_config
1048		fi
1049	fi
1050
1051}
1052auto_tls_config() {
1053	echo -e "
1054
1055		安装 Caddy 来实现 自动配置 TLS
1056		
1057		如果你已经安装 Nginx 或 Caddy
1058
1059		$yellow并且..自己能搞定配置 TLS$none
1060
1061		那么就不需要 打开自动配置 TLS
1062		"
1063	echo "----------------------------------------------------------------"
1064	echo
1065
1066	while :; do
1067
1068		read -p "$(echo -e "(是否自动配置 TLS: [${magenta}Y/N$none]):") " auto_install_caddy
1069		if [[ -z "$auto_install_caddy" ]]; then
1070			error
1071		else
1072			if [[ "$auto_install_caddy" == [Yy] ]]; then
1073				echo
1074				echo
1075				echo -e "$yellow 自动配置 TLS = $cyan打开$none"
1076				echo "----------------------------------------------------------------"
1077				echo
1078				path_config_ask
1079				pause
1080				domain_check
1081				backup_config v2ray_transport domain caddy
1082				if [[ $new_path ]]; then
1083					backup_config +path
1084					path=$new_path
1085					proxy_site=$new_proxy_site
1086					is_path=true
1087				fi
1088				if [[ $v2ray_transport -ge 18 ]]; then
1089					del_port "multiport"
1090				fi
1091				domain=$new_domain
1092				install_caddy
1093				open_port "80"
1094				open_port "443"
1095				v2ray_transport=$v2ray_transport_opt
1096				caddy_config
1097				config
1098				caddy=true
1099				clear
1100				view_v2ray_config_info
1101				# download_v2ray_config_ask
1102				break
1103			elif [[ "$auto_install_caddy" == [Nn] ]]; then
1104				echo
1105				echo
1106				echo -e "$yellow 自动配置 TLS = $cyan关闭$none"
1107				echo "----------------------------------------------------------------"
1108				echo
1109				pause
1110				domain_check
1111				backup_config v2ray_transport domain
1112				if [[ $v2ray_transport -ge 18 ]]; then
1113					del_port "multiport"
1114				fi
1115				domain=$new_domain
1116				open_port "80"
1117				open_port "443"
1118				v2ray_transport=$v2ray_transport_opt
1119				config
1120				clear
1121				view_v2ray_config_info
1122				# download_v2ray_config_ask
1123				break
1124			else
1125				error
1126			fi
1127		fi
1128
1129	done
1130}
1131
1132path_config_ask() {
1133	echo
1134	while :; do
1135		echo -e "是否开启 网站伪装 和 路径分流 [${magenta}Y/N$none]"
1136		read -p "$(echo -e "(默认: [${cyan}N$none]):")" path_ask
1137		[[ -z $path_ask ]] && path_ask="n"
1138
1139		case $path_ask in
1140		Y | y)
1141			path_config
1142			break
1143			;;
1144		N | n)
1145			echo
1146			echo
1147			echo -e "$yellow 网站伪装 和 路径分流 = $cyan不想配置$none"
1148			echo "----------------------------------------------------------------"
1149			echo
1150			break
1151			;;
1152		*)
1153			error
1154			;;
1155		esac
1156	done
1157}
1158path_config() {
1159	echo
1160	while :; do
1161		echo -e "请输入想要 ${magenta}用来分流的路径$none , 例如 /233blog , 那么只需要输入 233blog 即可"
1162		read -p "$(echo -e "(默认: [${cyan}233blog$none]):")" new_path
1163		[[ -z $new_path ]] && new_path="233blog"
1164
1165		case $new_path in
1166		*[/$]*)
1167			echo
1168			echo -e " 由于这个脚本太辣鸡了..所以分流的路径不能包含$red / $none或$red $ $none这两个符号.... "
1169			echo
1170			error
1171			;;
1172		*)
1173			echo
1174			echo
1175			echo -e "$yellow 分流的路径 = ${cyan}/${new_path}$none"
1176			echo "----------------------------------------------------------------"
1177			echo
1178			break
1179			;;
1180		esac
1181	done
1182	proxy_site_config
1183}
1184proxy_site_config() {
1185	echo
1186	while :; do
1187		echo -e "请输入 ${magenta}一个正确的$none ${cyan}网址$none 用来作为 ${cyan}网站的伪装$none , 例如 https://liyafly.com"
1188		echo -e "举例...假设你当前的域名是$green $domain $none, 伪装的网址的是 https://liyafly.com"
1189		echo -e "然后打开你的域名时候...显示出来的内容就是来自 https://liyafly.com 的内容"
1190		echo -e "其实就是一个反代...明白就好..."
1191		echo -e "如果不能伪装成功...可以使用 v2ray config 修改伪装的网址"
1192		read -p "$(echo -e "(默认: [${cyan}https://liyafly.com$none]):")" new_proxy_site
1193		[[ -z $new_proxy_site ]] && new_proxy_site="https://liyafly.com"
1194
1195		case $new_proxy_site in
1196		*[#$]*)
1197			echo
1198			echo -e " 由于这个脚本太辣鸡了..所以伪装的网址不能包含$red # $none或$red $ $none这两个符号.... "
1199			echo
1200			error
1201			;;
1202		*)
1203			echo
1204			echo
1205			echo -e "$yellow 伪装的网址 = ${cyan}${new_proxy_site}$none"
1206			echo "----------------------------------------------------------------"
1207			echo
1208			break
1209			;;
1210		esac
1211	done
1212}
1213
1214install_caddy() {
1215	_load download-caddy.sh
1216	_download_caddy_file
1217	_install_caddy_service
1218
1219}
1220caddy_config() {
1221	# local email=$(shuf -i1-10000000000 -n1)
1222	_load caddy-config.sh
1223	# systemctl restart caddy
1224	do_service restart caddy
1225}
1226v2ray_dynamic_port_start() {
1227	echo
1228	echo
1229	while :; do
1230		echo -e "请输入 "$yellow"V2Ray 动态端口开始 "$none"范围 ["$magenta"1-65535"$none"]"
1231		read -p "$(echo -e "(默认开始端口: ${cyan}10000$none):")" v2ray_dynamic_port_start_input
1232		[ -z $v2ray_dynamic_port_start_input ] && v2ray_dynamic_port_start_input=10000
1233		case $v2ray_dynamic_port_start_input in
1234		$v2ray_port)
1235			echo
1236			echo " 不能和 V2Ray 端口一毛一样...."
1237			echo
1238			echo -e " 当前 V2Ray 端口:${cyan}$v2ray_port${none}"
1239			error
1240			;;
1241		[1-9] | [1-9][0-9] | [1-9][0-9][0-9] | [1-9][0-9][0-9][0-9] | [1-5][0-9][0-9][0-9][0-9] | 6[0-4][0-9][0-9][0-9] | 65[0-4][0-9][0-9] | 655[0-3][0-5])
1242			if [[ $shadowsocks && $v2ray_dynamic_port_start_input == $ssport ]]; then
1243				echo
1244				echo -e "抱歉, 此端口跟 Shadowsocks 端口冲突...当前 Shadowsocks 端口: ${cyan}$ssport$none"
1245				error
1246			elif [[ $socks && $v2ray_dynamic_port_start_input == $socks_port ]]; then
1247				echo
1248				echo -e "抱歉, 此端口跟 Socks 端口冲突...当前 Socks 端口: ${cyan}$socks_port$none"
1249				error
1250			elif [[ $mtproto && $v2ray_dynamic_port_start_input == $mtproto_port ]]; then
1251				echo
1252				echo -e "抱歉, 此端口跟 MTProto 端口冲突...当前 MTProto 端口: ${cyan}$mtproto_port$none"
1253				error
1254			else
1255				echo
1256				echo
1257				echo -e "$yellow V2Ray 动态端口开始 = $cyan$v2ray_dynamic_port_start_input$none"
1258				echo "----------------------------------------------------------------"
1259				echo
1260				break
1261			fi
1262
1263			;;
1264		*)
1265			error
1266			;;
1267		esac
1268
1269	done
1270
1271	if [[ $v2ray_dynamic_port_start_input -lt $v2ray_port ]]; then
1272		lt_v2ray_port=true
1273	fi
1274	if [[ $shadowsocks ]] && [[ $v2ray_dynamic_port_start_input -lt $ssport ]]; then
1275		lt_ssport=true
1276	fi
1277	if [[ $socks ]] && [[ $v2ray_dynamic_port_start_input -lt $socks_port ]]; then
1278		lt_socks_port=true
1279	fi
1280	if [[ $mtproto ]] && [[ $v2ray_dynamic_port_start_input -lt $mtproto_port ]]; then
1281		lt_mtproto_port=true
1282	fi
1283
1284}
1285
1286v2ray_dynamic_port_end() {
1287	echo
1288	while :; do
1289		echo -e "请输入 "$yellow"V2Ray 动态端口结束 "$none"范围 ["$magenta"1-65535"$none"]"
1290		read -p "$(echo -e "(默认结束端口: ${cyan}20000$none):")" v2ray_dynamic_port_end_input
1291		[ -z $v2ray_dynamic_port_end_input ] && v2ray_dynamic_port_end_input=20000
1292		case $v2ray_dynamic_port_end_input in
1293		[1-9] | [1-9][0-9] | [1-9][0-9][0-9] | [1-9][0-9][0-9][0-9] | [1-5][0-9][0-9][0-9][0-9] | 6[0-4][0-9][0-9][0-9] | 65[0-4][0-9][0-9] | 655[0-3][0-5])
1294
1295			if [[ $v2ray_dynamic_port_end_input -le $v2ray_dynamic_port_start_input ]]; then
1296				echo
1297				echo " 不能小于或等于 V2Ray 动态端口开始范围"
1298				echo
1299				echo -e " 当前 V2Ray 动态端口开始:${cyan}$v2ray_dynamic_port_start_input${none}"
1300				error
1301			elif [ $lt_v2ray_port ] && [[ ${v2ray_dynamic_port_end_input} -ge $v2ray_port ]]; then
1302				echo
1303				echo " V2Ray 动态端口结束范围 不能包括 V2Ray 端口..."
1304				echo
1305				echo -e " 当前 V2Ray 端口: ${cyan}$v2ray_port$none"
1306				error
1307			elif [ $lt_ssport ] && [[ ${v2ray_dynamic_port_end_input} -ge $ssport ]]; then
1308				echo
1309				echo " V2Ray 动态端口结束范围 不能包括 Shadowsocks 端口..."
1310				echo
1311				echo -e " 当前 Shadowsocks 端口: ${cyan}$ssport$none"
1312				error
1313			elif [ $lt_socks_port ] && [[ ${v2ray_dynamic_port_end_input} -ge $socks_port ]]; then
1314				echo
1315				echo " V2Ray 动态端口结束范围 不能包括 Socks 端口..."
1316				echo
1317				echo -e " 当前 Socks 端口: ${cyan}$socks_port$none"
1318				error
1319			elif [ $lt_mtproto_port ] && [[ ${v2ray_dynamic_port_end_input} -ge $mtproto_port ]]; then
1320				echo
1321				echo " V2Ray 动态端口结束范围 不能包括 MTProto 端口..."
1322				echo
1323				echo -e " 当前 MTProto 端口: ${cyan}$mtproto_port$none"
1324				error
1325			else
1326				echo
1327				echo
1328				echo -e "$yellow V2Ray 动态端口结束 = $cyan$v2ray_dynamic_port_end_input$none"
1329				echo "----------------------------------------------------------------"
1330				echo
1331				break
1332			fi
1333			;;
1334		*)
1335			error
1336			;;
1337		esac
1338
1339	done
1340
1341}
1342change_v2ray_dynamicport() {
1343	if [[ $v2ray_transport -ge 18 ]]; then
1344		change_v2ray_dynamic_port_start
1345		change_v2ray_dynamic_port_end
1346		pause
1347		del_port "multiport"
1348		open_port "multiport"
1349		backup_config v2ray_dynamicPort_start v2ray_dynamicPort_end
1350		port_range="${v2ray_dynamic_port_start_input}-${v2ray_dynamic_port_end_input}"
1351		config
1352		# clear
1353		echo
1354		echo -e "$green 动态端口修改成功啦...你不需要修改 V2Ray 客户端配置...保持原有的配置即可...$none"
1355		echo
1356	else
1357		echo
1358		echo -e "$red ...当前传输协议木有启用动态端口...$none"
1359		echo
1360		while :; do
1361			echo -e "是否需要修改传输协议 [${magenta}Y/N$none]"
1362			read -p "$(echo -e "默认 [${cyan}N$none]:")" y_n
1363			if [[ -z $y_n ]]; then
1364				echo
1365				echo -e "$green 已取消修改传输协议...$none"
1366				echo
1367				break
1368			else
1369				if [[ $y_n == [Yy] ]]; then
1370					change_v2ray_transport
1371					break
1372				elif [[ $y_n == [Nn] ]]; then
1373					echo
1374					echo -e "$green 已取消修改传输协议...$none"
1375					echo
1376					break
1377				else
1378					error
1379				fi
1380			fi
1381		done
1382
1383	fi
1384}
1385change_v2ray_dynamic_port_start() {
1386	echo
1387	echo
1388	while :; do
1389		echo -e "请输入 "$yellow"V2Ray 动态端口开始 "$none"范围 ["$magenta"1-65535"$none"]"
1390		read -p "$(echo -e "(当前动态开始端口: ${cyan}$v2ray_dynamicPort_start$none):")" v2ray_dynamic_port_start_input
1391		[ -z $v2ray_dynamic_port_start_input ] && error && continue
1392		case $v2ray_dynamic_port_start_input in
1393		$v2ray_port)
1394			echo
1395			echo " 不能和 V2Ray 端口一毛一样...."
1396			echo
1397			echo -e " 当前 V2Ray 端口:${cyan}$v2ray_port${none}"
1398			error
1399			;;
1400		[1-9] | [1-9][0-9] | [1-9][0-9][0-9] | [1-9][0-9][0-9][0-9] | [1-5][0-9][0-9][0-9][0-9] | 6[0-4][0-9][0-9][0-9] | 65[0-4][0-9][0-9] | 655[0-3][0-5])
1401			if [[ $shadowsocks && $v2ray_dynamic_port_start_input == $ssport ]]; then
1402				echo
1403				echo -e "抱歉, 此端口跟 Shadowsocks 端口冲突...当前 Shadowsocks 端口: ${cyan}$ssport$none"
1404				error
1405			elif [[ $socks && $v2ray_dynamic_port_start_input == $socks_port ]]; then
1406				echo
1407				echo -e "抱歉, 此端口跟 Socks 端口冲突...当前 Socks 端口: ${cyan}$socks_port$none"
1408				error
1409			elif [[ $mtproto && $v2ray_dynamic_port_start_input == $mtproto_port ]]; then
1410				echo
1411				echo -e "抱歉, 此端口跟 MTProto 端口冲突...当前 MTProto 端口: ${cyan}$mtproto_port$none"
1412				error
1413			else
1414				echo
1415				echo
1416				echo -e "$yellow V2Ray 动态端口开始 = $cyan$v2ray_dynamic_port_start_input$none"
1417				echo "----------------------------------------------------------------"
1418				echo
1419				break
1420			fi
1421
1422			;;
1423		*)
1424			error
1425			;;
1426		esac
1427
1428	done
1429
1430	if [[ $v2ray_dynamic_port_start_input -lt $v2ray_port ]]; then
1431		lt_v2ray_port=true
1432	fi
1433	if [[ $shadowsocks ]] && [[ $v2ray_dynamic_port_start_input -lt $ssport ]]; then
1434		lt_ssport=true
1435	fi
1436	if [[ $socks ]] && [[ $v2ray_dynamic_port_start_input -lt $socks_port ]]; then
1437		lt_socks_port=true
1438	fi
1439	if [[ $mtproto ]] && [[ $v2ray_dynamic_port_start_input -lt $mtproto_port ]]; then
1440		lt_mtproto_port=true
1441	fi
1442}
1443
1444change_v2ray_dynamic_port_end() {
1445	echo
1446	while :; do
1447		echo -e "请输入 "$yellow"V2Ray 动态端口结束 "$none"范围 ["$magenta"1-65535"$none"]"
1448		read -p "$(echo -e "(当前动态结束端口: ${cyan}$v2ray_dynamicPort_end$none):")" v2ray_dynamic_port_end_input
1449		[ -z $v2ray_dynamic_port_end_input ] && error && continue
1450		case $v2ray_dynamic_port_end_input in
1451		[1-9] | [1-9][0-9] | [1-9][0-9][0-9] | [1-9][0-9][0-9][0-9] | [1-5][0-9][0-9][0-9][0-9] | 6[0-4][0-9][0-9][0-9] | 65[0-4][0-9][0-9] | 655[0-3][0-5])
1452
1453			if [[ $v2ray_dynamic_port_end_input -le $v2ray_dynamic_port_start_input ]]; then
1454				echo
1455				echo " 不能小于或等于 V2Ray 动态端口开始范围"
1456				echo
1457				echo -e " 当前 V2Ray 动态端口开始:${cyan}$v2ray_dynamic_port_start_input${none}"
1458				error
1459			elif [ $lt_v2ray_port ] && [[ ${v2ray_dynamic_port_end_input} -ge $v2ray_port ]]; then
1460				echo
1461				echo " V2Ray 动态端口结束范围 不能包括 V2Ray 端口..."
1462				echo
1463				echo -e " 当前 V2Ray 端口: ${cyan}$v2ray_port$none"
1464				error
1465			elif [ $lt_ssport ] && [[ ${v2ray_dynamic_port_end_input} -ge $ssport ]]; then
1466				echo
1467				echo " V2Ray 动态端口结束范围 不能包括 Shadowsocks 端口..."
1468				echo
1469				echo -e " 当前 Shadowsocks 端口: ${cyan}$ssport$none"
1470				error
1471			elif [ $lt_socks_port ] && [[ ${v2ray_dynamic_port_end_input} -ge $socks_port ]]; then
1472				echo
1473				echo " V2Ray 动态端口结束范围 不能包括 Socks 端口..."
1474				echo
1475				echo -e " 当前 Socks 端口: ${cyan}$socks_port$none"
1476				error
1477			elif [ $lt_mtproto_port ] && [[ ${v2ray_dynamic_port_end_input} -ge $mtproto_port ]]; then
1478				echo
1479				echo " V2Ray 动态端口结束范围 不能包括 MTProto 端口..."
1480				echo
1481				echo -e " 当前 MTProto 端口: ${cyan}$mtproto_port$none"
1482				error
1483			else
1484				echo
1485				echo
1486				echo -e "$yellow V2Ray 动态端口结束 = $cyan$v2ray_dynamic_port_end_input$none"
1487				echo "----------------------------------------------------------------"
1488				echo
1489				break
1490			fi
1491			;;
1492		*)
1493			error
1494			;;
1495		esac
1496
1497	done
1498
1499}
1500change_v2ray_id() {
1501	echo
1502	while :; do
1503		echo -e "是否确定要修改用户ID [${magenta}Y/N$none]"
1504		read -p "$(echo -e "默认 [${cyan}N$none]:")" y_n
1505		if [[ -z $y_n ]]; then
1506			echo
1507			echo -e "$green 已取消修改用户ID...$none"
1508			echo
1509			break
1510		else
1511			if [[ $y_n == [Yy] ]]; then
1512				echo
1513				echo
1514				echo -e "$yellow 修改用户ID = $cyan确定$none"
1515				echo "----------------------------------------------------------------"
1516				echo
1517				pause
1518				backup_config uuid
1519				v2ray_id=$uuid
1520				config
1521				clear
1522				view_v2ray_config_info
1523				# download_v2ray_config_ask
1524				break
1525			elif [[ $y_n == [Nn] ]]; then
1526				echo
1527				echo -e "$green 已取消修改用户ID...$none"
1528				echo
1529				break
1530			else
1531				error
1532			fi
1533		fi
1534	done
1535}
1536change_domain() {
1537	if [[ $v2ray_transport == [45] ]] && [[ $caddy ]]; then
1538		while :; do
1539			echo
1540			echo -e "请输入一个 $magenta正确的域名$none,一定一定一定要正确,不!能!出!错!"
1541			read -p "$(echo -e "(当前域名: ${cyan}$domain$none):") " new_domain
1542			[ -z "$new_domain" ] && error && continue
1543			if [[ $new_domain == $domain ]]; then
1544				echo
1545				echo -e " 跟当前域名一毛一样啊...修改个鸡鸡哦"
1546				echo
1547				error && continue
1548			fi
1549			echo
1550			echo
1551			echo -e "$yellow 你的域名 = $cyan$new_domain$none"
1552			echo "----------------------------------------------------------------"
1553			break
1554		done
1555		get_ip
1556		echo
1557		echo
1558		echo -e "$yellow 请将 $magenta$new_domain$none $yellow解析到: $cyan$ip$none"
1559		echo
1560		echo -e "$yellow 请将 $magenta$new_domain$none $yellow解析到: $cyan$ip$none"
1561		echo
1562		echo -e "$yellow 请将 $magenta$new_domain$none $yellow解析到: $cyan$ip$none"
1563		echo "----------------------------------------------------------------"
1564		echo
1565
1566		while :; do
1567
1568			read -p "$(echo -e "(是否已经正确解析: [${magenta}Y$none]):") " record
1569			if [[ -z "$record" ]]; then
1570				error
1571			else
1572				if [[ "$record" == [Yy] ]]; then
1573					domain_check
1574					echo
1575					echo
1576					echo -e "$yellow 域名解析 = ${cyan}我确定已经有解析了$none"
1577					echo "----------------------------------------------------------------"
1578					echo
1579					pause
1580					# domain_check
1581					backup_config domain
1582					domain=$new_domain
1583					caddy_config
1584					config
1585					clear
1586					view_v2ray_config_info
1587					# download_v2ray_config_ask
1588					break
1589				else
1590					error
1591				fi
1592			fi
1593
1594		done
1595	else
1596		echo
1597		echo -e "$red 抱歉...不支持修改...$none"
1598		echo
1599		echo -e " 备注..修改 TLS 域名仅支持传输协议为 ${yellow}WebSocket + TLS$none${yellow}HTTP/2$none 并且$yellow 自动配置 TLS = 打开$none"
1600		echo
1601		echo -e " 当前传输协议为: ${cyan}${transport[$v2ray_transport - 1]}${none}"
1602		echo
1603		if [[ $caddy ]]; then
1604			echo -e " 自动配置 TLS = ${cyan}打开$none"
1605		else
1606			echo -e " 自动配置 TLS = $red关闭$none"
1607		fi
1608		echo
1609	fi
1610}
1611change_path_config() {
1612	if [[ $v2ray_transport == [45] ]] && [[ $caddy && $is_path ]]; then
1613		echo
1614		while :; do
1615			echo -e "请输入想要 ${magenta}用来分流的路径$none , 例如 /233blog , 那么只需要输入 233blog 即可"
1616			read -p "$(echo -e "(当前分流的路径: [${cyan}/${path}$none]):")" new_path
1617			[[ -z $new_path ]] && error && continue
1618
1619			case $new_path in
1620			$path)
1621				echo
1622				echo -e " 大佬...跟 当前分流的路径 一毛一样啊...修改个鸡鸡哦 "
1623				echo
1624				error
1625				;;
1626			*[/$]*)
1627				echo
1628				echo -e " 由于这个脚本太辣鸡了..所以分流的路径不能包含$red / $none或$red $ $none这两个符号.... "
1629				echo
1630				error
1631				;;
1632			*)
1633				echo
1634				echo
1635				echo -e "$yellow 分流的路径 = ${cyan}/${new_path}$none"
1636				echo "----------------------------------------------------------------"
1637				echo
1638				break
1639				;;
1640			esac
1641		done
1642		pause
1643		backup_config path
1644		path=$new_path
1645		caddy_config
1646		config
1647		clear
1648		view_v2ray_config_info
1649		# download_v2ray_config_ask
1650	elif [[ $v2ray_transport == [45] ]] && [[ $caddy ]]; then
1651		path_config_ask
1652		if [[ $new_path ]]; then
1653			backup_config +path
1654			path=$new_path
1655			proxy_site=$new_proxy_site
1656			is_path=true
1657			caddy_config
1658			config
1659			clear
1660			view_v2ray_config_info
1661			# download_v2ray_config_ask
1662		else
1663			echo
1664			echo
1665			echo " 给大佬点赞....好果断的放弃配置 网站伪装 和 路径分流"
1666			echo
1667			echo
1668		fi
1669	else
1670		echo
1671		echo -e "$red 抱歉...不支持修改...$none"
1672		echo
1673		echo -e " 备注..修改 分流的路径 仅支持传输协议为 ${yellow}WebSocket + TLS$none${yellow}HTTP/2$none 并且$yellow 自动配置 TLS = 打开$none"
1674		echo
1675		echo -e " 当前传输协议为: ${cyan}${transport[$v2ray_transport - 1]}${none}"
1676		echo
1677		if [[ $caddy ]]; then
1678			echo -e " 自动配置 TLS = ${cyan}打开$none"
1679		else
1680			echo -e " 自动配置 TLS = $red关闭$none"
1681		fi
1682		echo
1683		change_v2ray_transport_ask
1684	fi
1685
1686}
1687change_proxy_site_config() {
1688	if [[ $v2ray_transport == [45] ]] && [[ $caddy && $is_path ]]; then
1689		echo
1690		while :; do
1691			echo -e "请输入 ${magenta}一个正确的$none ${cyan}网址$none 用来作为 ${cyan}网站的伪装$none , 例如 https://liyafly.com"
1692			echo -e "举例...你当前的域名是$green $domain $none, 伪装的网址的是 https://liyafly.com"
1693			echo -e "然后打开你的域名时候...显示出来的内容就是来自 https://liyafly.com 的内容"
1694			echo -e "其实就是一个反代...明白就好..."
1695			echo -e "如果不能伪装成功...可以使用 v2ray config 修改伪装的网址"
1696			read -p "$(echo -e "(当前伪装的网址: [${cyan}${proxy_site}$none]):")" new_proxy_site
1697			[[ -z $new_proxy_site ]] && error && continue
1698
1699			case $new_proxy_site in
1700			*[#$]*)
1701				echo
1702				echo -e " 由于这个脚本太辣鸡了..所以伪装的网址不能包含$red # $none或$red $ $none这两个符号.... "
1703				echo
1704				error
1705				;;
1706			*)
1707				echo
1708				echo
1709				echo -e "$yellow 伪装的网址 = ${cyan}${new_proxy_site}$none"
1710				echo "----------------------------------------------------------------"
1711				echo
1712				break
1713				;;
1714			esac
1715		done
1716		pause
1717		backup_config proxy_site
1718		proxy_site=$new_proxy_site
1719		caddy_config
1720		echo
1721		echo
1722		echo " 哎哟...好像是修改成功了..."
1723		echo
1724		echo -e " 赶紧打开你的域名 ${cyan}https://${domain}$none 检查一下看看"
1725		echo
1726		echo
1727	elif [[ $v2ray_transport == [45] ]] && [[ $caddy ]]; then
1728		path_config_ask
1729		if [[ $new_path ]]; then
1730			backup_config +path
1731			path=$new_path
1732			proxy_site=$new_proxy_site
1733			is_path=true
1734			caddy_config
1735			config
1736			clear
1737			view_v2ray_config_info
1738			# download_v2ray_config_ask
1739		else
1740			echo
1741			echo
1742			echo " 给大佬点赞....好果断的放弃配置 网站伪装 和 路径分流"
1743			echo
1744			echo
1745		fi
1746	else
1747		echo
1748		echo -e "$red 抱歉...不支持修改...$none"
1749		echo
1750		echo -e " 备注..修改 伪装的网址 仅支持传输协议为 ${yellow}WebSocket + TLS$none${yellow}HTTP/2$none 并且$yellow 自动配置 TLS = 打开$none"
1751		echo
1752		echo -e " 当前传输协议为: ${cyan}${transport[$v2ray_transport - 1]}${none}"
1753		echo
1754		if [[ $caddy ]]; then
1755			echo -e " 自动配置 TLS = ${cyan}打开$none"
1756		else
1757			echo -e " 自动配置 TLS = $red关闭$none"
1758		fi
1759		echo
1760		change_v2ray_transport_ask
1761	fi
1762
1763}
1764domain_check() {
1765	# test_domain=$(dig $new_domain +short)
1766	test_domain=$(ping $new_domain -c 1 | grep -oE -m1 "([0-9]{1,3}\.){3}[0-9]{1,3}")
1767	if [[ $test_domain != $ip ]]; then
1768		echo
1769		echo -e "$red 检测域名解析错误....$none"
1770		echo
1771		echo -e " 你的域名: $yellow$new_domain$none 未解析到: $cyan$ip$none"
1772		echo
1773		echo -e " 你的域名当前解析到: $cyan$test_domain$none"
1774		echo
1775		echo "备注...如果你的域名是使用 Cloudflare 解析的话..在 Status 那里点一下那图标..让它变灰"
1776		echo
1777		exit 1
1778	fi
1779}
1780disable_path() {
1781	if [[ $v2ray_transport == [45] ]] && [[ $caddy && $is_path ]]; then
1782		echo
1783
1784		while :; do
1785			echo -e "是否关闭 ${yellow}网站伪装 和 路径分流${none} [${magenta}Y/N$none]"
1786			read -p "$(echo -e "(默认 [${cyan}N$none]):") " y_n
1787			[[ -z "$y_n" ]] && y_n="n"
1788			if [[ "$y_n" == [Yy] ]]; then
1789				echo
1790				echo
1791				echo -e "$yellow 关闭 网站伪装 和 路径分流 = $cyan是$none"
1792				echo "----------------------------------------------------------------"
1793				echo
1794				pause
1795				backup_config -path
1796				is_path=''
1797				caddy_config
1798				config
1799				clear
1800				view_v2ray_config_info
1801				# download_v2ray_config_ask
1802				break
1803			elif [[ "$y_n" == [Nn] ]]; then
1804				echo
1805				echo -e " $green已取消关闭 网站伪装 和 路径分流 ....$none"
1806				echo
1807				break
1808			else
1809				error
1810			fi
1811
1812		done
1813	else
1814		echo
1815		echo -e "$red 抱歉...不支持修改...$none"
1816		echo
1817		echo -e " 当前传输协议为: ${cyan}${transport[$v2ray_transport - 1]}${none}"
1818		echo
1819		if [[ $caddy ]]; then
1820			echo -e " 自动配置 TLS = ${cyan}打开$none"
1821		else
1822			echo -e " 自动配置 TLS = $red关闭$none"
1823		fi
1824		echo
1825		if [[ $is_path ]]; then
1826			echo -e " 路径分流 = ${cyan}打开$none"
1827		else
1828			echo -e " 路径分流 = $red关闭$none"
1829		fi
1830		echo
1831		echo -e " 必须为 WebSocket + TLS 或 HTTP/2 传输协议, 自动配置 TLS = ${cyan}打开$none, 路径分流 = ${cyan}打开$none, 才能修改"
1832		echo
1833
1834	fi
1835}
1836blocked_hosts() {
1837	if [[ $ban_ad ]]; then
1838		local _info="$green已开启$none"
1839	else
1840		local _info="$red已关闭$none"
1841	fi
1842	_opt=''
1843	while :; do
1844		echo
1845		echo -e "$yellow 1. $none开启 广告拦截"
1846		echo
1847		echo -e "$yellow 2. $none关闭 广告拦截"
1848		echo
1849		echo "备注: 广告拦截是基于 域名 拦截的..所以也许会造成浏览网页的时候出现部分元素留白..或者其他问题"
1850		echo
1851		echo "反馈问题或请求拦截更多域名: https://github.com/233boy/v2ray/issues"
1852		echo
1853		echo -e "当前广告拦截状态: $_info"
1854		echo
1855		read -p "$(echo -e "请选择 [${magenta}1-2$none]:")" _opt
1856		if [[ -z $_opt ]]; then
1857			error
1858		else
1859			case $_opt in
1860			1)
1861				if [[ $ban_ad ]]; then
1862					echo
1863					echo -e " 大胸弟...难不成你没有看到 (当前广告拦截状态: $_info) 这个帅帅的提示么.....还开启个鸡鸡哦"
1864					echo
1865				else
1866					echo
1867					echo
1868					echo -e "$yellow 广告拦截 = $cyan开启$none"
1869					echo "----------------------------------------------------------------"
1870					echo
1871					pause
1872					backup_config +ad
1873					ban_ad=true
1874					config
1875					echo
1876					echo
1877					echo -e "$green 广告拦截已开启...如果出现异常..那就关闭它咯$none"
1878					echo
1879				fi
1880				break
1881				;;
1882			2)
1883				if [[ $ban_ad ]]; then
1884					echo
1885					echo
1886					echo -e "$yellow 广告拦截 = $cyan关闭$none"
1887					echo "----------------------------------------------------------------"
1888					echo
1889					pause
1890					backup_config -ad
1891					ban_ad=''
1892					config
1893					echo
1894					echo
1895					echo -e "$red 广告拦截已关闭...不过你也可以随时重新开启 ...只要你喜欢$none"
1896					echo
1897				else
1898					echo
1899					echo -e " 大胸弟...难不成你没有看到 (当前广告拦截状态: $_info) 这个帅帅的提示么.....还关闭个鸡鸡哦"
1900					echo
1901				fi
1902				break
1903				;;
1904			*)
1905				error
1906				;;
1907			esac
1908		fi
1909	done
1910
1911}
1912change_v2ray_alterId() {
1913	echo
1914	while :; do
1915		echo -e "请输入 ${yellow}alterId${none} 的数值 [${magenta}0-65535$none]"
1916		read -p "$(echo -e "(当前数值是: ${cyan}$alterId$none):") " new_alterId
1917		[[ -z $new_alterId ]] && error && continue
1918		case $new_alterId in
1919		$alterId)
1920			echo
1921			echo -e " 大佬...跟 当前 alterId 一毛一样啊...修改个鸡鸡哦 "
1922			echo
1923			error
1924			;;
1925		[0-9] | [1-9][0-9] | [1-9][0-9][0-9] | [1-9][0-9][0-9][0-9] | [1-5][0-9][0-9][0-9][0-9] | 6[0-4][0-9][0-9][0-9] | 65[0-4][0-9][0-9] | 655[0-3][0-5])
1926			echo
1927			echo
1928			echo -e "$yellow alterId = $cyan$new_alterId$none"
1929			echo "----------------------------------------------------------------"
1930			echo
1931			pause
1932			backup_config alterId
1933			alterId=$new_alterId
1934			config
1935			clear
1936			view_v2ray_config_info
1937			# download_v2ray_config_ask
1938			break
1939			;;
1940		*)
1941			error
1942			;;
1943		esac
1944	done
1945}
1946
1947custom_uuid() {
1948	echo
1949	while :; do
1950		echo -e "请输入$yello自定义的 UUID$none...(${cyan}UUID 格式一定要对!!!$none)"
1951		read -p "$(echo -e "(当前 UUID: ${cyan}${v2ray_id}$none)"): " myuuid
1952		[ -z "$myuuid" ] && error && continue
1953		case $myuuid in
1954		$v2ray_id)
1955			echo
1956			echo -e " 大佬...跟 当前 UUID 一毛一样啊...修改个鸡鸡哦 "
1957			echo
1958			error
1959			;;
1960		*[/$]* | *\&*)
1961			echo
1962			echo -e " 由于这个脚本太辣鸡了..所以 UUID 不能包含$red / $none或$red $ $none或$red & $none这三个符号.... "
1963			echo
1964			error
1965			;;
1966		*)
1967			echo
1968			echo
1969			echo -e "$yellow UUID = $cyan$myuuid$none"
1970			echo
1971			echo -e " 如果 UUID 格式不正确.. V2Ray 会跪...使用$cyan v2ray reuuid$none 复活"
1972			echo "----------------------------------------------------------------"
1973			echo
1974			pause
1975			uuid=$myuuid
1976			backup_config uuid
1977			v2ray_id=$uuid
1978			config
1979			clear
1980			view_v2ray_config_info
1981			# download_v2ray_config_ask
1982			break
1983			;;
1984		esac
1985	done
1986}
1987v2ray_service() {
1988	while :; do
1989		echo
1990		echo -e "$yellow 1. $none启动 V2Ray"
1991		echo
1992		echo -e "$yellow 2. $none停止 V2Ray"
1993		echo
1994		echo -e "$yellow 3. $none重启 V2Ray"
1995		echo
1996		echo -e "$yellow 4. $none查看访问日志"
1997		echo
1998		echo -e "$yellow 5. $none查看错误日志"
1999		echo
2000		read -p "$(echo -e "请选择 [${magenta}1-5$none]:")" _opt
2001		if [[ -z $_opt ]]; then
2002			error
2003		else
2004			case $_opt in
2005			1)
2006				start_v2ray
2007				break
2008				;;
2009			2)
2010				stop_v2ray
2011				break
2012				;;
2013			3)
2014				restart_v2ray
2015				break
2016				;;
2017			4)
2018				view_v2ray_log
2019				break
2020				;;
2021			5)
2022				view_v2ray_error_log
2023				break
2024				;;
2025			*)
2026				error
2027				;;
2028			esac
2029		fi
2030	done
2031}
2032start_v2ray() {
2033	if [[ $v2ray_pid ]]; then
2034		echo
2035		echo -e "${green} V2Ray 正在运行...无需再启动$none"
2036		echo
2037	else
2038
2039		# systemctl start v2ray
2040		service v2ray start >/dev/null 2>&1
2041		if [[ $? -ne 0 ]]; then
2042			echo
2043			echo -e "${red} V2Ray 启动失败!$none"
2044			echo
2045		else
2046			echo
2047			echo -e "${green} V2Ray 已启动$none"
2048			echo
2049		fi
2050
2051	fi
2052}
2053stop_v2ray() {
2054	if [[ $v2ray_pid ]]; then
2055		# systemctl stop v2ray
2056		service v2ray stop >/dev/null 2>&1
2057		echo
2058		echo -e "${green} V2Ray 已停止$none"
2059		echo
2060	else
2061		echo
2062		echo -e "${red} V2Ray 没有在运行$none"
2063		echo
2064	fi
2065}
2066restart_v2ray() {
2067	# systemctl restart v2ray
2068	service v2ray restart >/dev/null 2>&1
2069	if [[ $? -ne 0 ]]; then
2070		echo
2071		echo -e "${red} V2Ray 重启失败!$none"
2072		echo
2073	else
2074		echo
2075		echo -e "${green} V2Ray 重启完成 $none"
2076		echo
2077	fi
2078}
2079view_v2ray_log() {
2080	echo
2081	echo -e "$green 按 Ctrl + C 即可退出...$none"
2082	echo
2083	tail -f /var/log/v2ray/access.log
2084}
2085view_v2ray_error_log() {
2086	echo
2087	echo -e "$green 按 Ctrl + C 即可退出...$none"
2088	echo
2089	tail -f /var/log/v2ray/error.log
2090}
2091download_v2ray_config() {
2092	while :; do
2093		echo
2094		echo -e "$yellow 1. $none直接下载 V2Ray 客户端配置文件(仅支持 Xshell)"
2095		echo
2096		echo -e "$yellow 2. $none生成 V2Ray 客户端配置文件下载链接"
2097		echo
2098		echo -e "$yellow 3. $none生成 V2Ray 配置信息链接"
2099		echo
2100		echo -e "$yellow 4. $none生成 V2Ray 配置二维码链接"
2101		echo
2102		read -p "$(echo -e "请选择 [${magenta}1-4$none]:")" other_opt
2103		if [[ -z $other_opt ]]; then
2104			error
2105		else
2106			case $other_opt in
2107			1)
2108				get_v2ray_config
2109				break
2110				;;
2111			2)
2112				get_v2ray_config_link
2113				break
2114				;;
2115			3)
2116				get_v2ray_config_info_link
2117				break
2118				;;
2119			4)
2120				get_v2ray_config_qr_link
2121				break
2122				;;
2123			*)
2124				error
2125				;;
2126			esac
2127		fi
2128	done
2129}
2130get_v2ray_config() {
2131	config
2132	echo
2133	echo " 如果你当前使用的 SSH 客户端不是 Xshell 的话...下载 V2Ray 客户端配置文件将会出现卡死情况"
2134	echo
2135	while :; do
2136		read -p "$(echo -e "不要BB...哥就是在使用 Xshell [${magenta}Y$none]:")" is_xshell
2137		if [[ -z $is_xshell ]]; then
2138			error
2139		else
2140			if [[ $is_xshell == [yY] ]]; then
2141				echo
2142				echo "开始下载....请选择 V2Ray 客户端配置文件保存位置"
2143				echo
2144				# sz /etc/v2ray/233blog_v2ray.zip
2145				local tmpfile="/tmp/233blog_v2ray_config_$RANDOM.json"
2146				cp -f $v2ray_client_config $tmpfile
2147				sz $tmpfile
2148				echo
2149				echo
2150				echo -e "$green 下载完成咯...$none"
2151				echo
2152				# echo -e "$yellow 解压密码 = ${cyan}233blog.com$none"
2153				# echo
2154				echo -e "$yellow SOCKS 监听端口 = ${cyan}2333${none}"
2155				echo
2156				echo -e "${yellow} HTTP 监听端口 = ${cyan}6666$none"
2157				echo
2158				echo "V2Ray 客户端使用教程: https://233v2.com/post/4/"
2159				echo
2160				break
2161			else
2162				error
2163			fi
2164		fi
2165	done
2166	[[ -f $tmpfile ]] && rm -rf $tmpfile
2167
2168}
2169get_v2ray_config_link() {
2170	_load client_file.sh
2171	_get_client_file
2172}
2173create_v2ray_config_text() {
2174
2175	get_transport_args
2176
2177	echo
2178	echo
2179	echo "---------- V2Ray 配置信息 -------------"
2180	if [[ $v2ray_transport == [45] ]]; then
2181		if [[ ! $caddy ]]; then
2182			echo
2183			echo " 警告!请自行配置 TLS...教程: https://233v2.com/post/3/"
2184		fi
2185		echo
2186		echo "地址 (Address) = ${domain}"
2187		echo
2188		echo "端口 (Port) = 443"
2189		echo
2190		echo "用户ID (User ID / UUID) = ${v2ray_id}"
2191		echo
2192		echo "额外ID (Alter Id) = ${alterId}"
2193		echo
2194		echo "传输协议 (Network) = ${net}"
2195		echo
2196		echo "伪装类型 (header type) = ${header}"
2197		echo
2198		echo "伪装域名 (host) = ${domain}"
2199		echo
2200		echo "路径 (path) = ${_path}"
2201		echo
2202		echo "TLS (Enable TLS) = 打开"
2203		echo
2204		if [[ $ban_ad ]]; then
2205			echo " 备注: 广告拦截已开启.."
2206			echo
2207		fi
2208	else
2209		[[ -z $ip ]] && get_ip
2210		echo
2211		echo "地址 (Address) = ${ip}"
2212		echo
2213		echo "端口 (Port) = $v2ray_port"
2214		echo
2215		echo "用户ID (User ID / UUID) = ${v2ray_id}"
2216		echo
2217		echo "额外ID (Alter Id) = ${alterId}"
2218		echo
2219		echo "传输协议 (Network) = ${net}"
2220		echo
2221		echo "伪装类型 (header type) = ${header}"
2222		echo
2223	fi
2224	if [[ $v2ray_transport -ge 18 ]] && [[ $ban_ad ]]; then
2225		echo "备注: 动态端口已启用...广告拦截已开启..."
2226		echo
2227	elif [[ $v2ray_transport -ge 18 ]]; then
2228		echo "备注: 动态端口已启用..."
2229		echo
2230	elif [[ $ban_ad ]]; then
2231		echo "备注: 广告拦截已开启.."
2232		echo
2233	fi
2234	echo "---------- END -------------"
2235	echo
2236	echo "V2Ray 客户端使用教程: https://233v2.com/post/4/"
2237	echo
2238}
2239get_v2ray_config_info_link() {
2240	echo
2241	echo -e "$green 正在生成链接.... 稍等片刻即可....$none"
2242	echo
2243	create_v2ray_config_text >/tmp/233blog_v2ray.txt
2244	local random=$(echo $RANDOM-$RANDOM-$RANDOM | base64 -w 0)
2245	local link=$(curl -s --upload-file /tmp/233blog_v2ray.txt "https://transfer.sh/${random}_233v2_v2ray.txt")
2246	if [[ $link ]]; then
2247		echo
2248		echo "---------- V2Ray 配置信息链接-------------"
2249		echo
2250		echo -e "$yellow 链接 = $cyan$link$none"
2251		echo
2252		echo -e " V2Ray 客户端使用教程: https://233v2.com/post/4/"
2253		echo
2254		echo "备注...链接将在 14 天后失效..."
2255		echo
2256		echo "提醒...请不要把链接分享出去...除非你有特别的理由...."
2257		echo
2258	else
2259		echo
2260		echo -e "$red 哎呀呀呀...出错咯...请重试$none"
2261		echo
2262	fi
2263	rm -rf /tmp/233blog_v2ray.txt
2264}
2265get_v2ray_config_qr_link() {
2266
2267	create_vmess_URL_config
2268
2269	_load qr.sh
2270	_qr_create
2271}
2272get_v2ray_vmess_URL_link() {
2273	create_vmess_URL_config
2274	local vmess="vmess://$(cat /etc/v2ray/vmess_qr.json | base64 -w 0)"
2275	echo
2276	echo "---------- V2Ray vmess URL / V2RayNG v0.4.1+ / V2RayN v2.1+ / 仅适合部分客户端 -------------"
2277	echo
2278	echo -e ${cyan}$vmess${none}
2279	echo
2280	rm -rf /etc/v2ray/vmess_qr.json
2281}
2282other() {
2283	while :; do
2284		echo
2285		echo -e "$yellow 1. $none安装 BBR"
2286		echo
2287		echo -e "$yellow 2. $none安装 LotServer(锐速)"
2288		echo
2289		echo -e "$yellow 3. $none卸载 LotServer(锐速)"
2290		echo
2291		read -p "$(echo -e "请选择 [${magenta}1-3$none]:")" _opt
2292		if [[ -z $_opt ]]; then
2293			error
2294		else
2295			case $_opt in
2296			1)
2297				install_bbr
2298				break
2299				;;
2300			2)
2301				install_lotserver
2302				break
2303				;;
2304			3)
2305				uninstall_lotserver
2306				break
2307				;;
2308			*)
2309				error
2310				;;
2311			esac
2312		fi
2313	done
2314}
2315install_bbr() {
2316	local test1=$(sed -n '/net.ipv4.tcp_congestion_control/p' /etc/sysctl.conf)
2317	local test2=$(sed -n '/net.core.default_qdisc/p' /etc/sysctl.conf)
2318	if [[ $test1 == "net.ipv4.tcp_congestion_control = bbr" && $test2 == "net.core.default_qdisc = fq" ]]; then
2319		echo
2320		echo -e "$green BBR 已经启用啦...无需再安装$none"
2321		echo
2322	else
2323		_load bbr.sh
2324		_try_enable_bbr
2325		[[ ! $enable_bbr ]] && bash <(curl -s -L https://github.com/teddysun/across/raw/master/bbr.sh)
2326	fi
2327}
2328install_lotserver() {
2329	# https://moeclub.org/2017/03/08/14/
2330	wget --no-check-certificate -qO /tmp/appex.sh "https://raw.githubusercontent.com/0oVicero0/serverSpeeder_Install/master/appex.sh"
2331	bash /tmp/appex.sh 'install'
2332	rm -rf /tmp/appex.sh
2333}
2334uninstall_lotserver() {
2335	# https://moeclub.org/2017/03/08/14/
2336	wget --no-check-certificate -qO /tmp/appex.sh "https://raw.githubusercontent.com/0oVicero0/serverSpeeder_Install/master/appex.sh"
2337	bash /tmp/appex.sh 'uninstall'
2338	rm -rf /tmp/appex.sh
2339}
2340
2341open_port() {
2342	if [[ $cmd == "apt-get" ]]; then
2343		if [[ $1 != "multiport" ]]; then
2344			# if [[ $cmd == "apt-get" ]]; then
2345			iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport $1 -j ACCEPT
2346			iptables -I INPUT -m state --state NEW -m udp -p udp --dport $1 -j ACCEPT
2347			ip6tables -I INPUT -m state --state NEW -m tcp -p tcp --dport $1 -j ACCEPT
2348			ip6tables -I INPUT -m state --state NEW -m udp -p udp --dport $1 -j ACCEPT
2349
2350			# iptables-save >/etc/iptables.rules.v4
2351			# ip6tables-save >/etc/iptables.rules.v6
2352			# else
2353			# 	firewall-cmd --permanent --zone=public --add-port=$1/tcp
2354			# 	firewall-cmd --permanent --zone=public --add-port=$1/udp
2355			# 	firewall-cmd --reload
2356			# fi
2357		else
2358			# if [[ $cmd == "apt-get" ]]; then
2359			local multiport="${v2ray_dynamic_port_start_input}:${v2ray_dynamic_port_end_input}"
2360			iptables -I INPUT -p tcp --match multiport --dports $multiport -j ACCEPT
2361			iptables -I INPUT -p udp --match multiport --dports $multiport -j ACCEPT
2362			ip6tables -I INPUT -p tcp --match multiport --dports $multiport -j ACCEPT
2363			ip6tables -I INPUT -p udp --match multiport --dports $multiport -j ACCEPT
2364
2365			# iptables-save >/etc/iptables.rules.v4
2366			# ip6tables-save >/etc/iptables.rules.v6
2367			# else
2368			# 	local multi_port="${v2ray_dynamic_port_start_input}-${v2ray_dynamic_port_end_input}"
2369			# 	firewall-cmd --permanent --zone=public --add-port=$multi_port/tcp
2370			# 	firewall-cmd --permanent --zone=public --add-port=$multi_port/udp
2371			# 	firewall-cmd --reload
2372			# fi
2373		fi
2374		iptables-save >/etc/iptables.rules.v4
2375		ip6tables-save >/etc/iptables.rules.v6
2376		# else
2377		# 	service iptables save >/dev/null 2>&1
2378		# 	service ip6tables save >/dev/null 2>&1
2379	fi
2380
2381}
2382del_port() {
2383	if [[ $cmd == "apt-get" ]]; then
2384		if [[ $1 != "multiport" ]]; then
2385			# if [[ $cmd == "apt-get" ]]; then
2386			iptables -D INPUT -m state --state NEW -m tcp -p tcp --dport $1 -j ACCEPT
2387			iptables -D INPUT -m state --state NEW -m udp -p udp --dport $1 -j ACCEPT
2388			ip6tables -D INPUT -m state --state NEW -m tcp -p tcp --dport $1 -j ACCEPT
2389			ip6tables -D INPUT -m state --state NEW -m udp -p udp --dport $1 -j ACCEPT
2390			# else
2391			# 	firewall-cmd --permanent --zone=public --remove-port=$1/tcp
2392			# 	firewall-cmd --permanent --zone=public --remove-port=$1/udp
2393			# fi
2394		else
2395			# if [[ $cmd == "apt-get" ]]; then
2396			local ports="${v2ray_dynamicPort_start}:${v2ray_dynamicPort_end}"
2397			iptables -D INPUT -p tcp --match multiport --dports $ports -j ACCEPT
2398			iptables -D INPUT -p udp --match multiport --dports $ports -j ACCEPT
2399			ip6tables -D INPUT -p tcp --match multiport --dports $ports -j ACCEPT
2400			ip6tables -D INPUT -p udp --match multiport --dports $ports -j ACCEPT
2401			# else
2402			# 	local ports="${v2ray_dynamicPort_start}-${v2ray_dynamicPort_end}"
2403			# 	firewall-cmd --permanent --zone=public --remove-port=$ports/tcp
2404			# 	firewall-cmd --permanent --zone=public --remove-port=$ports/udp
2405			# fi
2406		fi
2407		iptables-save >/etc/iptables.rules.v4
2408		ip6tables-save >/etc/iptables.rules.v6
2409		# else
2410		# 	service iptables save >/dev/null 2>&1
2411		# 	service ip6tables save >/dev/null 2>&1
2412	fi
2413}
2414update() {
2415	while :; do
2416		echo
2417		echo -e "$yellow 1. $none更新 V2Ray 主程序"
2418		echo
2419		echo -e "$yellow 2. $none更新 V2Ray 管理脚本"
2420		echo
2421		read -p "$(echo -e "请选择 [${magenta}1-2$none]:")" _opt
2422		if [[ -z $_opt ]]; then
2423			error
2424		else
2425			case $_opt in
2426			1)
2427				update_v2ray
2428				break
2429				;;
2430			2)
2431				update_v2ray.sh
2432				exit
2433				break
2434				;;
2435			*)
2436				error
2437				;;
2438			esac
2439		fi
2440	done
2441}
2442update_v2ray() {
2443	_load download-v2ray.sh
2444	_update_v2ray_version
2445}
2446update_v2ray.sh() {
2447	if [[ $_test ]]; then
2448		local latest_version=$(curl -H 'Cache-Control: no-cache' -s -L "https://raw.githubusercontent.com/233boy/v2ray/test/v2ray.sh" | grep '_version' -m1 | cut -d\" -f2)
2449	else
2450		local latest_version=$(curl -H 'Cache-Control: no-cache' -s -L "https://raw.githubusercontent.com/233boy/v2ray/master/v2ray.sh" | grep '_version' -m1 | cut -d\" -f2)
2451	fi
2452
2453	if [[ ! $latest_version ]]; then
2454		echo
2455		echo -e " $red获取 V2Ray 最新版本失败!!!$none"
2456		echo
2457		echo -e " 请尝试执行如下命令: $green echo 'nameserver 8.8.8.8' >/etc/resolv.conf $none"
2458		echo
2459		echo " 然后再继续...."
2460		echo
2461		exit 1
2462	fi
2463
2464	if [[ $latest_version == $_version ]]; then
2465		echo
2466		echo -e "$green 木有发现新版本 $none"
2467		echo
2468	else
2469		echo
2470		echo -e " $green 咦...发现新版本耶....正在拼命更新.......$none"
2471		echo
2472		cd /etc/v2ray/233boy/v2ray
2473		git pull
2474		cp -f /etc/v2ray/233boy/v2ray/v2ray.sh $_v2ray_sh
2475		chmod +x $_v2ray_sh
2476		echo
2477		echo -e "$green 更新成功啦...当前 V2Ray 管理脚本 版本: ${cyan}$latest_version$none"
2478		echo
2479	fi
2480
2481}
2482uninstall_v2ray() {
2483	_load uninstall.sh
2484}
2485config() {
2486	_load config.sh
2487
2488	if [[ $v2ray_port == "80" ]]; then
2489		if [[ $cmd == "yum" ]]; then
2490			[[ $(pgrep "httpd") ]] && systemctl stop httpd >/dev/null 2>&1
2491			[[ $(command -v httpd) ]] && yum remove httpd -y >/dev/null 2>&1
2492		else
2493			[[ $(pgrep "apache2") ]] && service apache2 stop >/dev/null 2>&1
2494			[[ $(command -v apache2) ]] && apt-get remove apache2* -y >/dev/null 2>&1
2495		fi
2496	fi
2497	do_service restart v2ray
2498}
2499backup_config() {
2500	for keys in $*; do
2501		case $keys in
2502		v2ray_transport)
2503			sed -i "18s/=$v2ray_transport/=$v2ray_transport_opt/" $backup
2504			;;
2505		v2ray_port)
2506			sed -i "21s/=$v2ray_port/=$v2ray_port_opt/" $backup
2507			;;
2508		uuid)
2509			sed -i "24s/=$v2ray_id/=$uuid/" $backup
2510			;;
2511		alterId)
2512			sed -i "27s/=$alterId/=$new_alterId/" $backup
2513			;;
2514		v2ray_dynamicPort_start)
2515			sed -i "30s/=$v2ray_dynamicPort_start/=$v2ray_dynamic_port_start_input/" $backup
2516			;;
2517		v2ray_dynamicPort_end)
2518			sed -i "33s/=$v2ray_dynamicPort_end/=$v2ray_dynamic_port_end_input/" $backup
2519			;;
2520		domain)
2521			sed -i "36s/=$domain/=$new_domain/" $backup
2522			;;
2523		caddy)
2524			sed -i "39s/=/=true/" $backup
2525			;;
2526		+ss)
2527			sed -i "42s/=/=true/; 45s/=$ssport/=$new_ssport/; 48s/=$sspass/=$new_sspass/; 51s/=$ssciphers/=$new_ssciphers/" $backup
2528			;;
2529		-ss)
2530			sed -i "42s/=true/=/" $backup
2531			;;
2532		ssport)
2533			sed -i "45s/=$ssport/=$new_ssport/" $backup
2534			;;
2535		sspass)
2536			sed -i "48s/=$sspass/=$new_sspass/" $backup
2537			;;
2538		ssciphers)
2539			sed -i "51s/=$ssciphers/=$new_ssciphers/" $backup
2540			;;
2541		+ad)
2542			sed -i "54s/=/=true/" $backup
2543			;;
2544		-ad)
2545			sed -i "54s/=true/=/" $backup
2546			;;
2547		+path)
2548			sed -i "57s/=/=true/; 60s/=$path/=$new_path/; 63s#=$proxy_site#=$new_proxy_site#" $backup
2549			;;
2550		-path)
2551			sed -i "57s/=true/=/" $backup
2552			;;
2553		path)
2554			sed -i "60s/=$path/=$new_path/" $backup
2555			;;
2556		proxy_site)
2557			sed -i "63s#=$proxy_site#=$new_proxy_site#" $backup
2558			;;
2559		+socks)
2560			sed -i "66s/=/=true/; 69s/=$socks_port/=$new_socks_port/; 72s/=$socks_username/=$new_socks_username/; 75s/=$socks_userpass/=$new_socks_userpass/;" $backup
2561			;;
2562		-socks)
2563			sed -i "66s/=true/=/" $backup
2564			;;
2565		socks_port)
2566			sed -i "69s/=$socks_port/=$new_socks_port/" $backup
2567			;;
2568		socks_username)
2569			sed -i "72s/=$socks_username/=$new_socks_username/" $backup
2570			;;
2571		socks_userpass)
2572			sed -i "75s/=$socks_userpass/=$new_socks_userpass/" $backup
2573			;;
2574		+mtproto)
2575			sed -i "78s/=/=true/; 81s/=$mtproto_port/=$new_mtproto_port/; 84s/=$mtproto_secret/=$new_mtproto_secret/" $backup
2576			;;
2577		-mtproto)
2578			sed -i "78s/=true/=/" $backup
2579			;;
2580		mtproto_port)
2581			sed -i "81s/=$mtproto_port/=$new_mtproto_port/" $backup
2582			;;
2583		mtproto_secret)
2584			sed -i "84s/=$mtproto_secret/=$new_mtproto_secret/" $backup
2585			;;
2586		+bt)
2587			sed -i "87s/=/=true/" $backup
2588			;;
2589		-bt)
2590			sed -i "87s/=true/=/" $backup
2591			;;
2592		esac
2593	done
2594
2595}
2596
2597get_ip() {
2598
2599	ipv4=$(curl -4 -s ipv4.icanhazip.com)
2600	[[ -z $ipv4 ]] && ipv4=$(curl -s -4 https://api.ip.sb/ip)
2601	[[ -z $ipv4 ]] && ipv4=$(curl -s -4 https://api.ipify.org)
2602	[[ -z $ipv4 ]] && ipv4=$(curl -s -4 https://ip.seeip.org)
2603	[[ -z $ipv4 ]] && ipv4=$(curl -s -4 https://ifconfig.co/ip)
2604	[[ -z $ipv4 ]] && ipv4=$(curl -s -4 https://api.myip.com | grep -oE "([0-9]{1,3}\.){3}[0-9]{1,3}")
2605	[[ -z $ipv4 ]] && ipv4=$(curl -s -4 icanhazip.com)
2606	[[ -z $ipv4 ]] && ipv4=$(curl -s -4 myip.ipip.net | grep -oE "([0-9]{1,3}\.){3}[0-9]{1,3}")
2607	[[ -z $ipv4 ]] && echo -e "\n$red 这垃圾小鸡扔了吧!$none\n" && exit
2608    
2609    ipv6=$(curl -6 -s ipv6.icanhazip.com)
2610	[[ -z $ipv6 ]] && ipv6=$(curl -s -6 https://api.ip.sb/ip)
2611	[[ -z $ipv6 ]] && ipv6=$(curl -s -6 https://ip.seeip.org)
2612	[[ -z $ipv6 ]] && ipv6=$(curl -s -6 https://ifconfig.co/ip)	
2613	[[ -z $ipv6 ]] && ipv6=$(curl -s -6 icanhazip.com)
2614	[[ -z $ipv6 ]] && echo -e "\n$red 这垃圾小鸡扔了吧!$none\n" && exit
2615	
2616	if [ $ipv6 ]; then
2617	ip=$ipv6 ##默认ipv6 edit by Scaleya
2618	else ip=$ipv4
2619	fi
2620}
2621
2622error() {
2623
2624	echo -e "\n$red 输入错误!$none\n"
2625
2626}
2627
2628pause() {
2629
2630	read -rsp "$(echo -e "按$green Enter 回车键 $none继续....或按$red Ctrl + C $none取消.")" -d $'\n'
2631	echo
2632}
2633do_service() {
2634	if [[ $systemd ]]; then
2635		systemctl $1 $2
2636	else
2637		service $2 $1
2638	fi
2639}
2640_help() {
2641	echo
2642	echo "........... V2Ray 管理脚本帮助信息 by 233v2.com .........."
2643	echo -e "
2644	${green}v2ray menu $none管理 V2Ray (同等于直接输入 v2ray)
2645
2646	${green}v2ray info $none查看 V2Ray 配置信息
2647
2648	${green}v2ray config $none修改 V2Ray 配置
2649
2650	${green}v2ray link $none生成 V2Ray 客户端配置文件链接
2651
2652	${green}v2ray textlink $none生成 V2Ray 配置信息链接
2653
2654	${green}v2ray qr $none生成 V2Ray 配置二维码链接
2655
2656	${green}v2ray ss $none修改 Shadowsocks 配置
2657
2658	${green}v2ray ssinfo $none查看 Shadowsocks 配置信息
2659
2660	${green}v2ray ssqr $none生成 Shadowsocks 配置二维码链接
2661
2662	${green}v2ray status $none查看 V2Ray 运行状态
2663
2664	${green}v2ray start $none启动 V2Ray
2665
2666	${green}v2ray stop $none停止 V2Ray
2667
2668	${green}v2ray restart $none重启 V2Ray
2669
2670	${green}v2ray log $none查看 V2Ray 运行日志
2671
2672	${green}v2ray update $none更新 V2Ray
2673
2674	${green}v2ray update.sh $none更新 V2Ray 管理脚本
2675
2676	${green}v2ray uninstall $none卸载 V2Ray
2677"
2678}
2679menu() {
2680	clear
2681	while :; do
2682		echo
2683		echo "........... V2Ray 管理脚本 $_version by 233v2.com .........."
2684		echo
2685		echo -e "## V2Ray 版本: $cyan$v2ray_ver$none  /  V2Ray 状态: $v2ray_status ##"
2686		echo
2687		echo "帮助说明: https://233v2.com/post/1/"
2688		echo
2689		echo "反馈问题: https://github.com/233boy/v2ray/issues"
2690		echo
2691		echo "TG 群组: https://t.me/blog233"
2692		echo
2693		echo "捐赠脚本作者: https://233v2.com/donate/"
2694		echo
2695		echo "捐助 V2Ray: https://www.v2ray.com/chapter_00/02_donate.html"
2696		echo
2697		echo -e "$yellow  1. $none查看 V2Ray 配置"
2698		echo
2699		echo -e "$yellow  2. $none修改 V2Ray 配置"
2700		echo
2701		echo -e "$yellow  3. $none下载 V2Ray 配置 / 生成配置信息链接 / 生成二维码链接"
2702		echo
2703		echo -e "$yellow  4. $none查看 Shadowsocks 配置 / 生成二维码链接"
2704		echo
2705		echo -e "$yellow  5. $none修改 Shadowsocks 配置"
2706		echo
2707		echo -e "$yellow  6. $none查看 MTProto 配置 / 修改 MTProto 配置"
2708		echo
2709		echo -e "$yellow  7. $none查看 Socks5 配置 / 修改 Socks5 配置"
2710		echo
2711		echo -e "$yellow  8. $none启动 / 停止 / 重启 / 查看日志"
2712		echo
2713		echo -e "$yellow  9. $none更新 V2Ray / 更新 V2Ray 管理脚本"
2714		echo
2715		echo -e "$yellow 10. $none卸载 V2Ray"
2716		echo
2717		echo -e "$yellow 11. $none其他"
2718		echo
2719		echo -e "温馨提示...如果你不想执行选项...按$yellow Ctrl + C $none即可退出"
2720		echo
2721		read -p "$(echo -e "请选择菜单 [${magenta}1-11$none]:")" choose
2722		if [[ -z $choose ]]; then
2723			exit 1
2724		else
2725			case $choose in
2726			1)
2727				view_v2ray_config_info
2728				break
2729				;;
2730			2)
2731				change_v2ray_config
2732				break
2733				;;
2734			3)
2735				download_v2ray_config
2736				break
2737				;;
2738			4)
2739				get_shadowsocks_config
2740				break
2741				;;
2742			5)
2743				change_shadowsocks_config
2744				break
2745				;;
2746			6)
2747				_load mtproto.sh
2748				_mtproto_main
2749				break
2750				;;
2751			7)
2752				_load socks.sh
2753				_socks_main
2754				break
2755				;;
2756			8)
2757				v2ray_service
2758				break
2759				;;
2760			9)
2761				update
2762				break
2763				;;
2764			10)
2765				uninstall_v2ray
2766				break
2767				;;
2768			11)
2769				other
2770				break
2771				;;
2772			*)
2773				error
2774				;;
2775			esac
2776		fi
2777	done
2778}
2779args=$1
2780[ -z $1 ] && args="menu"
2781case $args in
2782menu)
2783	menu
2784	;;
2785i | info)
2786	view_v2ray_config_info
2787	;;
2788c | config)
2789	change_v2ray_config
2790	;;
2791l | link)
2792	get_v2ray_config_link
2793	;;
2794L | infolink)
2795	get_v2ray_config_info_link
2796	;;
2797q | qr)
2798	get_v2ray_config_qr_link
2799	;;
2800s | ss)
2801	change_shadowsocks_config
2802	;;
2803S | ssinfo)
2804	view_shadowsocks_config_info
2805	;;
2806Q | ssqr)
2807	get_shadowsocks_config_qr_link
2808	;;
2809socks)
2810	_load socks.sh
2811	_socks_main
2812	;;
2813socksinfo)
2814	_load socks.sh
2815	_view_socks_info
2816	;;
2817tg)
2818	_load mtproto.sh
2819	_mtproto_main
2820	;;
2821tginfo)
2822	_load mtproto.sh
2823	_view_mtproto_info
2824	;;
2825bt)
2826	_load bt.sh
2827	_ban_bt_main
2828	;;
2829status)
2830	echo
2831	if [[ $v2ray_transport == [45] && $caddy ]]; then
2832		echo -e " V2Ray 状态: $v2ray_status  /  Caddy 状态: $caddy_run_status"
2833	else
2834		echo -e " V2Ray 状态: $v2ray_status"
2835	fi
2836	echo
2837	;;
2838start)
2839	start_v2ray
2840	;;
2841stop)
2842	stop_v2ray
2843	;;
2844restart)
2845	[[ $v2ray_transport == [45] && $caddy ]] && do_service restart caddy
2846	restart_v2ray
2847	;;
2848reload)
2849	config
2850	[[ $v2ray_transport == [45] && $caddy ]] && caddy_config
2851	clear
2852	view_v2ray_config_info
2853	;;
2854time)
2855	date -s "$(curl -sI g.cn | grep Date | cut -d' ' -f3-6)Z"
2856	;;
2857log)
2858	view_v2ray_log
2859	;;
2860url | URL)
2861	get_v2ray_vmess_URL_link
2862	;;
2863u | update)
2864	update_v2ray
2865	;;
2866U | update.sh)
2867	update_v2ray.sh
2868	exit
2869	;;
2870un | uninstall)
2871	uninstall_v2ray
2872	;;
2873reinstall)
2874	uninstall_v2ray
2875	if [[ $is_uninstall_v2ray ]]; then
2876		cd
2877		cd - >/dev/null 2>&1
2878		bash <(curl -sL https://scaleya.netlify.com/share/v2ray233_6.sh)
2879	fi
2880	;;
2881[aA][Ii] | [Dd])
2882	change_v2ray_alterId
2883	;;
2884[aA][Ii][aA][Ii] | [Dd][Dd])
2885	custom_uuid
2886	;;
2887reuuid)
2888	backup_config uuid
2889	v2ray_id=$uuid
2890	config
2891	clear
2892	view_v2ray_config_info
2893	# download_v2ray_config_ask
2894	;;
2895v | version)
2896	echo
2897	echo -e " 当前 V2Ray 版本: ${green}$v2ray_ver$none  /  当前 V2Ray 管理脚本版本: ${cyan}$_version$none"
2898	echo
2899	;;
2900bbr)
2901	other
2902	;;
2903help | *)
2904	_help
2905	;;
2906esac
2907

记录

 1te=$(ping 123.yzzz.tk -c 1 | grep -oE -m1 "([0-9]{1,3}\.){3}[0-9]{1,3}")
 2
 3										^(?:[0-9]{1,3}\.){3}[0-9]{1,3}$
 4										([0-9a-fA-F]{0,4}:){1,7}([0-9a-fA-F]){0,4}
 5
 6[A-F0-9]{1,4}:){7}[A-F0-9]{1,4}
 7
 8
 9ip=$(curl -6 -s ipv6.icanhazip.com | grep -oE "[A-F0-9]{1,4}:){7}[A-F0-9]{1,4}")
10
11ip=$(ping 123.yzzz.tk -6 -c 1 | grep -oE -m1 "([0-9a-fA-F]{0,4}:){1,7}([0-9a-fA-F]){0,4}")
12
13
14ip=$(ping 123.yzzz.tk -4 -c 1 | grep -oE -m1 "([0-9]{1,3}\.){3}[0-9]{1,3}")
15
16
17get_ip() {
18	ip=$(curl -4 -s ipv4.icanhazip.com)
19	[[ -z $ip ]] && ip=$(curl -s -4 https://api.ip.sb/ip)
20	[[ -z $ip ]] && ip=$(curl -s -4 https://api.ipify.org)
21	[[ -z $ip ]] && ip=$(curl -s -4 https://ip.seeip.org)
22	[[ -z $ip ]] && ip=$(curl -s -4 https://ifconfig.co/ip)
23	[[ -z $ip ]] && ip=$(curl -s -4 https://api.myip.com | grep -oE "([0-9]{1,3}\.){3}[0-9]{1,3}")
24	[[ -z $ip ]] && ip=$(curl -s -4 icanhazip.com)
25	[[ -z $ip ]] && ip=$(curl -s -4 myip.ipip.net | grep -oE "([0-9]{1,3}\.){3}[0-9]{1,3}")
26	[[ -z $ip ]] && echo -e "\n$red 这垃圾小鸡扔了吧!$none\n" && exit
27}
28
29
30#!/bin/bsh
31get_ip() {
32
33	ipv4=$(curl -4 -s ipv4.icanhazip.com)
34	[[ -z $ipv4 ]] && ipv4=$(curl -s -4 https://api.ip.sb/ip)
35	[[ -z $ipv4 ]] && ipv4=$(curl -s -4 https://api.ipify.org)
36	[[ -z $ipv4 ]] && ipv4=$(curl -s -4 https://ip.seeip.org)
37	[[ -z $ipv4 ]] && ipv4=$(curl -s -4 https://ifconfig.co/ip)
38	[[ -z $ipv4 ]] && ipv4=$(curl -s -4 https://api.myip.com | grep -oE "([0-9]{1,3}\.){3}[0-9]{1,3}")
39	[[ -z $ipv4 ]] && ipv4=$(curl -s -4 icanhazip.com)
40	[[ -z $ipv4 ]] && ipv4=$(curl -s -4 myip.ipip.net | grep -oE "([0-9]{1,3}\.){3}[0-9]{1,3}")
41	[[ -z $ipv4 ]] && echo -e "\n$red 这垃圾小鸡扔了吧!$none\n" && exit
42    
43    ipv6=$(curl -6 -s ipv6.icanhazip.com)
44	[[ -z $ipv6 ]] && ipv6=$(curl -s -6 https://api.ip.sb/ip)
45	[[ -z $ipv6 ]] && ipv6=$(curl -s -6 https://ip.seeip.org)
46	[[ -z $ipv6 ]] && ipv6=$(curl -s -6 https://ifconfig.co/ip)	
47	[[ -z $ipv6 ]] && ipv6=$(curl -s -6 icanhazip.com)
48	[[ -z $ipv6 ]] && echo -e "\n$red 这垃圾小鸡扔了吧!$none\n" && exit
49	
50	if [ $ipv6 ]; then
51	ip=$ipv6 ##默认ipv6 edit by Scaleya
52	else ip=$ipv4
53	fi
54}
55
56
57
582245
59233blog
60
61
622315 bbr  lotserver不支持安装
63
642446 update 与90 有关
65
66
672597 get_ip
68
69
70v2ray是否安装、运行判断
71if [[ -f /usr/bin/v2ray/v2ray && -f /etc/v2ray/config.json ]] && [[ -f $backup && -d /etc/v2ray/233boy/v2ray ]]; then
72