yohan49
Messages postés380Date d'inscriptionsamedi 22 janvier 2005StatutMembreDernière intervention13 août 2011
-
2 mai 2007 à 13:09
emmatopiak
Messages postés149Date d'inscriptionmercredi 28 mars 2007StatutMembreDernière intervention17 mai 2007
-
3 mai 2007 à 23:11
Salut les gars , je suis entrain de faire une scanner de proxy pour irc, donc j'utilise des socket lol
je cherche a savoir comment mettre un timeout sur la fonction connect du socket en C , car 3 minutes de timeout sur cahque ports scanné , en cas d'attaque , 7 ports * 3 minutes !! lol
rudybaka
Messages postés8Date d'inscriptionvendredi 10 février 2006StatutMembreDernière intervention24 mai 2007 2 mai 2007 à 18:34
La fonction sigalarm n'est pas très importante, elle peut etre vide ou afficher un message d'erreur, c'est comme tu veux. elle sert juste a être appelé a la fin du timeout et ansi debloqué la fonction connect()
emmatopiak
Messages postés149Date d'inscriptionmercredi 28 mars 2007StatutMembreDernière intervention17 mai 20072 2 mai 2007 à 23:12
Salut,
Y'a setsockopt avec parametre SO_RCVTIMEO ou SO_SNDTIMEO, mais suis pas sur :p
Donc essaye de voir si tu peux pas utiliser setsockopt, et notamment les parametres SO_RCVTIMEO et SO_SNDTIMEO, ou bien rendre ta socket non bloquante, sinon.
Ensuite.
la methode que te conseillait rudybaka c'etait de lancer ton connect dans un autre processus et quand tu recois l'alarme, tu killes ce processus.
@++
Vous n’avez pas trouvé la réponse que vous recherchez ?
int check_connect(char *iphost,int port)
{
struct hostent *serverHostEnt;
struct sockaddr_in serverSockAddr;
long hostAddr;
int s = -1;
int ret = 0;
if ((s socket(PF_INET, SOCK_STREAM, 0)) SOCKET_ERROR)
return 0;
emmatopiak
Messages postés149Date d'inscriptionmercredi 28 mars 2007StatutMembreDernière intervention17 mai 20072 3 mai 2007 à 12:29
Salut,
Deja ton code est tres bien fait c'est tres agreable a lire, maintenant pour ton probleme je ne sais pas pour le moment.
-Peux-tu me dire :
1) l'etat de tous les ports que tu testes
2) ce que renvoie connect quand il marche
3) ce que tu entends par 'le timeout ne marche pas' => est-ce que tu veux dire que tu dois attendre les trois minutes ?
/* ip a tester */
char *ip_test = "86.204.130.181";
/* variable d'enregistrement de l'environnement pour restauration de l'environnement apres un timeout **/
jmp_buf timeout_jump ;
/* fonction a traiter sur SIGALRM */
void timeout(int sig)
{
printf("dans la fonction timeout , restauration de l'environnement\n");
longjmp( timeout_jump, 1 ) ;
return;
}
/* return 0 si erreur ou superrieur a 0 si reussi **/
int creat_socket()
{
int s = -1;
if ((s socket(PF_INET, SOCK_STREAM, 0)) -1)
return 0;
/* fonction de test de connection iphost / port */
int is_con_possible(int s,char *iphost,int port)
{
struct hostent *serverHostEnt;
struct sockaddr_in serverSockAddr;
long hostAddr;
int ret = 0;
int main(void)
{
printf("Lancement du test sur l'ip : %s!\n",ip_test);
scan_proxy_http(ip_test);
return 0;
}
ET LE RESULTAT :
Lancement du test sur l'ip : 86.204.130.181!
tentative sur 86.204.130.181 8080
socket cree
dans la fonction timeout , restauration de l'environnement
C'est un timeout
temps ecoule 5 seconde(s)
tentative sur 86.204.130.181 80
socket cree
connect(): Connection timed out
temps ecoule 189 seconde(s)
tentative sur 86.204.130.181 3128
socket cree
connect(): Connection refused
temps ecoule 1 seconde(s)
tentative sur 86.204.130.181 8001
socket cree
connect(): Connection timed out
temps ecoule 189 seconde(s)
tentative sur 86.204.130.181 8002
socket cree
connect(): Connection timed out
temps ecoule 189 seconde(s)
Mon time out ne fonctionne qu'une seul fois :///
bien bizard ca quand meme
je pense que je vais devoir passer en non-bloquant , les stocker dans une liste chainée , puis creer une liste de timer qui ira toute les secondes voir si un socket est dispo en lecture
/* fonction de connection iphost / port */
int connection(int s,char *iphost,int port)
{
struct hostent *serverHostEnt;
struct sockaddr_in serverSockAddr;
long hostAddr;