2012-04-08 16 views
6

StackOverflow utilizza la codifica GZip su tutte le loro pagine; lo stesso sembra essere vero per il loro traffico websocket dal momento che sembra completamente offuscato.Codifica traffico WebSocket (GZip)

enter image description here

Come/Cosa avrebbero usare per raggiungere questo obiettivo; piuttosto che cosa dovrei fare per ottenere lo stesso poiché il mio server websocket è ospitato sul proprio server separato senza IIS ecc.?

Da notare anche che lo http compression non è impostato sulla richiesta di connessione web socket.


registro completo screenshot: http://i44.tinypic.com/19s4yr.jpg

+0

Fuori interesse, come vanno stai annusando il traffico websocket? Inoltre, vale la pena notare che la parte di testo in chiaro del messaggio precedente è lunga 19 byte, quindi potrebbe non essere effettivamente offuscata. – simonc

+0

@simonc In realtà l'ho visto solo per caso perché sfogliare il registro; mal aggiorno il post con uno screenshot di quello che sembra sul violinista. Che cosa potrebbe essere allora dal momento che il mio traffico websocket è in chiaro. – f0x

risposta

6

Secondo RFC6455, WebSocket payload dal client al server deve essere mascherata, server al client NON DEVE essere mascherato. Il mascheramento è fatto dal carico utile di XORring con la maschera a 32 bit .. il valore che vedi nel tuo log.

C'è una estensione WS nella cottura che fornisce una compressione basata su frame (deflate). Questo non ha nulla a che fare con il mascheramento. Il carico utile con compressione attiva per frame utilizza il payload e quindi maschera il payload (da client a server).

+0

grazie, amico! potresti forse indicarmi la direzione di tale implementazione del mascheramento, forse nel framework .net? Poiché il valore è mascherato in ingresso al client nel mio screenshot sopra, l'implementazione SO è errata in base alle specifiche? – f0x

+0

Lo screenshot riporta: "68 byte ricevuti dal browser .. mascheramento del messaggio vero". Quindi, se questo è un payload mascherato da browser a server, allora va bene. Dovrebbe essere in realtà server-to-client, quindi sta rompendo le specifiche. Lo spec è chiaro su questo: NON DEVE. – oberstet

+0

L'algoritmo di mascheramento è banale: payload [i]^= mask [i% 4], dove payload e mask sono array di byte e indicizza il payload del frame. – oberstet

1

Non penso che ci sia qualche gzip qui. Sembra che il violinista abbia iniziato ad aggiungere il supporto per i websocket, ma è ancora in fase di elaborazione.

Il log mostra una connessione
... poi un primo messaggio di 12 byte (461287-casella di posta. Il byte iniziale 81 8C illustrano una nuova, completa, cornice di testo con 4 maschera byte e 12 byte di dati. Fiddler decodifica correttamente.)
... quindi un secondo messaggio di 19 byte (i byte 81 93 - 19 byte nello stream - mostra una nuova cornice di testo completa con 4 byte mask e 19 byte di dati)
. ... un terzo messaggio di 19 byte (i byte successivi 81 93 - circa 44 byte nello stream - mostra una nuova cornice di testo completa con 4 byte mask e 19 byte di dati)

+0

grazie, amico. Potrei mostrarti un log della mia implementazione di websocket in cui viene visualizzato il testo completo. – f0x

+0

ah, naturalmente, vedo che il mascheramento è davvero "falso", quindi è davvero solo l'offuscamento del carico utile. http://i43.tinypic.com/2n8tug1.png oh e +1 haha ​​:) – f0x

Problemi correlati