#!/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