Script para traducir textos desde la linea de comandos

Script para traducir textos desde linea de comandos
Script para traducir textos desde linea de comandos

Un script muy sencillo que nos permitira si queremos utilizar traducción instantaneo en nuestros pequeños programas de bash. Basicamente se hace uso de Google Translate Ajax API y de “curl” para hacer una petición HTTP con los parametros adecuados y se analiza la respuesta recibida, los parametros son el idioma “origen”, el idioma “destino” y el string que queremos traducir.

#!/usr/bin/env bash
#  gtranslate.sh
#  Translate using Google Translate Ajax API:
#  http://ajax.googleapis.com/ajax/services/language/translate?v=1.0 \
#  &langpair=en|es&q=hello+world
#  More Info: http://code.google.com/apis/ajaxlanguage/documentation/
#  ksaver (at identi.ca), March 2010.
#  Licence: Public Domain Code.

progname=$(basename $0)

if [ -z "$3" ]
then
	echo -e "Usage:   $progname lang1 lang2 'string of words to translate...'"
	echo -e "Example: $progname en es 'Hello World!'\n"
	exit
fi

FROM="$1"
TO="$2"

# Google Translate Ajax API Url
TRANSURL='http://ajax.googleapis.com/ajax/services/language/translate?v=1.0'
LANGPAIR="$FROM|$TO"
shift 2

# Parse string to translate, change ' ' to '+'
# STRING: String to translate.
STRING="$@"
PSTRING=$(echo "$STRING" |tr ' ' '+')

# Get translation
RESPONSE=$(/usr/bin/env curl -s -A Mozilla \
		$TRANSURL'&langpair='$LANGPAIR'&q='$PSTRING)

echo -n "$progname> "
# Parse and clean response, to show only translation.
echo "$RESPONSE" |cut -d ':' -f 3 |cut -d '}' -f 1

Como luchar contra el SPAM en Plesk con Qmail

Primero compruebe que todos los dominios tienen la opción ‘Correo para usuario inexistente’ definida a ‘Rechazar’ pero no a reenviar. Puede cambiar este ajuste para todos los dominios usando “Operaciones en Grupo” en la página “Dominios” del CP de Parallels Plesk Panel. La prestación ‘Rechazar correo para usuario inexistente’ está disponible a partir de Parallels Plesk Panel 7.5.3.

Asimismo, compruebe que todas las redes e IPs incluidas en la lista blanca son de su confianza.

Compruebe cuántos mensajes hay en la cola de Qmail con:

# /var/qmail/bin/qmail-qstat
messages in queue: 27645
messages in queue but not yet preprocessed: 82

Si la cola tiene demasiados mensajes, intente descubrir la procedencia del SPAM.

Si el correo está siendo enviado por un usuario autorizado pero no desde el script PHP, puede ejecutar el comando que aparece a continuación para descubrir el usuario que envió la mayoría de mensajes (desde Plesk 8). Tenga en cuenta que es necesario tener activada la opción ‘Autorización SMTP’ en el servidor para poder ver estos registros:

# cat /usr/local/psa/var/log/maillog |grep -I smtp_auth |grep -I user |awk ‘{print $11}’ |sort |uniq -c |sort -n

La ruta a ‘maillog’ puede cambiar en función del SO que esté usando.

El próximo paso es la utilidad `qmail-qread`, que puede usarse para leer las cabeceras de los mensajes:

# /var/qmail/bin/qmail-qread
18 Jul 2005 15:03:07 GMT #2996948 9073 bouncing
done remote user1@domain1.com
done remote user2@domain2.com
done remote user3@domain3.com
….

Esta muestra los remitentes y destinatarios de los mensajes. Si el mensaje incluye demasiados destinatarios, probablemente se tratará de SPAM. Ahora intente encontrar este mensaje en la cola por su ID #2996948:

# find /var/qmail/queue/mess/ -name 2996948

examine el mensaje y encuentre la primera línea “Recibido” para saber desde dónde se envió la primera vez, por ejemplo, si encuentra:

Received: (qmail 19514 invoked by uid 10003); 13 Sep 2005 17:48:22 +0700

Significa que este mensaje fue enviado a través de algún CGI por el usuario con UID 10003. Usando este UID puede encontrar el dominio correspondiente:

# grep 10003 /etc/passwd 

Si la línea ‘Recibido’ contiene un UID de un usuario ‘apache’ (por ejemplo “invoked by uid 48″) – significa que el SPAM fue enviado a través de algún script PHP. En este caso, puede intentar conocer el spammer usando la información de los correos spam (direcciones de/para, asunto o cualquier otro dato). Generalmente es muy difícil descubrir la fuente de SPAM. Si está completamente seguro de que en este momento hay algún script enviando SPAM (la cola crece rápidamente sin motivo aparente), puede usar el siguiente script para saber qué scripts PHP se están ejecutando en este momento:

