Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Once

#261
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
gracias, por la ayuda. pero ando usando mechanize se me olvido decir. y quiero extraer la informacion solo con expresiones regulares. sin ningun otro parametro ni nd. cual seria el code? gracias de antemano.

¿qué información extraes con mechanize? si quieres pon el code y dime que quieres cambiar para poder ayudarte mejor

Saludos!
#262
Ohh, núnca he trabajado con IRC y la 4 condición me asusta un poco, pero creo que intentaré hacer algo en Python.

PD: la 4 regla dice: "Se debe presentar Codigo de fuente y ejecutable comprimidos en un archivo RAR." seguro hago con Python y uso Linux. Igual tendría que enviar un ejecutable?

Saludos!
#263
Python / Re:Copiar y escribir bites de un programa
Noviembre 26, 2013, 07:51:17 PM
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
Muchísimas gracias!!. Me has ayudado mucho!! XD

No hay problema bro, para eso estamos.  ;)

Si necesitas algo más ya sabes que hacer.

Saludos!
#264
Python / Re:Copiar y escribir bites de un programa
Noviembre 26, 2013, 07:42:35 PM
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
Construir el exe. Lo que me pasa es que no se me construye bien el exe y falla al ejecutarlo, lee los bytes del exe y los pasa a hex, pero cuando paso lo hex a .exe me da errores , no consigo montar la exe como era antes

Ok, el error es simple, estás abriendo el archivo como escritura y necesitas abrirlo como escritura binaria. Así que cambia está parte:

Código: python
crear_archivo = open('ejecutable.exe','w')


por:

Código: python
crear_archivo = open('ejecutable.exe','wb')


Así no deberias tener problemas (avisa si algo).

Saludos!
#265
Python / Re:Copiar y escribir bites de un programa
Noviembre 26, 2013, 07:29:51 PM
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
Python 2.7

¿Qué exactamente necesitas hacer?

Saludos!
#266
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
Bastante interesante el ejemplo, mi idea era "generar" un switch un poco más compacto, pero la verdad esta idea me ha gustado bastante, me has puesto a pensar bastante xD (me costó entender la sintaxis, creo que estoy un poco oxidado jaja) y no encontré mucha información por papi google.

Ups, lo siento bro, te explico:

locals() te regresa un diccionario con los elementos locales, globals() te regresa un diccionario con los elementos globales. Al regresar un diccionario, puedes acceder a cualquier valor con [] en nuestro caso con [switch("encode")] (que nos regresa: quote) y también le puedes pasar parametros como a una función normal ("You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login")

Así que quedaría algo así: locals()["quote"](parametros) y lo que haría es llamar a la función quote pasándole como parametro "You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login"

You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
Siempre tienes algo bajo la manga once :P

Zalu2!

Yo culpo a Python, cada día descubres algo nuevo :p

Saludos bro y que bueno verte de nuevo
#267
La única forma que se me ocurre de hacer lo que necesitas de una forma similar a la que planteas al inicio sería algo así:

Código: python
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import urllib


def hexadecimal(texto):
    return texto.encode("hex")

def quote(texto):
    return urllib.quote(texto)

def switch(opcion):
    return {
            "bin2hex": "hexadecimal",
            "encode": "quote",
    }[opcion]

print locals()[switch("encode")]("http://underc0de.org/foro/python/?action=post")


Saludos!
#268
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
Se cierran para que no se haga spam, por eso se debe de tratar de resumir todo en un mismo post, las cosas que querías agregar las hubieses puesto en la primera respuesta, al menos eso pienso yo, lo abriría pero no tengo los permisos, saludos.

A veces es imposible responder una pregunta en el primer mensaje. Además hay que tener en cuenta que de las preguntas principales también salen dudas que a veces quedan en el aire y sería inútil hacer un post para responder esas dudas

Saludos!
#269
Esa es mi dudad, por qué cierran algunos de los temas que se marcan como resueltos? he leído las reglas y en ninguna dice que eso sucedería.

