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);
}
} |
Partager