[C] Problema con i Socket [RISOLTO]

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Rispondi
Avatar utente
joseph
Linux 2.x
Linux 2.x
Messaggi: 206
Iscritto il: lun 14 giu 2010, 23:50
Slackware: 15.0
Kernel: 5.15.27
Desktop: xfce
Località: Salerno

[C] Problema con i Socket [RISOLTO]

Messaggio 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
Ultima modifica di joseph il gio 10 mar 2011, 17:04, modificato 1 volta in totale.

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6628
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: [C] Problema con i Socket

Messaggio 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
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

Avatar utente
joseph
Linux 2.x
Linux 2.x
Messaggi: 206
Iscritto il: lun 14 giu 2010, 23:50
Slackware: 15.0
Kernel: 5.15.27
Desktop: xfce
Località: Salerno

Re: [C] Problema con i Socket

Messaggio 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

Avatar utente
joseph
Linux 2.x
Linux 2.x
Messaggi: 206
Iscritto il: lun 14 giu 2010, 23:50
Slackware: 15.0
Kernel: 5.15.27
Desktop: xfce
Località: Salerno

Re: [C] Problema con i Socket

Messaggio 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

Avatar utente
m0rdr3d
Linux 2.x
Linux 2.x
Messaggi: 404
Iscritto il: dom 24 dic 2006, 13:40
Slackware: Slackware64-current
Kernel: 3.4.*
Desktop: KDE 4.8.2

Re: [C] Problema con i Socket

Messaggio da m0rdr3d »

Offtopic: vedo che sei di Salerno, posso chiederti chi è il tuo prof di reti?

Avatar utente
joseph
Linux 2.x
Linux 2.x
Messaggi: 206
Iscritto il: lun 14 giu 2010, 23:50
Slackware: 15.0
Kernel: 5.15.27
Desktop: xfce
Località: Salerno

Re: [C] Problema con i Socket

Messaggio da joseph »

Tortora. Sto facendo la tesi con lui

ocman
Linux 2.x
Linux 2.x
Messaggi: 239
Iscritto il: gio 31 lug 2008, 18:18
Slackware: ArchLinux
Desktop: xfce
Distribuzione: OpenIndiana

Re: [C] Problema con i Socket

Messaggio 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

Avatar utente
joseph
Linux 2.x
Linux 2.x
Messaggi: 206
Iscritto il: lun 14 giu 2010, 23:50
Slackware: 15.0
Kernel: 5.15.27
Desktop: xfce
Località: Salerno

Re: [C] Problema con i Socket

Messaggio 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.

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6628
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: [C] Problema con i Socket

Messaggio da targzeta »

Ma sono quasi sicuro che si possa fare. Quella che serve a te dovrebbe essere la S.C. select().

Emanuele
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

Avatar utente
masalapianta
Iper Master
Iper Master
Messaggi: 2775
Iscritto il: lun 25 lug 2005, 0:00
Nome Cognome: famoso porco
Kernel: uname -r
Desktop: awesome
Distribuzione: Debian
Località: Roma
Contatta:

Re: [C] Problema con i Socket

Messaggio 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.

Avatar utente
joseph
Linux 2.x
Linux 2.x
Messaggi: 206
Iscritto il: lun 14 giu 2010, 23:50
Slackware: 15.0
Kernel: 5.15.27
Desktop: xfce
Località: Salerno

Re: [C] Problema con i Socket

Messaggio 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

Avatar utente
masalapianta
Iper Master
Iper Master
Messaggi: 2775
Iscritto il: lun 25 lug 2005, 0:00
Nome Cognome: famoso porco
Kernel: uname -r
Desktop: awesome
Distribuzione: Debian
Località: Roma
Contatta:

Re: [C] Problema con i Socket

Messaggio da masalapianta »

joseph ha scritto: una volta spiegato l'argomento base, sta allo studente integrare la cosa.
appunto

Rispondi