Página 1 de 1

Re: Scripts para nuestras distribuciones Raspberry

Publicado: 07 May 2017, 10:17
por r.jimsor
Gracias por el hilo, a los novatos nos vendrá de perlas.

Re: Scripts para nuestras distribuciones Raspberry

Publicado: 07 May 2017, 20:48
por javierparefron
Hola, muy intersante y seguro que irá muy bien, me podeis pasar algún sitio donde pueda informarme como introducir scripts en recalbox, soy novato y tengo el montaje del ventilador con el transistor pero no sé como introducir el script, gracias.

Re: Scripts para nuestras distribuciones Raspberry

Publicado: 08 May 2017, 10:00
por Pirossi
Muy bueno este post!
Os aporto mi granito de arena esta vez con un test de velocidad(benchmark)
No confundir con (stresstest)
Velocidad de escritura y lectura , velocidad de cpu, frecuencias y temperatura de los componentes, velocidad de internet..

Foto del script sacada de la pagina oficial (no es mia la captura)

Imagen

Link al proyecto:
https://github.com/aikoncwd/rpi-benchmark
Creador:Aikoncwd
Pagina:Github
El script hace uso de sysbench, lo autoinstala automaticamente al iniciar el script.

Aqui la descarga directa:
https://github.com/aikoncwd/rpi-benchma ... master.zip

Pd: probado en retropie, funciona muy bien, sobre todo si as echo overclock y quieres ver que es lo que as ganado en rendimiento real.

Re: Scripts para nuestras distribuciones Raspberry

Publicado: 08 May 2017, 11:02
por HristO_O
buen trabajo!! habra que probarlo cuando me llegue!!! un saludo!

Re: Scripts para nuestras distribuciones Raspberry

Publicado: 09 May 2017, 19:57
por cpa
Me suscribo al tema. A ver si saco un rato y subo alguno interesante...

;-)

Re: Scripts para nuestras distribuciones Raspberry

Publicado: 10 May 2017, 21:14
por Heraser
Otro que usa Aikoncwd en su distribución es el bcmstat.sh

Lo he usado en mi raspberry pi 3 y me encanta!

Lo podeis echar un vistazo en el gith de Aikoncwd o en el del creador:
https://github.com/MilhouseVH/bcmstat

Descargar en releases o aquí:
https://github.com/MilhouseVH/bcmstat/archive/0.4.4.zip

Re: Scripts para nuestras distribuciones Raspberry

Publicado: 10 May 2017, 23:41
por Kike
Muy buena idea @Drakkar , se avecina un gran derroche de ingenio y creatividad :relax1

Aquí dejo un simple código que utilizo para hacer copias de seguridad diarias de MySQL (en combinación junto crontab)

Código: Seleccionar todo

FILE=NOMBREARCHIVOBACKUP.sql.`date +"%Y%m%d"`
DBSERVER=127.0.0.1
DATABASE=NOMBREBASEDATOS
USER=NOMBREUSUARIO
PASS=CONTRASEÑA


unalias rm     2> /dev/null
rm ${FILE}     2> /dev/null
rm ${FILE}.gz  2> /dev/null

mysqldump --opt --user=${USER} --password=${PASS} ${DATABASE} > ${FILE}


gzip $FILE


echo "${FILE}.gz se ha creado:"
ls -l ${FILE}.gz
Iré subiendo todo lo que tenga a mano, vamos todos a sacar artillería pesada!

Re: Scripts para nuestras distribuciones Raspberry

Publicado: 14 May 2017, 14:26
por cpa
Aquí dejo un script que lo que hace es recorrer las carpetas desde el directorio actual y si encuentra algún paquete rar comprimido con contraseña de los de newpct1, accede a la url (que se encuentra en el fichero "CONTRASEÑA PARA DESCOMPRIMIR.txt"), recupera la contraseña y descomprime el rar.

Es necesario disponer de python3, y de la extensión rar file, que se instala:

$ sudo python3 pip install rarfile

=> newpct1_descomp.py

Código: Seleccionar todo

#!/usr/bin/python3


import urllib.request, re, sys, os, rarfile
from os.path import join

