Oppure

Loading
Questo topic e' stato chiuso dal moderatore.
05/08/11 20:36
jaco94++
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

#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:
 #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!
aaa
05/08/11 23:43
HeDo
Questo topic è in violazione di una o più norme del regolamento: pierotofy.it/pages/extras/forum/9/3839-regolamento/ .
    
Dopo averlo letto riapri un nuovo topic assicurandoti di aver rispettato le regole. Grazie per la tua pazienza.
aaa