Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - c++ linux socket
Forum - C/C++ - c++ linux socket

Avatar
jaco94++ (Normal User)
Expert


Messaggi: 203
Iscritto: 22/10/2008

Segnala al moderatore
Postato alle 22:36
Venerdì, 05/08/2011
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++

  1. #include <fcntl.h>
  2. bool host::nblkscn(string ip,short pi,short delay)
  3. {
  4.     int sock,err,time,succ;
  5.     struct sockaddr_in psc;
  6.  
  7.     sock=socket(PF_INET,SOCK_STREAM,0);
  8.     psc.sin_family = PF_INET;
  9.     psc.sin_port=htons(pi);
  10.     psc.sin_addr.s_addr = inet_addr(ip.c_str());
  11.     err=fcntl(sock,F_SETFL,O_NONBLOCK);
  12.     time=clock()+delay;
  13.  
  14.     while(true)
  15.     {
  16.    err=connect(sock,(struct sockaddr*)&psc,sizeof(psc));
  17.         if(!err)
  18.         {
  19.  succ=recv(sock,nfo_hs.wmess,sizeof(nfo_hs.wmess),0);  // mi restituisce -1 quindi va in errore
  20.             close(sock);
  21.             return true;
  22.             break;
  23.         }
  24.         if(clock()>time)
  25.         {
  26.             close(sock);
  27.             return false;
  28.             break;
  29.         }
  30.     }
  31. }


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++

  1. #include <fcntl.h>
  2. bool host::nblkscn(string ip,short pi,short delay)
  3. {
  4.     int sock,err,time,succ;
  5.     struct sockaddr_in psc;
  6.  
  7.     sock=socket(PF_INET,SOCK_STREAM,0);
  8.     psc.sin_family = PF_INET;
  9.     psc.sin_port=htons(pi);
  10.     psc.sin_addr.s_addr = inet_addr(ip.c_str());
  11.     err=fcntl(sock,F_SETFL,O_NONBLOCK);
  12.     err=connect(sock,(struct sockaddr*)&psc,sizeof(psc));
  13.     time=clock()+delay;
  14.  
  15.     while(true)
  16.     {
  17.         succ=recv(sock,nfo_hs.wmess,sizeof(nfo_hs.wmess),0);
  18.         if(succ!=-1&&succ!=0)
  19.         {
  20.             close(sock);
  21.             return true;
  22.             break;
  23.         }
  24.         if(clock()>time)
  25.         {
  26.             close(sock);
  27.             return false;
  28.             break;
  29.         }
  30.     }
  31. }


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!

PM
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2763
Iscritto: 21/09/2007

Up
0
Down
V
Segnala al moderatore
Postato alle 1:43
Sabato, 06/08/2011
Questo topic è in violazione di una o più norme del regolamento: http://www.pierotofy.it/pages/extras/forum/9/3839-regolame ... .
    
Dopo averlo letto riapri un nuovo topic assicurandoti di aver rispettato le regole. Grazie per la tua pazienza.


Ingegnere Informatico
https://ldlagency.it
PM