jaco94++ (Normal User)
Expert
Messaggi: 203
Iscritto: 22/10/2008
|
Questo topic č stato chiuso dal moderatore Salve a tutti !
avrei bisogno di un aiuto per un programma di portscanning che sto scrivendo per linux ho un problema con le socket non-blocking.
il codice che ho scritto č questo
Codice sorgente - presumibilmente C++ |
#include <fcntl.h> bool host::nblkscn(string ip,short pi,short delay) { int sock,err,time,succ; struct sockaddr_in psc; sock=socket(PF_INET,SOCK_STREAM,0); psc.sin_family = PF_INET; psc.sin_port=htons(pi); psc.sin_addr.s_addr = inet_addr(ip.c_str()); err=fcntl(sock,F_SETFL,O_NONBLOCK); time=clock()+delay; while(true) { err=connect(sock,(struct sockaddr*)&psc,sizeof(psc)); if(!err) { succ=recv(sock,nfo_hs.wmess,sizeof(nfo_hs.wmess),0); // mi restituisce -1 quindi va in errore close(sock); return true; break; } if(clock()>time) { close(sock); return false; break; } } }
|
il problema di questa funzione e che mi rileva le porte aperte ma non riesce a ricevere messaggi.
cosi ho provato a scriverne un altro ovvero:
Codice sorgente - presumibilmente C++ |
#include <fcntl.h> bool host::nblkscn(string ip,short pi,short delay) { int sock,err,time,succ; struct sockaddr_in psc; sock=socket(PF_INET,SOCK_STREAM,0); psc.sin_family = PF_INET; psc.sin_port=htons(pi); psc.sin_addr.s_addr = inet_addr(ip.c_str()); err=fcntl(sock,F_SETFL,O_NONBLOCK); err=connect(sock,(struct sockaddr*)&psc,sizeof(psc)); time=clock()+delay; while(true) { succ=recv(sock,nfo_hs.wmess,sizeof(nfo_hs.wmess),0); if(succ!=-1&&succ!=0) { close(sock); return true; break; } if(clock()>time) { close(sock); return false; break; } } }
|
questo trova le porte aperte e mi restituisce i messaggi ma non so quanto possa essere corretto !
quindi volevo sapere come sistemare l'altro e anche una vostra opinione su quale delle due funzioni č pių corretta per lo scopo del programma! |