Programación de red
Escribir un servidor y un cliente
1. Uso de un socket TCP
TCP es el acrónimo de Transmission Control Protocol, es decir, protocolo de control de transmisión y fue desarrollado en 1973 y documentado en RFC 793. Está ubicado en el modelo OSI dentro de la capa de transporte y se utiliza ampliamente por su fiabilidad.
Se caracteriza por la forma de configurar la sincronización entre el cliente y el servidor y por la división en segmentos de los bytes a transmitir, cada segmento es perfectamente identificable y tiene un sistema de control de integridad, que hace que el que reciba un paquete pueda saber que el paquete está dañado y solicitarlo nuevamente.
El flujo TCP utiliza sockets y es el epónimo de Python que nos permitirá trabajar con TCP.
La idea aquí es hacer un mini servidor de datos clave-valor muy básico y lo más sencillo posible, para ver cómo crear un servidor y luego un cliente, pero también cómo manipular los datos que se intercambian de uno a otro.
Lo que hay que entender es que los datos que se pasan de un servidor a un cliente o de un cliente a un servidor, son bytes y nada más. En Python 2, esto podría ser confuso, ya que el tipo str de Python 2 era comparable a los bytes. En Python 3, el tipo str representa una cadena de caracteres en unicode y es el tipo bytes el que permite administrar los bytes.
Por lo tanto, es necesario estar atento a este punto, ya que la mayoría de los ejemplos presentes en la red, además de excelentes cualidades, están escritos para Python 2 y generan confusión sobre el tipo de datos realmente enviados.
Vamos a crear un servidor que espera recibir un número y que se convierte en un código funcional si este número es primitivo o no.
A continuación se muestra le código de esta función:
def isprime(n):
'''check if integer n is a prime'''
# negative numbers, 0 and 1 are not primes
if n < 2:
return False
# 2 is the only even prime number
if n == 2:
return True
# all other even numbers are not primes
if not n &...
Utilizar un protocolo estándar
1. Client HTTP
La idea aquí es ir a un servidor, a través del protocolo HTTP y obtener la información (página web u otra).
Para eso, hay que conocer el protocolo HTTP para saber de qué manera dirigirse al servidor. A continuación se muestra un ejemplo sencillo. Nos conectamos al servidor:
>>> conn = http.client.HTTPConnection('www.google.es')
Se utiliza uno de los métodos HTTP para ir a buscar los datos deseados:
>>> conn.request("GET", "/search?hl=fr&q=python")
Se recupera la respuesta del servidor:
>>> response=conn.getresponse()
Verificamos que todo salió bien y para eso hay que conocer los códigos de error HTTP, que están perfectamente explicados en la documentación oficial: http://docs.python.org/py3k/library/http.client.html
>>> print(response.status, response.reason)
200 OK
Como todo ha salido bien, es suficiente con recuperar la página HTML devuelta por el servidor:
>>> html=response.read()
Veamos a qué se puede parecer:
>>> len(html)
85558
>>> html[:80]
b'<!doctype html><head><title>python - Búsqueda
Google</title><script>window.goog'
Ahora basta con tratar el HTML para extraer los datos que uno desea y esto se puede hacer fácilmente con un analizador como BeautifulSoup y un poco de búsqueda para comprender la estructura de la página y ser capaz de extraer de ella la información correcta.
Obviamente, dicho uso es arcaico cuando hay servicios web, pero a veces no es posible hacer otra cosa (sitio antiguo o de pago).
Por supuesto, la redacción de dichos scripts requiere un seguimiento cuidadoso para detectar cualquier cambio en la estructura de la página, que ponga en peligro la correcta lectura de los datos. También es importante según la necesidad, guardar una copia de seguridad de las páginas enteras para volver a lanzar un tratamiento correctivo a posteriori.
La documentación oficial da un ejemplo para simular el POST de un formulario.
En la última parte, crearemos una aplicación de consola que ingresa los datos en una aplicación web, a través de la transmisión de consultas POST.
2. Servidor HTTP
Un servidor HTTP...
Wake-on-LAN
1. Requisitos previos
Wake-on-LAN es un estándar de red que permite a un ordenador arrancar en remoto.
Para esto, este hardware debe tener una placa madre que soporte el Wake-on-LAN y una tarjeta de red adaptada (actualmente, están directamente integradas en la placa madre, pero en caso contrario, hay un conector adicional).
También hay que configurar la BIOS del ordenador para que acepte las consultas Wake-on-LAN, pero también el sistema operativo (configuración de la tarjeta de red, relativa a la gestión de la alimentación).
El funcionamiento del protocolo implica que el rúter de red asocie la dirección MAC a una dirección IP. De lo contrario, es necesario realizar el broadcast, que es lo que vamos a hacer.
2. Implementación
El principio del Wake-on-LAN es emitir en la red un paquete mágico que, cuando se recibe por el destino, lo despierta.
La característica mágica de este paquete es que contiene seis veces FF, seguido de dieciséis repeticiones de la dirección MAC del destino a despertar.
A continuación se muestra su construcción:
>>> direccion_mac = b'C4:DF:12:58:4E:FC'
>>> paquete_magico = b'\xFF' * 6 + b''.join([int(i, 16).
to_bytes(1, byteorder='little') for i in direccion_mac.split(b':')])
* 16