def procesa(path,file):
    print("Procesando el directorio {}".format(path))

    url = None
    # Capturamos la url donde está la contraseña
    for line in file:
        if re.match('http', line):
            url = (line[:-1])
    file.close()

    if not url:
        return -1

    # Añadimos la marca de pausa para que SickRage no procese
    with open((path) + '/pause.!sync', 'w') as f:
        print('pausado para evitar postprocesing en SickRage', file=f)


    # Entramos en la url y capturamos la contraseña
    regex = re.compile('name="txt_password" value="(.+?)"')
    html = urllib.request.urlopen(url)
    htmltext = html.read()
    password = regex.findall(str(htmltext))[0]
    print ("Capturada contraseña: {}".format(password))

    # Con la contraseña, ahora ya intentamos descomprimir
    try:
        source_filename = [f for f in os.listdir(path) if f.endswith('.rar')][0]
    except:  # No hay un rar. Ya estará descomprimido o su contenido es incompleto/incorrecto
        print ("Hay contraseña, pero no hay comprimido")
    else:
        source = join(path, source_filename)
        with rarfile.RarFile(source) as rf:
            rf.extractall((path), pwd=(password))

        # Una vez descomprimidos, borramos el rar y la pausa
        os.remove(source)
        os.remove((path) + '/pause.!sync')



FILE_LINK = '/CONTRASEÑA PARA DESCOMPRIMIR.txt'

for path in next(os.walk('.'))[1]: # Por cada directorio en el actual
    try:
        file = open(path+FILE_LINK, 'r', errors='ignore')
    except IOError:
        print("Analizado el directorio {}".format(path))
        print("=> Directorio sin contraseña")
    else:
        procesa(path,file)

Re: Scripts para nuestras distribuciones Raspberry

Publicado: 14 May 2017, 15:10
por cpa
Drakkar escribió:Script añadido al post principal. Muchas gracias @cpa . Esto va a ser de mucha utilidad.
Está basado en un script de un usario de Kodimania:
https://www.kodimania.com/viewtopic.php?p=66282#p66282

Lo que pasa es que yo no uso Transmission y me gusta ejecutarlo a mano, así que lo adapté a mis necesidades.

Una cosa, es un script de python, y las tabulaciones son muy importantes. Veo que en el spoiler del principal, el código aparece centrado. Si se copia así, no va a funcionar... Debería mantener la identación del que he colgado yo... :guiño2

Re: Scripts para nuestras distribuciones Raspberry

Publicado: 14 May 2017, 15:39
por cpa
Aquí pongo otro de los que uso... Sirve para controlar los ataques que recibe nuestro servidor SSH expuesto a internet.
Lo uso, entre otras cosas, para controlar que el fail2ban está funcionando correctamente...

¿Qué hace?:
=> Revisa el fichero /var/log/auth.log filtrando los mensajes SSH de ataques y los saca por pantalla. Para finalizar, también nos saca los ban y unban del fail2ban.log.

Aquí podéis ver un ejemplo real de salida:

Código: Seleccionar todo

===============================================
Auth log =>
May 14 14:48:37 raspita sshd[12482]: Invalid user ts3 from 94.102.31.50
May 14 14:48:37 raspita sshd[12482]: Disconnecting: Too many authentication failures for invalid user ts3 from 94.102.31.50 port 40381 ssh2 [preauth]
May 14 14:53:02 raspita sshd[14597]: Invalid user ts3 from 94.102.31.50
May 14 14:53:02 raspita sshd[14597]: Disconnecting: Too many authentication failures for invalid user ts3 from 94.102.31.50 port 34881 ssh2 [preauth]
May 14 14:57:22 raspita sshd[16620]: Invalid user ts3 from 94.102.31.50
May 14 14:57:22 raspita sshd[16620]: Disconnecting: Too many authentication failures for invalid user ts3 from 94.102.31.50 port 50129 ssh2 [preauth]
May 14 15:01:46 raspita sshd[18838]: Invalid user ts3user from 94.102.31.50
May 14 15:01:46 raspita sshd[18838]: Disconnecting: Too many authentication failures for invalid user ts3user from 94.102.31.50 port 55282 ssh2 [preauth]
May 14 15:06:14 raspita sshd[20955]: Invalid user ts3user from 94.102.31.50
May 14 15:06:15 raspita sshd[20955]: Disconnecting: Too many authentication failures for invalid user ts3user from 94.102.31.50 port 59924 ssh2 [preauth]
===============================================
Fail2ban log =>
2017-05-14 14:45:50,583 fail2ban.actions[23816]: WARNING [ssh] Unban 94.102.31.50
2017-05-14 15:06:15,139 fail2ban.actions[23816]: WARNING [ssh] Ban 94.102.31.50
Como podéis ver, estoy recibiendo un ataque real desde la ip 94.102.31.50. Ya llevo varios días sufriéndolo. A demás es más preocupante cuando mi servidor SSH está en un puerto totalmente diferente al habitual (no lo tengo en el 22). Por defecto, en el fail2ban lo tengo que se banee al quinto intento, y por lo que se puede ver en la salida, está funcionando. Pasadas 10 horas desbaeno la IP, pero vuelve a intentarlo... Así puedo pensarme si dejar baneado permanentemente esa IP o intentar denunciarla...

