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)
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.
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:
#!/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.
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...
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.
===============================================
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...
#!/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)...
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...
#!/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º.
#!/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 ?