Messaggioda eafkuor » 06/01/2005, 10:07

per linux stai tranquillo... ho fatto anche una versione migliorata =) eccola:

#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>

#define PORT 80

void usage(char *argv, int h){

if(h){
printf("Usage:\n%s <1° part of url> <last part of url> [starting number for 2° part of url] [ending number]\n", argv);
printf("Create strings www.arg1-number.arg2 (without \"-\") where number goes from arg3 to arg4\n");
printf("and tries to connect to each site. If there\'s no arg3 it is set to 0, and if there\'s no arg4\n");
printf("it is set to 1000.\n");
}
else printf("Try\n%s -h\n", argv);

exit(0);

}

int main(int argc, char *argv[]){

char string1[30], string2[10];
int start=0, c=0, end;
int fd;

struct hostent *he;
struct sockaddr_in server;

if(argc<2) usage(argv[0], 0);
if(!strcmp(argv[1], "-h")) usage(argv[0], 1);
if(argc<3) usage(argv[0], 0);
if(argv[3]) start=atoi(argv[3]);
else start=0;
if(argv[4]) end=atoi(argv[4]);
else end=1000;

for(;start<=end;start++){

strcpy(string1, "www.");
strcat(string1, argv[1]);
strcat(string1, ".");
if(argv[3]){
sprintf(string2, "%i", start);
strcat(string1, string2);
}
strcat(string1, argv[2]);


if((he = gethostbyname(string1)) == NULL){
continue;
}

if((fd = socket(AF_INET, SOCK_STREAM, 0)) == -1){
continue;
}

server.sin_family = AF_INET;
server.sin_port = htons(PORT);

server.sin_addr = *((struct in_addr *)he->h_addr);
bzero(&(server.sin_zero), 8);

if(connect(fd, (struct sockaddr *)&server, sizeof(struct sockaddr)) == -1){
continue;
}

else {close(fd);c=1;break;}
}

if(!c)printf("Non sono riuscito a collegarmi a nessun sito\n");
else printf("Mi sono collegato al sito %s\n", string1);

return 0;
}

-----------------------
Il bello di essere intelligente e' che puoi divertirti a fare l' imbecille, ma se sei un imbecille non puoi fare il contrario.
Woody Allen
eafkuor
Senior Member
Senior Member
 
Messaggio: 123 di 1106
Iscritto il: 08/03/2004, 15:59
Località: Italy

Messaggioda eafkuor » 06/01/2005, 10:14

per windows speriamo che questo vada bene:

#include <stdio.h>
#include <winsock.h>

#define PORT 80


int client(char * server_IP);
int InitializeWinsock(WORD );


int main()
{
char string1[30], string2[10];
int n=0, c=0;

for(n=0;n<1000;n++){ //i tentativi si effettuano fino a www.vecchio1000.it

strcpy(string1, "www.vecchio");
sprintf(string2, "%i", n);
strcat(string1, string2);
strcat(string1, ".it");


//pero' forse devi convertire la stringa in ip non lo so come si fa mi dispiace
if (!InitializeWinsock (MAKEWORD(1,1) ) ) return 1;
if(!client(string1))continue;
else {WSACleanup();c=1;break;} //se ti connetti metti c=1 ed esci da ciclo
}
if(!c)printf("Non sono riuscito a collegarmi a nessun sito\n");
else printf("Mi sono collegato al sito %s\n", string1);


return 0;
}



int client(char * server_IP)
{
SOCKET fd; // "file" descriptor for the network socket
SOCKADDR_IN saddr;
//char buf[MAX_STRING]; questo non dovrebbe servire

if ((fd=socket(AF_INET,SOCK_STREAM,0)) == INVALID_SOCKET){
printf("Errore durante la creazione del socket\n");
exit(0);
}
saddr.sin_family = AF_INET;
saddr.sin_addr.s_addr = inet_addr(server_IP);
saddr.sin_port = htons(PORT);

if (connect(fd, (LPSOCKADDR) &saddr, sizeof(saddr)) == SOCKET_ERROR)
return 0; //se non si connette ritorna 0

if (closesocket(fd) == SOCKET_ERROR)
printf("Errore durante la chiusura del socket\n");

return 1;
}



int InitializeWinsock(WORD wVersionRequested)
{
WSADATA wsaData;
int err;

err = WSAStartup(wVersionRequested, &wsaData);


if (err!=0) return 0; // Tell the user that we couldn't find a usable winsock.dll


if (LOBYTE(wsaData.wVersion )!=1 || HIBYTE(wsaData.wVersion)!=1) return 0;


return 1;
}





-----------------------
Il bello di essere intelligente e' che puoi divertirti a fare l' imbecille, ma se sei un imbecille non puoi fare il contrario.
Woody Allen
eafkuor
Senior Member
Senior Member
 
Messaggio: 124 di 1106
Iscritto il: 08/03/2004, 15:59
Località: Italy

Messaggioda vecchio » 06/01/2005, 19:46