Al final veo como el fail2ban desbaneó la IP a las 14:45, y el primer ataque tras el desbaneo es de las 14:48. A las 15:06 se ha vuelto a banear. Quedará baneado hasta las 01:06 de esta madrugada. Mañana volveré a revisar cómo va el tema...
:idea:

Sin más preámbulos, aquí va el fichero python que lo controla...

python_ssh_attack.py

Código: Seleccionar todo

#!/usr/bin/python3


""" Queremos sacar las lineas que:
# Sean sshd, y tengan:
       * "Bad protocol version"
       * "Did not receive identification"
       * "Invalid user"
       * "Disconnecting:"
"""


def todosobligatoriamente(*f_condicional):
    def funcion_contenedor(*argv, **kargvs):
        for c in f_condicional:  # para todas las funciones en la composición condicional
            if not c(*argv, **kargvs):  # si no es verdadera
                return False  # devolvemos inmediatamente falso
        return True  # si hemos recorrido todas (son todas verdaderas), ahora se devuelve

    return funcion_contenedor  # verdadero, ya que TODAS han cumplido la condición.


def cualquieradeellas(*f_condicional):
    def funcion_contenedor(*argv, **kargvs):
        for c in f_condicional:  # para todas las funciones en la composición condicional
            if c(*argv, **kargvs):  # si una es verdadera
                return True  # devolvemos inmediatamente verdadero
        return False  # si hemos recorrido todas (ergo son todas falsas), ahora se devuelve falso

    return funcion_contenedor  # ya que NINGUNA han cumplido la condición.


def algunaverdadera(*condiciones):
    def funcion(*args, **kwargs):
        for c in condiciones:
            if c(*args, **kwargs):
                return True
        return False

    return funcion


def contiene_palabra(palabra):
    def funcion_contenedor(word):
        return palabra.lower() in word.lower()

    return funcion_contenedor

print("===============================================")
print("Auth log =>")

obligatorias = ["sshd", "from"]
opcionales = ["Disconnecting", "Invalid user", "Bad protocol version", "Did not receive identification"]

or_list = cualquieradeellas(*[contiene_palabra(o) for o in opcionales])
and_list = todosobligatoriamente(or_list, *[contiene_palabra(o) for o in obligatorias])

try:
    fh = open("/var/log/auth.log", "r")
    for l in fh:
        if and_list(l):
            print(l,end="")
except Exception:
    print("Problema al abrir el archivo /var/log/auth.log")
    print("¿Tienes permisos?")
  
print("===============================================")
print("Fail2ban log =>")

and_list = contiene_palabra("ban")

try:
    fh = open("/var/log/fail2ban.log", "r")
    for l in fh:
        if and_list(l):
            print(l,end="")
except Exception:
    print("Problema al abrir el archivo /var/log/auth.log")
    print("¿Tienes permisos?")
Por defecto, el fichero auth.log lo puede visualizar cualquiera, pero el contenido del fail2ban.log no, así que es necesario ejecutarlo o bien desde root o bien con un sudo. Para facilitarme esta tarea, he creado un sh asociado que lo que hace es ejecutar un sudo del código python... (vago que es uno)...

ssh_attack.sh

Código: Seleccionar todo

#!/bin/bash
sudo /home/pi/dev/python/python_ssh_attack.py
Deberéis adaptar la ruta donde tengáis el python_ssh_attack.py guardado. Este ssh_attack.sh yo lo tengo guardado en /usr/bin (dentro del path del root), así que haciendo un ssh_ y luego un tab, se me rellena el nombre del script y lo puedo ejecutar rápidamente...

Espero que os sea útil.

Re: Scripts para nuestras distribuciones Raspberry

Publicado: 16 May 2017, 16:13
por cpa
Aquí traigo otro que hice ayer para un compañero del grupo de Telegram. Se trata de un script que lo que hace es formatear los nombres de los ficheros (generalmente multimedia) que vienen sin espacios pero diferenciados con minúsculas y mayúsculas. Es decir, imaginemos un fichero con este nombre:

"NombreDePelicula.mkv"

Pues bien, este script lo que hace es convertirlo a "Nombre De Pelicula.MKV"

El comando sería:
RenombraFiles <fichero> [-f]

El -f sirve para forzar al cambio de nombre sin preguntar. Se puede usar enlazado con un for para recorrer todos los ficheros de un directorio. Por ejemplo:
ficheros in *.mkv; do RenombraFiles.py "$ficheros"; done