# lsof +r 1 -p `ps axww | grep httpd | grep -v grep | awk ‘ { if(!str) { str=$1 } else { str=str”,”$1}}END{print str}’` | grep vhosts | grep php

También puede aplicar el artículo 1711, que describe el procedimiento para conocer desde qué dominios se está enviando el correo a través de scripts PHP.

Líneas recibidas como:

Received: (qmail 19622 invoked from network); 13 Sep 2005 17:52:36 +0700
Received: from external_domain.com (192.168.0.1)

significan que el mensaje ha sido aceptado y entregado a través de SMTP y que el remitente es un usuario de correo autorizado.

Como defragmentar una partición XFS

Lamentablemente, no todo es color de rosa con XFS y por lo tanto, habrá que defragmentarlo. Si bien no es como defragmentar NTFS en Windows, es algo que tenemos que tener en cuenta para evitar que el sistema “se pete o casque el disco duro.” A no desilusionarse, no es nada complicado.

Quiero decir, antes que nada, que ésto es meramente una tarea de mantenimiento simple en cualquier sistema o servidor web y no es una contra importante como para no utilizar el sistema XFS. De cualquier manera, sepan que es una tarea simple y fácil de hacer.

Lo primero es tener instalado xfsdump:

  • Para instalar xfsdump en sistemas Debian usamos:
apt-get install xfsdump
yum install xfsdump

Ahora vamos a ver cuantas de nuestras particiones deben ser defragmentadas:

xfs_db -r /dev/PARTICION

se abrirá un prompt, ahí debemos escribir:

frag

Nos indicara el porcentaje de framgentación del sistema de archivos XFS. Por la red se dice que cuando alcance el 10% debe ser defragmentado. Yo he defragmentado sistemas con un 6% y tardó un poco, supongo que debe depender de las caracterísiticas del equipo.

No es algo complicado, pero recomiendo hacerlo todo modo mono-usuario (runlevel 1) (recovery mode, se selecciona al arranque.)

Ahora sí, pasamos a defragmentar (suponiendo que lo necesitamos):

xfs_fsr -v /dev/PARTICION 

Recordad que en PARTICION irá nuestra partición en cuestión: hda1, sda2, etc.
Eso es todo, nada complicado. A no preocuparse, no tarda lo mismo que Windows y depende de nuestro equipo y porcentaje de fragmentación.

Recuperar o quitar la password de Windows utilizando chntpw en Linux/Ubuntu

Recuperar una contraseña de windows utilizando Ubuntu y programa llamado chntpw.
NOTA: Si deseas usar este método y no tienes instalado Ubuntu, puedes utilizar una versión “live CD” de Ubuntu y desde allí usar chntpw.

Chntpw (acrónimo de Change NT Password) es un programa que nos permite quitar o modificar las contraseñas de usuario de los sistemas Windows NT, 2k, XP, Vista y Win7 accediendo al sistema de ficheros desde un sistema Linux.

Vamos a instalarlo:

  1. Abrimos una Terminal (Aplicaciones->Accesorios->Terminal).
  2. Instalamos el paquete del programa:
    sudo apt-get install chntpw

Ahora para usarlo haremos lo siguiente:

  1. A través de la Terminal navegamos hasta la carpeta donde se almacena el fichero con las contraseñas (en casi todos los Windows es “C:/WINDOWS/system32/config”). Para ello, en Ubuntu, haremos:
    NOTA: Debemos asegurarnos antes de que la partición está montada (por ejemplo accediendo a ella desde Nautilus).

    cd /media/NOMBRE-DE-LA-PARTICION/WINDOWS/system32/config

    Donde NOMBRE-DE-LA-PARTICION es el nombre de la partición donde se encuentra instalado el Windows.

  2. Ahora crackeamos el fichero que almacena la contraseñas (normalmente se llama SAM) de la siguiente manera:
    • Si queremos quitar o modificar la contraseña al usuario administrador:
      chntpw SAM
    • Si queremos quitar o modificar la contraseña a cualquier usuario en concreto:
      chntpw -u USUARIO SAM

      Donde USUARIO es el nombre del usuario cuya contraseña deseamos liberar.

  3. Tras ejecutar el comando de crackeo nos aparecerá un menú con 5 opciones. Si queremos borrar la contraseña elegimos la opción 1 y damos a [ENTER]. Si queremos modificar la contraseña elegiremos la opción 2 y damos a [ENTER].

