2011-01-19 20 views
6

Capisco che Telnet è un protocollo tanto quanto HTTP. Ho questa nozione che dopo che la connessione TCP iniziale è stata fatta, il client Telnet avrebbe inviato del codice specifico telnet al server sull'altro lato, in questo caso un server HTTP. Ma dal momento che il server HTTP non capisce i codici specifici di Telnet, dovrebbe generare un errore o eliminare la connessione, ecc. Ma in realtà possiamo telnetare su un server HTTP e recuperare pagine se digitiamo le intestazioni HTTP corrette e le inviamo. Come può essere così? La voce di Wikipedia non mi ha davvero aiutato a capire questo punto specifico. (http://en.wikipedia.org/wiki/Telnet#Telnet_data)Come i server HTTP accettano Telnet

risposta

4

Hai ragione nel dire che telnet è il proprio protocollo, che è descritto in un paio di RFC. Puoi dare un'occhiata a wikipedia per vedere quali sono esattamente e alcune altre risorse che spiegano il protocollo.

In pratica funziona in questo modo: quando si utilizza Telnet per connettersi a un server, verrà visualizzato ogni carattere stampabile inviato dal server. E tutto ciò che scrivi verrà rispedito al server. In questo modo è possibile recuperare le pagine Web quando ci si connette a un server Web: si invia un comando accettato da un server http e si ottiene il risultato corretto.

Ora, ci sono alcune opzioni specifiche di telnet. IIRC, non li invierai al server a meno che il server non li mandi per primi. Queste opzioni vengono utilizzate per abilitare/disabilitare l'eco locale (pensare alle password, non si desidera quelle visibili quando si effettua il login), negoziare le dimensioni del terminale, negoziare il tipo di fine linea. Quelli sono comandi che sono pochi byte e iniziano con il byte 255 (chiamato IAC, interpretato come comando). Quando ti connetti a un server telnet, il tuo cliente li interpreterà e risponderà di conseguenza, tutto automaticamente in background, senza mostrarti quei comandi.

Sebbene non specifico per Telnet, un server telnet può anche inviare ANSI escape sequences. Questi sono usati per i colori, il grassetto, il posizionamento del cursore, ... Un client telnet interpreterà anche quelli (o li passerà semplicemente all'emulatore di terminale che stai usando, come xterm).

Se volete qualcosa di "basso livello" di telnet, che non interpreterà opzioni telnet ed effettivamente visualizzare ciò che si ottiene, si consiglia di dare un'occhiata a netcat

0

Puoi interrogare un server http usando telnet, io spesso faccio un test rapido e sgradevole telnet non invia alcun codice. rende solo il collegamento, ma ci sono codici specifici telnet è possibile inviare se hai bisogno di

fare questo ...

telnet server.com 80 
GET http/1.0 /^m 
host: server.com^m 
^m 

... servers response 

^m = tasto Invio

ho fatto questo è fatto in linux in windows potrebbe essere diverso.

DC

+0

Ok se ho capito bene client Telnet solo crea una connessione socket e attendi che il server invii alcuni elementi specifici di Telnet. Se il server invia qualcosa, reagirà con codici specifici per negoziare roba di NVT. Se non lo farà, rimarrà bloccato finché l'utente non invierà qualche cosa per inoltrarlo al server. – chamibuddhika

+0

A quanto ho capito, dipende da come si avvia Telnet. se lo si avvia con un host e una porta opzionale come ho fatto sopra, si connette direttamente all'host e attende i comandi (ciò che si digita) se lo si avvia senza un host, passa alla modalità di comando. dai un'occhiata qui http://linux.about.com/od/commands/l/blcmdl1_telnet.htm e per windows qui http://technet.microsoft.com/en-us/library/c.aspx Non ho potuto per ottenere l'esempio sopra per lavorare su Windows, quindi cercherò di scoprire perché no. – DeveloperChris

+0

linux.about.com/od/commands/l/blcmdl1_telnet.htm ha risolto il mio problema. Dipende da come avvii il client Telnet come hai detto, anche se ho scoperto che il client Linux non ha quel particolare switch. – chamibuddhika

3

Telnet è solo un modo semplice interattivo per aprire una connessione TCP ad una presa di ascolto. Poiché il client telnet invia ciecamente ciò che si digita su quel socket, può teoricamente emulare qualsiasi altro protocollo su TCP. In realtà il fatto che i caratteri non stampabili siano interpretati dal driver della tastiera è l'unico limite.

HTTP non utilizza caratteri non stampabili tranne per delimitare tra l'intestazione HTTP e il corpo con due "interruzioni di riga" consecutive (ad esempio una "riga vuota").
Si noti che non sto parlando del tag del corpo HTML qui, ma del carico utile (ad es. Il corpo SOAP).

Nessuna magia qui fondamentalmente.

Vediamo la dinamica delle cose.
HTTP supporta un numero di comandi come GET, POST, PUT, ecc ... Ogni comando ha la sua sintassi e vi è una risposta associata con una sintassi concordata e codici di errore ben definiti. Quando ci si collega a un server HTTP tramite telnet, si apre la connessione socket e il server rilascia un thread per gestire la finestra di dialogo con il client. Puoi quindi imitare un browser digitando il comando che il browser invierà. Ogni volta che si preme il tasto CR, il client invia la linea al server. Se un comando contiene più righe, puoi inserire più righe, ognuna delle quali corrisponde a una riga dell'intestazione del comando. Dopo aver colpito due CR di seguito (ad esempio una riga vuota), l'intestazione del comando viene considerata completa dal server e la risposta viene raggruppata e inviata al client. Poiché l'obiettivo di un cliente telnet è di echo i caratteri ricevuti (a meno che non sia detto diversamente), puoi vedere l'intestazione e il corpo della risposta nella finestra del terminale. Telnet si ferma lì. Un browser dovrebbe rendere l'HTML (se la risposta è una pagina HTML).
Spero che chiarisca tutto.