Avalanches

socket UDP

  • Messaggi
  • OFFLINE
    lordlothar
    Post: 220
    Registrato il: 01/03/2003
    Membro del forum
    grande amico del forum
    00 30/07/2003 16:34
    Salve ragazzi.
    Alla fine sono riuscito a fare un port scanner per i servizi TCP.
    Ora vorrei aggiungere una funzione per quelli UDP ma non so da dove cominciare!!
    questo è ciò che ho fatto fin'ora:

    ------------- portscanner.c -------------
    #include <stdio.h>
    #include <sys/socket.h>
    #include <sys/types.h>
    #include <netinet/in.h>
    #include <netdb.h>

    void TCP_connect_scan(char hts[255], unsigned int x, unsigned int tport);

    struct hostent *hti;

    int main()
    {
    char hts[255];
    unsigned int fport, tport;

    printf("\nInserire l'IP o l'hostname: ");
    scanf("%s",hts);
    printf("Inserire la porta iniziale: ");
    scanf("%d",&fport);
    printf("Inserire la porta finale: ");
    scanf("%d",&tport);

    if((hti = gethostbyname(hts)) == NULL) { printf("\nError: host not found\n"); exit(1); }

    TCP_connect_scan(hts,fport,tport);
    }

    void TCP_connect_scan(char hts[255], unsigned int x, unsigned int tport)
    {
    int sd, new_sd;
    struct sockaddr_in addr;

    addr.sin_family = AF_INET;
    addr.sin_addr = *((struct in_addr *)hti->h_addr);

    while(x < tport)
    {
    sd = socket(AF_INET, SOCK_STREAM, 0);

    addr.sin_port = htons(x);
    new_sd = connect(sd, (struct sockaddr *)&addr, sizeof(struct sockaddr));
    if(new_sd == 0) printf("%d tcp\n",x);
    x++;
    }

    close(new_sd);
    close(sd);
    }
    -----------------------------------------

    E ora mi serve una funzione pressochè identica a TCP_connect_scan() ma ovviamente non so come fare per sapere se la porta è aperta, dato che non posso con l'if confrontare un socket descriptor dato da connect() con 0(trattandosi di un SOCK_DGRAM)...

    Aiutatemi

    P.S. tanto avete un mese per pensarci ¬_¬

    [Modificato da lordlothar 30/07/2003 16.37]

    [Modificato da lordlothar 30/07/2003 16.44]

    [Modificato da lordlothar 30/07/2003 16.45]

  • OFFLINE
    lordlothar
    Post: 223
    Registrato il: 01/03/2003
    Membro del forum
    grande amico del forum
    00 31/08/2003 00:17
    a questo punto (un mese) rido per non piangere...
  • OFFLINE
    lordlothar
    Post: 257
    Registrato il: 01/03/2003
    Membro del forum
    grande amico del forum
    00 24/09/2003 00:00
    nessuno è in grado di darmi una mano (improbabile) o vi divertite di più a scrivere altro? [SM=g27979]
  • OFFLINE
    DeaZy07
    Post: 306
    Registrato il: 01/03/2003
    Dio
    superamico del forum
    00 24/09/2003 13:34
    Ora come ora non capisco neanche il sorgente sry...
  • OFFLINE
    T-Dragon
    Post: 633
    Registrato il: 30/01/2003
    Dio
    superamico del forum
    00 24/09/2003 16:15
    Ma che problema ti dà?
  • OFFLINE
    X-Treem
    Post: 5
    Registrato il: 19/07/2003
    Membro del forum
    nuovo iscritto
    00 24/09/2003 18:17
    Hai provato a chimare GetSockOpt ???

    so che ritorna la proprietà del socket che richiedi(nn mi chiedere come funzioni e come si usi)....inoltre hai fatto delle prove per vedere i diversi funzionamenti se hai una UDP aperta o chiusa?
  • OFFLINE
    lordlothar
    Post: 258
    Registrato il: 01/03/2003
    Membro del forum
    grande amico del forum
    00 27/09/2003 18:19
    non è che mi ha dato un errore, nè centra nulla con il codice che ho postato.
    Volevo chiedervi che cosa bisogna fare per fare un client UDP. So che bisogna usare recvfrom() e sendto(), e so anche perchè ma non so che risposte può dare e quali dati mandargli.
  • OFFLINE
    X-Treem
    Post: 7
    Registrato il: 19/07/2003
    Membro del forum
    nuovo iscritto
    00 27/09/2003 21:47
    Le stesse che da Send e Recv
  • OFFLINE
    lordlothar
    Post: 259
    Registrato il: 01/03/2003
    Membro del forum
    grande amico del forum
    00 29/09/2003 23:23
    no, nel senso che non so come reagisce un socket UDP a una chiamata perciò non ho idea di cosa mandargli o ricevere da esso.
  • OFFLINE
    X-Treem
    Post: 9
    Registrato il: 19/07/2003
    Membro del forum
    nuovo iscritto
    00 30/09/2003 20:34
    mmm non capisco cosa nn capisci :)

    con recvfrom e sendto mandi un normale buffer contenente dati binari o testo....niente di strano.
    Se fa come vb, la chiamata a sendto apre la connessione direttamente se nn lo è.
  • OFFLINE
    lordlothar
    Post: 261
    Registrato il: 01/03/2003
    Membro del forum
    grande amico del forum
    00 07/10/2003 19:32
    penso che la mia risposta sia che si ottiene "ICMP-Host-Unreachable" se non viene trovato il server... boh!