Pagina 1 di 1

[C] Problema con i Socket [RISOLTO]

Inviato: mar 8 mar 2011, 14:25
da joseph
Salve ragazzi, dovrei presentare un piccolo progettino al mio prof. universitario di programmazione su reti,
avevo pensato di creare un semplice portscanner. L'esempio presente crea un solo canale di comunicazione
e prova se la porta è aperta o meno, visto che il prof. è vizioso mi aveva chiesto di creare piu' connessioni
e testare piu' porte contemporaneamente. Ad esempio imposto un numero di socket pari a 50 e faccio un
check di 50 porte per volta. Avete qualche idea?

Codice: Seleziona tutto

    for(inizio_porta;inizio_porta<=fine_porta;inizio_porta++){

        /*  Creazione del socket    */
        if ((errore = socket(AF_INET, SOCK_STREAM, 0)) == -1)
            exit(fprintf(stderr,"[ > %sErrore nella creazione del socket.%s < ]\n",RED,RESET));

        /*  Imposto il tipo di indirizzo    */
        soc.sin_family = AF_INET;
        soc.sin_port = htons(inizio_porta);
        soc.sin_addr = *((struct in_addr *)ip->h_addr);


        /*  Connessione del socket                                      */
        if (connect(errore, (struct sockaddr *)&soc, sizeof(struct sockaddr)) == -1)
            /*  Chiudo il socket    */
            close(errore);
        else{
            /*  Richiamo la funzione checkport  */
            checkport(inizio_porta);
            /*  Chiudo il socket                */
      	    close(errore);
        }
    }
In rete non ho trovato nulla a riguardo spero mi possiate aiutare.
Grazie a tutti anticipatamente

Re: [C] Problema con i Socket

Inviato: mar 8 mar 2011, 14:57
da targzeta
Probabilmente il tuo professore ti vuole dire che non c'è bisogno di aspettare le risposte. Puoi benissimo aprire 50 socket in contemporanea (con un for) e poi controllarle tutte. Ora di preciso non ricordo le funzioni esatte, ma su internet puoi cercare il GaPIL in cui sono spiegate anche le funzioni per le reti. In pratica raggruppa le pagine man per argomenti, è carino, dagli un'occhiata.

Emanuele

Re: [C] Problema con i Socket

Inviato: mar 8 mar 2011, 15:00
da joseph
Interessante, grazie spina ho trovato il manuale. Capitolo 16 i socket. Speriamo di risolvere il problema.
Grazie ancora per la dritta vi farò sapere

Re: [C] Problema con i Socket

Inviato: mar 8 mar 2011, 17:51
da joseph
Purtroppo non ciò capito granchè da quella guida, qualcuno potrebbe postare qualche piccolo
esempio di codice su cui prendere spunto?

Grazie infinite ragazzi :o

Re: [C] Problema con i Socket

Inviato: mar 8 mar 2011, 18:13
da m0rdr3d
Offtopic: vedo che sei di Salerno, posso chiederti chi è il tuo prof di reti?

Re: [C] Problema con i Socket

Inviato: mer 9 mar 2011, 13:04
da joseph
Tortora. Sto facendo la tesi con lui

Re: [C] Problema con i Socket

Inviato: mer 9 mar 2011, 15:56
da ocman
Gapil è davvero ottimo.
Anche in questa pagina trovi degli esempi/spiegazioni che mi sono serviti molto http://beej.us/guide/bgnet/output/html/ ... index.html
Un esempio semplice ma non molto commentato per porte tcp lo trovi qui http://ftp.cerias.purdue.edu/pub/tools/ ... cp_ports.c

Re: [C] Problema con i Socket

Inviato: mer 9 mar 2011, 21:49
da joseph
L'esempio riportato è lo stesso che ho presentato, a me servirebbe un qualcosa come ha detto spina.
Aprire le connessioni e poi verificarle tutte insieme. Ho provato anche a smanettarci un pò ma
senza avere nessun risultato. Si ferma sempre su ogni connessione.

Re: [C] Problema con i Socket

Inviato: mer 9 mar 2011, 22:12
da targzeta
Ma sono quasi sicuro che si possa fare. Quella che serve a te dovrebbe essere la S.C. select().

Emanuele

Re: [C] Problema con i Socket

Inviato: gio 10 mar 2011, 11:06
da masalapianta
premessa: ste cose son minchiate per un liceale che abbia letto l'apue o testo equivalente, non è possibile che degli studenti universitari non riescano a fare esercizi così stupidi al punto di venire a chiedere su un forum (e non ce l'ho con te ma è una valutazione globale, visto che tu sei l'ultimo di molti studenti che fanno domande sul forum; motivo per il quale, quasi sempre evito di rispondere a domande sulla programmazione se non sono strasicuro che non siano esercizi di studenti universitari).
Quel che chiedi si può fare in mille modi: o creo socket non bloccanti (SOCK_NONBLOCK con kernel >= 2.6.27 oppure imposti O_NONBLOCK con fcntl() ), fai le opportune connect e per ognuna se esce con -1 e errno è EINPROGRESS usi in seguito la select() per verificare la scrivibilità sul socket; oppure usi un approccio multithread/multiprocesso e poi via IPC comunichi ad un thread/processo master i risultati delle connect() (ma in questo caso potresti anche evitare quest'ultimo passaggio e fare scrivere i risultati ai thread/processi direttamente su stdout).
Il tuo libro di testo dovrebbe trattare questi argomenti e, se non lo fa, acquista lo Stevens e studia.

Re: [C] Problema con i Socket

Inviato: gio 10 mar 2011, 17:04
da joseph
Non so se hai frequentato mai una univesità ma dalle mie parti una volta spiegato l'argomento base, sta allo studente integrare la cosa.
Ad esempio nella mia facoltà non hanno MAI spiegato i socket non bloccanti. comunque grazie per la dritta ma avevo gia risolto con il metodo
select esposto dal cortese spina.

Buona giornata

Re: [C] Problema con i Socket

Inviato: gio 10 mar 2011, 17:15
da masalapianta
joseph ha scritto: una volta spiegato l'argomento base, sta allo studente integrare la cosa.
appunto