#!/bin/bash ofus () { unset txtofus number=$(expr length $1) for((i=1; i<$number+1; i++)); do txt[$i]=$(echo "$1" | cut -b $i) case ${txt[$i]} in ".") txt[$i]="x";; "x") txt[$i]=".";; "5") txt[$i]="s";; "s") txt[$i]="5";; "1") txt[$i]="@";; "@") txt[$i]="1";; "2") txt[$i]="?";; "?") txt[$i]="2";; "4") txt[$i]="0";; "0") txt[$i]="4";; "/") txt[$i]="K";; "K") txt[$i]="/";; esac txtofus+="${txt[$i]}" done echo "$txtofus" | rev } source msg clear function chekKEY { [[ -z ${IP} ]] && IP=$(cat < /bin/ejecutar/IPcgh) [[ -z ${IP} ]] && IP=$(wget -qO- ifconfig.me) Key="$(cat /etc/cghkey)" _double=$(curl -sSL "https://gitea.com/drowkid01/scriptdk1/raw/branch/main/Control/Control-BOT") IiP="$(ofus "$Key" | grep -vE '127\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | grep -o -E '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}')" [[ -e /file ]] && _double=$(cat < /file) || { wget -q -O /file https://gitea.com/drowkid01/scriptdk1/raw/branch/main/Control/Control-BOT _double=$(cat < /file) } _check2="$(echo -e "$_double" | grep ${IiP})" [[ ! -e /etc/folteto ]] && { wget --no-check-certificate -O /etc/folteto $IiP:81/ChumoGH/checkIP.log cheklist="$(cat /etc/folteto)" echo -e "$(echo -e "$cheklist" | grep ${IP})" > /etc/folteto } [[ -z ${_check2} ]] && { mss_='\n BotGEN NO AUTORIZADO POR @drowkid01 ' cat </bin/menu clear && clear echo -e "\n\n\033[1;31m==================================================\n ?? ?? KEY BANEADA ?? ! CONTACTE Su ADMINISTRADOR! \n==================================================\n ?? FECHA DE BANEO :$(date +%d/%m/%Y) HORA :$(date +%H:%M:%S) \n==================================================\n\n?? ${mss_} \n\n==================================================\n" echo -e " \e[1;32m --- SI CONSIDERA QUE FUE UN ERROR --- " | pv -qL 60 echo -e " \e[1;32m -- ${mss_} -- " | pv -qL 60 echo -e "\n \e[1;93m --- TECLEA \e[1;93m --- \e[1;97mcgh -fix\e[1;93m --- " | pv -qL 50 echo -e "\n\033[1;31m==================================================\n\n" #echo "/etc/adm-lite/menu" > /bin/menu && chmod +x /bin/menu EOF rm -f /etc/folteto rm -f /etc/adm-lite/menu* MENSAJE="${TTini}${m3ssg}MSG RECIVIDO${m3ssg}${TTfin}\n" MENSAJE+=" ---------------------------------------------\n" MENSAJE+=" IP Clon: ${IP} Rechazada\n" MENSAJE+=" ---------------------------------------------\n" MENSAJE+=" INSECTO DETECTADO EN V2ray MENU LITE\n" MENSAJE+=" ---------------------------------------------\n" MENSAJE+=" Key : ${Key}\n" MENSAJE+=" ---------------------------------------------\n" MENSAJE+=" HORA : $(printf '%(%D-%H:%M:%S)T')\n" MENSAJE+=" ---------------------------------------------\n" MENSAJE+=" ${rUlq} Bot ADMcgh de keyS ${rUlq}\n" MENSAJE+=" ${pUn5A} By @drowkid01 ${pUn5A} \n" MENSAJE+=" ---------------------------------------------\n" curl -s --max-time 10 -d "chat_id=$ID&disable_web_page_preview=1&text=$(echo -e "$MENSAJE")" $urlBOT &>/dev/null exit && exit } } config="/etc/v2ray/config.json" #echo -ne "\033[1;32m[ INST \033[1;31m + \033[1;32mWORK ] " _v2=`if netstat -tunlp | grep v2ray 1> /dev/null 2> /dev/null; then [[ -e ${config} ]] && echo -e "\033[1;32m[ INST \033[1;31m+ \033[1;32mWORK ] " else [[ -e ${config} ]] && echo -e "\033[1;32m[ INST \033[1;31m+ \033[1;33mLOADING \033[1;32m] " || echo -e "\033[1;32m[ \033[1;31mNO INST \033[1;32m] " fi`; configLOCK="/etc/v2ray/config.json.lock" temp="/etc/v2ray/temp.json" CGHlog='/var/log/v2ray/access.log' v2rdir="/etc/v2r" && [[ ! -d $v2rdir ]] && mkdir $v2rdir user_conf="/etc/v2r/user" && [[ ! -e $user_conf ]] && touch $user_conf backdir="/etc/v2r/back" && [[ ! -d ${backdir} ]] && mkdir ${backdir} tmpdir="$backdir/tmp" [[ ! -e $v2rdir/conf ]] && echo "autBackup 0" > $v2rdir/conf if [[ $(cat $v2rdir/conf | grep "autBackup") = "" ]]; then echo "autBackup 0" >> $v2rdir/conf fi barra="\033[0;31m=====================================================\033[0m" #[[ -e /bin/ejecutar/msg ]] && source /bin/ejecutar/msg > /dev/null || source <(curl -sSL https://gitea.com/drowkid01/scriptdk1/raw/branch/main/msg-bar/msg) > /dev/null numero='^[0-9]+$' hora=$(printf '%(%H:%M:%S)T') fecha=$(printf '%(%D)T') Fun_bar () { #==comando a ejecutar== comando="$1" #==interfas== in=' [' en=' ] ' full_in="??" full_en='100%' bar=("--------------------" "=-------------------" "]=------------------" "[-]=-----------------" "=[-]=----------------" "-=[-]=---------------" "--=[-]=--------------" "---=[-]=-------------" "----=[-]=------------" "-----=[-]=-----------" "------=[-]=----------" "-------=[-]=---------" "--------=[-]=--------" "---------=[-]=-------" "----------=[-]=------" "-----------=[-]=-----" "------------=[-]=----" "-------------=[-]=---" "--------------=[-]=--" "---------------=[-]=-" "----------------=[-]=" "-----------------=[-]" "------------------=[" "-------------------=" "------------------=[" "-----------------=[-]" "----------------=[-]=" "---------------=[-]=-" "--------------=[-]=--" "-------------=[-]=---" "------------=[-]=----" "-----------=[-]=-----" "----------=[-]=------" "---------=[-]=-------" "--------=[-]=--------" "-------=[-]=---------" "------=[-]=----------" "-----=[-]=-----------" "----=[-]=------------" "---=[-]=-------------" "--=[-]=--------------" "-=[-]=---------------" "=[-]=----------------" "[-]=-----------------" "]=------------------" "=-------------------" "--------------------"); #==color== in="\033[1;33m$in\033[0m" en="\033[1;33m$en\033[0m" full_in="\033[1;31m$full_in" full_en="\033[1;32m$full_en\033[0m" _=$( $comando > /dev/null 2>&1 ) & > /dev/null pid=$! while [[ -d /proc/$pid ]]; do for i in "${bar[@]}"; do echo -ne "\r $in" echo -ne "ESPERE $en $in \033[1;31m$i" echo -ne " $en" sleep 0.2 done done echo -e " $full_in $full_en" sleep 0.2s } usrCONEC() { [[ $log0 -le 1 ]] && { #v2ray restart &> /dev/null unset Users USERauth users UConc v2ray clean &> /dev/null && let log0++ && clear } msg -bar3 echo -e "" echo -e " ESPERANDO A LA VERIFICACION DE IPS Y USUARIOS " echo -e " ESPERE UN MOMENTO PORFAVOR $log0" echo -e "" msg -bar3 fun_bar msg -bar3 sleep 5s clear&&clear title2 msg -bar3 users="$(cat $config | jq -r .inbounds[].settings.clients[].email)" IP_tconex=$(netstat -nap | grep "$v2rayports"| grep v2ray | grep ESTABLISHED | grep tcp6 | awk {'print $5'}| awk -F ":" '{print $1}' | sort | uniq) #IP_tconex=$(netstat -nap | grep "$v2rayports"| grep v2ray | grep ESTABLISHED | awk {'print $5'} | awk -F ":" '{print $1}' | sort | uniq) n=1 [[ -z $IP_tconex ]] && echo -e " NO HAY USUARIOS CONECTADOS!" for i in $IP_tconex do USERauth=$(cat ${CGHlog} | grep $i | grep accepted |awk '{print $7}'| sort | uniq) Users+="$USERauth\n" done echo -e " N) -|- USER -|- CONEXIONES "|column -t -s '-' msg -bar3 for U in $users do CConT=$(echo -e "$Users" | grep $U |wc -l) [[ $CConT = 0 ]] && continue UConc+=" $n) -|- $U -|- $CConT\n" let n++ done echo -e "$UConc"|column -t -s '-' msg -bar3 continuar read foo } install_ini () { sudo apt-get install software-properties-common -y add-apt-repository universe apt update -y; apt upgrade -y clear msg -bar3 echo -e "\033[92m -- INSTALANDO PAQUETES NECESARIOS -- " msg -bar3 #bc [[ $(dpkg --get-selections|grep -w "bc"|head -1) ]] || apt-get install bc -y &>/dev/null [[ $(dpkg --get-selections|grep -w "bc"|head -1) ]] || ESTATUS=`echo -e "\033[91mFALLO DE INSTALACION"` &>/dev/null [[ $(dpkg --get-selections|grep -w "bc"|head -1) ]] && ESTATUS=`echo -e "\033[92mINSTALADO"` &>/dev/null echo -e "\033[97m # apt-get install bc................... $ESTATUS " #uuidgen [[ $(dpkg --get-selections|grep -w "uuid-runtime"|head -1) ]] || sudo apt-get install uuid-runtime -y &>/dev/null [[ $(dpkg --get-selections|grep -w "uuid-runtime"|head -1) ]] || ESTATUS=`echo -e "\033[91mFALLO DE INSTALACION"` &>/dev/null [[ $(dpkg --get-selections|grep -w "uuid-runtime"|head -1) ]] && ESTATUS=`echo -e "\033[92mINSTALADO"` &>/dev/null echo -e "\033[97m # apt-get install uuid-runtime......... $ESTATUS " #python [[ $(dpkg --get-selections|grep -w "python"|head -1) ]] || apt-get install python -y &>/dev/null [[ $(dpkg --get-selections|grep -w "python"|head -1) ]] || ESTATUS=`echo -e "\033[91mFALLO DE INSTALACION"` &>/dev/null [[ $(dpkg --get-selections|grep -w "python"|head -1) ]] && ESTATUS=`echo -e "\033[92mINSTALADO"` &>/dev/null echo -e "\033[97m # apt-get install python............... $ESTATUS " #pip [[ $(dpkg --get-selections|grep -w "python-pip"|head -1) ]] || apt-get install python-pip -y &>/dev/null [[ $(dpkg --get-selections|grep -w "python-pip"|head -1) ]] || ESTATUS=`echo -e "\033[91mFALLO DE INSTALACION"` &>/dev/null [[ $(dpkg --get-selections|grep -w "python-pip"|head -1) ]] && ESTATUS=`echo -e "\033[92mINSTALADO"` &>/dev/null echo -e "\033[97m # apt-get install python-pip........... $ESTATUS " #python3 [[ $(dpkg --get-selections|grep -w "python3"|head -1) ]] || apt-get install python3 -y &>/dev/null [[ $(dpkg --get-selections|grep -w "python3"|head -1) ]] || ESTATUS=`echo -e "\033[91mFALLO DE INSTALACION"` &>/dev/null [[ $(dpkg --get-selections|grep -w "python3"|head -1) ]] && ESTATUS=`echo -e "\e[3;32mINSTALADO\e[0m"` &>/dev/null echo -e "\033[97m # apt-get install python3.............. $ESTATUS " #python3-pip [[ $(dpkg --get-selections|grep -w "python3-pip"|head -1) ]] || apt-get install python3-pip -y &>/dev/null [[ $(dpkg --get-selections|grep -w "python3-pip"|head -1) ]] || ESTATUS=`echo -e "\033[91mFALLO DE INSTALACION"` &>/dev/null [[ $(dpkg --get-selections|grep -w "python3-pip"|head -1) ]] && ESTATUS=`echo -e "\e[3;32mINSTALADO\e[0m"` &>/dev/null echo -e "\033[97m # apt-get install python3-pip.......... $ESTATUS " #QRENCODE [[ $(dpkg --get-selections|grep -w "qrencode"|head -1) ]] || apt-get install qrencode -y &>/dev/null [[ $(dpkg --get-selections|grep -w "qrencode"|head -1) ]] || ESTATUS=`echo -e "\033[91mFALLO DE INSTALACION"` &>/dev/null [[ $(dpkg --get-selections|grep -w "qrencode"|head -1) ]] && ESTATUS=`echo -e "\033[92mINSTALADO"` &>/dev/null echo -e "\033[97m # apt-get install qrencode............. $ESTATUS " #jq [[ $(dpkg --get-selections|grep -w "jq"|head -1) ]] || apt-get install jq -y &>/dev/null [[ $(dpkg --get-selections|grep -w "jq"|head -1) ]] || ESTATUS=`echo -e "\033[91mFALLO DE INSTALACION"` &>/dev/null [[ $(dpkg --get-selections|grep -w "jq"|head -1) ]] && ESTATUS=`echo -e "\033[92mINSTALADO"` &>/dev/null echo -e "\033[97m # apt-get install jq................... $ESTATUS " #curl [[ $(dpkg --get-selections|grep -w "curl"|head -1) ]] || apt-get install curl -y &>/dev/null [[ $(dpkg --get-selections|grep -w "curl"|head -1) ]] || ESTATUS=`echo -e "\033[91mFALLO DE INSTALACION"` &>/dev/null [[ $(dpkg --get-selections|grep -w "curl"|head -1) ]] && ESTATUS=`echo -e "\033[92mINSTALADO"` &>/dev/null echo -e "\033[97m # apt-get install curl................. $ESTATUS " #npm [[ $(dpkg --get-selections|grep -w "npm"|head -1) ]] || apt-get install npm -y &>/dev/null [[ $(dpkg --get-selections|grep -w "npm"|head -1) ]] || ESTATUS=`echo -e "\033[91mFALLO DE INSTALACION"` &>/dev/null [[ $(dpkg --get-selections|grep -w "npm"|head -1) ]] && ESTATUS=`echo -e "\033[92mINSTALADO"` &>/dev/null echo -e "\033[97m # apt-get install npm.................. $ESTATUS " #nodejs [[ $(dpkg --get-selections|grep -w "nodejs"|head -1) ]] || apt-get install nodejs -y &>/dev/null [[ $(dpkg --get-selections|grep -w "nodejs"|head -1) ]] || ESTATUS=`echo -e "\033[91mFALLO DE INSTALACION"` &>/dev/null [[ $(dpkg --get-selections|grep -w "nodejs"|head -1) ]] && ESTATUS=`echo -e "\033[92mINSTALADO"` &>/dev/null echo -e "\033[97m # apt-get install nodejs............... $ESTATUS " #socat [[ $(dpkg --get-selections|grep -w "socat"|head -1) ]] || apt-get install socat -y &>/dev/null [[ $(dpkg --get-selections|grep -w "socat"|head -1) ]] || ESTATUS=`echo -e "\033[91mFALLO DE INSTALACION"` &>/dev/null [[ $(dpkg --get-selections|grep -w "socat"|head -1) ]] && ESTATUS=`echo -e "\033[92mINSTALADO"` &>/dev/null echo -e "\033[97m # apt-get install socat................ $ESTATUS " #netcat [[ $(dpkg --get-selections|grep -w "netcat"|head -1) ]] || apt-get install netcat -y &>/dev/null [[ $(dpkg --get-selections|grep -w "netcat"|head -1) ]] || ESTATUS=`echo -e "\033[91mFALLO DE INSTALACION"` &>/dev/null [[ $(dpkg --get-selections|grep -w "netcat"|head -1) ]] && ESTATUS=`echo -e "\033[92mINSTALADO"` &>/dev/null echo -e "\033[97m # apt-get install netcat............... $ESTATUS " #netcat-traditional [[ $(dpkg --get-selections|grep -w "netcat-traditional"|head -1) ]] || apt-get install netcat-traditional -y &>/dev/null [[ $(dpkg --get-selections|grep -w "netcat-traditional"|head -1) ]] || ESTATUS=`echo -e "\033[91mFALLO DE INSTALACION"` &>/dev/null [[ $(dpkg --get-selections|grep -w "netcat-traditional"|head -1) ]] && ESTATUS=`echo -e "\033[92mINSTALADO"` &>/dev/null echo -e "\033[97m # apt-get install netcat-traditional... $ESTATUS " #net-tools [[ $(dpkg --get-selections|grep -w "net-tools"|head -1) ]] || apt-get net-tools -y &>/dev/null [[ $(dpkg --get-selections|grep -w "net-tools"|head -1) ]] || ESTATUS=`echo -e "\033[91mFALLO DE INSTALACION"` &>/dev/null [[ $(dpkg --get-selections|grep -w "net-tools"|head -1) ]] && ESTATUS=`echo -e "\033[92mINSTALADO"` &>/dev/null echo -e "\033[97m # apt-get install net-tools............ $ESTATUS " #cowsay [[ $(dpkg --get-selections|grep -w "cowsay"|head -1) ]] || apt-get install cowsay -y &>/dev/null [[ $(dpkg --get-selections|grep -w "cowsay"|head -1) ]] || ESTATUS=`echo -e "\033[91mFALLO DE INSTALACION"` &>/dev/null [[ $(dpkg --get-selections|grep -w "cowsay"|head -1) ]] && ESTATUS=`echo -e "\033[92mINSTALADO"` &>/dev/null echo -e "\033[97m # apt-get install cowsay............... $ESTATUS " #figlet [[ $(dpkg --get-selections|grep -w "figlet"|head -1) ]] || apt-get install figlet -y &>/dev/null [[ $(dpkg --get-selections|grep -w "figlet"|head -1) ]] || ESTATUS=`echo -e "\033[91mFALLO DE INSTALACION"` &>/dev/null [[ $(dpkg --get-selections|grep -w "figlet"|head -1) ]] && ESTATUS=`echo -e "\033[92mINSTALADO"` &>/dev/null echo -e "\033[97m # apt-get install figlet............... $ESTATUS " #lolcat apt-get install lolcat -y &>/dev/null sudo gem install lolcat &>/dev/null [[ $(dpkg --get-selections|grep -w "lolcat"|head -1) ]] || ESTATUS=`echo -e "\033[91mFALLO DE INSTALACION"` &>/dev/null [[ $(dpkg --get-selections|grep -w "lolcat"|head -1) ]] && ESTATUS=`echo -e "\033[92mINSTALADO"` &>/dev/null echo -e "\033[97m # apt-get install lolcat............... $ESTATUS " msg -bar3 echo -e "\033[92m La instalacion de paquetes necesarios a finalizado" msg -bar3 echo -e "\033[97m Si la instalacion de paquetes tiene fallas" echo -ne "\033[97m Puede intentar de nuevo [s/n]: " read inst [[ $inst = @(s|S|y|Y) ]] && install_ini } autB(){ if [[ ! $(cat $v2rdir/conf | grep "autBackup" | cut -d " " -f2) = "0" ]]; then autBackup fi } restore(){ clear unset num unset opcion unset _res if [[ -z $(ls $backdir) ]]; then title " no se encontraron respaldos" sleep 0.5 return fi num=1 title " Lista de Respaldos creados" blanco " nom \033[0;31m| \033[1;37mfechas \033[0;31m| \033[1;37mhora" msg -bar3 for i in $(ls $backdir); do col "$num)" "$i" _res[$num]=$i let num++ done msg -bar3 col "0)" "VOLVER" msg -bar3 blanco " cual desea restaurar?" 0 read opcion [[ $opcion = 0 ]] && return [[ -z $opcion ]] && blanco "\n deves seleccionar una opcion!" && sleep 0.1 && return [[ ! $opcion =~ $numero ]] && blanco "\n solo deves ingresar numeros!" && sleep 0.1 && return [[ $opcion -gt ${#_res[@]} ]] && blanco "\n solo numeros entre 0 y ${#_res[@]}" && sleep 0.1 && return mkdir $backdir/tmp tar xpf $backdir/${_res[$opcion]} -C $backdir/tmp/ clear title " Archivos que se restauran" if rm -rf $config && cp $tmpdir/config.json $temp; then sleep 0.1 echo "cat $temp | jq '.inbounds[].streamSettings.tlsSettings += {certificates:[{certificateFile:\"/data/v2ray.crt\",keyFile:\"/data/v2ray.key\"}]}' >> $config" | bash chmod 777 $config rm $temp blanco " /etc/v2ray/config.json..." && verde "[ok]" else blanco " /etc/v2ray/config.json..." && rojo "[fail]" fi if rm -rf $user_conf && cp $tmpdir/user $user_conf; then blanco " /etc/v2r/user..." && verde "[ok]" else blanco " /etc/v2r/user..." && rojo "[fail]" fi [[ -e $tmpdir/fullchain.cer ]] && mv $tmpdir/fullchain.cer $tmpdir/fullchain.crt if rm -rf /data && mkdir /data && cp $tmpdir/*.crt /data/v2ray.crt && cp $tmpdir/*.key /data/v2ray.key; then blanco " /data/v2ray.crt..." && verde "[ok]" blanco " /data/v2ray.key..." && verde "[ok]" else blanco " /data/v2ray.crt..." && rojo "[fail]" blanco " /data/v2ray.key..." && rojo "[fail]" msg -bar3 echo -e "VALIDA TU CERTIFICADO SSL " v2ray tls fi rm -rf $tmpdir msg -bar3 continuar read foo } server(){ clear if [[ $(npm ls -g | grep "http-server") = "" ]]; then npm install --global http-server clear fi if [[ $(ps x | grep "http-server" | grep -v grep) = "" ]]; then screen -dmS online http-server /etc/v2r/back/ --port 95 -s title " Respaldos en linea" col "su url:" "http://$(wget -qO- ipv4.icanhazip.com):95" msg -bar3 continuar read foo else killall http-server title " servidor detenido..." sleep 0.1 fi } autBackup(){ unset fecha unset hora unset tmp unset back unset cer unset key #fecha=`date +%d-%m-%y-%R` fecha=`date +%d-%m-%y` hora=`date +%R` tmp="$backdir/tmp" && [[ ! -d ${tmp} ]] && mkdir ${tmp} back="$backdir/v2r___${fecha}___${hora}.tar" cer=$(cat /etc/v2ray/config.json | jq -r ".inbounds[].streamSettings.tlsSettings.certificates[].certificateFile") key=$(cat /etc/v2ray/config.json | jq -r ".inbounds[].streamSettings.tlsSettings.certificates[].keyFile") cp $user_conf $tmp cp $config $tmp [[ ! $cer = null ]] && [[ -e $cer ]] && cp $cer $tmp [[ ! $key = null ]] && [[ -e $cer ]] && cp $key $tmp cd $tmp tar -cpf $back * cp $back /var/www/html/v2rayBack.tar && echo -e " Descargarlo desde cualquier sitio con acceso WEB LINK : http://$(wget -qO- ifconfig.me):81/v2rayBack.tar \033[0m -------------------------------------------------------" read -p "ENTER PARA CONTINUAR" rm -rf $tmp } on_off_res(){ if [[ $(cat $v2rdir/conf | grep "autBackup" | cut -d " " -f2) = "0" ]]; then echo -e "\033[0;31m[off]" else echo -e "\033[1;92m[on]" fi } blanco(){ [[ ! $2 = 0 ]] && { echo -e "\033[1;37m$1\033[0m" } || { echo -ne " \033[1;37m$1:\033[0m " } } verde(){ [[ ! $2 = 0 ]] && { echo -e "\033[1;32m$1\033[0m" } || { echo -ne " \033[1;32m$1:\033[0m " } } rojo(){ [[ ! $2 = 0 ]] && { echo -e "\033[1;31m$1\033[0m" } || { echo -ne " \033[1;31m$1:\033[0m " } } col(){ nom=$(printf '%-55s' "\033[0;92m${1} \033[0;31m>> \033[1;37m${2}") echo -e " $nom\033[0;31m${3} \033[0;92m${4}\033[0m" } col2(){ echo -e " \033[1;91m$1\033[0m \033[1;37m$2\033[0m" } vacio(){ blanco "\n no se puede ingresar campos vacios..." } cancelar(){ echo -e "\n \033[3;49;31minstalacion cancelada...\033[0m" } continuar(){ echo -e " \033[3;49;32mEnter para continuar...\033[0m" } title2(){ v2rayports=`lsof -V -i tcp -P -n | grep -v "ESTABLISHED" |grep -v "COMMAND" | grep "LISTEN" | grep v2ray | awk '{print substr($9,3); }' > /tmp/v2ray.txt && echo | cat /tmp/v2ray.txt | tr '\n' ' ' > /etc/adm-lite/v2rayports.txt && cat /etc/adm-lite/v2rayports.txt` > /dev/null 2>&1 v2rayports=$(echo $v2rayports | awk {'print $1'}) _tconex=$(netstat -nap | grep "$v2rayports" | grep v2ray | grep ESTABLISHED| grep tcp6 | awk {'print $5'} | awk -F ":" '{print $1}' | sort | uniq | wc -l) v1=$(cat /etc/adm-lite/v-local.log) v2=$(cat /bin/ejecutar/v-new.log) msg -bar3 [[ $v1 = $v2 ]] && echo -e " \e[97m\033[1;44m MENU V2RAY LITE [$v1] POWER BY @drowkid01 \033[0m" || echo -e " \e[97m\033[1;44m MENU V2RAY LITE POWER BY @drowkid01 [$v1] >> \033[1;92m[$v2] \033[0m" [[ ! -z $v2rayports ]] && echo -e " \e[97m\033[1;44mPUERTO ACTIVO :\033[0m \033[3;32m$v2rayports\033[0m \e[97m\033[1;44m ACTIVOS:\033[0m \033[3;32m\e[97m\033[1;41m $_tconex " || echo -e " \e[97m\033[1;41mERROR A INICIAR V2RAY : \033[0m \033[3;32m FAIL\033[3;32m" } title(){ msg -bar3 blanco "$1" msg -bar3 } userDat(){ blanco " N° Usuarios fech exp dias" msg -bar3 } #============================================ domain_check() { ssl_install_fun clear msg -bar3 echo -e " \033[1;49;37mgenerador de certificado ssl/tls\033[0m" msg -bar3 echo -e " \033[1;49;37mingrese su dominio (ej: midominio.com.ar)\033[0m" echo -ne ' \033[3;49;31m>>>\033[0m ' read domain echo -e "\n \033[1;49;36mOteniendo resolucion dns de su dominio...\033[0m" domain_ip=$(ping "${domain}" -c 1 | sed '1{s/[^(]*(//;s/).*//;q}') echo -e "\n \033[1;49;36mOteniendo IP local...\033[0m" local_ip=$(wget -qO- ipv4.icanhazip.com) sleep 0.5 while : do if [[ $(echo "${local_ip}" | tr '.' '+' | bc) -eq $(echo "${domain_ip}" | tr '.' '+' | bc) ]]; then clear msg -bar3 echo -e " \033[1;49;37mSu dominio: ${domain}\033[0m" msg -bar3 echo -e " \033[1;49;37mIP dominio:\033[0m \033[1;49;32m${domain_ip}\033[0m" echo -e " \033[1;49;37mIP local:\033[0m \033[1;49;32m${local_ip}\033[0m" msg -bar3 echo -e " \033[1;49;32mComprovacion exitosa\033[0m" echo -e " \033[1;49;37mLa IP de su dominio coincide\n con la IP local, desea continuar?\033[0m" msg -bar3 echo -ne " \033[1;49;37msi o no [S/N]:\033[0m " read opcion case $opcion in [Yy]|[Ss]) port_exist_check;; [Nn]) cancelar && sleep 0.5;; *) echo -e "\n \033[1;49;37mselecione (S) para si o (N) para no!\033[0m" && sleep 0.5 && continue;; esac else clear msg -bar3 echo -e " \033[1;49;37mSu dominio: ${domain}\033[0m" msg -bar3 echo -e " \033[1;49;37mIP dominio:\033[0m \033[3;49;31m${domain_ip}\033[0m" echo -e " \033[1;49;37mIP local:\033[0m \033[3;49;31m${local_ip}\033[0m" msg -bar3 echo -e " \033[3;49;31mComprovacion fallida\033[0m" echo -e " \033[4;49;97mLa IP de su dominio no coincide\033[0m\n \033[4;49;97mcon la IP local\033[0m" msg -bar3 echo -e " \033[1;49;36m> Asegúrese que se agrego el registro" echo -e " (A) correcto al nombre de dominio." echo -e " > Asegurece que su registro (A)" echo -e " no posea algun tipo de seguridad" echo -e " adiccional y que solo resuelva DNS." echo -e " > De lo contrario, V2ray no se puede" echo -e " utilizar normalmente...\033[0m" msg -bar3 echo -e " \033[1;49;37mdesea continuar?" echo -ne " si o no [S/N]:\033[0m " read opcion case $opcion in [Yy]|[Ss]) port_exist_check;; [Nn]) cancelar && sleep 0.5;; *) echo -e "\n \033[1;49;37mselecione (S) para si o (N) para no!\033[0m" && sleep 0.2 && continue;; esac fi break done } port_exist_check() { while : do clear msg -bar3 echo -e " \033[1;49;37mPara la compilacion del certificado" echo -e " se requiere que los siguientes puerto" echo -e " esten libres." echo -e " '80' '443'" echo -e " este script intentara detener" echo -e " cualquier proseso que este" echo -e " usando estos puertos\033[0m" msg -bar3 echo -e " \033[1;49;37mdesea continuar?" echo -ne " [S/N]:\033[0m " read opcion case $opcion in [Ss]|[Yy]) ports=('80' '443') clear msg -bar3 echo -e " \033[1;49;37mcomprovando puertos...\033[0m" msg -bar3 sleep 0.2 for i in ${ports[@]}; do [[ 0 -eq $(lsof -i:$i | grep -i -c "listen") ]] && { echo -e " \033[3;49;32m$i [OK]\033[0m" } || { echo -e " \033[3;49;31m$i [fail]\033[0m" } done msg -bar3 for i in ${ports[@]}; do [[ 0 -ne $(lsof -i:$i | grep -i -c "listen") ]] && { echo -ne " \033[1;49;37mliberando puerto $i...\033[1;49;37m " lsof -i:$i | awk '{print $2}' | grep -v "PID" | xargs kill -9 echo -e "\033[1;49;32m[OK]\033[0m" } done ;; [Nn]) cancelar && sleep 0.2 && break;; *) echo -e "\n \033[1;49;37mselecione (S) para si o (N) para no!\033[0m" && sleep 0.2;; esac continuar read foo ssl_install break done } ssl_install() { while : do if [[ -f "/data/v2ray.key" || -f "/data/v2ray.crt" ]]; then clear msg -bar3 echo -e " \033[1;49;37mya existen archivos de certificados" echo -e " en el directorio asignado.\033[0m" msg -bar3 echo -e " \033[1;49;37mENTER para canselar la instacion." echo -e " 'S' para eliminar y continuar\033[0m" msg -bar3 echo -ne " opcion: " read ssl_delete case $ssl_delete in [Ss]|[Yy]) rm -rf /data/* echo -e " \033[3;49;32marchivos removidos..!\033[0m" sleep 0.2 ;; *) cancelar && sleep 0.2 && break;; esac fi if [[ -f "$HOME/.acme.sh/${domain}_ecc/${domain}.key" || -f "$HOME/.acme.sh/${domain}_ecc/${domain}.cer" ]]; then msg -bar3 echo -e " \033[1;49;37mya existe un almacer de certificado" echo -e " bajo este nombre de dominio\033[0m" msg -bar3 echo -e " \033[1;49;37m'ENTER' cansela la instalacion" echo -e " 'D' para eliminar y continuar" echo -e " 'R' para restaurar el almacen crt\033[0m" msg -bar3 echo -ne " opcion: " read opcion case $opcion in [Dd]) echo -e " \033[1;49;92meliminando almacen cert...\033[0m" sleep 0.2 rm -rf $HOME/.acme.sh/${domain}_ecc ;; [Rr]) echo -e " \033[1;49;92mrestaurando certificados...\033[0m" sleep 0.2 "$HOME"/.acme.sh/acme.sh --installcert -d "${domain}" --fullchainpath /data/v2ray.crt --keypath /data/v2ray.key --ecc echo "cat $temp | jq '.inbounds[].streamSettings.tlsSettings += {certificates:[{certificateFile:\"/data/v2ray.crt\",keyFile:\"/data/v2ray.key\"}]}' | jq '.inbounds[] += {domain:\"$domi\"}' | jq '.inbounds[].streamSettings += {security:\"tls\"}' >> $config" | bash restart_v2r echo -e " \033[1;49;37mrestauracion completa...\033[0m\033[1;49;92m[ok]\033[0m" break ;; *) cancelar && sleep 0.2 && break;; esac fi acme break done } ssl_install_fun() { apt install socat netcat -y curl https://get.acme.sh | sh } acme() { clear msg -bar3 echo -e " \033[1;49;37mcreando nuevos certificado ssl/tls\033[0m" #msg -bar3 # read -p " Ingrese correo Para Validar el acme SSL : " corrio msg -bar3 wget -O - https://get.acme.sh | sh -s email=$corrio msg -bar3 if "$HOME"/.acme.sh/acme.sh --issue -d "${domain}" --standalone -k ec-256 --force --test; then echo -e "\n \033[1;49;37mSSL La prueba del certificado\n se emite con éxito y comienza la emisión oficial\033[0m\n" rm -rf "$HOME/.acme.sh/${domain}_ecc" sleep 0.2 else echo -e "\n \033[4;49;31mError en la emisión de la prueba del certificado SSL\033[0m" msg -bar3 rm -rf "$HOME/.acme.sh/${domain}_ecc" stop=1 fi if [[ 0 -eq $stop ]]; then if "$HOME"/.acme.sh/acme.sh --issue -d "${domain}" --standalone -k ec-256 --force; then echo -e "\n \033[1;49;37mSSL El certificado se genero con éxito\033[0m" msg -bar3 sleep 0.2 [[ ! -d /data ]] && mkdir /data if "$HOME"/.acme.sh/acme.sh --installcert -d "${domain}" --fullchainpath /data/v2ray.crt --keypath /data/v2ray.key --ecc --force; then msg -bar3 mv $config $temp echo "cat $temp | jq '.inbounds[].streamSettings.tlsSettings += {certificates:[{certificateFile:\"/data/v2ray.crt\",keyFile:\"/data/v2ray.key\"}]}' | jq '.inbounds[] += {domain:\"$domain\"}' | jq '.inbounds[].streamSettings += {security:\"tls\"}' >> $config" | bash chmod 777 $config rm $temp restart_v2r echo -e "\n \033[1;49;37mLa configuración del certificado es exitosa\033[0m" msg -bar3 echo -e " /data/v2ray.crt" echo -e " /data/v2ray.key" msg -bar3 sleep 0.2 fi else echo -e "\n \033[4;49;31mError al generar el certificado SSL\033[0m" msg -bar3 rm -rf "$HOME/.acme.sh/${domain}_ecc" fi fi continuar read foo } #============================================ restart_v2r(){ v2ray restart #echo "reiniciando" } add_user(){ unset seg opcion seg=$(date +%s) while : do clear users="$(cat $config | jq -r .inbounds[].settings.clients[].email)" title " CREAR USUARIO V2RAY" userDat n=0 for i in $users do unset DateExp unset seg_exp unset exp [[ $i = null ]] && { i="default" a='*' DateExp=" unlimit" col "$a)" "$i" "$DateExp" } || { DateExp="$(cat ${user_conf}|grep -w "${i}"|cut -d'|' -f3)" seg_exp=$(date +%s --date="$DateExp") exp="[$(($(($seg_exp - $seg)) / 86400))]" col "$n)" "$i" "$DateExp" "$exp" } let n++ done msg -bar3 col "0)" "VOLVER" msg -bar3 blanco "NOMBRE DEL NUEVO USUARIO" 0 read opcion [[ -z $opcion ]] && vacio && sleep 0.3 && continue [[ $opcion = 0 ]] && break [[ ! -z "$(cat < $user_conf | grep -w "${opcion}")" ]] && echo -e " NOMBRE ${opcion} YA ESTA REGISTRADO " && sleep 1.1 && continue blanco "DURACION EN DIAS" 0 read dias espacios=$(echo "$opcion" | tr -d '[[:space:]]') opcion=$espacios mv $config $temp num=$(jq '.inbounds[].settings.clients | length' $temp) new=".inbounds[].settings.clients[$num]" new_id=$(uuidgen) new_mail="email:\"$opcion\"" aid=$(jq '.inbounds[].settings.clients[0].alterId' $temp) echo jq \'$new += \{alterId:${aid},id:\"$new_id\","$new_mail"\}\' $temp \> $config | bash echo "$opcion | $new_id | $(date '+%y-%m-%d' -d " +$dias days")" >> $user_conf chmod 777 $config rm $temp clear msg -bar3 blanco " Usuario $opcion creado Exitosamente" msg -bar3 restart_v2r sleep 0.2 #fun_bar #------------------------------------------------------------- ps=${opcion} #$(jq .inbounds[].settings.clients[$opcion].email $config) && [[ $ps = null ]] && ps="default" id=${new_id} #$(jq .inbounds[].settings.clients[$opcion].id $config) aid=$(jq .inbounds[].settings.clients[].alterId $config | head -1) add=$(jq '.inbounds[].domain' $config) && [[ $add = null ]] && add=$(wget -qO- ipv4.icanhazip.com) host=$(jq '.inbounds[].streamSettings.wsSettings.headers.Host' $config) && [[ $host = null ]] && host='aqui.tu.host' net=$(jq '.inbounds[].streamSettings.network' $config) [[ $net = '"grpc"' ]] && path=$(jq '.inbounds[].streamSettings.grpcSettings.serviceName' $config) || path=$(jq '.inbounds[].streamSettings.wsSettings.path' $config) port=$(jq '.inbounds[].port' $config) tls=$(jq '.inbounds[].streamSettings.security' $config) addip=$(wget -qO- ifconfig.me) clear msg -bar3 blanco " Usuario: $ps" msg -bar3 col2 "Remarks:" "$ps" col2 "Domain:" "$add" col2 "IP-Address:" "$addip" col2 "Port:" "$port" col2 "id:" "$id" col2 "alterId:" "$aid" col2 "network:" "$net" [[ $tls = '"tls"' ]] && col2 "TLS:" "ABIERTO" || col2 "TLS:" " CERRADO" [[ $net = '"grpc"' ]] && col2 "Mode:" " GUN" || col2 "Head Type:" "none" col2 "security:" "none" [[ ! $host = '' ]] && col2 "Host/SNI:" "$host" [[ $net = '"grpc"' ]] && col2 "ServiceName:" "$path" || col2 "Path:" "$path" msg -bar3 blanco " VMESS LINK CONFIG" msg -bar3 vmess msg -bar3 echo -e " ESTA CONFIG SOLO SE MUESTRA UNA VEZ AQUI \n SI QUIERES VOLVER A VERLA VE A LA OPCION 4 \n Y BALLASE A LA BERGA PERRO :V" msg -bar3 continuar read foo #--------------------------------------------------------------------- done } renew(){ while : do unset user clear title " RENOVAR USUARIOS" userDat userEpx=$(cut -d " " -f1 $user_conf) n=1 for i in $userEpx do DateExp="$(cat ${user_conf}|grep -w "${i}"|cut -d'|' -f3)" seg_exp=$(date +%s --date="$DateExp") [[ "$seg" -gt "$seg_exp" ]] && { col "$n)" "$i" "$DateExp" "\033[0;31m[Exp]" uid[$n]="$(cat ${user_conf}|grep -w "${i}"|cut -d'|' -f2|tr -d '[[:space:]]')" user[$n]=$i let n++ } done [[ -z ${user[1]} ]] && blanco " No hay expirados" msg -bar3 col "0)" "VOLVER" msg -bar3 blanco "NUMERO DE USUARIO A RENOVAR" 0 read opcion [[ -z $opcion ]] && vacio && sleep 0.3 && continue [[ $opcion = 0 ]] && break [[ ! $opcion =~ $numero ]] && { blanco " solo numeros apartir de 1" sleep 0.2 } || { [[ $opcion>=${n} ]] && { let n-- blanco "solo numero entre 1 y $n" sleep 0.2 } || { blanco "DURACION EN DIAS" 0 read dias mv $config $temp num=$(jq '.inbounds[].settings.clients | length' $temp) aid=$(jq '.inbounds[].settings.clients[0].alterId' $temp) echo "cat $temp | jq '.inbounds[].settings.clients[$num] += {alterId:${aid},id:\"${uid[$opcion]}\",email:\"${user[$opcion]}\"}' >> $config" | bash sed -i "/${user[$opcion]}/d" $user_conf echo "${user[$opcion]} | ${uid[$opcion]} | $(date '+%y-%m-%d' -d " +$dias days")" >> $user_conf chmod 777 $config rm $temp clear msg -bar3 blanco " Usuario ${user[$opcion]} renovado Exitosamente" msg -bar3 restart_v2r sleep 0.2 } } done } autoDel(){ seg=$(date +%s) while : do unset users users=$(cat $config | jq .inbounds[].settings.clients[] | jq -r .email) n=0 for i in $users do [[ ! $i = null ]] && { DateExp="$(cat ${user_conf}|grep -w "${i}"|cut -d'|' -f3)" seg_exp=$(date +%s --date="$DateExp") [[ "$seg" -gt "$seg_exp" ]] && { mv $config $temp echo jq \'del\(.inbounds[].settings.clients[$n]\)\' $temp \> $config | bash chmod 777 $config rm $temp continue } } let n++ done break done restart_v2r } dell_user(){ unset seg seg=$(date +%s) while : do clear users=$(cat $config | jq .inbounds[].settings.clients[] | jq -r .email) title " ELIMINAR USUARIO V2RAY" userDat n=0 for i in $users do userd[$n]=$i unset DateExp unset seg_exp unset exp [[ $i = null ]] && { i="default" a='*' DateExp=" unlimit" col "$a)" "$i" "$DateExp" } || { DateExp="$(cat ${user_conf}|grep -w "${i}"|cut -d'|' -f3)" seg_exp=$(date +%s --date="$DateExp") exp="[$(($(($seg_exp - $seg)) / 86400))]" col "$n)" "$i" "$DateExp" "$exp" } p=$n let n++ done userEpx=$(cut -d " " -f 1 $user_conf) for i in $userEpx do DateExp="$(cat ${user_conf}|grep -w "${i}"|cut -d'|' -f3)" seg_exp=$(date +%s --date="$DateExp") [[ "$seg" -gt "$seg_exp" ]] && { col "$n)" "$i" "$DateExp" "\033[0;31m[Exp]" expUser[$n]=$i } let n++ done msg -bar3 col "0)" "VOLVER" msg -bar3 blanco "NUMERO DE USUARIO A ELIMINAR" 0 read opcion [[ -z $opcion ]] && vacio && sleep 0.3 && continue [[ $opcion = 0 ]] && break [[ ! $opcion =~ $numero ]] && { blanco " solo numeros apartir de 1" sleep 0.2 } || { let n-- [[ $opcion -gt ${n} ]] && { blanco "solo numero entre 1 y $n" sleep 0.2 } || { [[ $opcion>=${p} ]] && { sed -i "/${expUser[$opcion]}/d" $user_conf _us="${expUser[$opcion]}" } || { sed -i "/${userd[$opcion]}/d" $user_conf _us="${userd[$opcion]}" mv $config $temp echo jq \'del\(.inbounds[].settings.clients[$opcion]\)\' $temp \> $config | bash chmod 777 $config rm $temp clear msg -bar3 #blanco " Usuario $(jq .inbounds[].settings.clients[$opcion].email $config) eliminado" blanco " USUARIO ${_us} ELIMINADO EXITOSAMENTE !!" msg -bar3 restart_v2r } sleep 0.2 } } done } fun_lock(){ unset seg local seg=$(date +%s) while : do clear users=$(cat $config | jq .inbounds[].settings.clients[] | jq -r .email) title " BLOQUEAR USUARIO Y MANDARLO AL LIMBOOOOO" userDat local n=1 for i in $users do unset DateExp unset seg_exp unset exp [[ $i = null ]] || { DateExp="$(cat ${user_conf}|grep -w "${i}"|cut -d'|' -f3)" seg_exp=$(date +%s --date="$DateExp") exp="[$(($(($seg_exp - $seg)) / 86400))]" col "$n)" "$i" "$DateExp" "$exp" local uid[$n]="$(cat ${user_conf}|grep -w "${i}"|cut -d'|' -f2|tr -d '[[:space:]]')" local user[$n]=$i local p=$n let n++ } done msg -bar3 col "0)" "VOLVER" msg -bar3 blanco "NUMERO DE USUARIO A BLOQUEAR" 0 read opcion [[ -z $opcion ]] && vacio && sleep 0.3 && continue [[ $opcion = 0 ]] && break [[ ! $opcion =~ $numero ]] && { blanco " solo numeros apartir de 1" sleep 0.2 } || { let n-- [[ $opcion -gt ${n} ]] && { blanco "solo numero entre 1 y $n" sleep 0.2 } || { #echo -e " OPCION ${opcion} / USER : ${user[$opcion]}" local LOCKDATA="$(cat ${user_conf}|grep -w "${user[$opcion]}"|cut -d'|' -f3)" local tempo=$(date +%s --date="$LOCKDATA") local dias="$(($(($tempo - $seg)) / 86400))" [[ $opcion>=${p} ]] && { echo "${user[$opcion]} | ${uid[$opcion]} | $(date '+%y-%m-%d' -d " +$dias days") |${dias}" >> $configLOCK #echo "${user[$opcion]} | ${uid[$opcion]} | $(date '+%y-%m-%d' -d " +$dias days") |${dias}" mv $config $temp echo jq \'del\(.inbounds[].settings.clients[$opcion]\)\' $temp \> $config | bash chmod 777 $config sed -i "/${user[$opcion]}/d" $user_conf rm $temp chmod 777 $configLOCK #read -p "PAUSE" } || { echo "${user[$opcion]} | ${uid[$opcion]} | $(date '+%y-%m-%d' -d " +$dias days") |${dias}" >> $configLOCK #echo "${user[$opcion]} | ${uid[$opcion]} | $(date '+%y-%m-%d' -d " +$dias days") |${dias}" mv $config $temp echo jq \'del\(.inbounds[].settings.clients[$opcion]\)\' $temp \> $config | bash chmod 777 $config rm $temp sed -i "/${user[$opcion]}/d" $user_conf chmod 777 $configLOCK #read -p "PAUSE" clear msg -bar3 #blanco " Usuario $(jq .inbounds[].settings.clients[$opcion].email $config) eliminado" blanco " USUARIO ${user[$opcion]} NUM: ${opcion} ENVIADO AL LIMBOOOO !!" msg -bar3 restart_v2r } sleep 0.2 } } done } fun_unlock(){ #echo "${user[$opcion]} | ${uid[$opcion]} | $(date '+%y-%m-%d' -d " +$dias days")" >> $configLOCK while : do unset user n clear title " DESBOQUEAR USUARIOS DEL LIMBOOOOO!!!" userDat userEpx=$(cut -d " " -f1 $configLOCK) n=1 for i in $userEpx do DateExp="$(cat ${configLOCK}|grep -w "${i}"|cut -d'|' -f4)" #seg_exp=$(date +%s --date="$DateExp") #[[ "$seg" -gt "$seg_exp" ]] && { col "$n)" "$i" "$DateExp DIAS" "\033[0;31m[LOCK]" #col "$n)" "$i" "\033[0;31m[LOCK]" local uid[$n]="$(cat ${configLOCK}|grep -w "${i}"|cut -d'|' -f2|tr -d '[[:space:]]')" local user[$n]=$i local tiempito[$n]="$(cat ${configLOCK}|grep -w "${i}"|cut -d'|' -f4|tr -d '[[:space:]]')" let n++ #} done [[ -z ${user[1]} ]] && blanco " No hay bloqueados!!!" msg -bar3 col "0)" "VOLVER" msg -bar3 blanco "NUMERO DE USUARIO A DESBLOQUEAR" 0 read opcion [[ -z $opcion ]] && vacio && sleep 0.3 && continue [[ $opcion = 0 ]] && break [[ ! $opcion =~ $numero ]] && { blanco " solo numeros apartir de 1" sleep 0.2 } || { [[ $opcion>=${n} ]] && { let n-- blanco "solo numero entre 1 y $n" sleep 0.2 } || { #blanco "DURACION EN DIAS" 0 local dias=${tiempito[$opcion]} mv $config $temp num=$(jq '.inbounds[].settings.clients | length' $temp) aid=$(jq '.inbounds[].settings.clients[0].alterId' $temp) echo "cat $temp | jq '.inbounds[].settings.clients[$num] += {alterId:${aid},id:\"${uid[$opcion]}\",email:\"${user[$opcion]}\"}' >> $config" | bash sed -i "/${user[$opcion]}/d" ${configLOCK} echo "${user[$opcion]} | ${uid[$opcion]} | $(date '+%y-%m-%d' -d " +$dias days")" >> $user_conf chmod 777 $config rm $temp clear msg -bar3 blanco " USUARIO ${user[$opcion]} RETIRADO DEL LIMBOOOOOOO!!" msg -bar3 restart_v2r sleep 0.2 } } done } _lo_un(){ clear msg -bar3 echo -e "\033[0;35m [${cor[2]}1\033[0;35m]\033[0;33m ${flech}\033[0;33m [!] BLOQUEAR USUARIO V2RAY " echo -e "\033[0;35m [${cor[2]}2\033[0;35m]\033[0;33m ${flech}\033[0;33m [!] DESBLOQUEAR USUARIO V2RAY " msg -bar3 echo -e " \033[0;35m[${cor[2]}0\033[0;35m]\033[0;33m ${flech} $(msg -bra "\033[1;43m[ Salir ]\e[0m")" msg -bar3 selection=$(selection_fun 2) case ${selection} in 1) fun_lock ;; 2) fun_unlock ;; esac } view_user(){ unset seg seg=$(date +%s) while : do clear users=$(cat $config | jq .inbounds[].settings.clients[] | jq -r .email) title " VER USUARIO V2RAY" userDat n=1 for i in $users do unset DateExp unset seg_exp unset exp [[ $i = null ]] && { i="Admin" DateExp=" Ilimitado" } || { DateExp="$(cat ${user_conf}|grep -w "${i}"|cut -d'|' -f3)" seg_exp=$(date +%s --date="$DateExp") exp="[$(($(($seg_exp - $seg)) / 86400))]" } col "$n)" "$i" "$DateExp" "$exp" let n++ done msg -bar3 col "0)" "VOLVER" msg -bar3 blanco "VER DATOS DEL USUARIO" 0 read opcion [[ -z $opcion ]] && vacio && sleep 0.3 && continue [[ $opcion = 0 ]] && break let opcion-- ps=$(jq .inbounds[].settings.clients[$opcion].email $config) && [[ $ps = null ]] && ps="default" id=$(jq .inbounds[].settings.clients[$opcion].id $config) aid=$(jq .inbounds[].settings.clients[$opcion].alterId $config) add=$(jq '.inbounds[].domain' $config) && [[ $add = null ]] && add=$(wget -qO- ipv4.icanhazip.com) host=$(jq '.inbounds[].streamSettings.wsSettings.headers.Host' $config) && [[ $host = null ]] && host='aqui.tu.host' net=$(jq '.inbounds[].streamSettings.network' $config) [[ $net = '"grpc"' ]] && path=$(jq '.inbounds[].streamSettings.grpcSettings.serviceName' $config) || path=$(jq '.inbounds[].streamSettings.wsSettings.path' $config) port=$(jq '.inbounds[].port' $config) tls=$(jq '.inbounds[].streamSettings.security' $config) addip=$(wget -qO- ifconfig.me) clear msg -bar3 blanco " Usuario: $ps" msg -bar3 col2 "Remarks:" "$ps" col2 "Domain:" "$add" col2 "IP-Address:" "$addip" col2 "Port:" "$port" col2 "id:" "$id" col2 "alterId:" "$aid" col2 "network:" "$net" [[ $tls = '"tls"' ]] && col2 "TLS:" "ABIERTO" || col2 "TLS:" " CERRADO" [[ $net = '"grpc"' ]] && col2 "Mode:" " GUN" || col2 "Head Type:" "none" col2 "security:" "none" [[ ! $host = '' ]] && col2 "Host/SNI:" "$host" [[ $net = '"grpc"' ]] && col2 "ServiceName:" "$path" || col2 "Path:" "$path" msg -bar3 blanco " VMESS LINK CONFIG" msg -bar3 vmess msg -bar3 continuar read foo done } vmess() { [[ $net = '"grpc"' ]] && echo -e "\033[3;32mvmess://$(echo {\"v\": \"2\", \"ps\": $ps, \"add\": $addip, \"port\": $port, \"aid\": $aid, \"type\": \"none\", \"net\": $net, \"path\": $path, \"host\": $host, \"id\": $id, \"tls\": $tls} | base64 -w 0)\033[3;32m" || { [[ $net = '"ws"' ]] && echo -e "\033[3;32mvmess://$(echo {\"v\": \"2\", \"ps\": $ps, \"add\": $addip, \"port\": $port, \"aid\": $aid, \"type\": \"gun\", \"net\": $net, \"path\": $path, \"host\": $host, \"id\": $id, \"tls\": $tls} | base64 -w 0)\033[3;32m" } } alterid(){ while : do aid=$(jq '.inbounds[].settings.clients[0].alterId' $config) clear msg -bar3 blanco " configuracion alterId" msg -bar3 col2 " alterid:" "$aid" msg -bar3 col "x)" "VOLVER" msg -bar3 blanco "NUEVO VALOR" 0 read opcion [[ -z $opcion ]] && vacio && sleep 0.3 && break [[ $opcion = x ]] && break mv $config $temp new=".inbounds[].settings.clients[0]" echo jq \'$new += \{alterId:${opcion}\}\' $temp \> $config | bash chmod 777 $config rm $temp clear msg -bar3 blanco "Nuevo AlterId fijado" msg -bar3 restart_v2r done } port(){ while : do port=$(jq '.inbounds[].port' $config) clear msg -bar3 blanco " configuracion de puerto" msg -bar3 col2 " Puerto:" "$port" msg -bar3 col "0)" "VOLVER" msg -bar3 blanco "NUEVO PUERTO" 0 read opcion [[ -z $opcion ]] && vacio && sleep 0.3 && break [[ $opcion = 0 ]] && break mv $config $temp new=".inbounds[]" echo jq \'$new += \{port:${opcion}\}\' $temp \> $config | bash chmod 777 $config rm $temp clear msg -bar3 blanco " Nuevo Puerto fijado" msg -bar3 sleep 0.2 restart_v2r done } address(){ while : do add=$(jq '.inbounds[].domain' $config) && [[ $add = null ]] && add=$(wget -qO- ipv4.icanhazip.com) clear msg -bar3 blanco " configuracion address" msg -bar3 col2 "address:" "$add" msg -bar3 col "0)" "VOLVER" msg -bar3 blanco "NUEVO ADDRESS" 0 read opcion [[ -z $opcion ]] && vacio && sleep 0.3 && break [[ $opcion = 0 ]] && break mv $config $temp echo "cat $temp | jq '.inbounds[] += {domain:\"$opcion\"}' >> $config" | bash chmod 777 $config rm $temp clear msg -bar3 blanco "Nuevo address fijado" msg -bar3 restart_v2r sleep 0.2 done } host(){ while : do host=$(jq '.inbounds[].streamSettings.wsSettings.headers.Host' $config) && [[ $host = null ]] && host='sin host' clear msg -bar3 blanco " configuracion Host" msg -bar3 col2 "Host:" "$host" msg -bar3 col "0)" "VOLVER" msg -bar3 blanco "NUEVO HOST" 0 read opcion [[ -z $opcion ]] && vacio && sleep 0.3 && break [[ $opcion = 0 ]] && break mv $config $temp echo "cat $temp | jq '.inbounds[].streamSettings.wsSettings.headers += {Host:\"$opcion\"}' >> $config" | bash chmod 777 $config rm $temp clear msg -bar3 blanco "Nuevo Host fijado" msg -bar3 restart_v2r sleep 0.2 done } path(){ while : do net=$(jq '.inbounds[].streamSettings.network' $config) [[ $net = '"grpc"' ]] && path=$(jq '.inbounds[].streamSettings.grpcSettings.serviceName' $config) || path=$(jq '.inbounds[].streamSettings.wsSettings.path' $config) clear msg -bar3 blanco " configuracion Path" msg -bar3 col2 "path:" "$path" msg -bar3 col "0)" "VOLVER" msg -bar3 blanco "NUEVO Path" 0 read opcion [[ -z $opcion ]] && vacio && sleep 0.3 && break [[ $opcion = 0 ]] && break mv $config $temp [[ $net = '"grpc"' ]] && echo "cat $temp | jq '.inbounds[].streamSettings.grpcSettings += {serviceName :\"$opcion\"}' >> $config" | bash || echo "cat $temp | jq '.inbounds[].streamSettings.wsSettings += {path:\"$opcion\"}' >> $config" | bash # echo "cat $temp | jq '.inbounds[].streamSettings.grpcSettings += {serviceName :\"$opcion\"}' >> $config" | bash chmod 777 $config rm $temp clear msg -bar3 blanco "Nuevo path fijado" msg -bar3 sleep 0.2 restart_v2r done } crt_man(){ while : do clear msg -bar3 blanco "configuracion de certificado manual" msg -bar3 chek=$(jq '.inbounds[].streamSettings.tlsSettings' $config) [[ ! $chek = {} ]] && { crt=$(jq '.inbounds[].streamSettings.tlsSettings.certificates[].certificateFile' $config) key=$(jq '.inbounds[].streamSettings.tlsSettings.certificates[].keyFile' $config) dom=$(jq '.inbounds[].domain' $config) echo -e " \033[4;49minstalado\033[0m" col2 "crt:" "$crt" col2 "key:" "$key" col2 "dominio:" "$dom" } || { blanco " certificado no instalado" } msg -bar3 col "1)" "ingresar nuevo crt" msg -bar3 col "0)" "VOLVER" msg -bar3 blanco "opcion" 0 read opcion [[ -z $opcion ]] && vacio && sleep 0.3 && break [[ $opcion = 0 ]] && break clear msg -bar3 blanco "ingrese su archivo de certificado\n ej: /root/crt/certif.crt" msg -bar3 blanco "crt" 0 read crts clear msg -bar3 blanco " nuevo certificado" msg -bar3 blanco " $crts" msg -bar3 blanco "ingrese su archivo key\n ej: /root/crt/certif.key" msg -bar3 blanco "key" 0 read keys clear msg -bar3 blanco " nuevo certificado" msg -bar3 blanco " $crts" blanco " $keys" msg -bar3 blanco "ingrese su dominio\n ej: netfree.xyz" msg -bar3 blanco "dominio" 0 read domi clear msg -bar3 blanco "verifique sus datos sean correctos!" msg -bar3 blanco " $crts" blanco " $keys" blanco " $domi" msg -bar3 continuar read foo mv $config $temp echo "cat $temp | jq '.inbounds[].streamSettings.tlsSettings += {certificates:[{certificateFile:\"$crts\",keyFile:\"$keys\"}]}' | jq '.inbounds[] += {domain:\"$domi\"}' | jq '.inbounds[].streamSettings += {security:\"tls\"}' >> $config" | bash chmod 777 $config rm $temp clear msg -bar3 blanco "nuevo certificado agregado" msg -bar3 restart_v2r sleep 0.2 done } instal(){ clear install_ini msg -bar3 blanco " Esta por intalar v2ray!" echo "source <(curl -sSL https://gitea.com/drowkid01/scriptdk1/raw/branch/main/Recursos/menu_inst/v2ray_manager.url.sh)" > /bin/v2r.sh chmod +x /bin/v2r.sh msg -bar3 blanco " La instalacion puede tener\n alguna fallas!\n por favor observe atentamente\n el log de intalacion,\n este podria contener informacion\n sobre algunos errores!\n estos deveras ser corregidos de\n forma manual antes de continual\n usando el script" msg -bar3 sleep 0.2 blanco "Enter para continuar..." read foo config='/etc/v2ray/config.json' tmp='/etc/v2ray/temp.json' source <(curl -sSL https://gitea.com/drowkid01/scriptdk1/raw/branch/main/Recursos/menu_inst/v2ray.sh) echo '[Unit] Description=V2Ray Service After=network.target nss-lookup.target StartLimitIntervalSec=0 [Service] Type=simple User=root CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_BIND_SERVICE AmbientCapabilities=CAP_NET_ADMIN CAP_NET_BIND_SERVICE NoNewPrivileges=true ExecStart=/usr/bin/v2ray/v2ray -config /etc/v2ray/config.json Restart=always RestartSec=3s [Install] WantedBy=multi-user.target' > /etc/systemd/system/v2ray.service systemctl daemon-reload &>/dev/null systemctl start v2ray &>/dev/null systemctl enable v2ray &>/dev/null systemctl restart v2ray.service clear&&clear title " INSTALACION DE XRAY MOD MENU " echo -e " \033[0;31mEsta opcion es aparte, para habilitar XRAY Install" echo -e " Habilitaremos el modulo XRAY previo al V2RAY ya instalado \033[0m" echo -e " Accederas al pannel original si es la primera vez !!\n\033[0m" msg -bar3 blanco " Deseas instalar el XRAY ? [S/N]" 0 read opcion msg -bar3 case $opcion in [Ss]|[Yy]) msg -bar3 [[ -e /bin/xr.sh ]] && xr.sh || { xray echo "source <(curl -sSL https://gitea.com/drowkid01/scriptdk1/raw/branch/main/Recursos/xray_manager.sh)" > /bin/xr.sh chmod +x /bin/xr.sh clear msg -bar3 blanco " Se ha agregado un autoejecutor en el Sector de Inicios Rapidos" msg -bar3 blanco " Para Acceder al menu Rapido \n Utilize * xr.sh * !!!" msg -bar3 echo -e " \033[4;31mNOTA importante\033[0m" echo -e " \033[0;31mSi deseas desabilitar esta opcion, apagala" echo -e " Y te recomiendo, no alterar nada en este menu, para" echo -e " Evitar Errores Futuros" echo -e " ESTE ES UN DUPLICADO V2RAY CON MODULO XRAY" echo -e " y causar problemas en futuras instalaciones.\033[0m" msg -bar3 continuar read foo } ;; [Nn]) continuar && read foo;; esac #restart_v2r } v2ray_tls(){ clear msg -bar3 blanco " certificado tls v2ray" echo -e "Ingrese Correo Temporal o Fijo \n Para Validar su Cerficicado SSL " read -p " Ejemplo > email=my@example.com : " -e -i $(date | md5sum | head -c15)@gmail.com crreo msg -bar3 wget -O - https://get.acme.sh | sh -s email=$crreo v2ray tls msg -bar3 continuar read foo } v2ray_stream(){ clear msg -bar3 blanco " PROTOCOLOS V2RAY" msg -bar3 v2ray stream msg -bar3 continuar read foo } v2ray_menu(){ clear msg -bar3 blanco " MENU V2RAY" msg -bar3 v2ray } backups(){ while : do unset opcion unset PID if [[ $(ps x | grep "http-server" | grep -v grep) = "" ]]; then PID="\033[0;31m[offline]" else PID="\033[1;92m[online]" fi clear title " Config de Respaldos" col "1)" "Respaldar Ahora" col "2)" "\033[1;92mRestaurar Respaldo" col "3)" "\033[0;31mEliminiar Respaldos" col "4)" "\033[1;34mRespaldo en linea $PID" col "5)" "\033[1;33mRespaldos automatico $(on_off_res)" msg -bar3 col "6)" "\033[1;33m RESTAURAR Online PORT :81 " msg -bar3 col "0)" "VOLVER" msg -bar3 blanco "opcion" 0 read opcion case $opcion in 1) autBackup clear title " Nuevo Respaldo Creado..." sleep 0.2;; 2) restore;; 3) rm -rf $backdir/*.tar clear title " Almacer de Respaldo limpia..." sleep 0.2;; 4) server;; 5) if [[ $(cat $v2rdir/conf | grep "autBackup" | cut -d " " -f2) = "0" ]]; then sed -i 's/autBackup 0/autBackup 1/' $v2rdir/conf else sed -i 's/autBackup 1/autBackup 0/' $v2rdir/conf fi;; 6) clear echo -e "\033[0;33m ESTA FUNCION EXPERIMENTAL Una vez que se descarge tu Fichero, Escoje el BackOnline + OJO + Luego de Restaurarlo, Vuelve Activar el TLS Para Validar la Configuracion de tu certificao" msg -bar3 echo -n "INGRESE LINK Que Mantienes Online en GitHub, o VPS \n" read -p "Pega tu Link : " url1 wget -q -O $backdir/BakcOnline.tar $url1 && echo -e "\033[1;31m- \033[1;32mFile Exito!" && restore || echo -e "\033[1;31m- \033[1;31mFile Fallo" && sleep 0.2 ;; 0) break;; *) blanco "opcion incorrecta..." && sleep 0.2;; esac done } restablecer_v2r(){ clear title " restablecer ajustes v2ray" echo -e " \033[0;31mEsto va a restablecer los\n ajustes predeterminados de v2ray" echo -e " Se perdera ajuste previos,\n incluido los Usuarios\033[0m" echo -e " LUEGO DE ESTO, DEBERAS RECONFIGURAR TU METODO\n\033[0m" msg -bar3 blanco "quiere continuar? [S/N]" 0 read opcion msg -bar3 case $opcion in [Ss]|[Yy]) v2ray new && rm -f ${configLOCK} rm -f /etc/v2r/user ;; [Nn]) continuar && read foo;; esac } remove_all(){ sed -i '/net.core.default_qdisc/d' /etc/sysctl.conf sed -i '/net.ipv4.tcp_congestion_control/d' /etc/sysctl.conf sed -i '/fs.file-max/d' /etc/sysctl.conf sed -i '/net.core.rmem_max/d' /etc/sysctl.conf sed -i '/net.core.wmem_max/d' /etc/sysctl.conf sed -i '/net.core.rmem_default/d' /etc/sysctl.conf sed -i '/net.core.wmem_default/d' /etc/sysctl.conf sed -i '/net.core.netdev_max_backlog/d' /etc/sysctl.conf sed -i '/net.core.somaxconn/d' /etc/sysctl.conf sed -i '/net.ipv4.tcp_syncookies/d' /etc/sysctl.conf sed -i '/net.ipv4.tcp_tw_reuse/d' /etc/sysctl.conf sed -i '/net.ipv4.tcp_tw_recycle/d' /etc/sysctl.conf sed -i '/net.ipv4.tcp_fin_timeout/d' /etc/sysctl.conf sed -i '/net.ipv4.tcp_keepalive_time/d' /etc/sysctl.conf sed -i '/net.ipv4.ip_local_port_range/d' /etc/sysctl.conf sed -i '/net.ipv4.tcp_max_syn_backlog/d' /etc/sysctl.conf sed -i '/net.ipv4.tcp_max_tw_buckets/d' /etc/sysctl.conf sed -i '/net.ipv4.tcp_rmem/d' /etc/sysctl.conf sed -i '/net.ipv4.tcp_wmem/d' /etc/sysctl.conf sed -i '/net.ipv4.tcp_mtu_probing/d' /etc/sysctl.conf sed -i '/net.ipv4.ip_forward/d' /etc/sysctl.conf sed -i '/fs.inotify.max_user_instances/d' /etc/sysctl.conf sed -i '/net.ipv4.tcp_syncookies/d' /etc/sysctl.conf sed -i '/net.ipv4.tcp_fin_timeout/d' /etc/sysctl.conf sed -i '/net.ipv4.tcp_tw_reuse/d' /etc/sysctl.conf sed -i '/net.ipv4.tcp_max_syn_backlog/d' /etc/sysctl.conf sed -i '/net.ipv4.ip_local_port_range/d' /etc/sysctl.conf sed -i '/net.ipv4.tcp_max_tw_buckets/d' /etc/sysctl.conf sed -i '/net.ipv4.route.gc_timeout/d' /etc/sysctl.conf sed -i '/net.ipv4.tcp_synack_retries/d' /etc/sysctl.conf sed -i '/net.ipv4.tcp_syn_retries/d' /etc/sysctl.conf sed -i '/net.core.somaxconn/d' /etc/sysctl.conf sed -i '/net.core.netdev_max_backlog/d' /etc/sysctl.conf sed -i '/net.ipv4.tcp_timestamps/d' /etc/sysctl.conf sed -i '/net.ipv4.tcp_max_orphans/d' /etc/sysctl.conf clear echo -e " \033[0;92mLa aceleración está Desinstalada." sleep 0.1 } bbr(){ while : do clear title " ACELERACION BBR" blanco " Esto activara la aceleracion\n por defecto de su kernel.\n no se modoficar nada del sistema." msg -bar3 col "1)" "Acivar aceleracion" col "2)" "quitar toda aceleracion" msg -bar3 col "0)" "volver" msg -bar3 blanco "opcion" 0 read opcion case $opcion in 1) remove_all echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf sysctl -p echo -e " \033[0;92m¡BBR comenzó con éxito!";; 2)remove_all;; 0)break;; *)blanco " seleccione una opcion" && sleep 0.2;; esac done } settings(){ while : do clear msg -bar3 blanco " Ajustes e instalacion v2ray" msg -bar3 col "1)" "CAMBIAR DOMINIO / IP" col "2)" "CAMBIAR PUERTO " col "3)" "CAMBIAR AlterId" col "4)" "CAMBIAR HOST" col "5)" "CAMBIAR PACH" msg -bar3 col "6)" "AÑADIR CRT (script)" col "7)" "AÑADIR CRT V2RAY NATIVO" col "8)" "AÑADIR CERTIFICADO MANUAL" msg -bar3 col "9)" "CAMBIAR PROTOCOLO V2RAY" col "10)" "ENTRAR A V2RAY ORIGINAL" col "11)" "RESTABLECER CONFIGURACION" msg -bar3 col "12)" "BBR nativo del sistema" col "13)" "INSTALL/REINSTALL V2RAY/XRAY" msg -bar3 col "14)" "Conf. COPIAS DE SEGURIDAD" msg -bar3 #col "15)" "HABILITAR MODULO XRAY ( V2ray )" #msg -bar3 col "0)" "REGRESAR" msg -bar3 blanco "opcion" 0 read opcion [[ -z $opcion ]] && vacio && sleep 0.3 && break [[ $opcion = 0 ]] && break case $opcion in 1)address;; 2)port;; 3)alterid;; 4)host;; 5)path;; 6)domain_check && clear ;; 7)v2ray_tls;; 8)crt_man;; 9)v2ray_stream;; 10)v2ray_menu;; 11)restablecer_v2r;; 12)bbr;; 13)install;; 14)backups;; 15)_xray;; *) blanco " solo numeros de 0 a 14" && sleep 0.2;; esac done } _xray() { [[ -e /bin/xr.sh ]] && xr.sh || { xray echo "source <(curl -sSL https://gitea.com/drowkid01/scriptdk1/raw/branch/main/Recursos/xray_manager.sh)" > /bin/xr.sh chmod +x /bin/xr.sh clear msg -bar3 blanco " Se ha agregado un autoejecutor en el Sector de Inicios Rapidos" msg -bar3 blanco " Para Acceder al menu Rapido \n Utilize * xr.sh * !!!" msg -bar3 echo -e " \033[4;31mNOTA importante\033[0m" echo -e " \033[0;31mSi deseas desabilitar esta opcion, apagala" echo -e " Y te recomiendo, no alterar nada en este menu, para" echo -e " Evitar Errores Futuros" echo -e " ESTE ES UN DUPLICADO V2RAY CON MODULO XRAY" echo -e " y causar problemas en futuras instalaciones.\033[0m" msg -bar3 continuar read foo } } enon(){ echo "source <(curl -sSL https://gitea.com/drowkid01/scriptdk1/raw/branch/main/Recursos/menu_inst/v2ray_manager.url.sh)" > /bin/v2r.sh chmod +x /bin/v2r.sh clear msg -bar3 blanco " Se ha agregado un autoejecutor en el Sector de Inicios Rapidos" msg -bar3 blanco " Para Acceder al menu Rapido \n Utilize * v2r.sh * !!!" msg -bar3 echo -e " \033[4;31mNOTA importante\033[0m" echo -e " \033[0;31mSi deseas desabilitar esta opcion, apagala" echo -e " Y te recomiendo, no alterar nada en este menu, para" echo -e " Evitar Errores Futuros" echo -e " y causar problemas en futuras instalaciones.\033[0m" msg -bar3 continuar read foo } enoff(){ rm -f /bin/v2r.sh msg -bar3 echo -e " \033[4;31mNOTA importante\033[0m" echo -e " \033[0;31mSe ha Desabilitado el menu Rapido de v2r.sh" echo -e " Y te recomiendo, no alterar nada en este menu, para" echo -e " Evitar Errores Futuros" echo -e " y causar problemas en futuras instalaciones.\033[0m" msg -bar3 continuar read foo } enttrada () { while : do clear msg -bar3 blanco " Ajustes de Entrada Rapida de Menu v2ray" msg -bar3 col "1)" "Habilitar v2r.sh, Como entrada Rapida" col "2)" "Eliminar v2r.sh, Como entrada Rapida" msg -bar3 col "0)" "Volver" msg -bar3 blanco "opcion" 0 read opcion [[ -z $opcion ]] && vacio && sleep 0.3 && break [[ $opcion = 0 ]] && break case $opcion in 1)enon;; 2)enoff;; *) blanco " solo numeros de 0 a 2" && sleep 0.1;; esac done } _fix () { restablecer_v2r } main(){ [[ ! -e $config ]] && { clear msg -bar3 blanco " No se encontro ningun archovo de configracion v2ray" msg -bar3 blanco " No instalo v2ray o esta usando\n una vercion diferente!!!" msg -bar3 echo -e " \033[4;31mNOTA importante\033[0m" echo -e " \033[0;31mSi esta usando una vercion v2ray diferente" echo -e " y opta por cuntinuar usando este script." echo -e " Este puede; no funcionar correctamente" echo -e " y causar problemas en futuras instalaciones.\033[0m" msg -bar3 continuar read foo instal systemctl restart v2ray v2ray_stream } while : do _usor=$(printf '%-8s' "$(free -m | awk 'NR==2{printf "%.2f%%", $3*100/$2 }')") _usop=$(printf '%-1s' "$(top -bn1 | awk '/Cpu/ { cpu = "" 100 - $8 "%" }; END { print cpu }')") [[ -e /bin/v2r.sh ]] && enrap="\033[1;92m[ON]" || enrap="\033[0;31m[OFF]" [[ -e /etc/v2ray/config.json ]] && _v2Reg="$(cat /etc/v2ray/config.json | jq .inbounds[].settings.clients[].email|wc -l)" || _v2Reg=0 [[ -e /etc/v2ray/config.json.lock ]] && _v2LOCK="$(cat /etc/v2ray/config.json.lock|wc -l)" || _v2LOCK=0 clear title2 title " Ram: \033[1;32m$_usor \033[0;31m<<< \033[1;37mMENU V2RAY \033[0;31m>>> \033[1;37mCPU: \033[1;32m$_usop" col "1)" "CREAR NUEVO USUARIO" col "2)" "\033[0;92mRENOVAR USUARIO" col "3)" "\033[0;31mREMOVER USUARIO" col "4)" "VER DATOS DE USUARIOS \033[1;32m ( ${_v2Reg} )" col "5)" "VER USUARIOS CONECTADOS" col "b)" "LOCK/UNLOCK USUARIO \033[1;32m ( ${_v2LOCK} )" msg -bar3 col "6)" "\033[1;33m AJUSTES V2RAY $_v2" msg -bar3 col "7)" "\033[1;33mENTRAR CON \033[1;33mv2r.sh $enrap" msg -bar3 col "8)" "\033[1;33mFIXEAR V2RAY ( SOLO USUARIOS )" msg -bar3 col "0)" "SALIR \033[0;31m|| $(blanco "Respaldos a utomaticos") $(on_off_res)" msg -bar3 blanco "opcion" 0 read opcion case $opcion in 1) add_user;; 2) renew;; 3) dell_user;; 4) view_user;; 5) usrCONEC ;; 6) settings;; 7) enttrada;; 8) restablecer_v2r;; b) _lo_un;; 0) break;; *) blanco "\n selecione una opcion del 0 al 8" && sleep 0.1;; esac done } [[ $1 = "autoDel" ]] && { chekKEY &> /dev/null 2>&1 autoDel } || { chekKEY &> /dev/null 2>&1 autoDel main }