Hoxe imos falar de comunicacións, concretamente grazas a ese conceito astracto co que se designa ao punto final dunha conexión ao clásico conceito de socket e concretamente explificaremos a súa utilidade con Python.
Para que se utilizan os sockets? Para comunicarse con outros programas no mesmo ou noutro PC.
Os sockets defínense por IP, porto e protocolo. En python, concretamente hai unha librería para isto coa que podemos crear un obxeto "socket":
socket = socket.socket()
Existen sockets de fluxo (socket.SOCK_STREAM) ou sockets de datagramas (socket.SOCK_DGRAM) dependendo de se o servizo emprega TCP ou UDP respeitivamente. Na gran maioría de utilidades nas que podemos pensar chéganos cos sockets de fluxo.
Tamén se pode especificar o tipo de familia, pero non entraremos no tema, fariase deste xeito (O seguinte exemplo sería o default, e dicer, o standar e que se supón ao non especificar o tipo de socket nin a familia):
socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
Que mellor forma de ver a súa utilidade que grazas a un pequeno exemplo con comentarios?
Fagamos a parte final dun wargame, creemos unha comunicación entre un arquivo cliente e un arquivo servidor, fagamos que ao enviar unhas determinadas palabras ou mensaxes desencriptadas dun documento anterior a unha dirección que aparece no mesmo, recibamos unha resposta X que sexa o contrasinal para pasar á seguinte proba. Pois sería algo así:
#servidor
#!/usr/bin/env python #Hackliza! server import socket #importamos a libreria socket #creamos o obxecto socket e pomos a escoitar en localhost porto 6666 s = socket.socket() s.bind(("localhost", 6666)) s.listen(1) #cando chega unha mesaxe (datos), establecemos a conexion sc, addr = s.accept() #Mentras estexa establecida a conexion recibimos a informacion e en funcion #ao recibido enviamos unha resposta while True: recibido = sc.recv(1024) print "",recibido if recibido == "quit": print "\n" sc.send("Sorte nos seguintes retos") break if recibido == "hackingtheworld": print "Enviando solucion...\n" sc.send("O resultado e: Hackliza!") print "Non superado\n" sc.send("Segue intentadoo...") print "Apagando servidor" #pechamos a conexion e a continuacion o servidor ao recibir "quit" sc.close() s.close()
#cliente
#!usr/bin/env python #Hacliza! cliente import socket #creamos o obxeto socket e conectamonos a localhost e porto 6666 s = socket.socket() s.connect(("localhost", 6666)) #mentras non escribamos quit poderemos introducir unha mesaxe para ver o resultado while True: password = raw_input("[+]Que queres saber? > ") s.send(password) recibido = s.recv(1024) if password == "quit": print "",recibido break exit() print "",recibido #ao sair mediante "quit" pechase o cliente s.close()
No hay comentarios:
Publicar un comentario