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

Langage C++ Discussion :

Telnet erreur commande DATA


Sujet :

Langage C++

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 27
    Par défaut Telnet erreur commande DATA
    Bonjour à tous

    Je travail actuellement sur un projet dans lequel j'ai besoin d'envoyer un mail. Je rencontre une difficultés que je n'arrive pas à résoudre en ce qui concerne la commande DATA dans une communication avec un serveur SMTP. Voici le message d'erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    503 5.5.0 <DATA>: Data command rejected: Improper use of SMTP command pipelining
    Lorsque j'essaie "à la main" directement dans le terminal, pas de problèmes tous fonctionne bien mais au travers de mon programme je me prend cette erreur :/
    Voici la partie du code source qui pose problème:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    char data[] = "HELO smtp.yopmail.com\r\n"
                  "MAIL FROM:<test@gmail.com>\r\n"
                  "RCPT TO:<zaegffhgjhgfghjtertfgd@yopmail.com>\r\n"
                  "DATA\r\n";
    Alors on est bien d'accord que ce code n'est pas complet bien évidemment (je préfère faire ça étape par étape lorsque j'ai un souci de ce genre).
    Je n'ai pas eu trop de mal avec les sockets, à ce niveau là tous fonctionne bien.

    Sinon je suis sous Ubuntu et puis... Je suis là si vous avez besoin de plus d'infos

    Merci d'avance

  2. #2
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Bonjour,

    J'avais écris un article sur le sujet, je ne sais pas s'il pourra t'aider pour ton problème.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 27
    Par défaut
    Salut

    J'ai lu ton article et malheureusement j'ai pas trouvé mon bonheur. :/ D'ailleurs je n'ai même pas vu la différence avec mon code source et le tiens là où se situe le problème :S

  4. #4
    Membre Expert
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Par défaut
    Il me semble que tu es censé attendre la réponse du serveur avant d’envoyer la commande suivante.

    Je soupçonne que là, tu lui balances tout sans lui laisser le temps de répondre, d’où l’erreur.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 27
    Par défaut
    Lorsque j'essaie d'envoyer les commandes une à une comme ci-dessous, je me me prend une "syntax error" alors que les commandes SMTP sont les même :/ C'est pour ça que je fait tous d'un coup mais je doit avoir loupé quelque chose...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    char HELO[] = "HELO smtp.mail.com\r\n";
    send(sock, HELO, sizeof(HELO), 0);
     
    char FROM[] = "MAIL FROM:<test@gmail.com>\r\n";
    send(sock, FROM, sizeof(FROM), 0);
     
    char TO[] = "RCPT TO:<zaegffhgjhgfghjtertfgd@mail.com>\r\n";
    send(sock, TO, sizeof(TO), 0);
     
    ...

  6. #6
    Membre Expert
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Par défaut
    Attendre la réponse du serveur = lire la réponse du serveur !!! Il faut faire un recv ou un read sur ta socket !

    Sinon, je pense qu’il ne faut pas mettre dans \r\n mais seulement des \n (pas censé changer grand chose cela dit).

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 27
    Par défaut
    Je li bien la réponse serveur (avec recv())et ma réponse en question est "syntax error". Désolé je me suis mal exprimé, et c'est sur qu'en ne montrant pas le recv() c'était vraiment pas clair ^^'
    Effectivement j'ai également essayé de changer \r\n en \n mais ça ne change rien comme tu l'a dit .

  8. #8
    Membre Expert
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Par défaut
    Peux-tu montrer :
    - le code exact
    - la réponse exacte du serveur

    (idéalement, un log de la connexion).

    Sinon, au-delà de l’exercice, pourquoi ne pas passer par une lib dédiée à l’envoi de mails ?

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 27
    Par défaut
    Voici mon code source exacte. J'ai également rajouter un petit temps d'attente entre l'envoie des paquets et la réception du message pour bien laisser au serveur le temps de traiter l'info.

    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
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    #include <iostream>
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <netinet/in.h>
    #include <arpa/inet.h>
    #include <unistd.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <netdb.h>
    #include <string.h>
     
    #define INVALID_SOCKET -1
    #define SOCKET_ERROR -1
    #define closesocket(param) close(param)
     
    typedef int SOCKET;
    typedef struct sockaddr_in SOCKADDR_IN;
    typedef struct sockaddr SOCKADDR;
     
    using namespace std;
     
    void recept(SOCKET sock, int taille = 1024)
    {
        char reponse[taille];
        int retval;
        while(1)
        {
            retval = recv(sock, reponse, sizeof(reponse), 0);
            if(retval == 0)
                break;
     
            else if(retval == -1)
            {
                cout << "ERREUR : Reception reponse!" << endl;
                break;
            }
            else
                cout << reponse << endl;
        }
    }
     
    void recept_S(SOCKET sock, int taille = 1024)
    {
        char reponse[taille];
        int retval;
     
        retval = recv(sock, reponse, sizeof(reponse), 0);
        if(retval == -1)
            cout << "ERREUR : Reception reponse!" << endl;
        else if(retval != 0)
            cout << reponse << endl;
    }
     
    int main()
    {
        cout << "Test socket" << endl << endl;
     
        // ===== Creation socket =====
        SOCKET sock;
        sock = socket(AF_INET, SOCK_STREAM, 0);             //Création de la socket
        if(sock != INVALID_SOCKET)
            {cout << "Socket : Creee" << endl;}
        else
        {
            cout << "Erreur : Creation socket!" << endl;
            return 1;
        }
     
        // ===== Parametrage socket =====
        SOCKADDR_IN target;
        hostent *server_adress = gethostbyname("smtp.bbox.fr");
        target.sin_addr.s_addr = *((unsigned long *)server_adress->h_addr_list[0]);
        target.sin_family = AF_INET;
        target.sin_port = htons(25);
        cout << "Socket : Parametree" << endl;
     
        // ===== Connexion =====
        cout << "Socket : Connection en cour..." << endl;
        if(connect(sock, (SOCKADDR*)&target, sizeof(target)) == 0)
            {cout << "Socket : Connectee" << endl;}
        else
        {
            cout << "Erreur : Connection socket!" << endl;
            return 1;
        }
     
        // ===== Envois donnees =====
        cout << "Envois en cour..." << endl;
     
        char HELO[] = "HELO smtp.gmail.com\n";
        send(sock, HELO, sizeof(HELO), 0);
     
        sleep(1);
        recept_S(sock);
     
        char FROM[] = "MAIL FROM:test@yahoo.com\n";
        send(sock, FROM, sizeof(FROM), 0);
     
        sleep(1);
        recept_S(sock);
     
        char TO[] = "RCPT TO:<exemple@gmail.com>\n";
        send(sock, TO, sizeof(TO), 0);
     
        sleep(1);
        recept_S(sock);
     
        char DATA[] = "DATA\n";
        send(sock, DATA, sizeof(DATA), 0);
     
        sleep(1);
        recept_S(sock);
     
        char DATA1[] = "Corp du message\n";
        send(sock, DATA1, sizeof(DATA1), 0);
     
        sleep(1);
        recept_S(sock);
     
        char FIN[] = ".\n";
        send(sock, FIN, sizeof(FIN), 0);
     
        sleep(1);
        recept_S(sock);
     
        char QUIT[] = "QUIT\n";
        send(sock, QUIT, sizeof(QUIT), 0);
     
        sleep(1);
        recept_S(sock);
     
     
        // ===== Fermeture socket =====
        if(closesocket(sock) == 0)
            {cout << "Socket : Fermee" << endl;}
        else
        {
            cout << "Erreur : Fermeture socket!" << endl;
            return 1;
        }
     
        cout << endl << "Fin!" << endl;
     
        return 0;
    }
    Bien entendu à la place de l'adresse de réception "exemple@gmail.com" il y a mon adresse mail valide.

    Le retour:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    220 mail-2y.bbox.fr ESMTP Postfix
    250 mail-2y.bbox.fr
    500 5.5.2 Error: bad syntax
    500 5.5.2 Error: bad syntax
    500 5.5.2 Error: bad syntax
    500 5.5.2 Error: bad syntax
    500 5.5.2 Error: bad syntax
    500 5.5.2 Error: bad syntax
    Lorsque j'envois les commandes en un seul bloque le serveur semble accepter la syntaxe mais un par un non :/
    Et sinon je n'utilise pas de lib car l’intérêt de la chose est l'exercice justement

  10. #10
    Membre Expert
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Par défaut
    il manque les < > dans ton MAIL FROM. Je pense que ça vient de là (si je suis bien, le premier bad syntax est à ce moment là, ensuite, l’erreur ne fait que se répéter).

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 27
    Par défaut
    Effectivement je faisais des testes là dessus et je viens de réessayer avec les chevrons mais ça ne change rien :/

  12. #12
    Membre Expert
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Par défaut
    La bonne syntaxe, normalement, c’est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MAIL FROM: <adresss@domain.tld>
    L’espace après le : est importante, aussi. Certains serveurs sont très tatillons sur le respect de la RFC 2821

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 27
    Par défaut
    Problème résolu

    Le problème se situait à deux niveaux:
    - La totalité de mes char se trouvaient dans une cellule du tableau et non pas réparti comme il le faut. Le serveur recevait donc toutes les infos les unes à la suite des autres. Donc forcément, la l'erreur de syntaxe viens de là
    - J'utilisais la fonction "sizeof" pour mesurer la taille de mes paquets envoyés alors que c'est là fonction "strlen" qu'il faut utiliser. Les deux font la même chose mais "strlen" fonctionne et pas "sizeof". Je ne comprend pas encore pourquoi mais je cherche.

    Voici donc mon la partie de mon code source qui posait problème et qui fonctionne désormais ^^ J'ai volontairement séparé les données en 3 tableaux distincts pour des raisons pratique par rapport à la suite de mon projet, mais il est tout à fait possible de tous rassembler dans un seul tableau

    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
        char HELO[4][100] = {"HELO smtp.gmail.com\n",
                            "MAIL FROM: <test@yahoo.com>\n",
                            "RCPT TO: <exemple@gmail.com>\n",
                            "DATA\r\n"};
     
        char DATA[4][100]   {"From: <test@yahoo.com>\n",
                            "To: <exemple@gmail.com>\n",
                            "Subject: Test\n",
                            "Le corp c'est ici =)\n"};
     
        char QUIT[2][100]   {".\n",
                            "QUIT\n"};
     
        for(int i = 0; i<4; i++)
        {
            send(sock, HELO[i], strlen(HELO[i]), 0);
            recept_S(sock);
        }
     
        for(int i = 0; i<4; i++)
            send(sock, DATA[i], strlen(DATA[i]), 0);
     
        for(int i = 0; i<2; i++)
        {
            send(sock, QUIT[i], strlen(QUIT[i]), 0);
            recept_S(sock);
        }
    En tous cas un grand merci à toi, j'ai bien avancé

  14. #14
    Membre chevronné
    Homme Profil pro
    très occupé
    Inscrit en
    Juillet 2014
    Messages
    137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : très occupé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 137
    Par défaut
    Citation Envoyé par moi4567 Voir le message
    Le problème se situait à deux niveaux:
    (...)
    - J'utilisais la fonction "sizeof" pour mesurer la taille de mes paquets envoyés alors que c'est là fonction "strlen" qu'il faut utiliser. Les deux font la même chose mais "strlen" fonctionne et pas "sizeof". Je ne comprend pas encore pourquoi mais je cherche.
    la raison est simple.

    dans ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        char HELO[] = "HELO smtp.gmail.com\n";
        send(sock, HELO, sizeof(HELO), 0);
    HELO est une chaîne de caractères C, c'est à dire un tableau de char. En conséquence, comme pour tout tableau en C, lorsque tu passes le nom de ce tableau à une fonction (ou à un opérateur comme sizeof), tu passes en réalité un pointeur vers le premier élément du tableau. Tu passes donc un pointeur sur char à sizeof, et le résultat est la taille du pointeur, et non la taille de la chaîne de caractères, ce qui est une taille bien inférieure à ce que tu souhaites effectivement envoyer.

    Cela explique aussi les erreurs de syntaxe retournées par le serveur SMTP, car, en fait, tu n'envoyais pas les commandes complètes.


    strlen est donc bien la bonne instruction à utiliser pour obtenir la taille d'une chaîne de caractères en C.


    Eks

    Erratum

    Merci à white_tentacle d'avoir signalé ci-dessous mon erreur. sizeof renvoie bien dans ce cas la taille du tableau. Le standard prévoit que si l'opérande de sizeof est de type array, le résultat de sizeof est le nombre total de bytes dans ce tableau.

  15. #15
    Membre Expert
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Par défaut
    Citation Envoyé par -Eks- Voir le message
    la raison est simple.

    dans ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        char HELO[] = "HELO smtp.gmail.com\n";
        send(sock, HELO, sizeof(HELO), 0);
    HELO est une chaîne de caractères C, c'est à dire un tableau de char. En conséquence, comme pour tout tableau en C, lorsque tu passes le nom de ce tableau à une fonction (ou à un opérateur comme sizeof), tu passes en réalité un pointeur vers le premier élément du tableau. Tu passes donc un pointeur sur char à sizeof, et le résultat est la taille du pointeur, et non la taille de la chaîne de caractères, ce qui est une taille bien inférieure à ce que tu souhaites effectivement envoyer.
    En fait, non, dans ce cas, ça marche bien, sizeof(HELO) == 21, car HELO est de type char[21]. En revanche, dès qu’on va passer par un char*, là l’info est perdue, effectivement.

    Sinon, la bonne méthode serait plutôt d’utiliser des std::string qui ont une méthode c_str() pour récupérer un pointeur vers le buffer (qui peut être passé à send) et une méthode size() pour récupérer la longueur de la chaîne.

  16. #16
    Membre chevronné
    Homme Profil pro
    très occupé
    Inscrit en
    Juillet 2014
    Messages
    137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : très occupé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 137
    Par défaut
    Citation Envoyé par white_tentacle Voir le message
    En fait, non, dans ce cas, ça marche bien, sizeof(HELO) == 21, car HELO est de type char[21]. En revanche, dès qu’on va passer par un char*, là l’info est perdue, effectivement.

    Sinon, la bonne méthode serait plutôt d’utiliser des std::string qui ont une méthode c_str() pour récupérer un pointeur vers le buffer (qui peut être passé à send) et une méthode size() pour récupérer la longueur de la chaîne.
    En fait, cela ne "marche" probablement pas dans le cas du code de moi4567, je pense (qui envoie les données selon la longueur indiquée à un serveur SMTP).

    Tu as raison sur le fait que sizeof va pouvoir dans ce cas où le type est char[21] obtenir la taille du tableau et non la taille du pointeur, et que la taille du pointeur est renvoyée si la chaîne est déclarée comme char *.

    Cependant, il est probable que ce n'est pas non plus ce que moi4567 souhaitait obtenir, qui est la taille de la chaîne C contenue dans le tableau, et que le problème d'erreur de syntaxe ait été l'envoi de caractère(s) en trop avec ce type de déclaration (et non de caractères en moins, comme je le pensais dans mon post initial).

    Le code C suivant illustre le problème, sur cette chaîne qui comporte 20 caractères, y compris le retour à la ligne, à envoyer au serveur SMTP, mais à l'exclusion du caractère '\0' de terminaison de chaîne C :

    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
    #include <stdio.h>
    #include <string.h>
     
    char * HELO1 = "HELO smtp.gmail.com\n";
    char HELO2[] = "HELO smtp.gmail.com\n";
    char HELO3[200] = "HELO smtp.gmail.com\n";
     
    int main(void)
    {
        printf("sizeof HELO1 = %d\n", sizeof HELO1);
        printf("sizeof HELO2 = %d\n", sizeof HELO2);
        printf("sizeof HELO3 = %d\n", sizeof HELO3);
        printf("strlen(HELO1) = %d\n", strlen(HELO2));
        printf("strlen(HELO2) = %d\n", strlen(HELO2));
        printf("strlen(HELO3) = %d\n", strlen(HELO3));                                                                                                                                                                 
     
        return 0;
    }
    renvoie ainsi :

    sizeof HELO1 = 4
    sizeof HELO2 = 21
    sizeof HELO3 = 200
    strlen(HELO1) = 20
    strlen(HELO2) = 20
    strlen(HELO3) = 20
    Utiliser sizeof avec le char HELO2[] inclue dans l'envoi le caractère '\0' ce qui envoie le caractère NULL de terminaison de la chaîne C au serveur SMTP, alors que strlen ne le fait pas, car il ne décompte pas le caractère NULL : http://www.cplusplus.com/reference/cstring/strlen/

    Utiliser sizeof avec le char HELO3[200] enverrait encore plus de caractères non souhaités, produisant des erreurs également.

    Sur la bonne méthode à la manière C++, je te laisse juge, car tu dois être plus expert dans ce langage que moi.


    Eks

  17. #17
    Membre Expert
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Par défaut
    Citation Envoyé par -Eks- Voir le message
    Utiliser sizeof avec le char HELO2[] inclue dans l'envoi le caractère '\0' ce qui envoie le caractère NULL de terminaison de la chaîne C au serveur SMTP, alors que strlen ne le fait pas, car il ne décompte pas le caractère NULL : http://www.cplusplus.com/reference/cstring/strlen/
    Effectivement, c’est bien le problème initial de l’op, le \0 envoyé au serveur qui causait une erreur de syntaxe.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 14/03/2008, 15h58
  2. [PPC][C#][Sql CE] erreur "no data exists for the row/column"
    Par Jessika dans le forum Windows Forms
    Réponses: 6
    Dernier message: 12/04/2007, 12h13
  3. Erreur 49 : data segment too large
    Par E-branly dans le forum Pascal
    Réponses: 10
    Dernier message: 09/02/2007, 12h57
  4. Réponses: 3
    Dernier message: 23/01/2006, 16h29
  5. Connexion Telnet et commande Shell
    Par Enano dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 05/11/2005, 08h23

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