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