#!/bin/bash # Função para exibir o menu exibir_menu() { echo -e "\e[1;33m===== MENU v2Back_n_IPTV =====\e[0m" echo -e "\e[1;36m1. EXIBE LINHAS COM DIAS <= 0 DO ./v2Back_n_IPTVi\e[0m" echo -e "\e[1;36m2. REMOVE LINHAS COM DIAS <= 0 DO ./v2Back_n_IPTVi\e[0m" echo -e "\e[1;36m3. REMOVE LINHAS EM BRANCO DO ./v2Back_n_IPTV\e[0m" echo -e echo -e "\e[1;36m4. EXECUTA SUBTRACAO EM ./v2Back_n_IPTV\e[0m" echo -e "\e[1;36m5. IMPRIME O FILE ./v2Back_n_IPTV\e[0m" echo -e echo -e "\e[1;36m6. RELOGIO QPRA O ./pipeSubtrator.sh + ./removeBlank.sh\e[0m" echo -e echo -e "\e[1;33m====== WPANEL _V2 USER LOOKUP/OP =====\e[0m" echo -e "\e[1;33m*Its need ./v2snap(carregado em outrora) n ./v2snap2(carregado no momento da OP) files for OPs\e[0m" echo -e "\e[1;36ma. Imprimir ./v2snap(outrora)\e[0m" echo -e "\e[1;36mc. Carrega ./v2snap com WPanel _v2 users\e[0m" echo -e "\e[1;36mb. Listar _v2 live users e carrega ./v2snap2 for OP. Also check new created user(since last ./v2snap load)\e[0m" echo -e "\e[1;36md. (OP) Quais _v2 users foram apagados desde ./v2snap?\e[0m" echo -e "\e[1;33m***** SYNC DE CONEXAO V2 *****\e[0m" echo -e "\e[1;33mg. Deploy sUUID.sh script to UUID extraction OP\e[0m" echo -e "\e[1;36m7. OP Extrai IDs de ./v2Back_n_IPTV e config.json\e[0m" echo -e echo -e "\e[1;33m===== ONLINE/MULTICONN DETECTOR =====\e[0m" echo -e "\e[1;36m8. VERIFICAR CONEXOES SIMULTANEAS SCRIPTING******\e[0m" echo -e echo -e "\e[1;33m===== FTP_RECEPTOR/SOURCE SCRIPTING INSTALL =====\e[0m" echo -e "\e[1;36m9. RECEPTOR Deploy scriptGet getVPSFile restoremacro onOffLimiter\e[0m" echo -e "\e[1;33m*install yafc n do manual exec to establish scriptting!*\e[0m" echo -e "\e[1;33m**Also deploy passwd.sh for script cycle passwd restart :P\e[0m" echo -e "\e[1;36m11. SOURCE Deploy scriptCreate createmacro onOffLimiter\e[0m" echo -e "\e[1;36m12. SOURCE Inject Wpanel code to block bad usernames*****\e[0m" echo -e "\e[1;33m**BITBIN->FTP_SYNC_Netplan_n_InfosMISC to stablish VSFTPD server\e[0m" echo -e echo -e "\e[1;33m13. Adjust /bin/limiter time 'sleep 5s'\e[0m" echo -e "\e[1;33m*Dont forget to check CHMOD777 all this shit*\e[0m" echo -e "\e[1;36m0. Sair\e[0m" echo -e "\e[1;33m================\e[0m" echo -n "Escolha uma opção: " } # Loop principal do menu while true; do exibir_menu read opcao case $opcao in 1) # Nome do arquivo de entrada arquivo="./v2Back_n_IPTV" # Loop através das linhas do arquivo de entrada while IFS= read -r linha; do # Use um comando regex para encontrar os valores entre colchetes valores_entre_colchetes=$(echo "$linha" | grep -o '\[[^]]*\]') # Loop através dos valores encontrados while IFS= read -r valor; do # Remova colchetes e verifique se o valor é menor que ou igual a 0 valor_sem_colchetes=$(echo "$valor" | tr -d '[]') if [ "$valor_sem_colchetes" -le 0 ]; then # Se for menor ou igual a 0, exiba essa linha echo "$linha" break fi done <<< "$valores_entre_colchetes" done < "$arquivo" read ;; 2) # Nome do arquivo de entrada arquivo="./v2Back_n_IPTV" # Crie um arquivo temporário para armazenar as linhas válidas tempfile=$(mktemp) # Loop através das linhas do arquivo de entrada while IFS= read -r linha; do # Use um comando regex para encontrar os valores entre colchetes valores_entre_colchetes=$(echo "$linha" | grep -o '\[[^]]*\]') # Loop através dos valores encontrados while IFS= read -r valor; do # Remova colchetes e verifique se o valor é menor que 0 valor_sem_colchetes=$(echo "$valor" | tr -d '[]') if [ "$valor_sem_colchetes" -le 0 ]; then # Se for menor que 0, não copie essa linha para o arquivo temporário continue 2 fi done <<< "$valores_entre_colchetes" # Se chegou aqui, a linha é válida, copie-a para o arquivo temporário echo "$linha" >> "$tempfile" done < "$arquivo" # Substitua o arquivo original pelo arquivo temporário mv "$tempfile" "$arquivo" # Exibindo o arquivo modificado cat "$arquivo" read ;; 3) # Nome do arquivo de entrada arquivo_origem="./v2Back_n_IPTV" # Nome do arquivo temporário arquivo_temporario="temp.txt" # Remove linhas em branco do arquivo de origem grep -v '^$' "$arquivo_origem" > "$arquivo_temporario" # Substituir o arquivo de origem pelo arquivo temporário mv "$arquivo_temporario" "$arquivo_origem" # Mensagem de conclusão echo "Linhas em branco removidas com sucesso do arquivo $arquivo_origem." ;; 4) # Nome do arquivo de entrada arquivo_origem="./v2Back_n_IPTV" # Nome do arquivo temporário arquivo_temporario="temp.txt" # Loop para processar cada linha do arquivo de origem while IFS= read -r linha; do valor_coluna1=$(echo "$linha" | awk '{print $1}') valor_colchetes=$(echo "$linha" | awk -F'[][]' '{print $2}') novo_valor_colchetes=$((valor_colchetes - 1)) linha_modificada=$(echo "$linha" | sed "s/\[$valor_colchetes\]/\[$novo_valor_colchetes\]/") echo "$linha_modificada" done < "$arquivo_origem" > "$arquivo_temporario" # Substituir o arquivo de origem pelo arquivo temporário mv "$arquivo_temporario" "$arquivo_origem" ;; 5) cat ./v2Back_n_IPTV read ;; 6) echo -e "\e[1;33mAdd linha à seguir, que programa o bang pra 1:15AM todo dia\e[0m" echo -e "\e[1;36m15 1 * * * /bin/cat v2Back_n_IPTV | ./pipeSubtrator.sh \e[0m" echo -e "\e[1;36m16 1 * * * ./removeBlank.sh\e[0m" echo -e "\nPressione qualquer tecla para executar CRONTAB -E..." echo -e " # Nome do arquivo de entrada arquivo_origem=\"./v2Back_n_IPTV\" # Nome do arquivo temporário arquivo_temporario=\"temp.txt\" # Remove linhas em branco do arquivo de origem grep -v '^$' \"\$arquivo_origem\" > \"\$arquivo_temporario\" # Substituir o arquivo de origem pelo arquivo temporário mv \"\$arquivo_temporario\" \"\$arquivo_origem\" # Mensagem de conclusão echo \"Linhas em branco removidas com sucesso do arquivo \$arquivo_origem.\" " > ./removeBlank.sh chmod 777 ./removeBlank.sh read crontab -e ;; g) echo -e "#!/bin/bash # Função para extrair e imprimir as strings do bloco1.txt extract_strings_from_bloco1() { while IFS=\"|\" read -r uuid _; do # Remove espaços em branco no início e no fim da string uuid=\$(echo \"\$uuid\" | tr -d ' ') # Verifica se a string corresponde ao formato esperado if [[ \$uuid =~ ^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$ ]]; then echo \"\$uuid\" fi done < bloco1.txt } # Função para extrair e imprimir as strings do bloco2.txt extract_strings_from_bloco2() { # Use grep com uma expressão regular para extrair as UUIDs grep -oE '[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}' bloco2.txt } # Chamando as funções para extrair e imprimir as strings echo \"Strings do v2Back_n_IPTV:\" extract_strings_from_bloco1 echo \"Strings do config.json:\" extract_strings_from_bloco2" > ./sUUID.sh chmod 777 ./sUUID.sh ;; 7) cat /root/v2Back_n_IPTV > bloco1.txt cat /etc/v2ray/config.json > bloco2.txt ./sUUID.sh read echo -e "\e[1;33m===== Linhas que aparecem apenas 1 vez =====\e[0m" ./sUUID.sh | sort | uniq -c | awk '$1 == 1 {print $2}' read ;; 8) ./script2.sh # Substitua script2.sh pelo nome do seu segundo script ;; 9) echo " #!/bin/bash while : do ./getVPSFile.sh | yafc ftpuser:'~L8z65xL=8y]!rs'@192.99.252.3 chmod 777 ./backup.vps ./restoremacro.sh | menu ./onOffLimiter.sh | menu ./passwd.sh | passwd sync; echo 1 > /proc/sys/vm/drop_caches sleep 8 sync; echo 2 > /proc/sys/vm/drop_caches done " > ./scriptGet.sh echo -e " #!/bin/bash sleep 1 echo \"ls\" sleep 1 echo \"get backup.vps\" sleep 1 echo \"y\" sleep 1 echo \"exit\" " > ./getVPSFile.sh echo -e " #!/bin/bash echo \"15\" echo \"2\" sleep 4 echo -ne \"\n\" echo \"0\" echo \"0\" echo \"0\" " > ./restoremacro.sh echo -e " #!/bin/bash echo \"17\" sleep 8 echo \"17\" sleep 3 echo \"0\" echo \"0\" echo \"0\" " > ./onOffLimiter.sh echo "#!/bin/bash echo 'lbadwath' sleep 1 echo 'lbadwath' sleep 1 " > ./passwd.sh chmod 777 *.sh ;; 11) echo "#!/bin/bash while : do ./createmacro.sh | menu cp -rf ./backup.vps /home/ftpuser/ftp/files/ chown ftpuser:ftpuser /home/ftpuser/ftp/files/backup.vps chmod 777 /home/ftpuser/ftp/files/backup.vps #./limiterOvpn.sh ./onOffLimiter.sh | menu sync; echo 1 > /proc/sys/vm/drop_caches sleep 3 sync; echo 2 > /proc/sys/vm/drop_caches done " > ./scriptCreate.sh echo -e "#!/bin/bash echo \"17\" sleep 8 echo \"17\" sleep 3 echo \"0\" echo \"0\" echo \"0\" " > ./onOffLimiter.sh echo -e "#!/bin/bash # Nome do arquivo onde o valor será armazenado arquivo='contador.txt' # Se o arquivo não existir, cria e inicializa com 0 if [ ! -f \"\$arquivo\" ]; then echo 0 > \"\$arquivo\" fi # Lê o valor atual do arquivo valor=\$(<\"\$arquivo\") # Incrementa o valor echo \$(( \$(cat contador.txt) + 1 )) > contador.txt echo \"15\" sleep 1 echo \"1\" sleep 3 echo \"n\" # Verifica se o valor atingiu 30 if [ \"\$valor\" -gt 30 ]; then echo \"Valor 30 atingido\" # Reseta o valor para 0 echo \"0\" > contador.txt echo \"8\" sleep 6 fi echo \"n\" echo \"0\" echo \"0\" echo \"0\" " > ./createmacro.sh ;; 12) echo -e "BITBIN -> BLOCK_User_bad_string_n_MySQL_Trhigger_String_n_SSHLimiter" read ;; 13) vim /bin/limiter ;; 0) echo "Saindo..." exit 0 ;; a) cat ./v2snap read ;; b) # Defina o caminho para o arquivo /etc/passwd passwd_file="/etc/passwd" # Inicialize uma variável para contar os usuários count=0 echo "" > ./v2snap2 # Use um loop while para ler cada linha do arquivo /etc/passwd while IFS= read -r line; do username=$(echo "$line" | cut -d: -f1) if [[ "$username" == *_v2* || "$username" == *_V2* ]]; then echo "$username" echo "$username" >> ./v2snap2 chage -l "$username" | grep "Account expires" | cut -d: -f2- | sed 's/^[[:space:]]*//' ((count++)) fi done < "$passwd_file" # Imprima o número total de usuários encontrados echo "Número total de usuários que terminam em '_v2' ou '_V2': $count" read ;; c) # Defina o caminho para o arquivo /etc/passwd passwd_file="/etc/passwd" # Inicialize uma variável para contar os usuários count=0 echo "" > ./v2snap # Use um loop while para ler cada linha do arquivo /etc/passwd while IFS= read -r line; do username=$(echo "$line" | cut -d: -f1) if [[ "$username" == *_v2* || "$username" == *_V2* ]]; then echo "$username" echo "$username" >> ./v2snap chage -l "$username" | grep "Account expires" | cut -d: -f2- | sed 's/^[[:space:]]*//' ((count++)) fi done < "$passwd_file" # Imprima o número total de usuários encontrados echo "Número total de usuários que terminam em '_v2' ou '_V2': $count" read ;; d) file1="./v2snap" file2="./v2snap2" # Verifica se os arquivos existem if [ ! -e "$file1" ] || [ ! -e "$file2" ]; then echo "Um ou ambos os arquivos não existem." exit 1 fi # Lê os usuários do arquivo v2snap e armazena em uma matriz mapfile -t users_file1 < "$file1" # Lê os usuários do arquivo v2snap2 e armazena em outra matriz mapfile -t users_file2 < "$file2" # Percorre a matriz de usuários do v2snap for user1 in "${users_file1[@]}"; do # Verifica se o usuário não está presente no v2snap2 if ! [[ " ${users_file2[*]} " =~ " $user1 " ]]; then echo "Usuário exclusivo em $file1: $user1" fi done read ;; *) echo "Opção inválida! Pressione Enter para continuar..." read ;; esac done