Personalmente me molesta un poco porque si bien un tema puede que esté resuelto, la discución puede no haber terminado y puede quedar algo que aportar.

PD: de paso me gustaría saber si alguien puede reabrir este tema: You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login

Saludos y mis intenciones no son "armar problema"!

#270
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
Coincido con 11Sep.

hex(number) -> string

Saludos!
WhiZ

El asunto no tiene que ver (o eso creo) con el hex, por ejemplo:

Código: python

def switch(x,s):
    return{
        'bin2hex': hex(s),
        'encode' : 'Otra cosa...'
    }[x]
     
print switch('bin2hex',255)


funciona correctamente, el problema es usando urllib.

Zalu2!

No es cierto, el problema en realidad es de la función hex() porque sólo te convierte a hexadecimal números enteros y urllib.quote() recibe una cadena una cadena. Además debes tener encuenta que Python genera todo el diccionario Así que obligatoriamente (si no hay errores) ejecuta ambas funciones hex() y urllib.quote()

Saludos!
#271
El error que te da es:
CitarTypeError: hex() argument can't be converted to hex
¿Verdad?

Saludos!
#272
Wargames y retos / [Reto] vulnerame
Noviembre 23, 2013, 07:33:01 PM
Acabo de encontrar este viejo reto que codee hace mucho tiempo para OverSec, espero lo disfuten

Nota: No tengo los datos del host, así que si alguien se pasa de listo no tengo forma de ponder todo en su lugar de nuevo y dañarán el reto a los demás users.

You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login

Saludos y comenten que les pareció.
#273
Python / Re:Tutorial envio de archivos usando sockets
Noviembre 22, 2013, 08:59:08 PM
Gracias bro, si tengo tiempo haré un par más para resolver esas dudas tan repetitivas que me hacen por privado.

Saludos!
#274
Python / Tutorial envio de archivos usando sockets
Noviembre 22, 2013, 01:46:12 AM
Hola, sé que en internet se encuentran multitud de ejemplos acerca de
cómo hacer lo que voy a explicar a continuación pero como no es la primer
vez que me lo preguntan, decidí escribir este pequeño tutorial y
explicarlo lo más sencillo que pueda:

¿Qué usaremos?

  • Python 2.7

Problemas con los sockets:

En python es muy fácil escribir aplicaciones cliente/servidor, sólo
tenemos que echar mano de la libreria nativa You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Loginde Python.

Pero una vez comenzamos a trabajar con ésta libreria, nos damos cuenta
que se nos presentan un par de problemas o incovenientes que a veces no
hallamos la manera de solucionar, entre ellos se encuentra que el método
del objeto socket sólo nos permite recibir hasta una cantidad
FIJA de bytes.

Sí se envian datos menores o iguales a la cantidad establecida en nuestro
método recv recibiremos el mensaje sin problemas. Pero ¿y si el mensaje
es mayor a la cantidad de bytes establecidos?

La solución:

La solución es relativamente sencilla, pero suele ser un poco confusa así
que intentaré explicarlo de la forma más sencilla.

Programaremos un protocolo para nuestro cliente servidor.

Muy bonito todo, pero, ¿Qué es un protocolo?

Definamos protocolo como un simple conjunto de reglas que usan dos máquinas
para comunicarse. Por ejemplo: si dos personas (un bartener y un cliente)
hablan idiomas distintos (inglés y español) jamás se entenderán y el cliente
jamás obtendra su cerveza; pero si hablan el mismo idioma (inglés-inglés o español-español)
se entenderán y el cliente tendrá su cerveza y el bartender su dinero.

En este ejemplo, el idioma -ya sea español o inglés- es el protocolo que
las dos máquinas (el cliente y el bartender) usan para comunicarse, pero tienen
que usar el mismo protocolo -hablar el mismo idioma-.

