Herramientas de usuario

Herramientas del sitio


informatica:programacion:cursos:python_avanzado_proyectos_seguridad:introduccion_sockets

¡Esta es una revisión vieja del documento!


Introducción a los sockets

Módulo perteneciente al curso Python avanzado para proyectos de seguridad

Los sockets son el componente principal que nos permite aprovechar las capacidades del sistema operativo para interactuar con la red. Puede pensar en los sockets como un canal de comunicación punto a punto entre un cliente y un servidor.

Los sockets de red son una manera fácil de establecer una comunicación entre procesos que están en la misma máquina o en máquinas diferentes. El concepto de un socket es muy similar al de los descriptores de archivos UNIX. Los comandos como read() y write() que nos permiten trabajar con el sistema de archivos, funcionan de manera similar a los sockets. Una dirección de socket de red consta de una dirección IP y un número de puerto. El objetivo de un socket es comunicar procesos a través de la red.

Un puerto es una abstracción empleada por los protocolos de transporte a fin de distinguir entre múltiples conexiones simultáneas en un solo nodo de la red.

Sockets de red en Python

La comunicación entre distintas entidades en una red se basa en el clásico concepto de sockets. Los sockets son un concepto abstracto con el que se designa al punto final de una conexión. Los programas utilizan sockets para comunicarse con otros programas, que pueden estar situados en computadoras distintas.

Un socket queda definido por la dirección IP de la máquina, el puerto en el que escucha y el protocolo que utiliza. Los tipos y funciones necesarios para trabajar con sockets se encuentran en Python en el módulo socket. Los sockets se clasifican en sockets de flujo TCP (socket.SOCK_STREAM) o sockets de datagramas UDP (socket.SOCK_DGRAM) dependiendo de si el servicio utiliza TCP, que es orientado a conexión y fiable, o UDP, respectivamente. En esta unidad didáctica solo cubriremos los sockets orientados a conexión TCP, que cubren un 90 % de las necesidades comunes.

Para crear un socket se utiliza el constructor socket.socket() que puede tomar como parámetros opcionales la familia, el tipo y el protocolo. Por defecto se utiliza la familia AF_INET y el tipo SOCK_STREAM. La sintaxis general del método de socket es la siguiente:

s = socket.socket (socket_family, socket_type, protocol = 0)

Estos argumentos representan las familias de direcciones y el protocolo de la capa de transporte. Dependiendo del tipo de socket, los sockets se clasifican en sockets de flujo (socket.SOCK_STREAM) o sockets de datagramas (socket.SOCK_DGRAM), en función de si el servicio utiliza TCP o UDP. socket.SOCK_DGRAM se usa para comunicaciones UDP, y socket.SOCK_STREAM para conexiones TCP.

Los sockets también se pueden clasificar según la familia. Tenemos sockets UNIX (socket.AF_UNIX) que se crearon antes de la concepción de las redes y se basan en ficheros, sockets socket.AF_INET que son los que nos interesan, sockets socket.AF_INET6 para IPv6, etc.

En la siguiente imagen vemos el constructor de la clase socket:

IMAAAAAAAAAAAAAAAAAAAAGEN

Módulo socket en Python

Los tipos y funciones necesarios para trabajar con sockets se pueden encontrar en Python en el módulo de sockets. El módulo socket expone todas las piezas necesarias para escribir rápidamente clientes y servidores TCP y UDP.

El módulo de socket tiene casi todo lo que necesita para construir un servidor o cliente de socket. En el caso de Python, el socket devuelve un objeto al que se pueden aplicar los métodos de socket. Este módulo viene instalado por defecto cuando instala la distribución Python. Para verificarlo, podemos hacerlo desde el intérprete de Python.

Este módulo viene instalado por defecto cuando instalas la distribución de Python. Para comprobarlo podemos hacerlo desde el intérprete de Python:

>>>import socket
 
>>>dir(socket)

IMAAAAAAAAAAAAAAAAAAAAAAAAAGEN

En esta imagen vemos todas las constantes y métodos que tenemos disponibles en este módulo. Las constantes las vemos en primera instancia dentro de la estructura que ha devuelto el objeto. Entre las constantes más utilizadas podemos destacar:

  • socket.AF_INET
  • socket.SOCK_STREAM

Para abrir un socket en una determinada máquina utilizamos el constructor de la clase socket que acepta por parámetros la familia, el tipo de socket y el protocolo. Una llamada típica para construir un socket que funcione a nivel TCP es pasando como parámetros la familia y el tipo de socket:

IMAAAAAAAAAAAAAAAAAAAAAAAGEN

Socket.socket(socket.AF_INET,socket.SOCK_STREAM)

Recursos

informatica/programacion/cursos/python_avanzado_proyectos_seguridad/introduccion_sockets.1731914660.txt.gz · Última modificación: por tempwin