Python

Envoyer et recevoir des paquets UDP via Python

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

Attentes:

Voici quelques points clés pouvant être tirés de cet article

  1. Envoi de texte à l'aide d'un programme python utilisant le protocole UDP.
  2. Recevoir du texte à l'aide d'un programme python qui utilise le protocole UDP.
  3. Vérifier le paquet UDP dans Wireshark.
  4. En savoir plus sur le code python pour envoyer et recevoir des paquets UDP.

Schéma de configuration générale :

Les systèmes A et B devraient pouvoir se pinger.

Hypothèses ou limites :

  1. Les deux systèmes devraient avoir Linux avec Ubuntu. Le code peut ou non fonctionner sur d'autres systèmes 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 versions.

Remarque : vous pouvez vérifier la référence pour essayer d'envoyer et recevoir des paquets UDP via Linux CLI avant d'aller chercher des fichiers python pour faire 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 le système
si len(sys.argv) == 3:
# Obtenez "l'adresse IP du serveur" ainsi que le "numéro de port" de
argument 1 et argument 2
ip = sys.argv[1]
port = int(sys.argv[2])
autre:
print("Exécuter comme : serveur python3.py ")
sortie(1)
# Créer un socket UDP
s = prise.prise (prise.AF_INET, prise.SOCK_DGRAM)
# Liez le socket au port
adresse_serveur = (ip, port)
s.lier (adresse_serveur)
print("Faites Ctrl+c pour quitter le programme !!")
tant que vrai :
print("######## Le serveur é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.encoder('utf-8'), adresse)
print("\n\n 1. Serveur envoyé : ", send_data,"\n\n")

Client.py

socket d'importation
importer le système
si len(sys.argv) == 3:
# Obtenez "l'adresse IP du serveur" ainsi que le "numéro de port" des arguments 1 et 2
ip = sys.argv[1]
port = int(sys.argv[2])
autre:
print("Exécuter comme : client python3.py ")
sortie(1)
# Créer un socket pour le serveur
s = prise.prise (prise.AF_INET, prise.SOCK_DGRAM, 0)
print("Faites Ctrl+c pour quitter le programme !!")
# Envoyons des données via le protocole UDP
tant que vrai :
send_data = input("Tapez du texte à envoyer =>");
s.sendto(send_data.encoder('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")
# fermer la prise
s.Fermer()

Envoyer/Recevoir un paquet UDP :

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

Nous avons également des adresses IP valides.

IP du système A : 192.168.1.6
IP du système B : 192.168.1.102

Maintenant, contrairement à l'envoi et à la réception de paquets UDP via Linux CLI, nous allons exécuter serveur.py dans Système, B [192.168.1.102] et ensuite nous exécuterons client.py dans le système A [192.168.1.6].

Comment faire fonctionner le serveur.py en 192.168.1.102?

Voici la commande pour exécuter le serveur.py

serveur $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 lui-même, ici son 192.168.1.102 et 2sd l'argument est le port sur lequel le serveur écoutera, ici nous avons choisi 4444.

Comment exécuter 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 c'est 192.168.1.102 et 2sd l'argument est le port où le serveur s'exécute. Pour notre exemple c'est 4444.

Envoyez ou recevez du texte :

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

Envoyer les données du client : « Je viens du client »

Client de formulaire de capture d'écran :

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

Maintenant, nous pouvons voir côté serveur, nous avons également la possibilité d'envoyer quelque chose au client. Essayons ça.

Envoyer les données du client : "Je viens du serveur"

Capture d'écran du serveur :

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

Maintenant, cela continuera un nombre infini jusqu'à ce que nous arrêtions le programme python en utilisant Ctrl+c.

Vérifiez le paquet UDP dans Wireshark :

Maintenant, nous avons établi une certaine communication, mais comment savons-nous 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] a envoyé des données [« Je viens du client »] au serveur [192.168.1.6].

Explication du code :

Pour une explication de base du code python, reportez-vous à "Python Socket File Transfer Send" dans la section de référence.

Nous n'expliquerons que les codes de lignes importantes pour le fichier python du client et du serveur. Il y a des commentaires utiles dans le code client et serveur.

Explication du code client :

si len(sys.argv) == 3:

La ligne ci-dessus est requise pour vérifier si l'utilisateur a transmis les arguments obligatoires requis. Sinon, le programme se terminera. Le même contrôle est présent dans le programme serveur.

s = prise.prise (prise.AF_INET, prise.SOCK_DGRAM, 0)

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

tant que vrai :

Pour exécuter le programme en boucle infinie jusqu'à ce que l'utilisateur fasse Ctrl+c. Le même code est là dans le serveur.py.

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

Pour envoyer des données pour mentionné ip et Port numéro.

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

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

Explication du code serveur :

s.sendto(send_data.encoder('utf-8'), adresse)

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

Conclusion:

Nous pouvons envoyer ou recevoir des données UDP en utilisant le programme python. En interne, il utilise le mécanisme 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/
Envoyez et recevez des paquets UDP via Linux CLI :
https://linuxhint.com/send_receive_udp_packets_linux_cli/
Envoi de transfert de fichiers de socket Python :
https://linuxhint.com/python_socket_file_transfer_send/

Top 10 des jeux à jouer sur Ubuntu
La plate-forme Windows a été l'une des plates-formes dominantes pour les jeux en raison du pourcentage énorme de jeux qui se développent aujourd'hui p...
5 meilleurs jeux d'arcade pour Linux
De nos jours, les ordinateurs sont des machines sérieuses utilisées pour les jeux. Si vous ne pouvez pas obtenir le nouveau score élevé, vous saurez c...
Bataille pour Wesnoth 1.13.6 Développement publié
Bataille pour Wesnoth 1.13.6 publiée le mois dernier, est la sixième version de développement de la 1.13.x series et il apporte un certain nombre d'am...