Web-Server in C per linux

aprile 30, 2009 by admin  
Filed under RETI

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

Technorati Tag: ,,

Tags: , ,

Related posts

LINUX: CAMBIARE PASSWORD DI ROOT

aprile 28, 2009 by admin  
Filed under Linux

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

image

Posted By SECOFORMA

Technorati Tag: ,,,,

Tags: , , , , , , , , , , , , ,

Related posts

Pagina successiva »