jueves, 30 de agosto de 2012

GNU Privacy Guard [GPG](Parte II)

Boas a todxs,

Continuemos a falar do GNU Privacy Guard (GPG), desta volta faremos un enfoque máis práctico, é dicer, imos aprender a empregar esta ferramenta.

Comecemos xerando a nosa clave:

gpg --gen-key

Agora imos ter para elexir unha das seguintes opcións para elexir o tipo de clave desexado:

lunes, 27 de agosto de 2012

Como escreber unha `fortune` [entretemento]

Se estades acostumados a usar o terminal o final acabaredes por ver nalgún sitio unhas frases que saen nela cando se abre, poucas distros o fan por defecto (só Slackware a última vez que o probei), vexamos preparalo, usalo e engadir un novo.



domingo, 26 de agosto de 2012

A xenial precocidade de Gauss [Python][Twitcode IV]

"A xenial precocidade de Gauss"

Un twitcode con historia, continúen lendo :P

x=range(101)
i=1
while i < 50:
    suma=x[i]+x[-i]
    print '%s + %s = %s' % (x[i], x[-i], suma)
    i+=1
print 'Resultado: ', suma*i,

jueves, 23 de agosto de 2012

GNU Privacy Guard [GPG](Parte I)

Boas a todxs,

Desta volta vou falar do GNU Privacy Guard, unha ferramenta de cifrado e sinaturas dixitais que é un remprazo en software libre baixo licenza GPL do PGP (Pretty Good Privacy). Desta primeira volta só se falara da ferramenta e se explicará a instalación para a nosa distribución GNU/Linux doutra ferramenta con interfaz gráfica que nos permitirá comezar a "fuchicar" no GPG, na seguinte publicación veremos como manexar GPG, asinar correos electrónicos, ...

Xa sabemos que GPG é unha ferramenta de cifrado mais que é isto de cifrado?

lunes, 20 de agosto de 2012

Escrebendo un sniffer en [python] co scapy

Scapy é unha librería de python que permite fozar coa rede dunha forma incriblemente sinxela, dende enviar pacotes feitos a man para interromper unha conexión allea ou para experimentar cos protocolos a ler todo o que pasa pola rede, hoxe faremos iso, e dicir un sniffer.

A verba sniffer deriva do inglés `sniff` "olfatexar", xa que o programa "ule" todo o que pasa pola rede, pero non nos adiantemos os acontecementos...

Como instalar Scapy


Nun sistema Gnu/Linux a instalación da librería non ten máis complicación que instalar o pacote correspondente, nas distribucións baseadas en Debian: python-scapy
Se por exemplo escrebemos no terminal
sudo apt-get install python-scapy
o sistema descargará e instalará o paquete automáticamente.

Botando o cadelo a cazar

Para poñer o scapy a ler o que pasa pola rede so fai falla importa-lo módulo:
from scapy.all import *

E darlle a orde de facelo:
sniff(filter=<filtro>, prn=<función_manexadora>)

Nota: é posible que diga algo coma "WARNING: No route found for IPv6 destination :: (no default route?)", isto é normal e so ven dicindo que non atopa unha rede co protocolo IPv6, non ten maior repercusión.

Iso si, é necesario recordar que para isto fan falla permisos de superusuario, así que cando se execute haberá que telo en conta e, por exemplo, por un `sudo` antes do comando.

Se vos fixades, quedan duas cousas que definir (non son completamente necesarias, pero se queremos facer algo, pois... si), a primeira é un filtro, este escollerá os pacotes que se lerán, podemos por exemplo ignorar os que corresponden a un porto, orixe, destino ou protocolo de rede que non nos interesa. A segunda é una función que receberá o pacote e (previsiblemente) fará o que queiramos que faga con el.

Os filtros


Os filtros empregados por Scapy son os filtros propios do `tcpdump`, un programa sniffer que xerou a librería do mesmo propósito `libpcap`, que a súa vez forma parte da base de `scapy`.

Un exemplo de filtro sería, "tcp" para só ler as conexións feitas a través de TCP, ou "port 80" para as conexións na que o orixe ou destiño sea o porto 80.

Este tema é bastante extenso de por si, pero baste saber que os filtros podense compoñer utilizando "not" coma operador "negación", "&&" coma operador "e lóxico" e "||" como operador "ou lóxico".

Pódese encontrar máis por exemplo en [ http://www.alexonlinux.com/tcpdump-for-dummies#packet_filtering ] ou facendo unha busca [ https://duckduckgo.com/html/?q=tcpdump+filters ].


A función de callback


A función non ten gran misterio, recebe coma parámetro o pacote, así que para ir pechando veremos como facer un sniffer para contrasinais de FTP, así vemos a función traballar con todo o conxunto.

#!/usr/bin/env python
# coding: utf-8

from scapy.all import sniff, TCP

# Os servidores FTP funcionan sobre TCP e (normalmente) no porto 21.
filtro = "tcp && port 21"

# Lee un pacote e avisa se atopa algo que 
# poida ser un usuario ou contrasinal
def manexadora(pacote):
    # Lemos os dados que envía (o payload en inglés)
    dados = pacote[TCP].payload

    # Senon ten nada, voltamos
    if dados is None:
        return None

    # Se o ten convertémolo nunha cadea de caracteres
    else:
        dados = str(dados)
        

    # No FTP, cando alguen se autentica primeiro manda
    # unha cadea con 'USER ' e o nome de usuario
    # e despois 'PASS ' e o contrasinal, imos buscar esas
    # referencias.
    if (dados.startswith("USER ") or
        dados.startswith("PASS ")):

        # Se a función manexadora devolve algo, o sniffer
        # mandao pola pantalla.
        # Recordando elimiñar os saltos de liña ou espacios
        # o final da cadea
        return dados.strip()

# Para rematar, lanzamo-lo sniffer
sniff(filter=filtro,
      prn=manexadora)


E iso é todo, espero que resultara interesante.

Saúdos

domingo, 19 de agosto de 2012

Engadindo todos os elinks dunha páxina o amule [bash][Twitcode III]

for i in `curl "<url>"|grep -Po 'ed2k[^"]*'`;do echo Add $i;done|amulecmd -P <pass do amule>

Cal é o truco? o amule pódese configurar para utilizalo a través dun control remoto, o 'amulecmd' (hay que activalo nas preferencias), neste caso se no amulecmd escrebemos 'Add <link>' engade o link o amule.

O resto é sinxelo:
curl "<url>"
Conectase a url e mostra os contidos.

grep -Po 'ed2k[^"]*'
Toma todo o texto que se pasa e só deixa pasar o que corresponda (opción o) coa expresión regular (opción P) 'ed2k[^"]*', isto é: busca unha cadea que comeza por ed2k e que sigua con calquer número de caracteres distintos dunha commilla dobre ".

for i in <a saída do anterior>;do
    echo Add $i
done|amulecmd -P <pass do amule>
Por cada resultado no procesamento anterior envíase unha liña con 'Add ' e o link atopado a un proceso de amulecmd.

Saúdos.

jueves, 16 de agosto de 2012

Sockets, creando un cliente e un servidor (Python)

Boas a todxs,

Hoxe imos falar de comunicacións, concretamente grazas a ese conceito astracto co que se designa ao punto final dunha conexión ao clásico conceito de socket e concretamente explificaremos a súa utilidade con Python.

Para que se utilizan os sockets? Para comunicarse con outros programas no mesmo ou noutro PC.

Os sockets defínense por IP, porto e protocolo. En python, concretamente hai unha librería para isto coa que podemos crear un obxeto "socket":

socket = socket.socket()

lunes, 13 de agosto de 2012

Prototipando Python, MySQL (por separado) e o que queiras no emacs

Fai uns días atopei que o emacs era unha ferramenta moito máis interesante do que tiña pensado para facer pequenos prototipos ou fozar no SQL, pero comecemos polo principio.

domingo, 12 de agosto de 2012

jueves, 9 de agosto de 2012

Wargames

Boas a todxs,

Aquí estou máis unha semana cunha publicación, desta volta vou falar dos wargames enlazando coa primeira entrada que fixen neste blogue nela facía referencia a estes, cando desarrollei o script para resolver o cifrado césar foi para non ter que aplicalo letra a letra nun texto bastante extenso que me atopei nun reto, concretamente nun documento de texto dentro dunha imaxe.

Pois ben, que son os wargames?

lunes, 6 de agosto de 2012

Escrebendo un salvapantallas para Gnu/Linux [C]

Os salvapantallas son algo que sempre me chamou poderosamente a atención pero ata fai pouco non sabía como se escribían, hoxe aprenderemos a facer un para o XScreensaver do Gnu/Linux.

domingo, 5 de agosto de 2012

Calculo de PI usando o conxunto de Mandelbrot [C] [Twitcode (I)]

Estreamos sección con este código:
main(){int i=1,p=10000000;complex c=-3./4+I/p,z=c;for(;++i<5*p;)if(pow(creal(z=z*z+c),2)+pow(cimag(z),2)>=4)exit(printf("%i\n",i));}

Require as seguintes cabeceiras:
// Totalmente necesarias
#include <complex.h>

// Estándar, para evitar queixas do compilador
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

jueves, 2 de agosto de 2012

Que é GNU/Linux?

Cando falamos de "Linux", de que falamos? Pois ben, nesta entrada intentarei explicar un pouco de que vai o asunto, os usuarios máis avanzados ou máis interesados polo tema seguro xa o saberán mais un grande nº de xente pode que descoñeza realmente o que vou comentar a continuación, é normal, seguramente todxs nos nosos incicios (inclúome no saco) non sabiamos realmente a que nos referiamos.

Moitas veces referímonos ás distintas distribucións de GNU/Linux como "Linux", é un erro común pensar que un sistema operativo (SO de aqui en diante) é todo o conxunto de aplicacións (navegador web, explorador de arquivos, reproductor de audio, etc...) cando en realidade, practicamente, só nos referimos ao kernel (nucleo).

Entón, a que nos referimos con SO e que é o kernel? O SO é un conxunto de programas que efectúan a xestión dos procesos básicos dun sistema informático, é dicer, non é máis que un soporte para facilitar ao usuario a interacción coas aplicacións diseñadas por outros usuarios. Por tanto o kernel é o principal responsábel de facilitar aos distintos programas acceso seguro ao hardware do PC ou en forma máis básica, é o encargado de xestionar recursos a través de servicios de chamada ao sistema, é a parte máis importante do software do SO.

Que é Linux entón?