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 :

Redirection avec dup2


Sujet :

Réseau/Web Python

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 30
    Points : 25
    Points
    25
    Par défaut Redirection avec dup2
    bonjour,
    j'ai écrit ce script sur windows

    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
     
    #! /usr/bin/python
    # -*- coding: iso8859-1 -*
     
    from socket import *
     
    import socket
    port=6666
    host=''
     
    s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    s.bind((host,port))
    s.listen(2)
    print "vous etes bien connecte sur le port %d, Ctrl-C pour quitter"%port
     
    while 1:
         clsock,claddr=s.accept()
         clfile=clsock.makefile('rw',0)
         clfile.write("entrez le pass : ")
         mot=clfile.readline().strip()
     
         if mot =="root":
             from code import InteractiveConsole
             import code, sys,os, string
             os.dup2(clfile.fileno(),0)
             os.dup2(clfile.fileno(),1)
             os.dup2(clfile.fileno(),2)
             code.interact()
             sys.exit()
     
         clfile.write("vous avez entre un mot de %d caracteres"%len(mot))
         clfile.close()
         clsock.close()
    J'arrive bien à me connecter avec telnet mais dès lors qu'il interprète les lignes avec dup2 cela provoque une erreur:

    vous etes bien connecte sur le port 6666, Ctrl-C pour quitter
    Traceback (most recent call last):
    File "C:\Users\jose\Desktop\python\module1.py", line 24, in <module>
    os.dup2(clfile.fileno(),0)
    OSError: [Errno 9] Bad file descriptor

    Le but est de rediriger la sortie standard erreur et clavier, j'ai déjà testé avec
    os.dup2(clfile.fileno(),sys.stdin.fileno()) mais fonctionne pas non plus

  2. #2
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 941
    Points : 1 384
    Points
    1 384
    Par défaut
    Je penche pour une limitation de Windows, qui ne traiterait pas les descripteurs de sockets comme des descripteurs de fichiers normaux.

    Mais je n'ai pas vraiment d'idée pour la contourner...
    Peut-être lancer la console dans un autre process avec subprocess.Popen et passer le socket descriptor comme arguments stdin,stdout et stderr du Popen ?
    Et si ça ne marche pas, il reste la possibilité d'utiliser Popen avec des pipes et de copier "manuellement" les données entre le socket et les pipes...

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 30
    Points : 25
    Points
    25
    Par défaut
    Bonjour,

    J'ai vu cette méthode de la classe socket

    socket.fromfd(fd, family, type[, proto])
    Duplicate the file descriptor fd (an integer as returned by a file object’s fileno() method) and build a socket object from the result. Address family, socket type and protocol number are as for the socket() function above. The file descriptor should refer to a socket, but this is not checked — subsequent operations on the object may fail if the file descriptor is invalid. This function is rarely needed, but can be used to get or set socket options on a socket passed to a program as standard input or output (such as a server started by the Unix inet daemon). The socket is assumed to be in blocking mode. Availability: Unix.

    Le problème c'est que sous windows elle n'est pas implémenté dans socket.py on a juste le droit au joli commentaire :

    ......
    fromfd() -- create a socket object from an open file descriptor[*]
    .....

    et bien sur à la fin
    [*] not available on all platforms!

Discussions similaires

  1. probleme de redirection avec open et dup2
    Par hutch13015 dans le forum C
    Réponses: 16
    Dernier message: 04/02/2015, 19h13
  2. Réponses: 16
    Dernier message: 01/02/2006, 19h09
  3. [Struts]Redirection avec paramètre
    Par klereth dans le forum Struts 1
    Réponses: 2
    Dernier message: 29/06/2005, 10h56
  4. Problème de redirection avec window.location
    Par Kosti dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 30/11/2004, 18h31
  5. Response.redirect() avec ancre nomée
    Par roots_man dans le forum ASP
    Réponses: 4
    Dernier message: 23/11/2004, 10h37

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