elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a la Factorización De Semiprimos (RSA)


  Mostrar Temas
Páginas: 1 2 [3] 4 5 6
21  Seguridad Informática / Seguridad / Mini CSRF SMF - JaAViEr [0x5d] en: 9 Febrero 2013, 00:34 am
Hola, buen día.

Esto es como un mini CSRF que afecta varios SMF ...

Luego de leer esto, vayan al index y díganme si algo les cambió ... Si no es así CTRL + F5

Saludos, Javier.
22  Programación / Scripting / [Código-Python]Sucesión Fibonacci - Versión Reducida - JaAViEr (0x5d) en: 10 Enero 2013, 22:47 pm
Hola, buen día.

En mi afán de reducir códigos, hoy fue el turno de la Sucesión Fibonacci ... Hace un tiempo hice un código que era este :

Código
  1. n = [1,1]
  2. while True:
  3.    print n[-1]
  4.    n.append(n[-1]+n[-2])
  5.  
Y pues el ocio me la ganó y lo dejé en esto:
Código
  1. n, r = [1,1], lambda: (n,n.append(n[-1]+n[-2]))
  2. while r(): print n[-1]
Incluso creo que es más reducible ...

Saludos, Javier.
23  Programación / Scripting / [Proyecto-Python]Navegar por consola en foros SMF - JaAViEr (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.
24  Programación / Scripting / [Código-Python]Gestor de pago de cuentas - JaAViEr|0x5d en: 20 Mayo 2012, 09:43 am
Hola, buen día a todos !

Hace un rato que no subo nada de nada  , últimamente ando programando cosas, pero nada subo a la red :'( , así que programé un "Gestor de pagos de cuentas".

Tiene sencillas opciones:

1.- Ver cuentas.
2.- Agregar/Editar una cuenta.
3.- Informar pago de cuenta.
4.- Ver cuentas pagadas.
5.- Calcular cuanto he pagado en cuentas.
6.- Eliminar una cuenta pagada.
7.- Salir.


Pasaré a explicar algunas:

La primera opción nos permitirá visualizar las cuentas que hayamos ingresado anteriormente con la opción 2.

La segunda opción nos permitirá agregar alguna cuenta que tengamos pendientes en pagar. Nos pedirá el nombre de la cuenta, cuanto es el monto a cancelar y la fecha en la que debemos pagar la cuenta. El programa cuando se inicia verifica todas las cuentas y nos avisa que cuenta vence el día en que se ejecute.

La tercera opción nos dará la posibilidad de informar que ya hemos pagado una cuenta pendiente. Al entrar en esta opción nos mostrará las cuentas que no se han pagado, nos pedirá el nombre de la cuenta que vamos a señalar que está pagada, luego preguntará ¿Pagada?(s/n) , luego nos dirá si queremos conservar el registro de que esa cuenta fue pagada, en caso de ser "s" luego tendremos acceso a esos datos desde el menú, de lo contrario se perderán.

La opción cuatro solo nos mostrará en pantalla las cuentas que hemos pagado.

Opción 5 hará un calculo total de cuanto dinero hemos utilizado en el pago de nuestras cuentas, recuerda que si en la opción 3 no señalaste guardar un registro aquí no se sumará dicho gasto.

Mientras que la opción 6 nos mostrará por pantalla las cuentas que ya hemos pagado, dándonos la posibilidad de eliminar uno de los registros.


Sin más preámbulos , el código:

Código
  1. #-*- coding: utf-8 -*-
  2. import datetime, re, os, sys
  3.  
  4. def clear_screen():
  5. os.system("cls") if(os.name=='nt') else os.system("clear")
  6.  
  7. if not os.path.isdir("cuentas"):
  8. respuesta = raw_input("""
  9. No están las carpetas necesarias para el correcto
  10. Funcionamiento del programa
  11.           ¿Desea crerlas? (s/n): """).lower()
  12. if respuesta=="s":
  13. try:
  14. os.mkdir("cuentas")
  15. os.mkdir("cuentas_pagadas")
  16. raw_input("Se crearon los archivos necesarios, presiona una enter para ir al programa.")
  17. except:
  18. print "Error al crear los archivos necesarios."
  19. sys.exit(1)
  20. else:
  21. print "No se instalará el programa."
  22. sys.exit(1)
  23. else:
  24. pass
  25. separar_fecha = str(datetime.datetime.now()).split(" ")[0]
  26. parsear_fecha = separar_fecha.split("-")
  27. fecha_normal = " %s/%s/%s"%(parsear_fecha[2], parsear_fecha[1], parsear_fecha[0])
  28. clear_screen()
  29. class cuentas:
  30. def extraer_cuentas(self):
  31. return os.listdir("cuentas/")
  32.  
  33. def verificar_fechas(self):
  34. try:
  35. for cuenta in self.extraer_cuentas():
  36. ver_pagos = open("cuentas/%s"%cuenta,"r")
  37. for dato, valor in re.findall("(.*):(.*)",ver_pagos.read()):
  38. if "Vence" in dato:
  39. if valor==fecha_normal:
  40. print """
  41. ¡ALERTA!
  42. La cuenta de %s vence hoy!
  43. """%cuenta.capitalize()
  44. ver_pagos.close()
  45. except:
  46. print "No se encontraron cuentas"
  47.  
  48. def __init__(self):
  49. self.verificar_fechas()
  50.  
  51. def ver_cuentas(self):
  52. global todos_lospagos
  53. todos_lospagos = []
  54. try:
  55. for ver_cuenta in self.extraer_cuentas():
  56. ver_pagos = open("cuentas/%s"%ver_cuenta,"r")
  57. todos_lospagos.append(ver_pagos.read()+"\n----")
  58. ver_pagos.close()
  59. return True
  60. except:
  61. return False
  62.  
  63. def agregar_pago(self, tipo, valor, fecha):
  64. clear_screen()
  65. try:
  66. escribir_nuevo = open("cuentas/%s"%tipo,"w")
  67. escribir_nuevo.write("""Tipo de cuenta  : %s
  68. Monto a cancelar: %s
  69. Vence el día    : %s
  70. Estado          : No pagada"""%(tipo, valor, fecha))
  71. escribir_nuevo.close()
  72. return True
  73. except:
  74. return False
  75.  
  76. def cuenta_pagada(self, cuenta, estado, conservar):
  77. if estado == "s":
  78. if conservar == "s":
  79. try:
  80. cuenta_r = open("cuentas/%s"%cuenta,"r")
  81. cuenta_w = open("cuentas_pagadas/%s"%cuenta,"w")
  82. cuenta_w.write(cuenta_r.read().replace("No pagada", "Pagada"))
  83. cuenta_w.close()
  84. cuenta_r.close()
  85. os.remove("cuentas/%s"%cuenta)
  86. return True
  87. except:
  88. return False
  89. else:
  90. try:
  91. os.remove("cuentas/%s"%cuenta)
  92. return True
  93. except:
  94. return False
  95. else:
  96. return False
  97.  
  98. def dinero_encuentas(self):
  99. try:
  100. global suma
  101. suma = 0
  102. for h in os.listdir("cuentas_pagadas"):
  103. for valor in re.findall("Monto a cancelar: (.*)",open("cuentas_pagadas/%s"%h,"r").read()):
  104. suma+=int(valor)
  105. return True
  106. except:
  107. return False
  108.  
  109. pago = cuentas()
  110.  
  111. while True:
  112. print """
  113. ¡ Bienvenido al gestor de pago de cuentas !
  114. La fecha de hoy es%s"""%fecha_normal
  115. try:
  116. opcion_principal = input("""
  117. 1.- Ver cuentas.
  118. 2.- Agregar/Editar una cuenta.
  119. 3.- Informar pago de cuenta.
  120. 4.- Ver cuentas pagadas.
  121. 5.- Calcular cuanto he pagado en cuentas.
  122. 6.- Eliminar una cuenta pagada.
  123. 7.- Salir.
  124.  
  125. Ingresa una opción: """)
  126. if opcion_principal == 7:
  127. break
  128. elif opcion_principal == 1:
  129. clear_screen()
  130. if len(os.listdir("cuentas"))>0:
  131. if pago.ver_cuentas():
  132. pago.verificar_fechas()
  133. print "Cuentas registradas:"
  134. for out in todos_lospagos:
  135. print out
  136. else:
  137. print "Error inesperado."
  138. else:
  139. print "No hay cuentas registradas."
  140. elif opcion_principal == 2:
  141. clear_screen()
  142. print "Si la cuenta ya existe, será reescrita con nuevos datos."
  143. try:
  144. print "Rellene los siguientes campos por favor. Si desea volver al menú presione \"q\" y ENTER."
  145. tipo_c = raw_input("Nombre de la cuenta: ").capitalize()
  146. if tipo_c != "Q":
  147. valor_c = raw_input("¿Cuanto debe pagar?: ")
  148. fecha_pago = raw_input("Fecha de pago(dd/mm/aa):")
  149. v_d = fecha_pago.split("/")
  150. v_f = fecha_normal.split("/")
  151. if len(v_d[0])==2 and len(v_d[1])==2 and len(v_d[2])==4:
  152. if v_d[2]>v_f[2] or v_d[2]==v_f[2] and not v_d[1]<=v_f[1]:
  153. if v_d[1] and v_f[1]:
  154. if pago.agregar_pago(tipo_c, valor_c, fecha_pago):
  155. print "Se agregó la cuenta correctamente."
  156. else:
  157. print "No se pudo agregar la cuenta, intentalo de nuevo."
  158. elif v_d[1]==v_f[1] and v_d[0]>=v_f[0]:
  159. if pago.agregar_pago(tipo_c, valor_c, fecha_pago):
  160. print "Se agregó la cuenta correctamente."
  161. else:
  162. print "No se pudo agregar la cuenta, intentalo de nuevo."
  163. else:
  164. print "La fecha no es válida o ya pasó..."
  165.  
  166. else:
  167. print "Fecha mal ingresada."
  168. else:
  169. clear_screen()
  170. pass
  171. except:
  172. print "Ingrese datos válidos."
  173.  
  174. elif opcion_principal == 3:
  175. clear_screen()
  176. if len(os.listdir("cuentas"))>0:
  177. print "Si usted decide no conservar registro de la cuenta, esta\nno será considerada en la opción 5"
  178. print "\nCuentas aún no pagadas:\n------"
  179. print "\n".join(os.listdir("cuentas"))
  180. cuenta = raw_input("------\nCuenta:").capitalize()
  181. estado = raw_input("¿Pagada?(s/n): ").lower()
  182. conservar = raw_input("¿Conservar registro?(s/n): ").lower()
  183. if pago.cuenta_pagada(cuenta, estado, conservar):
  184. print "Realizado con éxito"
  185. else:
  186. print "Ocurrió un problema."
  187. else:
  188. print "No hay cuentas registradas."
  189. elif opcion_principal == 4:
  190. clear_screen()
  191. if len(os.listdir("cuentas_pagadas"))>0:
  192. try:
  193. for h in os.listdir("cuentas_pagadas"):
  194. print open("cuentas_pagadas/%s"%h,"r").read()
  195. print "----"
  196. except:
  197. print "No se pueden ver las cuentas pagadas."
  198. else:
  199. print "No has pagado ni una cuenta aún."
  200. elif opcion_principal == 5:
  201. clear_screen()
  202. if len(os.listdir("cuentas_pagadas"))>0:
  203. if pago.dinero_encuentas():
  204. print "El dinero que has pagado en cuentas es de:",suma
  205. else:
  206. print "No has pagado ni una cuenta aún."
  207. elif opcion_principal == 6:
  208. clear_screen()
  209. cuentas_totales = os.listdir("cuentas_pagadas")
  210. if len(cuentas_totales)>0:
  211. print "Lista de las cuentas ya canceladas:"
  212. for listar_cuentas in cuentas_totales:
  213. print "* "+listar_cuentas
  214. eliminar_cuenta = raw_input("¿Que cuenta ya cancelada desea eliminar?: ").capitalize()
  215. if eliminar_cuenta in cuentas_totales:
  216. try:
  217. clear_screen()
  218. os.remove("cuentas_pagadas/%s"%eliminar_cuenta)
  219. print "Cuenta eliminada Correctamente"
  220. except:
  221. clear_screen()
  222. print "No se pudo eliminar la cuenta."
  223. else:
  224. clear_screen()
  225. print "No existe la cuenta solicitada."
  226. else:
  227. print "No hay cuentas pagadas."
  228. except:
  229. print "La opción ingresada no es un número."
  230.  

Fuente: http://rootcodes.com/pythongestor-de-pago-de-cuentas/

Saludos, Javier.
25  Programación / Scripting / [Código-Python]Cliente FTP V2 - JaAViEr | 0x5d en: 1 Mayo 2012, 11:40 am
¡ Hola, buen día !

Hoy me tomé un par de minutos para programar un cliente FTP oficial del sitio web. Es por consola, pero vamos que ya estoy en planes de pasarlo a PyQT4. El código consta de 133 humildes líneas, intenté utilizar el máximo control de errores en el programa, para evitar que el programa salga de su curso normal... Si alguien ve que falla en algo por favor avisad aquí mismo ! , el cliente FTP por consola nos permitirá un par de acciones una vez conectado, estas son las básicas:

1.- Listar directorios / Archivos.
2.- Ingresar a un directorio.
3.- Eliminar un archivo ó directorio.
4.- Crear un directorio.
5.- Descargar un archivo remoto.
6.- Enviar un archivo local.
7.- Ver peso de un archivo remoto.
8.- Desconectar.


No creo que sea necesario describir cada una, así que los invito a leer el código :
Código
  1. # -*- coding: utf-8 -*-
  2. from ftplib import FTP
  3. while True:
  4. estado_conexion = 0
  5. try:
  6. print """
  7. ¡ Hola, bienvenido al cliente FTP - RootCodes.Com !
  8.  
  9. ¿ Qué deseas hacer ?
  10.  
  11. 1.- Conectar a servidor FTP.
  12. 2.- Creditos/Autor.
  13. 3.- Salir.
  14. """
  15. opc = input("Opcion:")
  16. if opc == 1:
  17. try:
  18. servidor = raw_input("Servidor: ")
  19. usuario = raw_input("Usuario: ")
  20. clave = raw_input("Clave: ")
  21. sesion = FTP(servidor)
  22. print sesion.getwelcome()
  23. try:
  24. estado_conexion = 1
  25. sesion.login(usuario,clave)
  26. pasive_mode = raw_input("¿ Desea activar el modo pasivo ? (s/n) > ").lower()
  27. if pasive_mode == "s":
  28. print "¡ Activando modo pasivo !"
  29. try:
  30. sesion.set_pasv(True)
  31. print "¡ Modo pasivo activado !"
  32. except:
  33. print "¡ No se pudo activar modo pasivo !"
  34. while estado_conexion!=0:
  35. print "\n\nActualmente te encuentras en:", sesion.pwd()
  36. print """
  37. 1.- Listar directorios / Archivos.
  38. 2.- Ingresar a un directorio.
  39. 3.- Eliminar un archivo ó directorio.
  40. 4.- Crear un directorio.
  41. 5.- Descargar un archivo remoto.
  42. 6.- Enviar un archivo local.
  43. 7.- Ver peso de un archivo remoto.
  44. 8.- Desconectar.
  45. """
  46. try:
  47. in_server = input("Opción: ")
  48. except:
  49. print "¡ Ingresa un número porfavor !"
  50. if in_server == 1:
  51. try:
  52. print "Lista de archivos / directorios:"
  53. sesion.dir()
  54. except:
  55. print "¡ Error al listar archivos / directorios !"
  56. elif in_server == 2:
  57. try:
  58. join_dir = raw_input("Directorio: ")
  59. sesion.cwd(join_dir)
  60. except:
  61. print "¡ Error al intentar ingresar al directorio !"
  62. elif in_server == 3:
  63. print "1.- Eliminar archivo.\n2.- Eliminar Directorio."
  64. try:
  65. que_eliminar = input("Opción: ")
  66. except:
  67. print "¡ Por favor ingresa un número válido !"
  68. if que_eliminar == 1:
  69. try:
  70. archivo_del = raw_input("Archivo a eliminar: ")
  71. sesion.delete(archivo_del)
  72. print "¡ Archivo eliminado correctamente !"
  73. except:
  74. print "¡ Error al intentar eliminar el archivo !"
  75. elif que_eliminar == 2:
  76. try:
  77. carpeta_del = raw_input("Directorio a eliminar: ")
  78. sesion.rmd(carpeta_del)
  79. print "¡ Directorio Eliminado correctamente !"
  80. except:
  81. print "¡ Error al intentar eliminar el directorio !"
  82. else:
  83. print "¡ Opción ingresada no existe !"
  84. elif in_server == 4:
  85. try:
  86. crear_carpeta = raw_input("Nombre del nuevo directorio: ")
  87. sesion.mkd(crear_carpeta)
  88. print "¡ Nuevo directorio creado con éxito !"
  89. except:
  90. print "¡ Error al intentar crear el directorio !"
  91. elif in_server == 5:
  92. try:
  93. archivo_download = raw_input("Archivo a descargar: ")
  94. sesion.retrbinary("RETR %s"%archivo_download, open(archivo_download,"wb").write)
  95. print "¡ Archivo descargado con éxito !"
  96. except:
  97. print "¡ No se pudo descargar el archivo !"
  98. elif in_server == 6:
  99. try:
  100. archivo_local = raw_input("Archivo local: ")
  101. file_local = open(archivo_local,'rb')
  102. sesion.storbinary("STOR "+archivo_local, file_local)
  103. file_local.close()
  104. print " ¡Archivo enviado con éxito !"
  105. except:
  106. print "¡ No se pudo enviar el archivo !"
  107. elif in_server == 7:
  108. try:
  109. archivo_peso = raw_input("Archivo local: ")
  110. print "El peso del archivo %s, es: %s"%(archivo_peso,sesion.size(archivo_peso))
  111. except:
  112. print "¡ No se pudo obtener el peso !"
  113. elif in_server == 8:
  114. sesion.quit()
  115. estado_conexion=0
  116. print "¡ Desconectado con éxito !"
  117. except:
  118. print "¡ No se pudo lograr la conexión !"
  119. except:
  120. print "¡ Error en los datos de conexión !"
  121.  
  122. elif opc == 2:
  123. print """
  124. Créditos -> Autor : JaAViEr || 0x5d
  125.  Twitter : @0x5d
  126.  WebSite : http://www.rootcodes.com
  127. """
  128.  
  129. elif opc == 3:
  130. print "¡ Gracias por utilizar Cliente FTP - RootCodes.Com !"
  131. break
  132. except:
  133. print "¡ Opción incorrecta !"
  134.  
¡ Espero les haya gustado !

Fuente : http://rootcodes.com/pythoncliente-ftp-rootcodes-com/

Saludos, Javier.
26  Programación / Scripting / [Código-Python]Enviando y recibiendo cookies por consola - JaAViEr|0x5d en: 28 Abril 2012, 08:34 am
Hola, buen día !

Hoy, estuve leyendo acerca de las preciadas cookies, antes de continuar, por si alguien no sabe que son las cookies, consultemos a la ya famosa Wikipedia:
Citar
Los cookies enInformática sirven para:
  • Llevar el control de usuarios: cuando un usuario introduce su nombre de usuario y contraseña, se almacena una cookie para que no tenga que estar introduciéndolas para cada página del servidor. Sin embargo, una cookie no identifica a una persona, sino a una combinación de computador-navegador-usuario.
  • Conseguir información sobre los hábitos de navegación del usuario, e intentos de spyware, por parte de agencias de publicidad y otros. Esto puede causar problemas de privacidad y es una de las razones por la que las cookies tienen sus detractores.
Para la info completa aquí !

Bien, con este tema rápidamente me vinieron a la mente varias ideas para programar con respecto al caso. Me puse manos a la obra y pues por ahora conseguí un humilde programa de 68 líneas (sin reducir nada).

El código lo que hace es enseñarnos 3 opciones:
  • Ver cookies.
  • Enviar cookies.
  • Salir.
Con la primera opción, nos pedirá una URL y nos devolverá las cookies contenidas en dicho sitio, posteriormente nos da la opción de poder almacenarla en un archivo.

Mientras que la segunda opción nos permitirá enviar una o más cookies a algún sitio web(NO ME HAGO RESPONSABLE DEL MAL USO QUE LE PUEDAN DAR), dándonos la opción de guardar la salida del HTML en un archivo local o simplemente mostrarlo en consola.

Si piensan en: Y para que guardarlo ? , podría ser para ver si algún logueo se realiza de forma correcta, si algunos datos varían con cada cookie, etc. A su imaginación lo dejo !

La tercera opción no tiene mucha ciencia, no creo que haya que explicarla jajaja. Bien, sin más preámbulos, el código:
Código
  1. # -*- coding: utf-8 -*-
  2. #Autor: JaAViEr|0x5d
  3. #Web: http://www.rootcodes.com
  4. #Twitter: @0x5d
  5.  
  6. import urllib2, re, sys
  7.  
  8. while True:
  9. print"""
  10. &#161; Obt&#233;n o env&#237;a cookies desde Python !
  11.  
  12. 1.- Ver cookies.
  13. 2.- Enviar cookies.
  14. 3.- Salir.
  15. """
  16. try:
  17. opc = input("Opci&#243;n ::> ")
  18. if opc in range(1,4):
  19. if opc == 3:
  20. break
  21. elif opc==1:
  22. try:
  23. url = raw_input("URL :: > http://")
  24. headers = urllib2.urlopen("http://%s"%url).info()
  25. cookie = re.findall("Set-Cookie:(.*)",str(headers))[0]
  26. if cookie:
  27. print "Cookie obtenida:\n", cookie
  28. save_q = raw_input("Guardar la cookie en un archivo?(TXT) (s/n) ::>").lower()
  29. if save_q=="s":
  30. try:
  31. archivo = open("%s.txt"%raw_input("Archivo : "),"w")
  32. archivo.write(str(cookie))
  33. archivo.close()
  34. print "Archivo guardado con &#233;xito!"
  35. except:
  36. print "No se pudo guardar el archivo..."
  37. else:
  38. print "No se obtuvo cookies..."
  39. except:
  40. print "No se pudo conectar"
  41. elif opc==2:
  42. print "Recuerda separar cada cookie con un punto y coma (;) !"
  43. try:
  44. url = raw_input("URL :: > http://")
  45. cookie_tosend = raw_input("Cookies: ")
  46. save_cookies = urllib2.build_opener()
  47. save_cookies.addheaders.append(('Cookie', cookie_tosend))
  48. abrir_web = save_cookies.open("http://%s"%url)
  49. try:
  50. q_show = raw_input("Desea volcar el html en un archivo?(HTML) (s/n) ::> ")
  51. if q_show=="s":
  52. try:
  53. save_output = open("%s.html"%raw_input("Archivo de salida(sin .html):"),"w")
  54. save_output.write(abrir_web.read())
  55. save_output.close()
  56. print "Archivo guardado con &#233;xito !"
  57. except:
  58. print "No se pudo guardar el archivo..."
  59. else:
  60. print abrir_web.read()
  61. except:
  62. print "Ocurri&#243; un problema inesperado..."
  63. except:
  64. print "Error inesperado..."
  65. else:
  66. print "No existe dicha opcion"
  67. except:
  68. print "Por favor ingresa un n&#250;mero"
Hice el código lo más ordenado posible, manejando controles de error para todo, evitando un código desastroso (:

Pueden hacer la prueba del programa con esta url : Prueba Cookies

Envíen desde el programa, la cookie "name=Javier" y vean el resultado :D

Y como siempre... Espero sea de su agrado el código !

Fuente: http://rootcodes.com/pythonenviando-y-recibiendo-cookies-jaavier0x5d/

Saludos, Javier.
27  Programación / Scripting / [Código-Python]Código Ofuscado nº2 JaAViEr|0x5d [Actualizado] en: 27 Abril 2012, 05:18 am
Hola, buen día a todos nuevamente !

Estuve pensando en la gente que dice que Python es un lenguaje poco menos inofuscable(no sé si exista la palabra :P) y me pensé hacer un código ofuscado, pero sin depender de librerías :O , Python puro, ya que en la vez pasada lo hice vía base64 más algunas cositas -> http://www.rootcodes.com/pythoncalculadora-ofuscada

Ahora me propuse hacer otro código ofuscado, pero sin librerías ni nada. Es algo difícil de hacer(relativamente), ya que Python es un lenguaje estructurado, lo que facilita la lectura del código, así que ahí me las anduve ingeniando para que sea algo más engorroso :P, el código es el siguiente, espero sea de su 'agrado':
Código
  1. def ____(a_a_a):
  2. _____, ______, ________ = ([],[a_a_a],"")
  3. while ______[+False-True]!=False:     (_____
  4. , ______)=(_____+[______[False-True-True+True]%(True-False+True)],______+[______[-True+False+False**3]/(False+False+True*2)])
  5. for _ in _____[::-True]: ________+="%s"%_
  6. return (
  7. ________
  8. )
  9. (other_s
  10. ,t,
  11. _x_) = ([
  12. ],raw_input,
  13. [" "]
  14. )
  15. h = (
  16. [__
  17. for
  18. __
  19. in
  20. str(
  21. """abcdefghijkl
  22. mnopqrs
  23. tuvwxyz"""
  24. )
  25. ])
  26. ([(h.pop(),
  27. other_s.append("%s"%(
  28. ___)))for ___
  29. in
  30. """abcdefghijkl
  31. mnopqrs
  32. tuvwxyz"""
  33.  ]);
  34. ( [
  35. _x_.append(_i_.replace("\n",""))
  36. for _i_
  37. in
  38. other_s
  39. ] )
  40. for s_s in t(">"): print ____(_x_.index(s_s)),
  41.  
  42.  
Bien, y que hace ?
Te pedirá un texto y te devolverá la posición de cada letra, pero en Binario :P , espero que alguien más se anime a ofuscar código Python y lo suba :D


Fuente : http://rootcodes.com/pythoncodigo-ofuscado-jaavier0x5d/

Saludos, Javier ;D
28  Programación / Scripting / [Python]Técnicas para reducir código JaAViEr|0x5d en: 26 Abril 2012, 23:01 pm
Hola, buen día !
No encontré un mejor título XD, pero aquí voy...
En esta oportunidad pretendo seguir fomentando la reducción de código, aunque sea por unos cuantos caracteres, las formas que explicaré quizás no sean tan útiles para reducir mucho el source, pero si podrían usarlo para ofuscar códigos :P.

Bien, al grano ! . Como bien sabemos, hay varias funciones internas en nuestro amado Python, tales
como : int(), str(), raw_input(), input(), etc...

Entre esa lista podemos incluir nuestras funciones creadas vía "def". Bien, pero eso que tiene de
especial ? , ahora vamos a eso ...

Pondré un caso bien sencillo con el uso de def():
Código
  1. def funcion(parametro):
  2. print parametro
  3.  
  4. func = funcion
  5. print func
  6.  
Veremos que la salida es:
Código:
<function funcion at 0xb74a2454>
Bueno y eso qué dirán ustedes :P , aquí viene lo entretenido. Podemos insertar nuestra función dentro de una variable cualquiera y a partir de ese momento podemos llamar a dicha función por
el nombre de la variable... No se entiende ? , un ejemplo:
Código
  1. def funcion_sumar(primero, segundo):
  2. return primero+segundo
  3.  
  4. sumando = funcion_sumar
  5. print "Resultado:",sumando(1,2)
Salida:
Código:
Resultado: 3
Lo mismo podemos aplicar con las anteriores funciones mencionadas. Yo sinceramente la utilidad que le veo es más que nada para la ofuscación de códigos o para utilizar menos carácteres en
nuestro código, cuando llamamos muchas veces a la función.

 Bien, otra forma singular de llamar funciones podría ser insertar nuestras funciones en un diccionario, para quienes no saben a que me refiero con un diccionario:
 
Código
  1. diccionario = {"variable":valor}
Un sencillo ejemplo para que vean a que me refiero:
 
Código
  1. funciones = {"alfa":raw_input,"nums":input}
  2. print funciones['alfa']("Texto ::>")
  3. print funciones['nums']("Numero ::>")
  4.  
Bien, es una manera diferente, pero no es la mejor para optimizar nuestros códigos...
Una forma similar, pero más corta sería:
Código
  1. alfa, nums = (raw_input, input)
  2. print alfa("Texto ::>")
  3. print nums("Numero ::>")
Eso quiere decir que alfa = raw_input() y nums = input()

Lo bueno de esto es que no nos limita a solo usarlo con Python en Consola, podemos aplicarlo por
ejemplo al hermoso PyQT4, por ejemplo, para no tener que escribir QtGui.QPushButton("Valor",self)
cada vez que creamos un botón, o para no tener que escribir QtGui.QLabel("Valor",self) por cada
label, tampoco tener que escribir QtGui.QLineEdit("Valor",self) por cada LineEdit en el formulario.

Podemos usar las siguientes líneas:
Código
  1. label, inpt, boton =(QtGui.QLabel,QtGui.QLineEdit,QtGui.QPushButton)
Por lo que luego de eso para crear un QtGui.QLabel(); solo debemos llamarlo así:
Código
  1. label("New Label", self)
De igual forma es aplicable para cada elemento, también podríamos utilizarlo para ofuscar códigos en PyQT4, pero a eso si que no le veo más utilidad que proteger nuestro source QT4, un ejemplo
de lo que digo en PyQT4:
Código
  1. # -*- coding: utf-8 -*-
  2. # Autor : 0x5d ~> JaAViEr
  3. # Sitio Web ~> www.codigo.ga
  4. # Twitter ~> @javieresteban__
  5.  
  6. from PyQt4 import QtGui, QtCore
  7. import sys
  8.  
  9. class testeo(QtGui.QWidget):
  10.  def __init__(self, parent=None):
  11.    QtGui.QWidget.__init__(self, parent)
  12.    self.setWindowTitle("Bin to Dec | 0x5d")
  13.    label, inpt, boton =(QtGui.QLabel,QtGui.QLineEdit,QtGui.QPushButton)
  14.    self.label_binario = label("Binario :", self).setGeometry(2,15,59,17)
  15.    self.input_binario = inpt(self)
  16.    self.input_binario.setGeometry(60,10,230,27)
  17.    self.label_resultado = label("Resultado :", self).setGeometry(2,50,80,17)
  18.    self.input_salida = inpt(self)
  19.    self.input_salida.setGeometry(80,43,210,27)
  20.    self.input_salida.setReadOnly(True)
  21.    self.boton_limpiar = boton("Limpiar campos", self)
  22.    self.boton_limpiar.setGeometry(1,75,140,27)
  23.    self.boton_convertir = boton("Convertir", self)
  24.    self.boton_convertir.setGeometry(145,75,140,27)
  25.    self.connect(self.boton_limpiar, QtCore.SIGNAL("clicked()"), self.clear_inputs)
  26.    self.connect(self.boton_convertir, QtCore.SIGNAL("clicked()"), self.conversor)
  27.  
  28.  def clear_inputs(self):
  29.    self.input_binario.setText("")
  30.    self.input_salida.setText("")
  31.  
  32.  def conversor(self):
  33.    numero = str(self.input_binario.text())
  34.    t = 0
  35.    for i,h in zip(numero[::-1],range(0,len(numero))): t+=int(i)*2**int(h)
  36.    self.input_salida.setText(str(t))
  37.  
  38. app = QtGui.QApplication(sys.argv)
  39. form = testeo()
  40. form.show()
  41. app.exec_()
  42.  
Espero sea de su agrado el artículo :) !

Fuente : http://codigo.ga/python/python-tecnicas-reduccion-y-ofuscacion-de-codigo/

Saludos, Javier !
29  Programación / Scripting / [Código-Python]Contar repeticion de letras en un texto - JaAViEr|0x5d en: 24 Abril 2012, 07:15 am
Hola, buen día gente ! :P
En esta oportunidad hice un código que nos pedirá un texto cualquiera y contará cuantas veces se repite cada letra en el texto:
Código
  1. # Autor: 0x5d | JaAViEr
  2. # Twitter: @0x5d
  3. # Fuente : http://rootcodes.com
  4. string, lista, nueva = (raw_input(">"), [], [])
  5. for h in string:
  6. contador=0
  7. for s in string:
  8. if h == s:
  9. contador += 1
  10. lista.append("%s:%s"%(h,contador))
  11. out = [nueva.append(nn) for nn in lista if nn not in nueva]
  12. print "Repeticiones:"
  13. for salida in nueva: print salida
Ejemplo de salida:
Código:
jaavier@Debian:~/codigos$ python repeticiones.py
>hola, saludos a todos
Repeticiones:
h:1
o:4
l:2
a:3
,:1
 :3
s:3
u:1
d:2
t:1
Fácilmente podrían hacer para que haga lo mismo pero desde un archivo :P

Saludos, Javier.
30  Programación / Scripting / [Python]Formas de saber si una palabra es palindromo en: 24 Abril 2012, 06:49 am
Hola, buen día a todos !

En esta oportunidad no vengo a dejar un graaaaaaaaaan material :P , pero siempre me gusta intentar hacer una misma cosa de varias maneras. Es por eso que decidí ver de cuantas formas podríamos hacer para verificar si una palabra es palíndromo. Bien, veamos el primero:
Código
  1. n = raw_input(">")
  2. if n.isdigit():
  3. d = [h for h in n]
  4. if d == d[::-1]:  print "El numero es capicua: %s"%(n)
  5. else: print "El numero no es capicua : %s"%(n)
  6. else:
  7. d = [h for h in n]
  8. if d == d[::-1]:  print "El texto es palindromo: %s"%(n)
  9. else: print "El texto no es palindromo : %s"%(n)
Como podemos apreciar el código es bastante sencillo , pedimos entrada por teclado. Verificamos si es la variables un dígito o no(if n.isdigit()). Luego la típica salida invirtiendo la cadena con variable[::-1].

Veamos otro código más sencillo aún:
Código
  1. variable = raw_input("Texto ::> ")
  2. print "Resultado:",[h for h in variable[::-1]] == [s for s in variable]
Apenas dos líneas :D , un ejemplo de salida sería:
Código:
jaavier@Debian:~/codigos$ python palindromo.py
Texto ::> reconocer
Resultado: True
jaavier@Debian:~/codigos$
Otro ejemplo muy similar sería:
Código
  1. var = raw_input("Texto ::> ")
  2. print "Respuesta:",var == var[::-1]
Con la misma salida que el anterior:
Código:
jaavier@Debian:~/codigos$ python palindromo.py
Texto ::> reconocer
Resultado: True
jaavier@Debian:~/codigos$
Y pues la manera más típica:
Código
  1. var = raw_input("Texto ::> ")
  2. if var==var[::-1]:
  3. print "Es Palindromo"
  4. else:
  5. print "No es palindromo"
También tenemos la famosa función lambda():
Código
  1. palindromo = lambda parametro: parametro==parametro[::-1]
  2. print palindromo(raw_input("Texto ::> "))
Nos devolverá True o False.
Y Pues si son unos amantes de la reducción de código como yo, pueden aplicar:
Código
  1. print (lambda d: d==d[::-1])(raw_input("Texto ::> "))
Y a ti , que forma se te ocurre ?

Fuente: http://rootcodes.com/pythonformas-de-saber-si-una-palabra-es-palindromo/

Saludos, Javier.
Páginas: 1 2 [3] 4 5 6
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines