Envoyer et recevoir des paquets UDP via Python

Envoyer et recevoir des paquets UDP via Python
Nous connaissons déjà deux protocoles de couche de transport principaux comme TCP et UDP. Pour plus d'informations sur TCP et UDP, vous pouvez vérifier la section de référence. Dans cet article, nous apprendrons à envoyer et à recevoir des paquets UDP à l'aide du programme Python.

Attentes:

Voici quelques points clés peuvent être appris de cet article

  1. Envoi de texte à l'aide du programme Python qui utilise le protocole UDP.
  2. Recevoir du texte à l'aide du programme Python qui utilise le protocole UDP.
  3. Vérifiez le paquet UDP à Wireshark.
  4. Renseignez-vous sur le code Python pour envoyer et recevoir des paquets UDP.

Diagramme de configuration générale:

Système A et B devraient être capables de cingler.

Hypothèses ou limitations:

  1. Les deux systèmes devraient avoir Linux avec Ubuntu. Le code peut ou non fonctionner sur un autre système d'exploitation comme Windows10, Mac, etc.
  2. Les deux systèmes devraient avoir Python version 3. Ce code peut ou non fonctionner sur Python 2.7 version.

Remarque: vous pouvez vérifier la référence pour essayer d'envoyer et de recevoir des paquets UDP via Linux CLI avant d'aller pour des fichiers Python pour effectuer la même tâche.

Fichiers Python:

Il y a deux fichiers Python serveur.py et client.py. Le fichier serveur et le fichier client doivent être présents respectivement dans le système serveur et le système client.

Serveur.py

socket d'importation
importer sys
Si Len (Sys.argv) == 3:
# Obtenez "l'adresse IP du serveur" et également le "numéro de port" de l'argument 1 et de l'argument 2
ip = sys.Argv [1]
port = int (sys.Argv [2])
autre:
Imprimer ("Exécuter comme: serveur Python3.py ")
sortie (1)
# Créer une prise UDP
s = socket.prise.Af_inet, socket.Sock_dgram)
# Lier la prise au port
server_address = (ip, port)
s.bind (server_address)
Imprimer ("Do Ctrl + C pour quitter le programme !!")
Bien que vrai:
Imprimer ("####### Server écoute ########")
données, adresse = s.Recvfrom (4096)
print ("\ n \ n 2. Serveur reçu: ", données.decode ('utf-8'), "\ n \ n")
send_data = input ("Tapez du texte à envoyer =>")
s.sendto (send_data.Encode ('UTF-8'), adresse)
print ("\ n \ n 1. Serveur envoyé: ", send_data," \ n \ n ")

Client.py

socket d'importation
importer sys
Si Len (Sys.argv) == 3:
# Obtenez "l'adresse IP du serveur" et également le "numéro de port" de l'argument 1 et de l'argument 2
ip = sys.Argv [1]
port = int (sys.Argv [2])
autre:
Imprimer ("Exécuter comme: Client Python3.py ")
sortie (1)
# Créer une prise pour le serveur
s = socket.prise.Af_inet, socket.Sock_dgram, 0)
Imprimer ("Do Ctrl + C pour quitter le programme !!")
# Envoyons des données via le protocole UDP
Bien que vrai:
send_data = input ("Tapez du texte à envoyer =>");
s.sendto (send_data.Encode ('utf-8'), (ip, port))
print ("\ n \ n 1. Client envoyé: ", send_data," \ n \ n ")
données, adresse = s.Recvfrom (4096)
print ("\ n \ n 2. Client reçu: ", Données.decode ('utf-8'), "\ n \ n")
# Fermez la prise
s.fermer()

Envoyer / recevoir un paquet UDP:

Prenons un exemple comme nous enverrons un paquet UDP du système A au système B. Ainsi, dans le concept de serveur-client, nous devons exécuter le serveur à côté du système B et client du système.

Nous avons également des adresses IP valides.

Système A IP: 192.168.1.6
Système B IP: 192.168.1.102

Maintenant, contrairement à envoyer et à recevoir des paquets UDP via Linux CLI, nous allons fonctionner serveur.py dans le système, b [192.168.1.102] et ensuite nous courirons client.py Dans le système A [192.168.1.6].

Comment exécuter le serveur.py en 192.168.1.102?

Voici la commande pour exécuter le serveur.py

$ Python3 Server.py 192.168.1.102 4444

Voici la capture d'écran

Ici, il y a deux arguments pour le programme Python. 1St L'argument est une adresse IP du serveur lui-même, ici son 192.168.1.102 et 2nd L'argument est le port que le serveur écoutera, ici nous avons choisi 4444.

Comment gérer le client.py en 192.168.1.6?

Voici la commande pour exécuter le client.py

$ Client Python3.py 192.168.1.102 4444

Voici la capture d'écran

Ici, il y a deux arguments pour le programme Python. 1St L'argument est l'adresse IP du serveur, ici son 192.168.1.102 et 2nd L'argument est le port où le serveur s'exécute. Pour notre exemple, c'est 4444.

Envoyer ou recevoir du texte:

Maintenant, comme vous pouvez le voir, nous sommes prêts à communiquer entre deux systèmes. Mais nous devons d'abord partir du client. Tapons quelque chose dans le client et voyons s'il atteint le serveur ou non.

Envoyer des données du client: "Je viens du client"

Capture d'écran Client:

Maintenant, ce message client doit venir au serveur. Voici la capture d'écran du serveur.

Maintenant, nous pouvons voir du côté du serveur également, nous avons une option pour envoyer quelque chose au client. Essayons ça.

Envoyer des données du client: "Je suis du serveur"

Capture d'écran du serveur:

Et voici la capture d'écran côté client.

Maintenant, cela se déroulera sur des moments infinis jusqu'à ce que nous arrêtions le programme Python en utilisant Ctrl + C.

Vérifiez le paquet UDP dans Wireshark:

Maintenant, nous avons fait une communication, mais comment pouvons-nous savoir que UDP a été utilisé pour envoyer ou recevoir ces paquets. Ainsi, nous pouvons vérifier la capture dans Wireshark.

Voyons le paquet lorsque le client [192.168.1.6] Envoyé des données [«Je suis du client»] au serveur [192.168.1.6].

Explication du code:

Pour le code Python Basic Explication Reportez-vous «Python Socket File Transfer Send» dans la section de référence.

Nous expliquerons uniquement les codes de lignes importants pour le fichier python client et serveur. Il existe des commentaires utiles dans le code client et serveur.

Explication du code client:

Si Len (Sys.argv) == 3:

La ligne ci-dessus est nécessaire pour vérifier si l'utilisateur a adopté des arguments obligatoires requis. Ou bien le programme quittera. Le même chèque est là dans le programme serveur.

s = socket.prise.Af_inet, socket.Sock_dgram, 0)

La ligne ci-dessus est de créer un serveur de socket avec UDP [Sock_dgram] protocole. Le même code est là dans le serveur.py.

Bien que vrai:

Pour exécuter le programme dans Infinite Loop jusqu'à ce que l'utilisateur fasse Ctrl + C. Le même code est là dans le serveur.py.

s.sendto (send_data.Encode ('utf-8'), (ip, port))

Pour envoyer des données pour mentionné IP et port nombre.

données, adresse = s.Recvfrom (4096)

Pour recevoir des données provenant du serveur. Le même code est là dans le serveur.py.

Explication du code du serveur:

s.sendto (send_data.Encode ('UTF-8'), adresse)

Envoyer des données à l'adresse du client.

Conclusion:

Nous pouvons envoyer ou recevoir des données UDP à l'aide du programme Python. En interne, il utilise le mécanisme du client du serveur.

Les références:

Pour comprendre TCP: https: // linuxhint.com / tcp_packet_capture_analysis /
Pour comprendre UDP: https: // linuxhint.com / udp_wireshark_analysis /
Envoyer et recevoir des paquets UDP via Linux CLI:
https: // linuxhint.com / send_receive_udp_packet_linux_cli /
Python Socket File Transfer Send:
https: // linuxhint.com / python_socket_file_transfer_send /