Pythonizándo.me

Buenas tardes a todos.
Tal como el título lo indica, estoy incursionando y en proceso de aprendizaje del lenguaje Python. He trabajado con el durante mis prácticas cuando me ha tocado realizar unas mejoras en un sistema desarrollado con Django.
Mi curiosidad por aprender más me ha llevado a leer y también a codificar. En esta oportunidad les mostraré algo sencillo pero no por ello facil al principio.
Dado que tenía un código en C de un cliente daytime, pensé que sería bueno por empezar por realizar lo mismo pero en Python.
Primeramente, para obtener respuesta de día y hora necesito a quién preguntárselo, lógicamente. Para ello instalé localmente el servidor de la siguiente manera:

Aclaración: todo lo a continuación se describe fue realizado en Linux Mint Debian Edition, por lo que servirá de igual manera en Debian o cualquier otra distro basada en ella.

$sudo apt-get install xinetd 


Seguidamente he configurado algunos parámetros del fichero que se encuentra bajo el directorio /etc/xinetd/daytime. Sólo ha sido necesario cambiar el valor de disable que originalmente tiene un valor yes por no. En mi caso voy a hacer pruebas sobre el protocolo tcp.

$sudo vim daytime

service daytime
{
        disable         = no
        type            = INTERNAL
        id              = daytime-stream
        socket_type     = stream
        protocol        = tcp
        user            = root
        wait            = no
}
 
Seguidamente recargamos el servicio:

$sudo invoke-rc.d xinetd reload

Este servicio escucha en el puerto 13, y para asegurarnos de que así sea, ejecutamos el siguiente comando en consola:

$sudo netstat -tulpn | grep 13

El resultado de ese comando sería el siguiente:

tcp        0      0 0.0.0.0:13              0.0.0.0:*               LISTEN      3948/xinetd

Vale, el servicio daytime ya está funcionando, ahora nos queda lo más interesate, el código en python de nuestro cliente tcp daytime.

'''Cliente tcp daytime en python
Author: @OvandoVero''' 

import sys
#importo el modulo para usar paquetes del sistema
import socket
#importo el modulo de sockets
import errno
#importo el modulo para verificacion de errores

try:
        sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM) #creo el socket
except socket.error: #capturo excepciones
        sock = None
        print ("Hubo un error al crear el socket")

try:
        conectar = sock.connect(('localhost',13)) #me conecto al puerto donde corre el servicio
except socket.error:
        sock.close()
        sock = None
        print ("Hubo un error al conectar con el servidor")

try:
        mensaje = sock.recv(4096) #recibo mi mensaje en un buffer con esa longitud
except socket.error:
        print ("Hubo un error al recibir")

print mensaje #muestro mi mensaje

sock.close() #cierro el socket

El mensaje que obtengo como respuesta es la hora y fecha del sistema ]:)
Como habrán notado, es sumamente sencillo crear sockets y conectarse a algún puerto que se encuentre escuchando y brindando algún servicio.
Proximamente estaré compartiendo algunos códigos más que he realizado donde podremos apreciar cómo manejar un servidor.
Saludos!

Comentarios

Entradas más populares de este blog

Zabbix en dos días (día 1)

OpenVPN para todos :D

GRUB2 experience