chakal^-^
2006-10-10 09:23:06 UTC
Hola, estoy haciendo un escáner de proxys para probar que se pueden
usar para conectar al IRC, el problema es que tarda demasiado el cierre
de conexión pasado x segundos, me gustaría que se cerrara en 10
segundos para que no tardara tanto, me dijeron que usando select() peor
no soy capaz de anidar el select, no recuerdo muy bien su
funcionamiento, el código es el siguiente, tal cual funciona, se le
pasa como parámetro el archivo de proxys (supuestas) donde contiene la
ip y el puerto:
1.1.1.1 80
2.2.2.2 8080
....
el código es el siguiente:
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <errno.h>
#include <netinet/in.h>
#include <netdb.h>
#include <arpa/inet.h>
#include <stdlib.h>
#define File_Proxys "/home/chakal/proxys"
int main(int argc, char *argv[])
{
int sck;
int cn;
int puerto;
FILE *pf;
char buffer[2058];
char *direccion;
char buff[64];
char backup[128];
struct sockaddr_in IP;
memset(buffer,0x00,sizeof(buffer));
memset(buff,0x00,sizeof(buff));
memset(&direccion,0x00,sizeof(direccion));
memset(backup,0x00,sizeof(backup));
pf=fopen(argv[1],"r");
fgets(buff,30,pf);
while(!feof(pf))
{
strcpy(backup,buff);
direccion=strtok(buff," ");
puerto=atoi(strrchr(backup,' '));
if (( sck=socket(PF_INET,SOCK_STREAM,0))==-1) {
perror("Error en la creacion del socket:");
fgets(buff,30,pf);
continue;
}
IP.sin_family=AF_INET;
IP.sin_port=htons(puerto);
IP.sin_addr.s_addr=inet_addr(direccion);
if((cn=connect(sck,(struct sockaddr *)&IP,sizeof(struct
sockaddr)))==-1) {
close(sck);
fgets(buff,30,pf);
continue;
}
send(sck,"CONNECT irc.irc-hispano.org:6667
HTTP/1.0\n\n\r",44,0);
recv(sck,buffer,sizeof(buffer),0);
if(strstr(buffer,"HTTP/1.0 200 Connection
established")) {
printf("%s %i OK\n",direccion,puerto);
close(sck);
}
else {
printf("%s %i NO\n",direccion,puerto);
close(sck);
}
fgets(buff,30,pf);
}
fclose(pf);
return(0);
}
Me gustaría saber como meter un sleep(10); , pero claro, si lo meto
tal cual nunca se establece la conexión, simplemente se bloquea el
programa pasado los 10 segundos ...
salu2
usar para conectar al IRC, el problema es que tarda demasiado el cierre
de conexión pasado x segundos, me gustaría que se cerrara en 10
segundos para que no tardara tanto, me dijeron que usando select() peor
no soy capaz de anidar el select, no recuerdo muy bien su
funcionamiento, el código es el siguiente, tal cual funciona, se le
pasa como parámetro el archivo de proxys (supuestas) donde contiene la
ip y el puerto:
1.1.1.1 80
2.2.2.2 8080
....
el código es el siguiente:
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <errno.h>
#include <netinet/in.h>
#include <netdb.h>
#include <arpa/inet.h>
#include <stdlib.h>
#define File_Proxys "/home/chakal/proxys"
int main(int argc, char *argv[])
{
int sck;
int cn;
int puerto;
FILE *pf;
char buffer[2058];
char *direccion;
char buff[64];
char backup[128];
struct sockaddr_in IP;
memset(buffer,0x00,sizeof(buffer));
memset(buff,0x00,sizeof(buff));
memset(&direccion,0x00,sizeof(direccion));
memset(backup,0x00,sizeof(backup));
pf=fopen(argv[1],"r");
fgets(buff,30,pf);
while(!feof(pf))
{
strcpy(backup,buff);
direccion=strtok(buff," ");
puerto=atoi(strrchr(backup,' '));
if (( sck=socket(PF_INET,SOCK_STREAM,0))==-1) {
perror("Error en la creacion del socket:");
fgets(buff,30,pf);
continue;
}
IP.sin_family=AF_INET;
IP.sin_port=htons(puerto);
IP.sin_addr.s_addr=inet_addr(direccion);
if((cn=connect(sck,(struct sockaddr *)&IP,sizeof(struct
sockaddr)))==-1) {
close(sck);
fgets(buff,30,pf);
continue;
}
send(sck,"CONNECT irc.irc-hispano.org:6667
HTTP/1.0\n\n\r",44,0);
recv(sck,buffer,sizeof(buffer),0);
if(strstr(buffer,"HTTP/1.0 200 Connection
established")) {
printf("%s %i OK\n",direccion,puerto);
close(sck);
}
else {
printf("%s %i NO\n",direccion,puerto);
close(sck);
}
fgets(buff,30,pf);
}
fclose(pf);
return(0);
}
Me gustaría saber como meter un sleep(10); , pero claro, si lo meto
tal cual nunca se establece la conexión, simplemente se bloquea el
programa pasado los 10 segundos ...
salu2