Espero que el programa se a de utilidad como la ha sido para mi ya que en mi trabajo me ha tocado que rescatar varias maquinas con esta aplicacion.

Redireccionar puertos en Linux usando SSH

En algunas ocasiones necesitamos acceder a algún servicio o aplicación que usa un puerto diferente al que por defecto tenemos permitido.

Imaginemos que estamos usando en nuestro trabajo nuestro portatil con Ubuntu y queremos actualizar repositorios o usar facebook, messenguer, etc … Estos servicios usan un puerto determinado que en principio si no podemos usar directamente se debe a la existencia en la red de un firewall que esta capando un puerto determiando.

Pues bien utilizando SSH , nos enseñana como podremos crear un tunel sobre dicho servidor externo y evitar el firewall, usando nuestra máquina como servidor local y redireccionando todas las salidas sobre el puerto especificado, es bastante sencillo y nos saltaremos el cortafuegos gustosamente:

El ejemplo que vamos a utilizar es el saltarnos un firewall, en nuestra red que capa el puerto que utiliza ubuntu para actualizar unos repositorios en un host concreeto.

Imaginemos que deseaba agregar el repositorio UbuntuGis para instalar algunos paquetes del mismo (Grass y Quantum GIS entre otros), pero al añadirlo:

sudo add-apt-repository ppa:ubuntugis/ppa

Si hay un firewal en la red que capa dicho puerto obtendriamos el siguiente error::
Executing: gpg –ignore-time-conflict –no-options –no-default-keyring –secret-keyring /etc/apt/secring.gpg –trustdb-name /etc/apt/trustdb.gpg –keyring /etc/apt/trusted.gpg –primary-keyring /etc/apt/trusted.gpg –keyserver keyserver.ubuntu.com –recv 6B827C12C2D425E227EDCA75089EBE08314DF160
gpg: requesting key 314DF160 from hkp server keyserver.ubuntu.com
gpgkeys: HTTP fetch error 7: couldn’t connect to host
gpg: no valid OpenPGP data found.
gpg: Total number processed: 0

Executing: gpg –ignore-time-conflict –no-options –no-default-keyring –secret-keyring /etc/apt/secring.gpg –trustdb-name /etc/apt/trustdb.gpg –keyring /etc/apt/trusted.gpg –primary-keyring /etc/apt/trusted.gpg –keyserver keyserver.ubuntu.com –recv 6B827C12C2D425E227EDCA75089EBE08314DF160gpg: requesting key 314DF160 from hkp server keyserver.ubuntu.comgpgkeys: HTTP fetch error 7: couldn’t connect to hostgpg: no valid OpenPGP data found.gpg: Total number processed: 0

* Está capando el puerto 11371, el que usa el servidor de claves en la dirección: keyserver.ubuntu.com

Ahora bien para solucionar esto mediante un tunel con SSH hariamos lo siguiente:

1. Editamos el fichero /etc/hosts (como superusuario), en concreto la siguiente línea:
127.0.0.1 localhost keyserver.ubuntu.com

2. Guardamos y teniendo en cuenta que disponemos un servidor externo con un servidor SSH y sin restricciones en cuanto a firewall se refiere, lanzamos SSH con un tunel sobre el puerto 11371 local y redireccionando la salida sobre la dirección especificada (keyserver.ubuntu.com) y el mismo puerto. Tan sencillo como la siguiente línea (en este caso estoy usando el servidor de mi universidad, y nombre_usuario el nombre de mi usuario en el servidor ts.uco.es):

ssh nombre_usuario@ts.uco.es -L 11371:keyserver.ubuntu.com:11371

3. Nos autenticamos en el servidor y ya estamos preparados para agregar el repositorio, esta vez satisfactoriamente:

      blogofsysadmins.com@asubuntu:~$ sudo add-apt-repository ppa:ubuntugis/ppa
      [sudo] password for ahornero:
      Executing: gpg –ignore-time-conflict –no-options –no-default-keyring –secret
      keyring /etc/apt/secring.gpg –trustdb-name /etc/apt/trustdb.gpg –keyring
      /etc/apt/trusted.gpg –primary-keyring /etc/apt/trusted.gpg –keyserver
      keyserver.ubuntu.com –recv
      6B827C12C2D425E227EDCA75089EBE08314DF160
      gpg: requesting key 314DF160 from hkp server keyserver.ubuntu.com
      gpg: key 314DF160: “Launchpad ubuntugis-stable” not changed
      gpg: Total number processed: 1
      gpg:              unchanged: 1

¡Y listo!, ya tenemos una bonita forma de evitar un cortafuegos para un uso concreto, en este caso agregar un repositorio.