Hay más detalles en el propio script. Espero que os sea útil. También lo podéis usar como base para adaptarlo a vuestras necesidades...

Código: Seleccionar todo

#!/usr/bin/python2
# -*- coding: utf-8 -*-

import sys,os

if len(sys.argv) < 2 or len(sys.argv) >3 or sys.argv[1]=="-t":
    print("""
    Uso: {0} <nombre fichero> [-f]

    El uso de esta herramienta te permite formatear el nombre del fichero de tal forma que introduzca espacios entre
    cada palabra teniendo en cuenta las mayúsculas.
    Así, un fichero del tipo NombreDePelícula.mkv se convertirá en Nombre De Película.mkv.
    
    Con el parámetro -f forzamos al renombrado sin preguntar. Este parámetro debe ir obligatoriamente al final.

    Sugerencia. Puedes pasar el contenido de todos los ficheros de un directorio con un for. Por ejemplo:
    for ficheros in *.mkv; do RenombraFiles.py "$ficheros"; done
    
    Nota: Si los ficheros ya incluyen algun espacio, estos serán ignorados. Se deberá llamar a la aplicación con "":
    {0} "FicheroAFormatear Yacon Espacios.txt"
    """.format(sys.argv[0]))
    exit(0)

oldname = sys.argv[1]


for letra in oldname:
    newname = ""
    punto=False
    for i, letra in enumerate(oldname):
        if i == 0 or punto:  # primera letra o ya hemos llegado al punto
            newname += letra.upper()  # añadimos directamente en mayúsculas
        else:
            if letra == " ":  # es un espacio
                pass  # lo ignoramos
            elif letra.islower():  # la añadimos sin más comprobación
                newname += letra
            elif letra == ".":       # hemos llegado al punto
                punto=True
                newname += letra
            else:  # es mayúsculas u otra cosa
                if oldname[i - 1].isupper() and not oldname[
                            i + 1].islower():  # si la anterior ya era mayúscula, la añadimos sin espacio
                    # salvo que la siguiente sea minúscula

                    newname += letra
                else:  # si no, es que tenemos que partir la oldname y le añadimos un espacio
                    newname += " " + letra
print("El fichero se convertirá de {} a {}".format(oldname, newname))

o="x"
if len(sys.argv)==3:
    if sys.argv[2]=="-f" or sys.argv[2]=="-F":
        o="s"

while o not in "sSnN":
    o = raw_input("¿Renombramos? (s/n): ")

if o in "sS":
    try:
        os.rename(oldname,newname)
    except:
        print("Problema al renombrar !!!")
        print("< <  OMITIMOS > >")
    else:
        print("==> DONE!! ")
else:
    print("< <  OMITIMOS > >")

Re: Scripts para nuestras distribuciones Raspberry

Publicado: 20 May 2017, 20:26
por rockero_79
Muy útil el tema. Gracias

Enviado desde mi MI 5s mediante Tapatalk

Re: Scripts para nuestras distribuciones Raspberry

Publicado: 31 May 2017, 18:39
por cpa
Aquí traigo otro script. Se trata de una pequeña modificación de otro script solicitada por un compañero del grupo de Telegram. Básicamente lo que hace es encender el ventilador cuando llega a una temperatura máxima configurable, y no se apaga hasta que retorna a una temperatura de rebote también configurable.

Podemos poner que se encienda a los 45º y que no se apague hasta que no retorne nuevamente a los 40º.

Aquí lo tenéis:

Código: Seleccionar todo

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Author: Edoardo Paolo Scalafiotti <edoardo849@gmail.com>
# Modificado por: CpA - Raspito's Family

import os
from time import sleep
import signal
import sys
import RPi.GPIO as GPIO

pin = 18  # The pin ID, edit here to change it
maxTMP = 45  # Temperatura máxima donde arrancará el ventilador
freshTMP = 40  # Temperatura de rebote, donde se apagará el ventilador


def setup():
    GPIO.setmode(GPIO.BCM)
    GPIO.setup(pin, GPIO.OUT)
    GPIO.setwarnings(False)
    return ()


def getCPUtemperature():
    res = os.popen('vcgencmd measure_temp').readline()
    temp = (res.replace("temp=", "").replace("'C\n", ""))
    # print(“temp is {0}”.format(temp)) #Uncomment here for testing
    return temp


def fanON():
    setPin(True)
    return ()


def fanOFF():
    setPin(False)
    return ()


