Arduino ethernet: è possibile rfiutare una connessione?

Salve a tutti, sto implementando un server casalingo con arduino + ethernet per permettere di accedere ad alcuni servizi di domotica da remoto. Dopo aver richiesto il login, se questo non va a buon fine, vorrei rifiutare/chiudere la connessione, ma non ho trovato niente sulla libreria che mi permetta di farlo =( . qualcuno sa se è possibile farlo? o se esistono "arrangiamenti" che permettono di farlo? Grazie anticipatamente. ;)

interessa anche a me,

immagino che serve per tenere aperto un canale ? cioe' se non sbaglio si possono avere solo 4 utenze connesse, quindi se 4 persone arrivano al tuo IP e sbagliano la password, non conoscendola, tu poi non puoi entrare ? perche' non ci sono slot liberi ?

garrard08: qualcuno sa se è possibile farlo? o se esistono "arrangiamenti" che permettono di farlo?

E' un arrangiamento alla brutta, ma io ho inserito nel get un codice di controllo, se non c'è corrispondenza il codice smette subito di ricevere e chiude la connessione.

Potresti darmi qualche dettaglio in più? Come sei riuscito a dirgli di smettere di ricevere e chiudere la connessione? Grazie ;)

Basta mandare un altro codice in risposta al client invece del classico 200 OK, il 401 per esempio potrebbe aprire un popup di autenticazione. http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

Dopo aver richiesto il login, se questo non va a buon fine, vorrei rifiutare/chiudere la connessione

Cosa intendi? che non si deve collegare più nessuno? perchè se chiudi le porte non ti colleghi più nemmeno tu con la passw corretta.

Di solito si invia un code di unauthorized ... ma se riprovi il server c'è ancora.

Testato: interessa anche a me,

immagino che serve per tenere aperto un canale ? cioe' se non sbaglio si possono avere solo 4 utenze connesse, quindi se 4 persone arrivano al tuo IP e sbagliano la password, non conoscendola, tu poi non puoi entrare ? perche' non ci sono slot liberi ?

Riguardo ai 4 soket il discorso è molto semplice, il chip col suo software accetta 4 connessioni nell'istante tra If client connected ... ...qui dentro ci devono essere 4 connessioni aperte, il che è molto improbabile ... client.close

Negli sketch normalmente si apre il client si elabora la stringhetta get e si chiude subito questione di un istante, in quel momento i soket liberi sono 3, ma appena chiudiamo (col client.close) diventano di nuovo 4, in teoria ti ci puoi collegare anche con 8, perchè non capita che siano tutti e 8 nello stesso istante a fare richieste (chiudo uno e prendo l'altro ecc ecc), e se per caso ci sono ed è occupato il client attende e te la ripete più volte, difficilmente va in timeout in 5-10 secondi. Dovresti abolire il close per limitare a 4 le connessioni o comunque per accorgrti che il 5° viene rifiutato bisogna che gli altri 4 facciano dei download/upload abbastanza lunghi, insomma che restino connessi. (non so se mi sono capito :) )

Avevo un po' di tempo fa smanettato la lib ethernet e w5100 per limitare le connessioni a 1, soket=1, ma tutto è relativo se chiudo subito il client

Tra le altre cose password o no se voglio renderti inutilizzabile il tuo web server domotico mi basta conoscere l'ip e bombardarlo di richieste infinite (un semplicissimo script con greasemonkey di firefox per esempio) e il tuo arduino sarà impegnato a rifiutare le richieste dato che l'interrupt dell'ethernet ha priorità alta non trovando più tempo per fare le sue cose .... 30 sec 1 min il tuo domotic home ha tutti i led fissi ]:D ]:D

Sarebbe quindi utile stabilire un numero di tentativi di connessioni sconosciute e mettere un millis() tra un autenticazione e l'altra

pablos: Tra le altre cose password o no se voglio renderti inutilizzabile il tuo web server domotico mi basta conoscere l'ip e bombardarlo di richieste infinite (un semplicissimo script con greasemonkey di firefox per esempio) e il tuo arduino sarà impegnato a rifiutare le richieste dato che l'interrupt dell'ethernet ha priorità alta non trovando più tempo per fare le sue cose .... 30 sec 1 min il tuo domotic home ha tutti i led fissi ]:D ]:D

Quale interrupt dell'ethernet? A che so io non viene utilizzato alcun interrupt ethernet visto che la comunicazione avviene tramite SPI. Inoltre l'IP non basta (come fai con gli IP dinamici poi?), l'Arduino avrà un IP privato e sul router ci sarà una porta aperta con la regola per il forwarding e non è affatto detto che sia la 80.

Perchè l'SPI non ha interrupt?

Infatti io ho detto se conosci l'IP, per avere la port list open ci vorrà un minutino.... Comunque era solo un appunto, non è l'argomento del treadh, tra i miei test c'è anche quello di "proviamo a bombardarlo e vediamo che succede"

Non conosco ancora bene l'argomento ma mentre gestisco le chiamate posso sempre interrompere la comunicazione con il W5100 tramite la linea SS se avvengono troppo frequentemente. E poi c'è il Watchdog.

Grazie comunque per avermi ricordato la possibilità di un attacco di questo genere, se un web server è esposto su internet è una cosa di cui bisogna tenere conto.

grazie pablos per la spiegazione, karma+1 :)