Enviar y recibir paquetes UDP a través de Python

Enviar y recibir paquetes UDP a través de Python
Ya sabemos sobre dos protocolos principales de capa de transporte como TCP y UDP. Para obtener más información sobre TCP y UDP, puede verificar la sección de referencia. En este artículo aprenderemos cómo enviar y recibir paquetes UDP usando el programa Python.

Expectativas:

Aquí hay algunos puntos clave se pueden aprender de este artículo

  1. Enviar algún texto usando el programa Python que utiliza el protocolo UDP.
  2. Recibir algún texto usando el programa Python que utiliza el protocolo UDP.
  3. Consulte el paquete UDP en Wireshark.
  4. Aprenda sobre el código de Python para enviar y recibir paquetes UDP.

Diagrama de configuración general:

El sistema A y B deberían hacer rodeos entre sí.

Supuestos o limitaciones:

  1. Ambos sistemas deberían tener Linux con Ubuntu. El código puede o no funcionar en otro sistema operativo como Windows10, Mac, etc.
  2. Ambos sistemas deberían tener Python versión 3. Este código puede o no funcionar en Python 2.7 versión.

Nota: Puede verificar la referencia para probar los paquetes Enviar y recibir UDP a través de Linux CLI antes de buscar archivos Python para hacer la misma tarea.

Archivos de Python:

Hay dos archivos de Python servidor.py y cliente.py. El archivo del servidor y el archivo de cliente deben estar presentes en el sistema del servidor y el sistema de cliente, respectivamente,.

Servidor.py

TOCKETOR DE IMPORTA
Sys de importación
Si len (sys.argv) == 3:
# Obtenga "dirección IP del servidor" y también el "número de puerto" del argumento 1 y el argumento 2
IP = SYS.Argv [1]
puerto = int (sys.Argv [2])
demás:
Imprimir ("Ejecutar como: servidor Python3.py ")
Salir (1)
# Crea un socket UDP
s = enchufe.enchufe (enchufe.Af_inet, enchufe.SOCK_DGRAM)
# Unir el enchufe al puerto
server_address = (IP, puerto)
s.bind (server_address)
Imprimir ("Do Ctrl+C para salir del programa !!")
Mientras que es cierto:
imprimir ("###### El servidor está escuchando ######")
datos, dirección = s.RecvFrom (4096)
imprimir ("\ n \ n 2. Servidor recibido: ", datos.decode ('utf-8'), "\ n \ n")
send_data = input ("Escriba algún texto para enviar =>")
s.sendto (send_data.encode ('utf-8'), dirección)
imprimir ("\ n \ n 1. Servidor enviado: ", send_data," \ n \ n ")

Cliente.py

TOCKETOR DE IMPORTA
Sys de importación
Si len (sys.argv) == 3:
# Obtenga "dirección IP del servidor" y también el "número de puerto" del argumento 1 y el argumento 2
IP = SYS.Argv [1]
puerto = int (sys.Argv [2])
demás:
Imprimir ("Ejecutar como: Cliente Python3.py ")
Salir (1)
# Crear socket para servidor
s = enchufe.enchufe (enchufe.Af_inet, enchufe.SOCK_DGRAM, 0)
Imprimir ("Do Ctrl+C para salir del programa !!")
# Enviemos datos a través del protocolo UDP
Mientras que es cierto:
send_data = input ("Escriba algún texto para enviar =>");
s.sendto (send_data.encode ('utf-8'), (ip, puerto))
imprimir ("\ n \ n 1. Cliente enviado: ", send_data," \ n \ n ")
datos, dirección = s.RecvFrom (4096)
imprimir ("\ n \ n 2. Cliente recibido: ", Datos.decode ('utf-8'), "\ n \ n")
# Cierre el enchufe
s.cerca()

Enviar/recibir el paquete UDP:

Tomemos un ejemplo como enviaremos el paquete UDP del sistema A al sistema B. Entonces, en el concepto de servidor-cliente, tenemos que ejecutar el servidor en el lado del sistema B y el cliente en el sistema un lado.

También tenemos direcciones IP válidas.

Sistema A IP: 192.168.1.6
Sistema B IP: 192.168.1.102

Ahora, a diferencia de enviar y recibir paquetes UDP a través de Linux CLI, ejecutaremos servidor.py En el sistema, B [192.168.1.102] y luego correremos cliente.py en el sistema a [192.168.1.6].

Cómo ejecutar el servidor.Py en 192.168.1.102?

Aquí está el comando para ejecutar servidor.py

$ PYTHON3 SERVER.Py 192.168.1.102 4444

Aquí está la captura de pantalla

Aquí hay dos argumentos para el programa Python. 1calle El argumento es la dirección IP del servidor en sí, aquí su 192.168.1.102 y 2Dakota del Norte El argumento es puerto qué servidor escuchará, aquí hemos elegido 4444.

Cómo ejecutar el cliente.Py en 192.168.1.6?

Aquí está el comando para ejecutar el cliente.py

$ python3 cliente.Py 192.168.1.102 4444

Aquí está la captura de pantalla

Aquí hay dos argumentos para el programa Python. 1calle El argumento es la dirección IP del servidor, aquí es 192.168.1.102 y 2Dakota del Norte El argumento es el puerto donde el servidor se está ejecutando. Para nuestro ejemplo es 4444.

Enviar o recibir algún mensaje de texto:

Ahora, como puede ver, estamos listos para comunicarnos entre dos sistemas. Pero primero debemos comenzar desde el cliente. Escriba algo en el cliente y veamos si llega al servidor o no.

Enviar datos del cliente: "Soy del cliente"

Cliente de formulario de captura de pantalla:

Ahora este mensaje del cliente debería llegar al servidor. Aquí está la captura de pantalla del servidor.

Ahora podemos ver en el lado del servidor también tenemos la opción de enviar algo al cliente. Intentemos eso.

Enviar datos del cliente: "Soy del servidor"

Captura de pantalla del servidor:

Y aquí está la captura de pantalla del lado del cliente.

Ahora esto pasará en tiempos infinitos hasta que detenemos el programa Python usando Ctrl+C.

Consulte el paquete UDP en Wireshark:

Ahora hemos hecho algo de comunicación, pero ¿cómo llegamos a saber que UDP se usó para enviar o recibir esos paquetes?. Entonces, podemos verificar la captura en Wireshark.

Veamos el paquete cuando el cliente [192.168.1.6] enviaron datos ["Soy del cliente"] al servidor [192.168.1.6].

Explicación del código:

Para el código básico de Python, explicación, consulte “Transferencia de archivo de socket de Python” en la sección de referencia.

Solo explicaremos los códigos de líneas importantes para el archivo de Python del cliente y el servidor. Hay comentarios útiles dentro del código del cliente y del servidor.

Explicación del código del cliente:

Si len (sys.argv) == 3:

Se requiere la línea anterior para verificar si el usuario ha pasado los argumentos obligatorios requeridos. O de lo contrario el programa saldrá. La misma comprobación está ahí en el programa del servidor.

s = enchufe.enchufe (enchufe.Af_inet, enchufe.SOCK_DGRAM, 0)

La línea anterior es crear un servidor Socket con UDP [SOCK_DGRAM] protocolo. El mismo código está en servidor.py.

Mientras que es cierto:

Para ejecutar el programa en bucle infinito hasta que el usuario haga Ctrl+C. El mismo código está en servidor.py.

s.sendto (send_data.encode ('utf-8'), (ip, puerto))

Para enviar datos para mencionados IP y puerto número.

datos, dirección = s.RecvFrom (4096)

Para recibir cualquier dato proveniente del servidor. El mismo código está en servidor.py.

Explicación del código del servidor:

s.sendto (send_data.encode ('utf-8'), dirección)

Enviar datos a la dirección del cliente.

Conclusión:

Podemos enviar o recibir datos de UDP usando el programa Python. Internamente utiliza el mecanismo del cliente del servidor.

Referencias:

Para comprender TCP: https: // Linuxhint.com/tcp_packet_capture_analysis/
Para entender UDP: https: // linuxhint.com/udp_wireshark_analysis/
Enviar y recibir paquetes UDP a través de Linux CLI:
https: // linuxhint.com/send_RECEive_UDP_PACKETS_LINUX_CLI/
Python Socket File Transfer Send:
https: // linuxhint.com/python_socket_file_transfer_send/