Sí hasta ahora has entendido, nuestro siguiente paso será diseñar nuestro
protocolo

Ahora sí, manos a la obra:

Antes definamos el trabajo de cada aplicación:

Cliente: Se encargará de enviar el archivo
Servidor: Se encargará de recibir y guardar el archivo en el disco duro

Teniendo en cuenta esto, ya nos damos una idea de lo que queremos hacer:
el cliente enviará la longitud (cantidad de bytes) del archivo que quiere enviar, el servidor
recibe la longitud y se prepara para recibir el archivo; avisa al cliente
que está listo para recibir el archvio. El cliente envia el archivo.

You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login

En la imagen de arriba (disculpen el paint :P), trato de explicar un poco mejor
cómo funcionará nuestro protocolo.

Las líneas rojas representan los datos que son enviados por el cliente hacía el servidor
Las líneas amarillas representan los datos que son enviados por el servidor hacía el cliente
Los bloques negros -los que parecen una T- significan que los datos que son recibidos
deben ser verificados para continuar.

Básicamente quedaría así:

Cliente: Enviar longitud archivo.
Servidor: Comprobar la longitud (debe ser un número).
Servidor: En caso que la longitud sea correcta, avisar al cliente para que envie al archivo.

Cliente: Comprobar que el servidor está listo.
Cliente: Enviar archivo al servidor.

Código del cliente:

Código: python
# -*- coding: utf-8 -*-

# Envio de archivos: cliente
# 11Sep

import socket

# Creamos una lista con la dirección de
# la máquina y el puerto donde
# estara a la escucha
CONEXION = (socket.gethostname(), 9001)
ARCHIVO = "a.pdf"


# Instanciamos el socket y nos
# conectamos
cliente = socket.socket()
cliente.connect(CONEXION)

# Abrimos el archivo en modo lectura binaria
# y leemos su contenido
with open(ARCHIVO, "rb") as archivo:
    buffer = archivo.read()

while True:
    # Enviamos al servidor la cantidad de bytes
    # del archivo que queremos enviar
    print "Enviando buffer"
    cliente.send(str(len(buffer)))
   
    # Esperamos la respuesta del servidor
    recibido = cliente.recv(10)
    if recibido == "OK":
        # En el caso que la respuesta sea la correcta
        # enviamos el archivo byte por byte
        # y salimos del while
        for byte in buffer:
            cliente.send(byte)
        break


Código del servidor:

Código: python
# -*- coding: utf-8 -*-

# Envio archivos: servidor
# 11Sep

import socket

# Creamos una lista con los datos del la conexión
CONEXION = (socket.gethostname(), 9001)

servidor = socket.socket()

# Ponemos el servidor a la escucha
servidor.bind(CONEXION)
servidor.listen(5)
print "Escuchando {0} en {1}".format(*CONEXION)
# Aceptamos conexiones
sck, addr = servidor.accept()
print "Conectado a: {0}:{1}".format(*addr)
while True:
    # Recibimos la longitud que envia el cliente
    recibido = sck.recv(1024).strip()
    if recibido:
        print "Recibido:", recibido
    # Verificamos que lo que recibimos sea un número
    # en caso que así sea, enviamos el mensaje "OK"
    # al cliente indicandole que estamos listos
    # para recibir el archivo
    if recibido.isdigit():
        sck.send("OK")
       
        # Inicializamos el contador que
        # guardara la cantidad de bytes recibidos
        buffer = 0
        # Abrimos el archivo en modo escritura binaria
        with open("archivo", "wb") as archivo:
            # Nos preparamos para recibir el archivo
            # con la longitud específica
            while (buffer <= int(recibido)):
                data = sck.recv(1)
                if not len(data):
                    # Si no recibimos datos
                    # salimos del bucle
                    break
                # Escribimos cada byte en el archivo
                # y aumentamos en uno el buffer
                archivo.write(data)
                buffer += 1
           
            if buffer == int(recibido):
                print "Archivo descargado con éxito"
            else:
                print "Ocurrió un error/Archivo incompleto"
        break


