[Proyecto-Python]Navegar por consola en foros SMF - JaAViEr (0x5d)

Iniciado por 0x5d, 3 Diciembre 2012, 16:15 PM

0 Miembros y 1 Visitante están viendo este tema.

0x5d

Hola, muy buenos días.

Hace un rato me encontraba en uno de los peores momentos del ocio en mis 19 primaveras y pues me vino la idea (maybe bad) de poder navegar por un Foro SMF de una forma menos tradicional... Por consola.

La idea sería que podamos realizar acciones básicas-intermedias mediante la consola, por ejemplo, Leer mensajes privados, navegar por el index y sus subforos, posteriormente poder llegar a realizar cambios de contraseña o llegar a personalizar nuestro perfil, todo desde nuestra querida Shell.

Estuve unos minutos al pc antes de irme a clases y armé algo más o menos como una idea:

Código (python) [Seleccionar]

#-*-coding: utf-8 -*-
# Contacto : Twitter @0x5d - Correo : 0000x5d@gmail.com
import urllib, urllib2, re, os
from HTMLParser import HTMLParser

class Parseador(HTMLParser):
    def handle_data(self, data):
        print data

def clear():
    if os.name == "nt":
        os.system("cls")
    else:
        os.system("clear")

parseando = Parseador()
cookie = urllib2.HTTPCookieProcessor()
opener = urllib2.build_opener(cookie)
urllib2.install_opener(opener)

try:
    print "Nota: Solo insertar http://www.elsitiosmf.com , sin /index.php"
    foro = raw_input("URL Foro SMF:")
    usuario = raw_input("Usuario:")
    clave = raw_input("Password:")
    datos = {"user":usuario, "passwrd":clave, "cookielength":"9000","hash_passwrd":""}
    login = urllib2.urlopen("%s/index.php?action=login2"%foro, urllib.urlencode(datos)).read()
    if "logout" in login:
        clear()
        var = urllib2.urlopen("%s/SSI.php?ssi_function=welcome"%foro).read()
        datos = re.findall("Hola, <strong>(.*)</strong>", var)
        print "Bienvenido", datos[0]
        while True:
            opciones_primarias = input("""
            1.- Ver MP's.
                2.- Navegar en el index.
               
            Ingresa una opcion:""")
            if opciones_primarias == 1:
                guarda_id = []
                guarda_asunto = []
                view_mp = urllib2.urlopen("%s/index.php?action=pm"%foro).read()
                print "Formato \nID :     ASUNTO "
                for id_msj, asunto_msj in re.findall("<a href=\"#msg(.*)\">(.*)</a>", view_mp):
                    guarda_id.append(id_msj)
                    guarda_asunto.append(asunto_msj)
                    print id_msj, asunto_msj
                leer_id = raw_input("Ingrese el ID del mensaje a Leer:")
                clear()
                if leer_id in guarda_id:
                    get_msj = re.findall("<div class=\"inner\" id=\"msg_%s\">(.*)</div>"%leer_id, view_mp)
                    print "Asunto:%s \n\n\nContenido del mensaje:"%guarda_asunto[guarda_id.index(leer_id)]
                    parseando.feed(get_msj[0])
                else:
                    print "No existe el ID ingresado"
            if opciones_primarias == 2:
                    board_name_array = []
                    board_id_array = []
                    index = urllib2.urlopen("%s/index.php"%foro).read()
                    print "Formato:\n Nombre del foro :  BOARD ID"
                    for nombre in re.findall("<a class=\"subject\"(.*)>(.*)</a>", index):
                        for board_id in re.findall("name=\"b([0-9]*)\"", nombre[0]):
                            print "Nombre:", nombre[1] , "| Board id:", board_id
                            board_name_array.append(nombre[1])
                            board_id_array.append(board_id)
                    opciones_index = input("""
                    1.- Entrar en una categoria.
                        2.- Volver al menu principal.

                    Ingresa tu opcion: """)
                    if opciones_index == 1:
                        board = raw_input("Inserta BOARD ID:")
                        if board in board_id_array:
                            enter_board = urllib2.urlopen("%s/index.php?board=%s"%(foro,board)).read()
                            if "Subforos" in enter_board:
                                respuesta_subforos = raw_input("Subforos detectados, mostrar nombres?(s/n)").lower()
                                if respuesta_subforos == "n":
                                    print "No se mostraran subforos"
                                else:
                                    print "SHOW CATEGORIES"
                                    #Aca se veran los subforos y posteriormente los mensajes en el foro + el ID
                            else:
                                print "Esta categoria no posee subforos"
                                # Aca se muestran los mensajes en el foro junto a su ID
                        else:
                            print "No existe el Board ID Ingresado."
    else:
        print "Usuario o Clave mal ingresados"
except:
    print "Not connected to %s"%foro

Con un par de líneas de código se puede hacer que el usuario que ingrese sea visitante.

Le hice que podamos leer mensajes privados a partir de su ID, además poder ver los foros en el index e ingresar a algunos de ellos, si algún foro posee sub-foro, el programa debe avisar antes... En fin, ustedes lean el código y me dicen si no es tan mala la idea o si es pésima

PD: No he añadido control de errores vía try & except, ya que es una fase "beta" . Una vez puestas las pilas en el código no se escapará ni un error

Saludos, Javier.
¡ SIGUEME EN TWITTER -> @JavierEsteban__ !

Eleкtro

Después de pedirme user/pass:
Bienvenido Not connected to http://foro.elhacker.net

:-/

Gracias de todas formas, se ve muy bien.








0x5d

Cita de: EleKtro H@cker en  7 Diciembre 2012, 20:24 PM
Después de pedirme user/pass:
Bienvenido Not connected to http://foro.elhacker.net

:-/

Gracias de todas formas, se ve muy bien.
Es porque elhacker.net utiliza index.html , el código tiene .php (el por defecto de SMF). Como dije anteriormente, está en fase beta, por lo que no tiene control de errores. Pero con un par de líneas puedes hacer que detecte .php o .html ;)

Saludos !
¡ SIGUEME EN TWITTER -> @JavierEsteban__ !