diff --git a/bashrc.d/README.md b/bashrc.d/README.md new file mode 100644 index 0000000..02f5607 --- /dev/null +++ b/bashrc.d/README.md @@ -0,0 +1,18 @@ +# Snippets pour Bash + +## Mise en place +Ajouter ce petit bout de code dans votre ~/.bashrc : +``` +# Vérifier si le répertoire ~/.bashrc.d existe +if [ -d "$HOME/.bashrc.d" ]; then + # Boucler sur chaque fichier dans ~/.bashrc.d + for file in "$HOME/.bashrc.d/"*; do + # Vérifier si c'est un fichier lisible + if [ -r "$file" ]; then + # Exécuter le fichier + . "$file" + fi + done +fi +``` + diff --git a/bashrc.d/networks.sh b/bashrc.d/networks.sh new file mode 100644 index 0000000..d4eab33 --- /dev/null +++ b/bashrc.d/networks.sh @@ -0,0 +1,92 @@ +#!/bin/bash + +# Définir les réseaux à exclure (séparés par des virgules) +netexclude="10.9.9.0/24,127.0.0.0/8,192.168.122.0/24" + +# Convertir la liste des exclusions en un tableau +IFS=',' read -r -a exclude_array <<< "$netexclude" + +# Fonction pour vérifier si une IP est dans la liste d'exclusions +function is_excluded { + local ip=$1 + local ipnum + ipnum=$(printf "%d" "$(echo "$ip" | awk -F. '{ print ($1 * 16777216) + ($2 * 65536) + ($3 * 256) + $4 }')") + + for net in "${exclude_array[@]}"; do + IFS='/' read -r net_addr net_mask <<< "$net" + local netnum + netnum=$(printf "%d" "$(echo "$net_addr" | awk -F. '{ print ($1 * 16777216) + ($2 * 65536) + ($3 * 256) + $4 }')") + local mask + mask=$(( 0xFFFFFFFF << (32 - net_mask) )) + + if (( (ipnum & mask) == (netnum & mask) )); then + return 0 + fi + done + return 1 +} + +# Récupérer les interfaces réseau actives +interfaces=$(ip -o link show | awk -F': ' '{print $2}') + +# Définir les variables pour les réseaux +declare -A net_info +net_count=0 + +for intf in $interfaces; do + # Obtenir l'adresse IP de l'interface + ip_addr=$(ip -o -4 addr list $intf | awk '{print $4}') + ip_only=$(echo $ip_addr | cut -d/ -f1) + + # Vérifier si l'adresse IP est dans la liste des exclusions + if is_excluded "$ip_only"; then + continue + fi + + if [[ ! -z $ip_addr ]]; then + net_count=$((net_count + 1)) + net_info["net${net_count}_ip"]=$ip_only + net_info["net${net_count}_mask"]=$(ip -o -4 addr show $intf | awk '{print $4}' | cut -d/ -f2) + net_info["net${net_count}_gw"]=$(ip route | grep -w "$intf" | grep -oP 'via \K[^ ]+') + net_info["net${net_count}_net"]=$(ip route | grep -w "$intf" | grep -oP '\b(\d{1,3}\.){3}\d{1,3}/\d{1,2}\b') + + if [[ $net_count -ge 4 ]]; then + break + fi + fi +done + +# Afficher les résultats et définir les variables globales +for i in $(seq 1 $net_count); do + echo "Réseau $i:" + echo "IP: ${net_info[net${i}_ip]}" + echo "Masque: ${net_info[net${i}_mask]}" + echo "Passerelle: ${net_info[net${i}_gw]}" + echo "Réseau: ${net_info[net${i}_net]}" + echo "" + + export "net${i}ip=${net_info[net${i}_ip]}" + export "net${i}mask=${net_info[net${i}_mask]}" + export "net${i}gw=${net_info[net${i}_gw]}" + export "net${i}net=${net_info[net${i}_net]}" +done + +# Définir les variables globales +if [[ ! -z ${net_info[net1_ip]} ]]; then + export net1=${net_info[net1_ip]} +fi + +if [[ ! -z ${net_info[net2_ip]} ]]; then + export net2=${net_info[net2_ip]} +fi + +if [[ ! -z ${net_info[net3_ip]} ]]; then + export net3=${net_info[net3_ip]} +fi + +if [[ ! -z ${net_info[net4_ip]} ]]; then + export net4=${net_info[net4_ip]} +fi + +echo "DEBUG net1=$net1" +echo "DEBUG net2=$net2" diff --git a/tvtui/tvtui.sh b/tvtui/tvtui.sh new file mode 100755 index 0000000..fd6c4c8 --- /dev/null +++ b/tvtui/tvtui.sh @@ -0,0 +1,112 @@ +#!/bin/bash + +# Fichier CSV contenant les données des comptes +CSV_FILE="$HOME/Sync/BContact/tv_history.csv" + +# Vérifie si le fichier CSV existe, sinon le crée avec des en-têtes +if [[ ! -f "$CSV_FILE" ]]; then + echo "name,tv_id,tv_pwd" > "$CSV_FILE" +fi + +# Personnalisation des couleurs de whiptail +export NEWT_COLORS=' +root=,black +window=white,black +border=white,black +title=blue,black +compactbutton=white,black +button=blue,black +textbox=white,black +listbox=white,black +actlistbox=blue,black +sellistbox=blue,black +actsellistbox=blue,black +' + +# Fonction pour afficher un menu +show_menu() { + MENU_ITEMS=("1" "Ajouter" "2" "Consulter" "3" "Supprimer") + CHOICE=$(whiptail --title "TeamViewer TUI" --menu "Que voulez-vous faire?" 15 50 8 "${MENU_ITEMS[@]}" 3>&1 1>&2 2>&3) + + case $CHOICE in + 1) add_account ;; + 2) choose_account ;; + 3) delete_account ;; + *) exit 1 ;; + esac +} + +# Fonction pour choisir un compte et afficher les informations +choose_account() { + # Lecture des noms de comptes à partir du fichier CSV, en ignorant la première ligne (en-tête) + ACCOUNT_NAMES=$(tail -n +2 "$CSV_FILE" | cut -d',' -f1) + + # Préparation de la liste pour whiptail + MENU_ITEMS=() + INDEX=1 + while IFS= read -r account; do + MENU_ITEMS+=("$INDEX" "$account") + INDEX=$((INDEX + 1)) + done <<< "$ACCOUNT_NAMES" + + # Affichage de la liste des comptes avec whiptail + ACCOUNT_INDEX=$(whiptail --title "TOTP TUI" --menu "Compte :" 25 50 15 "${MENU_ITEMS[@]}" 3>&1 1>&2 2>&3) + + # Si l'utilisateur annule, retourner au menu principal + if [[ $? -ne 0 ]]; then + show_menu + fi + + # Récupérer les informations du compte sélectionné, en ignorant la première ligne (en-tête) + LINE=$(tail -n +2 "$CSV_FILE" | sed -n "${ACCOUNT_INDEX}p") + IFS=',' read -r name tv_id tv_pwd <<< "$LINE" + + # Affichage des informations du compte sélectionné + whiptail --title "Informations du Compte" --msgbox "Nom: $name\nID: $tv_id\nMot de passe: $tv_pwd" 15 50 + show_menu +} + +# Fonction pour ajouter un compte +add_account() { + name=$(whiptail --title "Ajouter un Compte" --inputbox "Entrez le nom du compte:" 10 60 3>&1 1>&2 2>&3) + tv_id=$(whiptail --title "Ajouter un Compte" --inputbox "Entrez l'ID TeamViewer:" 10 60 3>&1 1>&2 2>&3) + tv_pwd=$(whiptail --title "Ajouter un Compte" --inputbox "Entrez le mot de passe TeamViewer:" 10 60 3>&1 1>&2 2>&3) + + # Ajouter l'entrée au fichier CSV + echo "$name,$tv_id,$tv_pwd" >> "$CSV_FILE" + + whiptail --title "Succès" --msgbox "Le compte a été ajouté avec succès!" 10 60 + show_menu +} + +# Fonction pour supprimer un compte +delete_account() { + # Lecture des noms de comptes à partir du fichier CSV, en ignorant la première ligne (en-tête) + ACCOUNT_NAMES=$(tail -n +2 "$CSV_FILE" | cut -d',' -f1) + + # Préparation de la liste pour whiptail + MENU_ITEMS=() + INDEX=1 + while IFS= read -r account; do + MENU_ITEMS+=("$INDEX" "$account") + INDEX=$((INDEX + 1)) + done <<< "$ACCOUNT_NAMES" + + # Affichage de la liste des comptes avec whiptail + ACCOUNT_INDEX=$(whiptail --title "Supprimer un Compte" --menu "Choisissez un compte à supprimer:" 25 50 15 "${MENU_ITEMS[@]}" 3>&1 1>&2 2>&3) + + # Si l'utilisateur annule, retourner au menu principal + if [[ $? -ne 0 ]]; then + show_menu + fi + + # Récupérer les informations du compte sélectionné, en ignorant la première ligne (en-tête) + sed -i "${ACCOUNT_INDEX}d" "$CSV_FILE" + + whiptail --title "Succès" --msgbox "Le compte a été supprimé avec succès!" 10 60 + show_menu +} + +# Démarrage du script +show_menu +