You've already forked scripts-random
Compare commits
5 Commits
8aacb14e9d
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 9aa309205e | |||
| 9e0b80ab12 | |||
| 7db4c07fb2 | |||
| 98e3dfd6b7 | |||
| a3ca98ed96 |
@@ -1,5 +1,19 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
|
|
||||||
|
# Script: calculate_workhours_pc.sh
|
||||||
|
# Descripción: Este script muestra el tiempo que el sistema ha estado encendido
|
||||||
|
# entre los eventos de "reboot" (reinicio) y "shutdown" (apagado).
|
||||||
|
# Utiliza los registros de "last -x" para obtener las fechas y
|
||||||
|
# horas de los reinicios y apagados del sistema. Luego calcula
|
||||||
|
# y muestra la duración de cada sesión (el tiempo entre encendido y apagado)
|
||||||
|
# en un formato de horas, minutos y segundos. Al final, también
|
||||||
|
# muestra el tiempo total acumulado que el sistema ha estado encendido
|
||||||
|
# desde el primer reinicio.
|
||||||
|
# Author: Manuel Vergara
|
||||||
|
# Web: https://vergaracarmona.es
|
||||||
|
#
|
||||||
|
|
||||||
# Cabecera
|
# Cabecera
|
||||||
printf "%-25s %-25s %-20s\n" "Encendido" "Apagado" "Tiempo activo"
|
printf "%-25s %-25s %-20s\n" "Encendido" "Apagado" "Tiempo activo"
|
||||||
printf "%-25s %-25s %-20s\n" "----------" "--------" "--------------"
|
printf "%-25s %-25s %-20s\n" "----------" "--------" "--------------"
|
||||||
|
|||||||
202
01_bash/check_abuseipdb.sh
Normal file
202
01_bash/check_abuseipdb.sh
Normal file
@@ -0,0 +1,202 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Script: check_abuseipdb.sh
|
||||||
|
# Descripción: Este script automatiza la comprobación de direcciones IP contra
|
||||||
|
# la base de datos AbuseIPDB. Para cada IP proporcionada, el script
|
||||||
|
# obtiene información sobre su abuso potencial, utilizando la API
|
||||||
|
# de AbuseIPDB. Registra los resultados en un archivo de log.
|
||||||
|
# Además, proporciona detalles sobre el país, ISP, tipo de uso y
|
||||||
|
# categorías de ataque asociadas con la IP. Los resultados se
|
||||||
|
# clasifican como "Sospechosa" o "No sospechosa" basándose en
|
||||||
|
# el puntaje de abuso.
|
||||||
|
# Requisitos:
|
||||||
|
# - jq, curl.
|
||||||
|
# - Añadir la API key de AbuseIPDB en la variable de entorno API_KEY_ipabuse o
|
||||||
|
# introducirla al inicio del script. Conseguir API en plan individual Free:
|
||||||
|
# https://www.abuseipdb.com/pricing
|
||||||
|
# - Añadir la lista de IPs a comprobar en la variable de entorno IPS_LIST_abuseipdb
|
||||||
|
# o introducirlas al inicio del script (una IP por línea).
|
||||||
|
# Author: Manuel Vergara
|
||||||
|
# Web: https://vergaracarmona.es
|
||||||
|
#
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
# Variables de configuración
|
||||||
|
MAX_AGE_DAYS=90 # Número de días de historial a comprobar
|
||||||
|
THRESHOLD=50 # Umbral de score para considerar una IP sospechosa
|
||||||
|
SLEEP_BETWEEN=1 # Tiempo de espera entre las comprobaciones de IPs
|
||||||
|
|
||||||
|
# Colores para salida
|
||||||
|
COLOR_RED='\e[31m' # Color para mensajes de error
|
||||||
|
COLOR_GREEN='\e[32m' # Color para mensajes exitosos
|
||||||
|
COLOR_CYAN="\033[36m" # Color para mensajes informativos 1
|
||||||
|
COLOR_YELLOW='\e[33m' # Color para mensajes informativos 2
|
||||||
|
COLOR_BLUE='\e[34m' # Color para títulos y encabezados
|
||||||
|
COLOR_RESET='\e[0m' # Resetea el color al valor predeterminado
|
||||||
|
|
||||||
|
|
||||||
|
# Archivo de log (cambiar la ubicación a un directorio accesible)
|
||||||
|
LOG_FILE="./check_ips_script.log" # Cambiado a un directorio accesible para el usuario
|
||||||
|
|
||||||
|
# Función para manejar la salida con Ctrl + C
|
||||||
|
function ctrl_c() {
|
||||||
|
echo -e "${COLOR_RED}\n\n[!] Saliendo... \n${COLOR_RESET}"
|
||||||
|
tput cnorm
|
||||||
|
log_message "El script se ha detenido debido a una interrupción del usuario."
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# Configurar Ctrl+C para detener el script
|
||||||
|
trap ctrl_c SIGINT
|
||||||
|
|
||||||
|
# Función para registrar mensajes en el archivo de log
|
||||||
|
function log_message() {
|
||||||
|
local message="$1"
|
||||||
|
echo "$(date '+%Y-%m-%d %H:%M:%S') - $message" >>"$LOG_FILE"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Comprobación de dependencias necesarias
|
||||||
|
for cmd in jq curl; do
|
||||||
|
if ! command -v "$cmd" >/dev/null 2>&1; then
|
||||||
|
echo -e "${COLOR_RED}[!] Error: '$cmd' no está instalado. Instálalo y vuelve a ejecutar.${COLOR_RESET}" >&2
|
||||||
|
log_message "Error: '$cmd' no está instalado."
|
||||||
|
exit 2
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
log_message "Iniciando el script de comprobación de IPs."
|
||||||
|
|
||||||
|
# Leer API_KEY desde variable de entorno o pedir al usuario
|
||||||
|
API_KEY="${API_KEY_ipabuse:-}"
|
||||||
|
if [[ -z "$API_KEY" ]]; then
|
||||||
|
read -rp "[+] Introduce tu API key de AbuseIPDB: " API_KEY
|
||||||
|
if [[ -z "$API_KEY" ]]; then
|
||||||
|
echo -e "${COLOR_RED}[!] Error: la API key es obligatoria.${COLOR_RESET}" >&2
|
||||||
|
log_message "Error: No se proporcionó API Key."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Leer lista de IPs desde variable de entorno o pedir al usuario
|
||||||
|
IPS_LIST="${IPS_LIST_abuseipdb:-}"
|
||||||
|
if [[ -z "$IPS_LIST" ]]; then
|
||||||
|
echo -e "${COLOR_YELLOW}[+] Introduce el listado de IPs (una por línea). Finaliza con Ctrl+D:${COLOR_RESET}"
|
||||||
|
IPS_LIST="$(cat)"
|
||||||
|
if [[ -z "$IPS_LIST" ]]; then
|
||||||
|
echo -e "${COLOR_RED}[!] Error: no se proporcionaron IPs.${COLOR_RESET}" >&2
|
||||||
|
log_message "Error: No se proporcionaron IPs."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Convertir lista de IPs multilínea a array para procesar cada IP
|
||||||
|
mapfile -t iterator <<< "$IPS_LIST"
|
||||||
|
|
||||||
|
# Imprimir el título principal del script e información
|
||||||
|
echo -e "${COLOR_BLUE}\n[i] Comprobando IPs en AbuseIPDB${COLOR_RESET}"
|
||||||
|
echo -e "${COLOR_CYAN} Puedes cambiar algunos parámetros en el script:${COLOR_RESET}"
|
||||||
|
echo -e "${COLOR_CYAN} - Días de historial a comprobar: (MAX_AGE_DAYS=90)${COLOR_RESET}"
|
||||||
|
echo -e "${COLOR_CYAN} - Umbral de score para considerar una IP sospechosa: (THRESHOLD=50)\n${COLOR_RESET}"
|
||||||
|
|
||||||
|
# Procesar cada IP
|
||||||
|
for ip in "${iterator[@]}"; do
|
||||||
|
ip=$(echo "$ip" | xargs) # Eliminar espacios en blanco extra
|
||||||
|
[[ -z "$ip" ]] && continue # Saltar si la IP está vacía
|
||||||
|
|
||||||
|
echo -e "${COLOR_BLUE}[i] Checkeando IP: $ip${COLOR_RESET}"
|
||||||
|
|
||||||
|
# Hacer la solicitud a la API de AbuseIPDB
|
||||||
|
resp=$(curl -sS -G "https://api.abuseipdb.com/api/v2/check" \
|
||||||
|
--data-urlencode "ipAddress=$ip" \
|
||||||
|
--data-urlencode "maxAgeInDays=$MAX_AGE_DAYS" \
|
||||||
|
--data-urlencode "verbose=true" \
|
||||||
|
-H "Key: $API_KEY" \
|
||||||
|
-H "Accept: application/json")
|
||||||
|
|
||||||
|
# Controlar si no se obtiene respuesta de la API
|
||||||
|
if [[ -z "$resp" ]]; then
|
||||||
|
echo -e "${COLOR_RED}[!] Sin respuesta de la API.${COLOR_RESET}"
|
||||||
|
log_message "Error: No se recibió respuesta para la IP $ip."
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Verificar si hay errores en la respuesta de la API
|
||||||
|
if echo "$resp" | jq -e '.errors? != null' >/dev/null; then
|
||||||
|
echo -e "${COLOR_RED}[!] Error de API:${COLOR_RESET}"
|
||||||
|
echo "$resp" | jq '.errors'
|
||||||
|
log_message "Error de API para la IP $ip: $(echo "$resp" | jq -r '.errors')"
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Extraer datos importantes de la respuesta JSON
|
||||||
|
abuseScore=$(echo "$resp" | jq -r '.data.abuseConfidenceScore // 0')
|
||||||
|
totalReports=$(echo "$resp" | jq -r '.data.totalReports // 0')
|
||||||
|
lastReported=$(echo "$resp" | jq -r '.data.lastReportedAt // "N/A"')
|
||||||
|
country=$(echo "$resp" | jq -r '.data.countryCode // "N/A"')
|
||||||
|
isp=$(echo "$resp" | jq -r '.data.isp // "N/A"')
|
||||||
|
usage=$(echo "$resp" | jq -r '.data.usageType // "N/A"')
|
||||||
|
|
||||||
|
# Mostrar los resultados de la IP
|
||||||
|
echo -e "${COLOR_CYAN}[+] País:${COLOR_RESET} ${COLOR_YELLOW}$country${COLOR_RESET}"
|
||||||
|
echo -e "${COLOR_CYAN}[+] ISP:${COLOR_RESET} ${COLOR_YELLOW}$isp${COLOR_RESET}"
|
||||||
|
echo -e "${COLOR_CYAN}[+] Uso:${COLOR_RESET} ${COLOR_YELLOW}$usage${COLOR_RESET}"
|
||||||
|
echo -e "${COLOR_CYAN}[+] Total reportes:${COLOR_RESET} ${COLOR_YELLOW}$totalReports${COLOR_RESET}"
|
||||||
|
echo -e "${COLOR_CYAN}[+] Último reporte:${COLOR_RESET} ${COLOR_YELLOW}$lastReported${COLOR_RESET}"
|
||||||
|
|
||||||
|
if (( abuseScore >= 50 )); then
|
||||||
|
echo -e "${COLOR_CYAN}[+] Score abuso:${COLOR_RESET} ${COLOR_RED}$abuseScore${COLOR_RESET}"
|
||||||
|
else
|
||||||
|
echo -e "${COLOR_CYAN}[+] Score abuso:${COLOR_RESET} ${COLOR_GREEN}$abuseScore${COLOR_RESET}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Contar categorías de ataques reportados
|
||||||
|
if (( totalReports > 0 )); then
|
||||||
|
echo -e "${COLOR_CYAN}[+] Categorías reportadas:${COLOR_RESET}"
|
||||||
|
declare -A category_map=(
|
||||||
|
[3]="Fraude en pedidos"
|
||||||
|
[4]="Ataque DDoS"
|
||||||
|
[5]="Fuerza bruta FTP"
|
||||||
|
[6]="Ping of Death"
|
||||||
|
[7]="Phishing"
|
||||||
|
[8]="Fraude VoIP"
|
||||||
|
[9]="Proxy abierto"
|
||||||
|
[10]="Spam en web"
|
||||||
|
[11]="Spam por email"
|
||||||
|
[12]="Spam en blogs"
|
||||||
|
[13]="VPN"
|
||||||
|
[14]="Escaneo de puertos"
|
||||||
|
[15]="Hacking"
|
||||||
|
[16]="SQL Injection"
|
||||||
|
[17]="Spoofing"
|
||||||
|
[18]="Fuerza bruta"
|
||||||
|
[19]="Bot malicioso"
|
||||||
|
[20]="Host explotado"
|
||||||
|
[21]="Ataque a app web"
|
||||||
|
[22]="Acceso SSH"
|
||||||
|
[23]="Objetivo IoT"
|
||||||
|
)
|
||||||
|
|
||||||
|
# Mostrar las categorías de ataque reportadas
|
||||||
|
echo "$resp" | jq -r '.data.reports[].categories[]' | sort | uniq -c | sort -rn | while read -r count cat; do
|
||||||
|
description="${category_map[$cat]:-Desconocida}"
|
||||||
|
printf " ${COLOR_CYAN}[+] %-20s ${COLOR_RESET} ${COLOR_YELLOW}%s veces${COLOR_RESET}\n" "$description:" "$count"
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Evaluar si la IP es sospechosa en base al score
|
||||||
|
if (( abuseScore >= THRESHOLD )); then
|
||||||
|
echo -e "${COLOR_RED}\n🔴 Resultado: La IP $ip es SOSPECHOSA (score $abuseScore >= $THRESHOLD)${COLOR_RESET}"
|
||||||
|
log_message "IP: $ip - Resultado: SOSPECHOSA (score $abuseScore >= $THRESHOLD)"
|
||||||
|
else
|
||||||
|
echo -e "${COLOR_GREEN}\n🟢 Resultado: La IP $ip no es sospechosa (score $abuseScore < $THRESHOLD)${COLOR_RESET}"
|
||||||
|
log_message "IP: $ip - Resultado: OK / No sospechosa (score $abuseScore < $THRESHOLD)"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo
|
||||||
|
sleep "$SLEEP_BETWEEN" # Pausar entre cada consulta de IP
|
||||||
|
done
|
||||||
|
|
||||||
|
# Mensaje final de éxito
|
||||||
|
echo -e "${COLOR_BLUE}[i] Comprobación finalizada\n${COLOR_RESET}"
|
||||||
|
log_message "El script se ejecutó correctamente."
|
||||||
59
01_bash/ping_loop.sh
Normal file
59
01_bash/ping_loop.sh
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# ======================= #
|
||||||
|
# 🎯 Colores personalizados
|
||||||
|
# ======================= #
|
||||||
|
RED='\033[1;91m'
|
||||||
|
GREEN='\033[1;92m'
|
||||||
|
CYAN='\033[1;96m'
|
||||||
|
YELLOW='\033[1;93m'
|
||||||
|
MAGENTA='\033[1;95m'
|
||||||
|
BOLD='\033[1m'
|
||||||
|
NC='\033[0m' # Sin color
|
||||||
|
|
||||||
|
# ======================= #
|
||||||
|
# 👋 Función al salir
|
||||||
|
# ======================= #
|
||||||
|
function despedida() {
|
||||||
|
echo -e "\n${MAGENTA}${BOLD}👋 Gracias por usar el script. ¡Hasta luego!${NC}"
|
||||||
|
exit 0
|
||||||
|
}
|
||||||
|
|
||||||
|
# Capturar Ctrl + C
|
||||||
|
trap despedida SIGINT
|
||||||
|
|
||||||
|
# ======================= #
|
||||||
|
# 🖥️ Título del script
|
||||||
|
# ======================= #
|
||||||
|
echo -e "${CYAN}${BOLD}=============================="
|
||||||
|
echo -e " PING LOOP SCRIPT"
|
||||||
|
echo -e "==============================${NC}"
|
||||||
|
|
||||||
|
# ======================= #
|
||||||
|
# 🔧 Solicitar parámetros
|
||||||
|
# ======================= #
|
||||||
|
read -p "$(echo -e "${YELLOW}${BOLD}🌐 Introduce la web o IP a hacer ping: ${NC}")" destino
|
||||||
|
read -p "$(echo -e "${YELLOW}${BOLD}⏱️ Intervalo entre intentos fallidos (en segundos): ${NC}")" intervalo
|
||||||
|
|
||||||
|
# ======================= #
|
||||||
|
# 🔁 Bucle de ping
|
||||||
|
# ======================= #
|
||||||
|
contador=0
|
||||||
|
|
||||||
|
while true; do
|
||||||
|
((contador++))
|
||||||
|
timestamp=$(date '+%Y-%m-%d %H:%M:%S')
|
||||||
|
salida_ping=$(ping -c1 -W1 -w5 "$destino" 2>&1)
|
||||||
|
|
||||||
|
if echo "$salida_ping" | grep -q 'time='; then
|
||||||
|
rtt=$(echo "$salida_ping" | sed -n 's/.*time=\([0-9.]* ms\).*/\1/p')
|
||||||
|
echo -e "${GREEN}${BOLD}[✓] Intento $contador - $timestamp - Respuesta de $destino: $rtt${NC}"
|
||||||
|
break
|
||||||
|
else
|
||||||
|
echo -e "${RED}${BOLD}[✗] Intento $contador - $timestamp - Sin respuesta de $destino${NC}"
|
||||||
|
sleep "$intervalo"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# Mensaje final (en caso de salir por éxito)
|
||||||
|
despedida
|
||||||
28
02_perl/pregunta.pl
Normal file
28
02_perl/pregunta.pl
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
#!/usr/bin/perl
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
|
||||||
|
# Mostrar el nombre de usuario
|
||||||
|
print "Hola ", `whoami`;
|
||||||
|
|
||||||
|
# Bucle infinito
|
||||||
|
while (1) {
|
||||||
|
# Leer la respuesta del usuario
|
||||||
|
print "dime si o no (s/n) ";
|
||||||
|
my $respuesta = <STDIN>;
|
||||||
|
chomp($respuesta); # Eliminar el salto de línea
|
||||||
|
|
||||||
|
# Evaluar la respuesta
|
||||||
|
if ($respuesta =~ /^[sS]$/) {
|
||||||
|
print "La respuesta es sí\n";
|
||||||
|
last; # Salir del bucle
|
||||||
|
}
|
||||||
|
elsif ($respuesta =~ /^[nN]$/) {
|
||||||
|
print "La respuesta es No\n";
|
||||||
|
exit; # Salir del script
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
print "Que me estas container\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user