Como pueden ver, el código no es nada del otro mundo. Eso sí,
nuestro protocolo tiene un par de fallos potenciales que queda en sus
manos encontrar y solucionar.

Saludos!
11Sep.
#275
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
Muchas gracias por la ayuda =)

Ya te preguntaré alguna cosilla más de algún ejercicio :P


Un saludo

No hay problema bro, para eso estamos.

Saludos!
#276
Hola bro, primero un par de observaciones (espero no te molesten).

1) Cuando usas input no es necesario convertir el valor a int
2) Las comparaciones en Python se hacen con un doble igual (==) no con uno solo

Ahora, con respecto al código: el problema con el bucle lo tienes acá:

Código: python
while (i=1):


Como te dije más arriba, las comparaciones se hacen con un doble igual, por lo que tienes un error de sintaxis. Además, hasta esa parte, no has dado ningún valor a la variable i.

Para solucionarlo simplemente tienes que usar un bucle infinito:

Código: python
#!/usr/bin/env python

num1 = input('Escribe un numero: ')

i = 0

while (True):
        i=i+1
        num2 = input('Escribe un numero: ')

        if (num2<num1):
                break
        else:
                num1=num2
        print 'Se han contado',i,'veces'



Saludos!
#277
Python / Re:[PyQt4] Chat multiconexión
Noviembre 18, 2013, 10:36:11 PM
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
muy interesante

es raro encontrarse con códigos viejos, uno siempre les encuentra detalles que representan lo que uno aprendió desde ese momento hasta ahora jajaja.

saludos!

Es verdad brother, por eso me gusta revisar de vez en cuando mis backups.

PD: Que bueno verte de nuevo bro.

Saludos!
#278
Tampoco es una expresión regular tan compleja como para usar una libreria externa. Así lo haría yo (con compile y findall):

Código: python
import re
import urllib

text = urllib.urlopen("http://www.sensacine.com/peliculas/en-cartelera/cines/").read()

expresion = re.compile("(<h2.+?</h2>)", re.DOTALL)

data = expresion.findall(text)

for u in data:
    print u, "\r\n"


Saludos!
#279
Python / [PyQt4] Chat multiconexión
Noviembre 08, 2013, 09:39:23 PM
Revisando en uno de mis backups encontré este chat que codee hace algún tiempo para una LAN con un servidor que acepta multiples conexiones. Hay mucho que mejorar pero espero le sirva a alguien.

Servidor:

Código: python
from threading import Thread as Process

import socket
import cPickle as pickle

class servidor():
    def __init__(self):
        self.port = 9001
        self.host = socket.gethostname()
        self.conectados = []
        self.escuchar()
   
    def escuchar(self):
        try:
            ser = socket.socket()
            ser.bind((self.host, self.port))
            ser.listen(5)
            while True:
                (sck, addr) = ser.accept()
                if not sck in self.conectados:
                    self.conectados.append(sck)
                    Process(target=self.indpt, args=(sck,addr)).start()
        except KeyboardInterrupt:
            print c.FAIL % ("Saliendo")
            ser.close()
            return
   
    def indpt(self, sck, addr):
        try:
            direccion = "%s:%i" % addr
            print c.OKGREEN % ("conectado a: " + direccion)
            sck.send(pickle.dumps(("Servidor", "Conectado al servidor")))
            while True:
                buff = sck.recv(10024).strip()
                if not len(buff):
                    print c.FAIL % (direccion + " desconectado")
                    self.conectados.remove(sck)
                    sck.close()
                    return
                else:
                    for i in self.conectados:
                        if i != sck:
                            print i.send(buff + "\r\n")
        except:
            print c.FAIL % (direccion + " desconectado")
            sck.close()
            return

class c:
    OKGREEN = '\033[92m[*] %s\033[0m'
    FAIL = '\033[91m[-] %s\033[0m'

servidor()


Cliente:

Código: python
from PyQt4.QtCore import *
from PyQt4.QtGui import *

import cPickle as pickle
import socket
import time
import sys


class Gui(QWidget):
    def __init__(self, host, port):
        QWidget.__init__(self)
       
        self.nick = "Yo"
       
        self.recv = QTextEdit()
        self.send = QLineEdit()
        self.btn_send = QPushButton("Enviar")
        self.btn_connect = QPushButton("Conectar")
       
        hbox = QHBoxLayout()
        vbox = QVBoxLayout()
       
        vbox.addWidget(self.recv)
        vbox.addLayout(hbox)
        vbox.addWidget(self.btn_connect)
       
        hbox.addWidget(self.send)
        hbox.addWidget(self.btn_send)
       
        self.setLayout(vbox)

        self.btn_send.clicked.connect(self.enviar)
        self.btn_connect.clicked.connect(self.conectar)
   
    def conectar(self):
        self.con = Conectar()
        self.connect(self.con, SIGNAL("conexion"), self.conexion)
        self.con.show()
   
    def conexion(self, data, nick):
        self.nick = nick
        self.sck = socket.socket()
        self.sck.connect(data)
       
        self.e_thread = Escuchar(self.sck)
        self.connect(self.e_thread, SIGNAL("message"), self.mensaje)
        self.e_thread.start()
   
    def mensaje(self, data):
        mensaje = '<font color="red">%s: </font>%s' % data
        self.recv.append(mensaje)
   
    def enviar(self):
        data = str(self.send.text().toAscii())
       
        paquete = (self.nick, data)
        paquete = pickle.dumps(paquete)
       
        if data:
            self.sck.send(paquete)
            self.send.setText("")
            self.mensaje((self.nick, data))
   

class Conectar(QWidget):
    def __init__(self):
        QWidget.__init__(self)
       
        self.host = QLineEdit(socket.gethostname())
        self.port = QLineEdit()
        self.nick = QLineEdit()
        self.btn_connect = QPushButton("Conectar")
       
        hport = QHBoxLayout()
        hhost = QHBoxLayout()
        hnick = QHBoxLayout()
        vbox = QVBoxLayout()
       
        hhost.addWidget(QLabel("Host:"))
        hhost.addWidget(self.host)
       
        hport.addWidget(QLabel("Port:"))
        hport.addWidget(self.port)
       
        hnick.addWidget(QLabel("Nick:"))
        hnick.addWidget(self.nick)
       
        vbox.addLayout(hhost)
        vbox.addLayout(hport)
        vbox.addLayout(hnick)
        vbox.addWidget(self.btn_connect)
       
        self.setLayout(vbox)
       
        self.btn_connect.clicked.connect(self.comprobar)
   
    def comprobar(self):
        port = int(self.port.text().toAscii())
        host = str(self.host.text().toAscii())
        nick = str(self.nick.text().toAscii())
       
        if not nick:
            nick = host
       
        if port and host:
            self.emit(SIGNAL("conexion"), (host, port), nick)

class Escuchar(QThread):
    def __init__(self, sck):
        QThread.__init__(self)
        self.sock = sck
       
    def run(self):
        while True:
            buff = self.sock.recv(10024).strip()
            serialized = pickle.loads(buff)
            time.sleep(0.3)
            self.emit(SIGNAL("message"), serialized)
   
    def __del__(self):
        self.wait()

App = QApplication(sys.argv)
GUI = Gui("192.168.1.7", 9001)
GUI.show()
App.exec_()


Saludos!
#280
Python / Re:Screenshot y WebcamCapture (proyecto PyRAT)
Noviembre 06, 2013, 10:35:37 PM
¡Ingenioso! Buen trabajo bro, me gustaría ver más de este proyecto

Saludos!