Repository 32bit  Forum
Repository 64bit  Wiki

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

[C] Problema con i Socket [RISOLTO]

Messaggioda joseph » mar mar 08, 2011 14:25

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 mar 10, 2011 17:04, modificato 1 volta in totale.
Avatar utente
joseph
Linux 2.4
Linux 2.4
 
Messaggi: 205
Iscritto il: lun giu 14, 2010 22:50
Località: Salerno
Slackware: 13.37
Kernel: 3.2.9
Desktop: xfce

Re: [C] Problema con i Socket

Messaggioda targzeta » mar mar 08, 2011 14:57

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
Linux Registered User #454438
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
20/04/2013 - Io volevo Rodotà
Avatar utente
targzeta
Iper Master
Iper Master
 
Messaggi: 6184
Iscritto il: gio nov 03, 2005 14:05
Località: Carpignano Sal. (LE) <-> Pisa
Nome Cognome: Emanuele Tomasi
Slackware: current
Kernel: latest stable
Desktop: IceWM

Re: [C] Problema con i Socket

Messaggioda joseph » mar mar 08, 2011 15:00

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.4
Linux 2.4
 
Messaggi: 205
Iscritto il: lun giu 14, 2010 22:50
Località: Salerno
Slackware: 13.37
Kernel: 3.2.9
Desktop: xfce

Re: [C] Problema con i Socket

Messaggioda joseph » mar mar 08, 2011 17:51

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
joseph
Linux 2.4
Linux 2.4
 
Messaggi: 205
Iscritto il: lun giu 14, 2010 22:50
Località: Salerno
Slackware: 13.37
Kernel: 3.2.9
Desktop: xfce

Re: [C] Problema con i Socket

Messaggioda m0rdr3d » mar mar 08, 2011 18:13

Offtopic: vedo che sei di Salerno, posso chiederti chi è il tuo prof di reti?
Avatar utente
m0rdr3d
Linux 2.4
Linux 2.4
 
Messaggi: 404
Iscritto il: dom dic 24, 2006 13:40
Slackware: Slackware64-current
Kernel: 3.4.*
Desktop: KDE 4.8.2

Re: [C] Problema con i Socket

Messaggioda joseph » mer mar 09, 2011 13:04

Tortora. Sto facendo la tesi con lui
Avatar utente
joseph
Linux 2.4
Linux 2.4
 
Messaggi: 205
Iscritto il: lun giu 14, 2010 22:50
Località: Salerno
Slackware: 13.37
Kernel: 3.2.9
Desktop: xfce

Re: [C] Problema con i Socket

Messaggioda ocman » mer mar 09, 2011 15:56

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
ocman
Linux 2.4
Linux 2.4
 
Messaggi: 239
Iscritto il: gio lug 31, 2008 17:18
Slackware: ArchLinux
Desktop: xfce
Distribuzione: OpenIndiana

Re: [C] Problema con i Socket

Messaggioda joseph » mer mar 09, 2011 21:49

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
joseph
Linux 2.4
Linux 2.4
 
Messaggi: 205
Iscritto il: lun giu 14, 2010 22:50
Località: Salerno
Slackware: 13.37
Kernel: 3.2.9
Desktop: xfce

Re: [C] Problema con i Socket

Messaggioda targzeta » mer mar 09, 2011 22:12

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

Emanuele
Linux Registered User #454438
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
20/04/2013 - Io volevo Rodotà
Avatar utente
targzeta
Iper Master
Iper Master
 
Messaggi: 6184
Iscritto il: gio nov 03, 2005 14:05
Località: Carpignano Sal. (LE) <-> Pisa
Nome Cognome: Emanuele Tomasi
Slackware: current
Kernel: latest stable
Desktop: IceWM

Re: [C] Problema con i Socket

Messaggioda masalapianta » gio mar 10, 2011 11:06

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
masalapianta
Iper Master
Iper Master
 
Messaggi: 2775
Iscritto il: dom lug 24, 2005 23:00
Località: Roma
Nome Cognome: famoso porco
Kernel: uname -r
Desktop: awesome
Distribuzione: Debian

Re: [C] Problema con i Socket

Messaggioda joseph » gio mar 10, 2011 17:04

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
joseph
Linux 2.4
Linux 2.4
 
Messaggi: 205
Iscritto il: lun giu 14, 2010 22:50
Località: Salerno
Slackware: 13.37
Kernel: 3.2.9
Desktop: xfce

Re: [C] Problema con i Socket

Messaggioda masalapianta » gio mar 10, 2011 17:15

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

appunto
Avatar utente
masalapianta
Iper Master
Iper Master
 
Messaggi: 2775
Iscritto il: dom lug 24, 2005 23:00
Località: Roma
Nome Cognome: famoso porco
Kernel: uname -r
Desktop: awesome
Distribuzione: Debian


Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite