Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [c]grabbare pagine html

    ciao

    per risolvere un livello di un hackgame devo trovare una combinazione di numeri che ti permette di andare all'livello successivo.
    io ho fatto un programma in c che mi calcola tutte le possibili combinazioni fino 5 cifre.
    adesso per non provare manualmente tutte le possibile combinazione(anche perche sono tantissime) voglio fare un programma che si connette automaticamente provando le combinazioni che mi sono uscite.
    io ho pensato di un fare un programma che si connette a tale pagina e che mi grabba l'html e se nel html ce scritto livello 10 significa che ho trovato la combinazione giusta.

    l'url della pagina a cui dovrei collegarmi per farmi passare al'livello 10 è cosi
    www.nomegioco.it/combinazione_giusta

    mi potete dire come faccio a connettermi ad una pagina e farmi dare l'html?
    ci sono soluzioni migliori a questa?

    grazie

  2. #2
    se sei capace, ma allora perchè chiedere?, devi scriverti un piccolo client. Ti studi il protocollo http (che è comunque estremamente semplice), fai la richiesta GET e ricevi in risposta l'HTML.
    Come alternativa ti puoi appoggiare a programmi esterni che fanno questo, uno di questi è wget a cui passi l'URL da linea di comando e ti ritorna su un file l'HTML della pagina.
    Per integrarlo in un programma C se lavori su unix-like devi fare un fork-exec, se lavori su windows devi aspettare che qualcuno te lo dica perchè io non lo so.
    ciao
    sergio

  3. #3
    volevo solamente un esempio di codice cosi posso capire velocemente come funziona il tutto.
    non mi importa che il codice sia per linux o per windows.

  4. #4
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <sys/wait.h>
    
    
    int main () {
    
    
            static char *argv[4] ;
    
    	pid_t pid=fork();
    
    
    	if ( pid == 0 )	{
    			/* Questo e' il processo figlio */
    
    			argv[0] = "/usr/bin/wget";
    			argv[1] = "http://www.repubblica.it";
    			argv[2] = NULL;
    
    
    			execv( "/usr/bin/wget",  argv);
    
    			/* 
    			* Se il controllo e' giunto qui allora si e' verificato
    			* un errore nella chiamata execv().  
    			*/
    	}
    	else if ( pid == -1) {      /* fork() failed */
    		perror("fork");
    		exit(EXIT_FAILURE);
    	}
    	else {
    
    		int status ;
    		pid_t wpid = waitpid( pid, &status, WUNTRACED );
    
    		if (wpid == -1) {
    			perror("waitpid");
    			exit(EXIT_FAILURE);
    		}
    
    	}
    
    
    }

  5. #5
    questa è la versione con i socket

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <errno.h>
    #include <string.h>
    #include <netdb.h>
    #include <sys/types.h>
    #include <netinet/in.h>
    #include <sys/socket.h>
    
    #define PORT 80 // the port of httpd servers 
    
    #define MAXDATASIZE 100 // max number of bytes we can get at once 
    
    int main ( int argc, char *argv[] )
    {
    
    	int sockfd, numbytes;  
    
    	char buf[MAXDATASIZE];
    
    	struct hostent *he;
    	struct sockaddr_in their_addr; // connector's address information 
    
    	if (argc != 2) {
    	    fprintf(stderr,"usage: server hostname\n");
    	    exit(1);
    	}
    
    	if ((he=gethostbyname(argv[1])) == NULL) {  // get the host info 
    	    perror("gethostbyname");
    	    exit(1);
    	}
    
    	if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
    	    perror("socket");
    	    exit(1);
    	}
    
    	their_addr.sin_family = AF_INET;    // host byte order 
    	their_addr.sin_port = htons(PORT);  // short, network byte order 
    	their_addr.sin_addr = *((struct in_addr *)he->h_addr);
    	memset(their_addr.sin_zero, '\0', sizeof their_addr.sin_zero);
    
    	if (connect(sockfd, (struct sockaddr *)&their_addr, sizeof their_addr) == -1) {
    	    perror("connect");
    	    exit(1);
    	}
    
    	
    	char * request = "GET / HTTP/1.1\n";
    	if ((numbytes=send (sockfd, request, strlen( request ), 0)) == -1) {
    	    perror("send");
    	    exit(1);
    	}
    
    
    	char *host = "Host:www.repubblica.it\n\n";
    	if ( ( numbytes=send (sockfd, host, strlen(host), 0)) == -1 ) {
    	    perror("send");
    	    exit(1);
    	}
    
    
    	do {
    
    		if ((numbytes=recv(sockfd, buf, MAXDATASIZE - 1, 0)) == -1) {
    		    perror("recv");
    		    exit(1);
    		}
    
    		if ( numbytes <= 0 ) break;
    		buf[numbytes] = '\0';
    
    		printf(buf);
    
    	} while ( 1 ) ;
    
    	close(sockfd);
    	printf("\n");
    
    	return 0;
    }
    è impostato su repubblica.it
    lo compili con
    $gcc nome_file
    e lo lanci con
    ./a.out www.repubblica.it

    poi lo adatti alle tue necessità

    ciao
    sergio

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.