Python - Programmation réseau

Python fournit deux niveaux d'accès aux services réseau. À un niveau bas, vous pouvez accéder à la prise en charge de socket de base dans le système d'exploitation sous-jacent, ce qui vous permet d'implémenter des clients et des serveurs pour les protocoles orientés connexion et sans connexion.

Python dispose également de bibliothèques qui fournissent un accès de niveau supérieur à des protocoles réseau spécifiques au niveau de l'application, tels que FTP, HTTP, etc.

Ce chapitre vous explique le concept le plus connu de la mise en réseau - Programmation de socket.

Qu'est-ce que Sockets?

Les sockets sont les extrémités d'un canal de communication bidirectionnel. Les sockets peuvent communiquer au sein d'un processus, entre des processus sur la même machine ou entre des processus sur différents continents.

Les sockets peuvent être implémentés sur un certain nombre de types de canaux différents: sockets de domaine Unix, TCP, UDP, etc. La bibliothèque de sockets fournit des classes spécifiques pour gérer les transports courants ainsi qu'une interface générique pour gérer le reste.

Les sockets ont leur propre vocabulaire -

N ° Sr. Terme et description
1

Domain

Famille de protocoles utilisée comme mécanisme de transport. Ces valeurs sont des constantes telles que AF_INET, PF_INET, PF_UNIX, PF_X25, etc.

2

type

Type de communication entre les deux points de terminaison, généralement SOCK_STREAM pour les protocoles orientés connexion et SOCK_DGRAM pour les protocoles sans connexion.

3

protocol

Typiquement zéro, cela peut être utilisé pour identifier une variante d'un protocole dans un domaine et un type.

4

hostname

L'identifiant d'une interface réseau -

  • Une chaîne, qui peut être un nom d'hôte, une adresse à quatre points ou une adresse IPV6 en notation deux-points (et éventuellement un point)

  • Une chaîne "<broadcast>", qui spécifie une adresse INADDR_BROADCAST.

  • Une chaîne de longueur nulle, qui spécifie INADDR_ANY, ou

  • Un entier, interprété comme une adresse binaire dans l'ordre des octets de l'hôte.

5

port

Chaque serveur écoute les clients appelant sur un ou plusieurs ports. Un port peut être un numéro de port Fixnum, une chaîne contenant un numéro de port ou le nom d'un service.

Le module de prise

Pour créer une socket, vous devez utiliser la fonction socket.socket () disponible dans le module socket , qui a la syntaxe générale -

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

Voici la description des paramètres -

  • socket_family - Il s'agit soit d'AF_UNIX, soit d'AF_INET, comme expliqué précédemment.

  • socket_type - Il s'agit soit de SOCK_STREAM, soit de SOCK_DGRAM.

  • protocol - Ceci est généralement laissé de côté, par défaut à 0.

Une fois que vous avez un objet socket , vous pouvez utiliser les fonctions requises pour créer votre programme client ou serveur. Voici la liste des fonctions requises -

Méthodes de socket serveur

N ° Sr. Méthode et description
1

s.bind()

Cette méthode lie l'adresse (nom d'hôte, paire de numéros de port) au socket.

2

s.listen()

Cette méthode configure et démarre l'écouteur TCP.

3

s.accept()

Cela accepte passivement la connexion client TCP, en attendant que la connexion arrive (blocage).

Méthodes de socket client

N ° Sr. Méthode et description
1

s.connect()

Cette méthode lance activement la connexion au serveur TCP.

Méthodes générales de socket

N ° Sr. Méthode et description
1

s.recv()

Cette méthode reçoit un message TCP

2

s.send()

Cette méthode transmet le message TCP

3

s.recvfrom()

Cette méthode reçoit un message UDP

4

s.sendto()

Cette méthode transmet un message UDP

5

s.close()

Cette méthode ferme le socket

6

socket.gethostname()

Renvoie le nom d'hôte.

Un serveur simple

Pour écrire des serveurs Internet, nous utilisons le socketfonction disponible dans le module socket pour créer un objet socket. Un objet socket est ensuite utilisé pour appeler d'autres fonctions afin de configurer un serveur socket.

Appelez maintenant bind(hostname, port)pour spécifier un port pour votre service sur l'hôte donné.

Ensuite, appelez la méthode accept de l'objet retourné. Cette méthode attend jusqu'à ce qu'un client se connecte au port que vous avez spécifié, puis renvoie un objet de connexion qui représente la connexion à ce client.

#!/usr/bin/python           # This is server.py file

import socket               # Import socket module

s = socket.socket()         # Create a socket object
host = socket.gethostname() # Get local machine name
port = 12345                # Reserve a port for your service.
s.bind((host, port))        # Bind to the port

s.listen(5)                 # Now wait for client connection.
while True:
   c, addr = s.accept()     # Establish connection with client.
   print 'Got connection from', addr
   c.send('Thank you for connecting')
   c.close()                # Close the connection

Un client simple

Écrivons un programme client très simple qui ouvre une connexion vers un port donné 12345 et un hôte donné. C'est très simple de créer un client socket en utilisant la fonction de module socket de Python .

le socket.connect(hosname, port )ouvre une connexion TCP au nom d' hôte sur le port . Une fois que vous avez une socket ouverte, vous pouvez la lire comme n'importe quel objet IO. Une fois terminé, n'oubliez pas de le fermer, comme vous le feriez pour un fichier.

Le code suivant est un client très simple qui se connecte à un hôte et un port donnés, lit toutes les données disponibles à partir du socket, puis quitte -

#!/usr/bin/python           # This is client.py file

import socket               # Import socket module

s = socket.socket()         # Create a socket object
host = socket.gethostname() # Get local machine name
port = 12345                # Reserve a port for your service.

s.connect((host, port))
print s.recv(1024)
s.close()                     # Close the socket when done

Maintenant, exécutez ce server.py en arrière-plan, puis exécutez ci-dessus client.py pour voir le résultat.

# Following would start a server in background.
$ python server.py & 

# Once server is started run client as follows:
$ python client.py

Cela produirait le résultat suivant -

Got connection from ('127.0.0.1', 48437)
Thank you for connecting

Modules Internet Python

Une liste de quelques modules importants dans la programmation Python Network / Internet.

Protocole Fonction commune Numéro de port Module Python
HTTP les pages Web 80 httplib, urllib, xmlrpclib
NNTP Actualités Usenet 119 nntplib
FTP Transferts de fichiers 20 ftplib, urllib
SMTP Envoi d'un e-mail 25 smtplib
POP3 Récupération de l'e-mail 110 poplib
IMAP4 Récupération de l'e-mail 143 imaplib
Telnet Lignes de commande 23 telnetlib
Gopher Transferts de documents 70 gopherlib, urllib

Veuillez vérifier que toutes les bibliothèques mentionnées ci-dessus fonctionnent avec les protocoles FTP, SMTP, POP et IMAP.

Lectures supplémentaires

C'était un démarrage rapide avec la programmation de socket. C'est un vaste sujet. Il est recommandé de passer par le lien suivant pour trouver plus de détails -