Web-Server in C per linux
Creare un file con nome webserver.c e compilarlo mediante gcc di linux.
#include<stdio.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
int main()
{
struct sockaddr_in indirizzo;
struct sockaddr_in indirizzo_client;
int lungh;
int descr,descr2;
int j,k;
int tmp;
char richiesta[1000];
char comando[1000];
char risposta[50000];
char nomefile[1000];
char * punt_nomefile;
FILE * f;
unsigned char * p;
descr = socket (PF_INET, SOCK_STREAM, 0);
if ( descr == -1){
printf("Errore in socket()\n");
perror("Si e’ verificato un errore");
return 1;
}
printf("%d\n",descr);
p = (unsigned char *) &indirizzo.sin_addr.s_addr;
p[0] =0; p[1]=0; p[2]=0; p[3]=0;
indirizzo.sin_family = AF_INET;
indirizzo.sin_port = htons(8880); /* short */
tmp = bind(descr, (struct sockaddr *) &indirizzo, sizeof(struct sockaddr_in));
if (tmp == -1){
perror("Errore in bind()");
return 1;
}
tmp =listen(descr,5);
if (tmp == -1){
perror("Errore in listen()");
return 1;
}
lungh =sizeof(struct sockaddr_in);
while(1){
descr2 = accept(descr, (struct sockaddr *) &indirizzo_client, &lungh);
if (descr2 == -1){
perror("Errore in accept()");
return 1;
}
printf("Connessione da: %d.%d.%d.%d port %d\n",
((unsigned char *)&indirizzo_client.sin_addr.s_addr)[0],
((unsigned char *)&indirizzo_client.sin_addr.s_addr)[1],
((unsigned char *)&indirizzo_client.sin_addr.s_addr)[2],
((unsigned char *)&indirizzo_client.sin_addr.s_addr)[3],
htons(indirizzo_client.sin_port));
/* RICEZIONE DI TUTTO (BLOCCANTE)
while( tmp = read(descr2,richiesta,49999)){
for(j=0;j<tmp;j++)
printf("%c",richiesta[j]);
}
*/
j=0;
read(descr2,&richiesta[j],1);
while(! (richiesta[j]==’\n’ && richiesta[j-2]==’\n’) ){
printf("%c",richiesta[j]);
j++;
read(descr2,&richiesta[j],1);
}
richiesta[j]=0;
printf("%s",richiesta);
for(k=5; richiesta[k]!=’ ‘; k++){
nomefile[k-5]=richiesta[k];
}
nomefile[k-5]=0; // Terminatore
printf("Accedo al file %s\n",nomefile );
/* NON SI COPIA DUE VOLTE IL NOMEFILe IN MEMORIA
* punt_nomefile = &richiesta[5];
* for(k=5;richiesta[k]!=’ ‘;k++);
* richesta[k]=0; // Terminatore
* printf("Accedo al file %s\n",punt_nomefile );
*
*/
if (nomefile[0]==’P’ && nomefile[1]==’R’ && nomefile[2]==’G'){
/* NON MANDO IL FILE MA ESEGUO UN PROGRAMMA*/
printf("Eseguo il comando…\n");
sprintf(comando, "%s > pluto", &nomefile[3]);
system(comando);
strcpy(nomefile,"pluto");
}
f = fopen(nomefile,"r");
if ( f == NULL) {
strcpy(risposta,"FILE NON TROVATO");
write(descr2,risposta,strlen(risposta));
}
else {
printf("File %s aperto", nomefile);
while (tmp = fread(risposta,1,1,f)){
write(descr2,risposta,tmp);
}
}
tmp = shutdown(descr2,2);
if (tmp == -1){
perror("Errore in shutdown()");
return 1;
}
close(descr2);
} // Fine while(1)
}
Tags: C, Linux, Web server
Related posts
LINUX: CAMBIARE PASSWORD DI ROOT
La modifica della password di root su un sistema Linux è abbastanza semplice, spesso il comando da digitare nella shell è semplicemente “passwd”, grazie al quale comparira’ un evento di input della nuova parola chiave quindi un successivo evento di riscontro per controllarne l’esattezza
Posted By SECOFORMA
Tags: 3, da, di, isc, Linux, nt, on, per, R, SECOFORMA, sistema, su, web, word

