Bonsoir tout le monde,

Je suis en train de coder un petit serveur telnet sous linux pour m'entrainer et je rencontre un petit souci.
je me connecte sur mon serveur avec netcat, je m'identifie, et je tape une commande. Lors je reçois le résultat de la commande exécutée par mon serveur, l'affichage est altéré (retour à la ligne, caractère manquant, etc). Je ne trouve pas la solution.
Auriez vous une idée ?

Merci de votre réponse.

PS :

voici mon 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
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
#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
 
#define EXIT "quit"
#define LOGIN "test"
#define PASSE "test"
#define TAILLE_MAX 400
 
int authentification(int conn)
{
    char reply[256];
    ssize_t bytes;
    send(conn, "Login : ",9 ,0);
    bytes = read(conn, reply, sizeof(reply));
    if (bytes == 0) { return -1; } 
 
    if (strncmp(reply, LOGIN, 4) == 0)
	{
	    send(conn, "Password : ", 12, 0);
	    bytes = read(conn, reply, sizeof(reply));
	    if (bytes == 0) { return -1; }
	    if(strncmp(reply, PASSE, 4) == 0)
		{
		    send(conn, "Bienvenue !\n", 13, 0);
		    traitement(conn);
		    return 0;
		}
	}
	else
	{
	    send(conn, "Login erroné ! \nDéconnexion ...\n", 33, 0);
	    return -1;
	}
	return 0;
}
 
int traitement(int conn)
{
    ssize_t bytes;
    char commande[256] = "";
    char resultat[TAILLE_MAX] = "";
    send(conn, "telnet> ", 8, 0);
    bytes = read(conn, commande, sizeof(commande));
    if (bytes == 0) { return -1; }
 
    FILE *df = popen(commande, "r");
 
    if (df != NULL)
	{
	    while (fgets(resultat, TAILLE_MAX, df) != 0)
		{
		    write(conn, resultat, sizeof(resultat)); 
		    printf("%s", resultat);
		}
 
	    pclose(df);
	}		
    /*system(commande);*/
}
 
int main(int argc, char *argv[])
{
    int resultat = 0;
    ssize_t bytes;
    int i;
    char commande[256];
    int etat = 0;
    int sock, conn;
    struct sockaddr_in servaddr, cliaddr;
    int sa_in_size = sizeof(struct sockaddr_in);
 
    /* gestion des privileges */
 
    /* if (argc < 3)
	{
	    printf("Usage : ./telnet-server <ip> <port>\n");
	    return -1;
	}
 
    */	
 
    sock = socket(AF_INET, SOCK_STREAM,0);
 
    if (socket < 0)
	{
	    printf("Impossible de creer le socket !\n");
	    return -1;
	}
 
	memset(&servaddr, '\0', sizeof(servaddr));
 
	servaddr.sin_family = AF_INET;
	servaddr.sin_port = htons(23);
	servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
 
	bind(sock, (struct sockaddr_in *)&servaddr, sa_in_size);
 
	if (bind < 0)
	    {
		printf("Impossible d'ouvrir le port !\n");
		return -1;
	    }
 
	listen(sock,10);
 
	while(1)
	    {
		conn = accept(sock, (struct sockaddr_in *)&cliaddr, &sa_in_size);
 
		memset(commande, '\0', sizeof(commande));
 
		send(conn, "Telnet server\n", 29,0);
 
		authentification(conn);
 
	    }
 
 
 
 
}