def getTEMP(switch):
    CPU_temp = float(getCPUtemperature())
    # La temperatura alcanza MaxTemp
    if CPU_temp > maxTMP and not switch:
        fanON()
        return True
    # La temperatura es menor de MaxTMP, y menor de feshTMP, pero está encendido
    elif switch and CPU_temp < freshTMP:
        fanOFF()
        return False
    # Si el ventilador está encendido
    elif switch:
        return True
    else:
        return False


def setPin(mode):  
    GPIO.output(pin, mode)
    return ()


try:
    setup()
    ventilador_on = False
    while True:
        ventilador_on = getTEMP(ventilador_on)
        sleep(5)  # Read the temperature every 5 sec, increase or decrease this limit if you want
except KeyboardInterrupt:  # trap a CTRL+C keyboard interrupt
    GPIO.cleanup()  # resets all GPIO ports used by this program

Re: Scripts para nuestras distribuciones Raspberry

Publicado: 10 Jun 2017, 07:10
por rbcheca
Para hacer una imagen de la sd desde la raspberry y copiarla a un pendrive/disco duro.
#!/usr/bin/python3

import os
import time

# Desmontamos las particiones de la tarjeta sd
os.system('sudo umount /dev/mmcblk0p1 && sudo umount /dev/mmcblk0p2')

time.sleep(20)

# Hace una imagen de la sd y la copia al destino que elijamos
os.system('sudo pv /dev/mmcblk0 | dd bs=1M of="Ruta de la imagen"')
Yo lo tengo puesto para que me haga una copia una vez a la semana y me borre la anterior
Me lo chivó fpaez.com

Re: Scripts para nuestras distribuciones Raspberry

Publicado: 12 Jun 2017, 10:56
por cpa
rbcheca escribió:Para hacer una imagen de la sd desde la raspberry y copiarla a un pendrive/disco duro.
#!/usr/bin/python3

import os
import time

# Desmontamos las particiones de la tarjeta sd
os.system('sudo umount /dev/mmcblk0p1 && sudo umount /dev/mmcblk0p2')

time.sleep(20)

# Hace una imagen de la sd y la copia al destino que elijamos
os.system('sudo pv /dev/mmcblk0 | dd bs=1M of="Ruta de la imagen"')
Yo lo tengo puesto para que me haga una copia una vez a la semana y me borre la anterior
Me lo chivó fpaez.com
Uy uy uy!, pero esto te tumba el sistema. Luego que haces, ¿reinicias?...

Re: Scripts para nuestras distribuciones Raspberry

Publicado: 12 Jun 2017, 12:22
por rbcheca
Si te digo la verdad me has pillado, pero....
Debe ser que no te lo tumba, he lanzado el script y mientras hacia la copia me he puesto a ver una peli con kodi y ningún problema, he hecho alguna otra prueba como acceder a las carpetas con WinSCP, crear carpetas etc, y todo bien, vamos que no se ha notado nada.
Luego ni reinicio ni nada, lo tengo puesto de madrugada y ni noto que hace la copia.
En su día también lo pensé, que si te desmonta las particiones se tumba el sistema pero debe ser que no, reconozco que es algo que se escapa a mis conocimientos escasos de linux :)

Re: Scripts para nuestras distribuciones Raspberry

Publicado: 12 Jun 2017, 15:23
por cpa
Pues seguramente es porque no desmonta las unidades (no tiene el -f)...
¿has probado a recuperar una de las copias?...

No sé, yo este script lo veo un poco... "débil". A demás, no entiendo porqué usar Python para eso, si con un bash script es más que suficiente...

Re: Scripts para nuestras distribuciones Raspberry

Publicado: 13 Jun 2017, 21:08
por rbcheca
cpa escribió:Pues seguramente es porque no desmonta las unidades (no tiene el -f)...
¿has probado a recuperar una de las copias?...

No sé, yo este script lo veo un poco... "débil". A demás, no entiendo porqué usar Python para eso, si con un bash script es más que suficiente...
Pues creo que tienes razón, he ejecutado sudo pv /dev/mmcblk0 | dd bs=1M of="Ruta de la imagen"
y me ha creado la imagen, sin desmontar nada, esta imagen no la he recuperado así que no se, pero con el script completo si que he recuperado y me ha salvado el culo un par de veces.
La verdad que esto me supera, pero seguiré usándolo, ya sabes, si algo funciona, no lo toques... :victoria

Re: Scripts para nuestras distribuciones Raspberry

Publicado: 02 Sep 2019, 19:21
por 123 y 4
Hola a todos,
Perdonar mi ignorancia.
¿ Un script puede escribir en la EEPROM de la Raspberry Pi 4 ?