ok direi che ci siamo!!! il compilatore non mi dà più errori...a questo punto dovrei dire "run" giusto? perfetto...e i risulti del programma deve li leggo??? quando gli dico "run" lui me lo compila dicendomi che non ci sono errori..e poi mi apre una finestra dal titolo: "compiler and linker output" in cui è scritto questo:

C:\DOCUME~1\...IMPOST~1\Temp\ccMbcaaa.o(.text+0x151):forse.cpp: undefined reference to `WSACleanup@0'
C:\DOCUME~1\...\IMPOST~1\Temp\ccMbcaaa.o(.text+0x238):forse.cpp: undefined reference to `socket@12'
C:\DOCUME~1\...\IMPOST~1\Temp\ccMbcaaa.o(.text+0x275):forse.cpp: undefined reference to `inet_addr@4'
C:\DOCUME~1\...\IMPOST~1\Temp\ccMbcaaa.o(.text+0x287):forse.cpp: undefined reference to `htons@4'
C:\DOCUME~1\...\IMPOST~1\Temp\ccMbcaaa.o(.text+0x2a2):forse.cpp: undefined reference to `connect@12'
C:\DOCUME~1\...\IMPOST~1\Temp\ccMbcaaa.o(.text+0x2bc):forse.cpp: undefined reference to `closesocket@4'
C:\DOCUME~1\...\IMPOST~1\Temp\ccMbcaaa.o(.text+0x308):forse.cpp: undefined reference to `WSAStartup@8'

che devo fare??

<img src="http://www.vecchio85.supereva.it/vecchio.gif" border=0>
Avatar utente
vecchio
Senior Member
Senior Member
 
Messaggio: 631 di 1036
Iscritto il: 17/07/2003, 14:35

Messaggioda eafkuor » 07/01/2005, 16:03

allora il programma appena riesce a collegarsi a un sito smette di funzionare e ti dice a quale sito si e' collegato, se vuoi che continui a provare tutti i siti e che salvi in un file quelli a cui si e' collegato dimmelo.

questi errori vogliono dire che non trove quelle funzioni, che dovrebbero stare su una libreria esterna. probabilmente questa libreria non c'e' e la devi scaricare. leggendo il link che mi hai riportato tu qualche post fa, vedo:

1.1 Windows e i Sockets

Il progetto Windows Socket iniziò nell'ottobre 1991 in una sessione di Interdrop; venne quindi rilasciata la versione 1.0 in dicembre. E' successivamente seguita la versione 1.1 e l'attuale 2.0. Pur mantenendo le caratteristiche di base della definizione BSD, la specifica WinSock differisce in parecchi punti. I principali argomenti di divergenza sono i seguenti:
[...]
Non è quindi possibile ricompilare un programma UNIX in ambiente Windows senza effettuare una serie di modifiche per renderlo compatibile al nuovo ambiente.

[...]

Vengono riportati alcuni esempi commentati relativi all'impiego di sockets. Gli esempi sono sia per l'ambiente UNIX (con chiamate BSD standard), sia per l'ambiente Windows (Winsock). Per la compilazione degli stessi:

* UNIX: è normalmente sufficiente lanciare il comando gcc source_file.c -o exe_file

* Windows: è necessario creare un progetto (ad esempio con Visual C++), aggiungendo all'elenco delle librerie da linkare al programma la libreria winsock (ad esempio il file wsock32.lib per i sockets versione 1.1)[/br]


penso che tu debba scaricarti i socket versione 2.0 o 1.1 (cioe' ne sono sicuro). il fatto di cui sono un po' meno sicuro e' se tu debba avere o no per forza il compilatore Visual C++
fammi sapere se trovi questi socket


-----------------------
Il bello di essere intelligente e' che puoi divertirti a fare l' imbecille, ma se sei un imbecille non puoi fare il contrario.
Woody Allen
eafkuor
Senior Member
Senior Member
 
Messaggio: 129 di 1106
Iscritto il: 08/03/2004, 15:59
Località: Italy

Messaggioda vecchio » 07/01/2005, 17:54

il problema è che non ho idea di dove trovarli!!...nè di dove metterli alla fine!!
cmq ho trovato intanto un altro link:
http://online.infomedia.it/riviste/logi ... ticolo.htm
forse può essere interessante (per te...visto che io non ci capsco nulla!!)

...continuo a cercare...
grazie per la pazienza...

<img src="http://www.vecchio85.supereva.it/vecchio.gif" border=0>
Avatar utente
vecchio
Senior Member
Senior Member
 
Messaggio: 634 di 1036
Iscritto il: 17/07/2003, 14:35

Messaggioda vecchio » 07/01/2005, 18:06

che significa poi:

<blockquote id="quote"><font size="1" face="Verdana, Arial, Helvetica" id="quote">quote:<hr height="1" noshade id="quote">
aggiungendo all'elenco delle librerie da linkare al programma la libreria winsock (ad esempio il file wsock32.lib per i sockets versione 1.1<hr height="1" noshade id="quote"></font id="quote"></blockquote id="quote">
?? bisogna fare qlcs tipo "#include..."?? boh..

<img src="http://www.vecchio85.supereva.it/vecchio.gif" border=0>
Avatar utente
vecchio
Senior Member
Senior Member
 
Messaggio: 635 di 1036
Iscritto il: 17/07/2003, 14:35

Messaggioda vecchio » 07/01/2005, 18:07

io nella cartella "lib" di dev-c++ ho il file chiamato wsock32.def c'entra niente?? però non ha un'estensione *.lib...

<img src="http://www.vecchio85.supereva.it/vecchio.gif" border=0>
Avatar utente
vecchio
Senior Member
Senior Member
 
Messaggio: 636 di 1036
Iscritto il: 17/07/2003, 14:35

Messaggioda eafkuor » 08/01/2005, 10:47

ho compilato il programma (con visual c++, bisogna includere wsock32.lib tra i file da linkare)
appena trova un sito funzionante lo scrive e smette di funzionare.
posso spedirti l' eseguibile per email.
ti posto il sorgente, giusto per curiosita'.


#include <stdio.h>
#include <stdlib.h>
#include <winsock.h>

#define PORT 80


int client(char * server_IP);
int InitializeWinsock(WORD );


int main()
{
char string1[30], string2[10], prima[20], seconda[20];
int n=0, c=0, fino, da;

printf("Inserire la prima parte del sito (per es www.sito): ");
scanf("%s", prima);
printf("Da che numero vuoi partire? ");
scanf("%d", &da);
printf("A che numero vuoi arrivare? ");
scanf("%d", &fino);
printf("Inserire la seconda parte del sito(per es .it): ");
scanf("%s", seconda);


for(n=da;n<=fino;n++){ //i tentativi si effettuano fino a www.vecchio1000.it

strcpy(string1, prima);
sprintf(string2, "%i", n);
strcat(string1, string2);
strcat(string1, seconda);
//printf("%s\n", string1);


//pero' forse devi convertire la stringa in ip non lo so come si fa mi dispiace
if (!InitializeWinsock (MAKEWORD(1,1) ) ) return 1;
if(!client(string1))continue;
else {WSACleanup();c=1;break;} //se ti connetti metti c=1 ed esci da ciclo
}
if(!c)printf("Non sono riuscito a collegarmi a nessun sito\n");
else printf("Mi sono collegato al sito %s\n", string1);

system("PAUSE");
return 0;
}



int client(char * server_IP)
{
SOCKET fd; // "file" descriptor for the network socket
SOCKADDR_IN saddr;
//char buf[MAX_STRING]; questo non dovrebbe servire

if ((fd=socket(AF_INET,SOCK_STREAM,0)) == INVALID_SOCKET){
printf("Errore durante la creazione del socket\n");
exit(0);


}


saddr.sin_family = AF_INET;
saddr.sin_addr.s_addr = inet_addr(server_IP);
saddr.sin_port = htons(PORT);


if (connect(fd, (LPSOCKADDR) &saddr, sizeof(saddr)) == SOCKET_ERROR)
return 0; //se non si connette ritorna 0

if (closesocket(fd) == SOCKET_ERROR)
printf("Errore durante la chiusura del socket\n");


return 1;
}





int InitializeWinsock(WORD wVersionRequested)
{
WSADATA wsaData;
int err;

err = WSAStartup(wVersionRequested, &wsaData);

if (err!=0) return 0;

if (LOBYTE(wsaData.wVersion )!=1 || HIBYTE(wsaData.wVersion)!=1) return 0;


return 1;
}

-----------------------
Il bello di essere intelligente e' che puoi divertirti a fare l' imbecille, ma se sei un imbecille non puoi fare il contrario.
Woody Allen
eafkuor
Senior Member
Senior Member
 
Messaggio: 131 di 1106
Iscritto il: 08/03/2004, 15:59
Località: Italy

Messaggioda eafkuor » 08/01/2005, 10:57

p.s. spero che funzioni altrimenti non so cosa fare e sarai ocndannato a linux [:D]

-----------------------
Il bello di essere intelligente e' che puoi divertirti a fare l' imbecille, ma se sei un imbecille non puoi fare il contrario.
Woody Allen
eafkuor
Senior Member
Senior Member
 
Messaggio: 132 di 1106
Iscritto il: 08/03/2004, 15:59
Località: Italy

Messaggioda vecchio » 08/01/2005, 15:04

anche stavolta mi dà 0 errori..ma il programma dove dovrei vederlo????? io gli dico "run" ma lui non mi fa apparire (ad esempio) la scritta "inserisci la prima parte del sito...etc..."
cmq ok per l'eseguibile!! ora ti do la mia e-mail..
spediscimi quest'ultimo in modo che io possa da solo modificare (immettere in questo caso) il link del sito..
grazie

il vecchio

<img src="http://www.vecchio85.supereva.it/vecchio.gif" border=0>
Avatar utente
vecchio
Senior Member
Senior Member
 
Messaggio: 641 di 1036
Iscritto il: 17/07/2003, 14:35

PrecedenteProssimo

Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite

cron