convertir code de python2 a 3.7

Iniciado por sytem200, 3 Agosto 2019, 04:55 AM

0 Miembros y 2 Visitantes están viendo este tema.

sytem200

alguien podria brindarme un poco de su conocimiento  tengo  un cliente y un servidor pero creo que esta echo en python 2.x   podrian decirme los errores o cuales codigos modificar para que sea a  python 3.7 gracias

servidor

import socket
import threading
import commands

def conexiones(socket_cliente):
    peticion = socket_cliente.recv(1024)
    print "[*] Mensaje recibido: %s" % peticion
    respuesta = commands.getoutput(peticion)
    socket_cliente.send(respuesta)
    socket_cliente.close()

ip = "0.0.0.0"
puerto = 5555
max_conexiones = 5
servidor = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

servidor.bind((ip, puerto))
servidor.listen(max_conexiones)

print "[*] Esperando conexiones en %s:%d" % (ip, puerto)

while True:
    cliente, direccion = servidor.accept()
    print "[*] Conexion establecida con %s:%d" % (direccion[0] , direccion[1])
    conexiones = threading.Thread(target=conexiones, args=(cliente,))
    conexiones.start()



Cliente

import socket

servidor = "127.0.0.1"
puerto = 5555

cliente = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
cliente.connect((servidor, puerto))
cliente.send("ls /");
respuesta = cliente.recv(4096)
print "[*] Respuesta recibida: "+respuesta
[code]
[/code]

Aguijon_zerO

#1
Cita de: sytem200 en  3 Agosto 2019, 04:55 AM
alguien podria brindarme un poco de su conocimiento  tengo  un cliente y un servidor pero creo que esta echo en python 2.x   podrian decirme los errores o cuales codigos modificar para que sea a  python 3.7 gracias

servidor

import socket
import threading
import commands

def conexiones(socket_cliente):
   peticion = socket_cliente.recv(1024)
   print "[*] Mensaje recibido: %s" % peticion
   respuesta = commands.getoutput(peticion)
   socket_cliente.send(respuesta)
   socket_cliente.close()

ip = "0.0.0.0"
puerto = 5555
max_conexiones = 5
servidor = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

servidor.bind((ip, puerto))
servidor.listen(max_conexiones)

print "[*] Esperando conexiones en %s:%d" % (ip, puerto)

while True:
   cliente, direccion = servidor.accept()
   print "[*] Conexion establecida con %s:%d" % (direccion[0] , direccion[1])
   conexiones = threading.Thread(target=conexiones, args=(cliente,))
   conexiones.start()



Cliente

import socket

servidor = "127.0.0.1"
puerto = 5555

cliente = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
cliente.connect((servidor, puerto))
cliente.send("ls /");
respuesta = cliente.recv(4096)
print "[*] Respuesta recibida: "+respuesta
[code]
[/code]


Otra infeliz victima de "Aprende Python 2.x por que tiene mas soporte"...

- En primer lugar.. decídete si vas a identar tabulando o espaciando el codigo por que en 3.x no se tolera esa mezcla.

- Despidete de commands, eso ya esta muy viejo, Utiliza el modulo subprocess.

- 3.x es muy estricto con el envio de bytes, asi que encodea el mensaje antes de enviarlo si esta en formato string y decodificalo al recibirlo si lo piensas leer.

Te doy esas pistas para que lo analises pero no te lo doy resuelto  por que aqui no hacemos tareas.

Es un poco tedioso pasar de 2.x a 3.x pero a todos les llega el dia del juicio..
HACKING / CiberSecurity:
https://seguridadaguijon.blogspot.com/

tincopasan

1)
Citartengo  un cliente y un servidor pero creo que esta echo en python 2.x
fijate si anda en python 3.x y ahí sabrás si anda o no

2)
Citarpodrian decirme los errores o cuales codigos modificar para que sea a  python 3.7

python trae por defecto un conversor de 2.x a 3.x
2to3.py fijate como se usa y listo

sytem200

gracias por su respuesta pero yo no estoy usando python2  y este code esta en python 2 queria convertirlo a python 3  y  e probado 2to3.py y solo sirve para la function print()

Aguijon_zerO

#4
2to3.py es basura, solo ignora eso.. ni siquiera te conviene por que para adaptarse a los cambios lo mejor es escribirlo todo desde el principio manualmente si tienes pensado aprender python3  .. cuando notes las diferencias tu mismo podras crear un programa de iteracion con expresiones regulares para hacer las conversiones.. Solo sigue las pistas que te di, no es tan dificil como parece..
HACKING / CiberSecurity:
https://seguridadaguijon.blogspot.com/

sytem200


tincopasan

Citar2to3.py es basura, solo ignora eso..
a veces me olvido que no todos entienden lo que es el sarcasmo.
para alguien que espera todo servido por lo menos que busquen algo, ese script no lleva más de un minuto para desarrollarse, pero no le hago deberes a nadie que no intente nada.

WHK

#7
Siempre que una persona me pregunta si debe aprender python 2 o 3 le digo que 3.

Python 3 no es un poco diferente, es muy diferente, una ves que te acostumbras a programar para python2 es un tanto complicado acostumbrarse a python3 ya que te deja algunas malas prácticas al utilizar cosas que ya están obsoletas.

Que cambios básicos notarás en python 3?:

- Identación.
- Codificación de caracteres mas estricto.
- Manejo de importación de módulos (rutas en el fs).
- Librerías nativas alternativas (muchas librerías nativas de python2 ya no son compatibles como urllib).
- Manejo de memoria e hilos de proceso.
- Cambio en la llamada a funciones (se agregan parentesis, ya no puedes argumentar con espacios).
- Formato especial de print, formato de texto, manejo de salto de linea, flush implicito y explicito, etc.
- Etc.

Por otro lado, no es llegar y reemplazar cosas para psar de python 2 a 3, debes plantear rehacer el script de cero, por ejemplo, algunas librerías de python 2 ya no funcionan de la misma manera que en el 3, por ejemplo, en python 2 no es muy estricto en cuanto al manejo de strings vs bytes pero en el 3 si y por eso muchos códigos dan error al traducir las funciones, lo mismo sucede con algunos operadores lógicos y matemáticos como el padding de bytes. El otro día estuve portando una función de paquetes TCP a bajo nivel de python 2 a python 3 y tuve que utilizar operadores y funciones totalmente diferentes.

En tu caso no es mucho lo que hay que cambiar, intenta utilizar print con parentesis, reemplazar los strings por bytes y prueba ejecutandolo desde python 3.