Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: 0x5d en 3 Diciembre 2012, 16:15 pm



Título: [Proyecto-Python]Navegar por consola en foros SMF - JaAViEr (0x5d)
Publicado por: 0x5d en 3 Diciembre 2012, 16:15 pm
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
  1. #-*-coding: utf-8 -*-
  2. # Contacto : Twitter @0x5d - Correo : 0000x5d@gmail.com
  3. import urllib, urllib2, re, os
  4. from HTMLParser import HTMLParser
  5.  
  6. class Parseador(HTMLParser):
  7.    def handle_data(self, data):
  8.        print data
  9.  
  10. def clear():
  11.    if os.name == "nt":
  12.        os.system("cls")
  13.    else:
  14.        os.system("clear")
  15.  
  16. parseando = Parseador()
  17. cookie = urllib2.HTTPCookieProcessor()
  18. opener = urllib2.build_opener(cookie)
  19. urllib2.install_opener(opener)
  20.  
  21. try:
  22.    print "Nota: Solo insertar http://www.elsitiosmf.com , sin /index.php"
  23.    foro = raw_input("URL Foro SMF:")
  24.    usuario = raw_input("Usuario:")
  25.    clave = raw_input("Password:")
  26.    datos = {"user":usuario, "passwrd":clave, "cookielength":"9000","hash_passwrd":""}
  27.    login = urllib2.urlopen("%s/index.php?action=login2"%foro, urllib.urlencode(datos)).read()
  28.    if "logout" in login:
  29.        clear()
  30.        var = urllib2.urlopen("%s/SSI.php?ssi_function=welcome"%foro).read()
  31.        datos = re.findall("Hola, <strong>(.*)</strong>", var)
  32.        print "Bienvenido", datos[0]
  33.        while True:
  34.            opciones_primarias = input("""
  35.            1.- Ver MP's.
  36.                2.- Navegar en el index.
  37.  
  38.            Ingresa una opcion:""")
  39.            if opciones_primarias == 1:
  40.                guarda_id = []
  41.                guarda_asunto = []
  42.                view_mp = urllib2.urlopen("%s/index.php?action=pm"%foro).read()
  43.                print "Formato \nID :     ASUNTO "
  44.                for id_msj, asunto_msj in re.findall("<a href=\"#msg(.*)\">(.*)</a>", view_mp):
  45.                    guarda_id.append(id_msj)
  46.                    guarda_asunto.append(asunto_msj)
  47.                    print id_msj, asunto_msj
  48.                leer_id = raw_input("Ingrese el ID del mensaje a Leer:")
  49.                clear()
  50.                if leer_id in guarda_id:
  51.                    get_msj = re.findall("<div class=\"inner\" id=\"msg_%s\">(.*)</div>"%leer_id, view_mp)
  52.                    print "Asunto:%s \n\n\nContenido del mensaje:"%guarda_asunto[guarda_id.index(leer_id)]
  53.                    parseando.feed(get_msj[0])
  54.                else:
  55.                    print "No existe el ID ingresado"
  56.            if opciones_primarias == 2:
  57.                    board_name_array = []
  58.                    board_id_array = []
  59.                    index = urllib2.urlopen("%s/index.php"%foro).read()
  60.                    print "Formato:\n Nombre del foro :  BOARD ID"
  61.                    for nombre in re.findall("<a class=\"subject\"(.*)>(.*)</a>", index):
  62.                        for board_id in re.findall("name=\"b([0-9]*)\"", nombre[0]):
  63.                            print "Nombre:", nombre[1] , "| Board id:", board_id
  64.                            board_name_array.append(nombre[1])
  65.                            board_id_array.append(board_id)
  66.                    opciones_index = input("""
  67.                    1.- Entrar en una categoria.
  68.                        2.- Volver al menu principal.
  69.  
  70.                    Ingresa tu opcion: """)
  71.                    if opciones_index == 1:
  72.                        board = raw_input("Inserta BOARD ID:")
  73.                        if board in board_id_array:
  74.                            enter_board = urllib2.urlopen("%s/index.php?board=%s"%(foro,board)).read()
  75.                            if "Subforos" in enter_board:
  76.                                respuesta_subforos = raw_input("Subforos detectados, mostrar nombres?(s/n)").lower()
  77.                                if respuesta_subforos == "n":
  78.                                    print "No se mostraran subforos"
  79.                                else:
  80.                                    print "SHOW CATEGORIES"
  81.                                    #Aca se veran los subforos y posteriormente los mensajes en el foro + el ID
  82.                            else:
  83.                                print "Esta categoria no posee subforos"
  84.                                # Aca se muestran los mensajes en el foro junto a su ID
  85.                        else:
  86.                            print "No existe el Board ID Ingresado."
  87.    else:
  88.        print "Usuario o Clave mal ingresados"
  89. except:
  90.    print "Not connected to %s"%foro
  91.  
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.


Título: Re: [Proyecto-Python]Navegar por consola en foros SMF - JaAViEr (0x5d)
Publicado por: Eleкtro en 7 Diciembre 2012, 20:24 pm
Después de pedirme user/pass:
Código:
Bienvenido Not connected to http://foro.elhacker.net

:-/

Gracias de todas formas, se ve muy bien.


Título: Re: [Proyecto-Python]Navegar por consola en foros SMF - JaAViEr (0x5d)
Publicado por: 0x5d en 8 Diciembre 2012, 23:06 pm
Después de pedirme user/pass:
Código:
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 !