IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Réseau/Web Python Discussion :

Comment créer une messagerie instantanée confidentielle en Python en réseau ?


Sujet :

Réseau/Web Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2014
    Messages : 3
    Par défaut Comment créer une messagerie instantanée confidentielle en Python en réseau ?
    Bonjour, je suis un élève de Terminale S et j'ai choisi la spécialité ISN, et je travaille en binôme sur un projet tout au long de l'année mais des difficultés se posent d'où ce post.
    Voilà, notre objectif est de créer en réseau, une messagerie instantanée confidentielle c'est à dire cryptée.
    Notre point de départ est un programme en Python avec un module socket qui permet de relier deux pcs.
    Voilà si vous avez des idées des questions ou des remarques n'hésitez pas,
    merci d'avance on compte sur vous !

  2. #2
    Expert confirmé

    Avatar de deusyss
    Homme Profil pro
    Expert Python
    Inscrit en
    Mars 2010
    Messages
    1 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Expert Python
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 659
    Par défaut
    Bonjour,

    Je vous souhaite la bienvenue sur ce forum de la part de toute l'equipe de Developpez.com.

    Je ne voit pas de problematique posée dans ton post. Pour commencer, maintenant que tu as exposé ton projet, il faut nous donné plus d'info.

    Par exemple, as tu déjà des connaissances en Python? Quelle version utilises tu? Le projet doit-il disposer d'une IHM?

    On peut te donner des informations pour te guider, mais il nous faut avant tout des détails

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2014
    Messages : 3
    Par défaut Voilà notre avancée mais nous sommes bloqués
    Nous avons créés un serveur :

    # -*- coding: latin-1 -*-

    import socket # Import socket module

    s = socket.socket() # Create a socket object

    # on cherche les propriétés de la machine qui exécute le
    # serveur (l'hôte).
    nom_hote = socket.gethostname()
    # puis on récupère l'adresse IP de l'hôte
    addr_ip_hote = socket.gethostbyname(nom_hote)

    # on ouvre le port correspondant sur l'hote
    # le port peut être quelconque
    port = 12344
    s.bind((nom_hote, port))

    print "Serveur de test d'envoi de messages"
    print "->nom du serveur %s"%nom_hote
    print "->IP de l'hôte :%s"%addr_ip_hote
    print "->port :%i"%port
    print "Serveur démarré en attente d'une connexion ..."

    # attente de la connexion
    s.listen(5)

    # établissement de la connection avec le client
    c, addr = s.accept()
    addr_ip_client = addr[0]
    print "Connection recue delpuis le client d'adresse",addr_ip_client
    # on envoi un message au client
    c.send('Bonjour, ici le serveur!')

    while True:
    msgClient = c.recv(1024)
    print "C>", msgClient
    if msgClient.upper()== "FIN" or msgClient == "":
    break
    msgServeur = raw_input("S> ")
    c.send(msgServeur)
    # on ferme la connexion
    c.close()

    et un client :

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

    #utilisation du module "socket"
    import socket

    # creation d'un socket
    s = socket.socket()

    # il faut connaitre le nom ou l'adresse ip du serveur
    # auquel on se connecte
    port = 12344
    addr_ip = "10.158.33.120"
    # connexion a l'hote
    s.connect((socket.gethostbyaddr(addr_ip)[0], port))

    # reception de 1024 octets
    while True:
    print s.recv(1024)
    s.send("Bonjour ici le client")
    if msgClient.upper()== "FIN" or msgClient == "":
    break
    msgServeur = raw_input("S> ")
    c.send(msgServeur)
    # fermeture du socket
    s.close()

    Mais nous n'arrivons pas à établir un dialogue, help !

  4. #4
    Expert confirmé

    Avatar de deusyss
    Homme Profil pro
    Expert Python
    Inscrit en
    Mars 2010
    Messages
    1 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Expert Python
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 659
    Par défaut
    Es tu sous Linux ou Windows? Quelle version de Python est utilisée?

    Cela peut avoir son importance dans l'explication que rien ne marche.

    EDIT: pour poster du code, utilise le bouton "#" disponible en haut de l'editeur de post

  5. #5
    Membre émérite

    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2010
    Messages : 662
    Par défaut
    Salut.

    Le sujet m'intéresse mais je pense qu'il ne faut pas partir dans tous les sens et se focaliser sur un probleme à la fois.

    La mise en oeuvre (le code) est l'aboutissement d'une réflexion (ici la documentation sur les notions de réseaux, serveurs, clients, échanges de données, la *cryptographie*, l'architecture logicielle...). Tout cela n'est pas propre au langage et doit être clarifier avant. Alors, oui, ça fait beaucoup à apprendre, mais c'est ça qui est bon!

    Je ne m'y connais pas assez pour tenter de corriger ton probleme de communication entre le server et le client. Deusyss va trouver ça rapidement j'en suis sûr.


    J'en viens à ce qui m'a poussé à répondre. Il y éventuellement moyen de crypter et décrypter tes messages via gnupg. Ce pragramme est dédié au chiffrement des mails, mais en fouillant il ya peut-être moyen de l'adapter aux messages instantanés. Il existe un wrap en python:
    http://pythonhosted.org/python-gnupg/
    http://www.saltycrane.com/blog/2011/...g-gpg-example/

    Pour plus tard, hein

    Ju

  6. #6
    Expert confirmé

    Avatar de deusyss
    Homme Profil pro
    Expert Python
    Inscrit en
    Mars 2010
    Messages
    1 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Expert Python
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 659
    Par défaut
    J'attends toujours les reponses afin de pouvoir pleinement analyser le code, mais je repond au post de Julien N.

    GnuPG est en effet une tres bonne solution pour le cryptage. Autre solution sinon, alternative ce post.

    Il était là aussi question de cryptage.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 133
    Par défaut
    Bonjour à la communauté python !

    Je profite de ce fil qui tombe à vrai dire à pic pour moi.

    Je cherche à faire une messagerie instantanée tout comme Azertyuiop58 (en réseau local avec un collègue car plus de net send depuis windowxs XP sur nos bécanes).
    Pour tout vous dire, je suis une daube en programmation et j'ai cherché dans les archives les deux scripts que voici et qui fonctionnent :

    SERVEUR :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    # -*- coding: Latin-1 -*-
     
     
    import socket, sys
     
    HOST = '127.0.0.1'
    PORT = 50000
     
    # 1) création du socket :
    mySocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
     
    # 2) liaison du socket à une adresse précise :
    try:
    	mySocket.bind((HOST, PORT))
    except socket.error:
    	print "La liaison du socket a l'adresse choisie a echoue."
    	sys.exit()
     
    while 1:
    	# 3) Attente de la requête de connexion d'un client :
    	print "Serveur pret, en attente de requetes ..."
    	mySocket.listen(5)
    	# 4) Etablissement de la connexion :
    	connexion, adresse = mySocket.accept()
    	print "Client connecte, adresse IP %s, port %s" % (adresse[0], adresse[1])
     
    	# 5) Dialogue avec le client :
    	connexion.send("Vous etes connecte au serveur STUFFY DEVS. Envoyez vos messages.")
    	msgClient = connexion.recv(1024)
    	while 1:
    		print "Client =>", msgClient
    		if msgClient.upper() == "FIN" or msgClient =="":
    			break
    		msgServeur = raw_input("Serveur => ")
    		connexion.send(msgServeur)
    		msgClient = connexion.recv(1024)
     
    	# 6) Fermeture de la connexion :
    	connexion.send("Au revoir !")
    	print "Connexion interrompue."
    	connexion.close()
     
    	ch = raw_input("<R>ecommencer <T>erminer ? ")
    	if ch.upper() =='T':
    		break

    CLIENT :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    # -*- coding: Latin-1 -*-
     
     
    import socket, sys
     
    HOST = 'mon adresse IP'
    PORT = 50000
     
    # 1) création du socket :
    mySocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
     
    # 2) envoi d'une requête de connexion au serveur :
    try:
    	mySocket.connect((HOST, PORT))
    except socket.error:
    	print "La connexion a echoue."
    	sys.exit()
    print "Connexion etablie avec le serveur."
     
    # 3) Dialogue avec le serveur :
    msgServeur = mySocket.recv(1024)
     
    while 1:
    	if msgServeur.upper() == "FIN" or msgServeur =="":
    		break
    	print "Serveur =>", msgServeur
    	msgClient = raw_input("Client => ")
    	mySocket.send(msgClient)
    	msgServeur = mySocket.recv(1024)
     
    # 4) Fermeture de la connexion :
    print "Connexion interrompue."
    mySocket.close()

    C'est à peu de chose près le même que Azertyuiop58 il me semble.

    Mais voilà, petit os que je tente de vous expliquer :
    On communique ok, mais il faut attendre obligatoirement la réponse de l'autre pour pouvoir à nouveau dialoguer.
    En gros, on ne peut pas écrire deux messages à la suite. On les capte certes, mais une fois que l'autre à répondu donc ça fait un sacré merdier dans le dialogue.
    Je ne sais pas si je suis clair...

    Un dernier truc, au bout d'un certain les fenêtres de dialogue se ferment. Y a t-il un moyen de les laisser pour un temps indéterminé ?

    Désolé, ça fait peut-être beaucoup de choses à la fois mais si vous pouviez m'aiguiller un poil, ça serait top !

    Merci d'avance

  8. #8
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 738
    Par défaut
    Citation Envoyé par florent77 Voir le message
    En gros, on ne peut pas écrire deux messages à la suite. On les capte certes, mais une fois que l'autre à répondu donc ça fait un sacré merdier dans le dialogue.
    Je ne sais pas si je suis clair...
    Il vous faut passer par select et les joies de la programmation asynchrone.

    Je cherche à faire une messagerie instantanée tout comme Azertyuiop58 (en réseau local avec un collègue car plus de net send depuis windowxs XP sur nos bécanes).
    Soit vous êtes presses et vous vous rabattez sur des freewares. Soit vous voulez apprendre a programmer avec Python et il faut commencer par apprendre les bases. C'est plus long....

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 133
    Par défaut
    Bonjour wiztricks

    Pour les freewares, c'est nase, on ne peut rien télécharger au boulot, tout est bloqué.

    Pour le select, oups..... effectivement ça va être long...

    Je pensais qu'il y aurait juste un petit changement à faire dans le script.

    Merci.

  10. #10
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 738
    Par défaut
    Citation Envoyé par florent77 Voir le message
    Pour les freewares, c'est nase, on ne peut rien télécharger au boulot, tout est bloqué.
    Il ne devraient pas vous laisser coder alors.
    Jetez un œil a asynchat, il suffit de l'adapter un peu.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  11. #11
    Nouveau candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Mars 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mars 2014
    Messages : 2
    Par défaut
    Bonjours à vous tous, je viens de m'inscrire car votre discution m'interesse énormément. En effet, moi et mes deux camarades (lycéen en spé ISN également) avons le même projet initial qui est de créer une messagerie instantanée cryptée, quelle belle coincidence n'ect-ce pas ?! Nous somme en train de créer le code principal, et les interfaces en parallèle, quant à moi je suis chargé de la partie réseau. A la vue de vos commentaire je vous avous ne pas tout comprendre concernant "select" et a"synchrone " car nous manquons de connaissance et avons le même soucis qui est de ne pouvoir envoyer qu'un seul message à la fois car nous devons attendre que l'autre réponde. En attendant vos réponses, je vous remercie par avance. Je vous transmet mes deux codes serveur/client et nous serions ravis de vous transmettre nos autres codes.

    client:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    import socket
     
    hote = "172.17.164.72" #127.0.0.1 est l'ordinateur lui-même : localhost
    # Mettre ici l'adresse IP du serveur s'il est sur un autre ordinateur
    port = 1234 #le port de communication avec le serveur
     
    connexion_avec_serveur = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    connexion_avec_serveur.connect((hote, port))
    print("Connexion établie avec le serveur sur le port {}".format(port))
     
    msg_a_envoyer = b""
    while msg_a_envoyer != b"fin":
        msg_a_envoyer = input("> ")
        # L'instruction ci-dessous peut lever une exception si le message
        # réceptionné comporte des caractères spéciaux hors ASCII car il
        # faudrait définir le format d'encodage
        msg_a_envoyer = msg_a_envoyer.encode()
        # On envoie le message
        connexion_avec_serveur.send(msg_a_envoyer)
        msg_recu = connexion_avec_serveur.recv(1024)
        print(msg_recu.decode()) # même remarque que si dessus
     
    print("Fermeture de la connexion")
    connexion_avec_serveur.close()
    Serveur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    import socket
    import urllib.request
    import os
     
    def parse_string(data,beginTag,endTag):
       result=[]
       startPos = data.find(beginTag)
       while startPos > -1:
          endPos = data.find(endTag,startPos+1)
          if endTag == -1:
             break
          else:
             result.append(data[startPos+len(beginTag):endPos])
             startPos = data.find(beginTag,endPos+1)
       return result
     
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    s.connect(('google.com', 0))
     
    hote = ''
    port = 1234 #on définit le port où le serveur écoute
     
    connexion_principale = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    connexion_principale.bind((hote, port))
    connexion_principale.listen(5)
    print("mon IP est "+s.getsockname()[0])
    print("Le serveur écoute à présent sur le port {}".format(port))
     
    connexion_avec_client, infos_connexion = connexion_principale.accept()
     
    msg_recu = b""
    #msg_recu est un binaire car les ordinateurs communiquent en binaire
     
    while msg_recu != b"fin":
        msg_recu = connexion_avec_client.recv(1024)
        # L'instruction ci-dessous peut lever une exception si le message
        # réceptionné comporte des caractères spéciaux hors ASCII car il
        # faudrait définir le format de décodage
        print(msg_recu.decode())
        message_a_envoyer= input("> ")
        message_reponse=message_a_envoyer.encode()
        connexion_avec_client.send(message_reponse)
     
    print("Fermeture de la connexion")
    connexion_avec_client.close()
    connexion_principale.close()

Discussions similaires

  1. Tor veut créer une messagerie instantanée anonyme
    Par zoom61 dans le forum Logiciels Libres & Open Source
    Réponses: 0
    Dernier message: 03/03/2014, 10h09
  2. Créer une messagerie instantanée internet
    Par darkvador2002 dans le forum Débuter
    Réponses: 4
    Dernier message: 28/04/2009, 14h09
  3. Comment créer une dll python (.pyd)
    Par devconf77 dans le forum Interfaçage autre langage
    Réponses: 4
    Dernier message: 01/02/2008, 20h29
  4. [D7] Comment feriez-vous une messagerie instantanée façon MSN ?
    Par ero-sennin dans le forum Web & réseau
    Réponses: 37
    Dernier message: 09/08/2007, 20h53
  5. Comment créer une aplet python
    Par acieroid dans le forum Interfaçage autre langage
    Réponses: 10
    Dernier message: 03/02/2006, 11h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo