2012-04-08 14 views
6

StackOverflow utiliza la codificación GZip en todas sus páginas; lo mismo parece ser cierto para su tráfico de websocket, ya que parece completamente ofuscado.WebSocket Traffic Encoding (GZip)

enter image description here

Cómo/¿Qué iban a utilizar para lograr esto; más bien, ¿qué tendría que hacer para lograr lo mismo, ya que mi servidor websocket está alojado en su propio servidor separado sin IIS, etc.?

Cabe destacar que el http compression tampoco está configurado en su solicitud de conexión de websocket.


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

+0

Fuera de interés, ¿cómo están? ¿estás husmeando en el tráfico de websocket? Además, vale la pena señalar que la parte de texto sin formato del mensaje anterior tiene 19 bytes de longitud, por lo que es posible que no se ofusque. – simonc

+0

@simonc De hecho, solo vi por casualidad por qué navegar por el registro; Actualizaré la publicación con una captura de pantalla de cómo se ve en el violín. ¿Qué podría ser entonces, ya que el tráfico de mi websocket está en texto claro? – f0x

Respuesta

6

De acuerdo con RFC6455, WebSocket carga útil desde el cliente al servidor deberá ser enmascarada, el servidor al cliente, no deberán ser enmascarada. El enmascaramiento se realiza mediante la carga XORring con máscara de 32 bits ... el valor que ve en su registro.

Hay una extensión de WS en la cocción que proporciona compresión basada en cuadros (desinflar). Esto no tiene nada que ver con el enmascaramiento. La carga útil con compresión activa por cuadro comprime la carga útil y luego enmascara la carga útil (cliente a servidor).

+0

gracias, amigo! ¿podría usted dirigirme en la dirección de dicha implementación de enmascaramiento, tal vez en el marco .net? Dado que el valor está enmascarado de entrada para el cliente en la captura de pantalla anterior, ¿la implementación SO está mal según las especificaciones? – f0x

+0

La captura de pantalla muestra: "68 bytes recibidos del navegador ... mensaje de enmascaramiento verdadero". Entonces, si esa es la carga útil enmascarada de navegador a servidor, entonces está bien. Si realmente es de servidor a cliente, entonces está rompiendo la especificación. La especificación es clara al respecto: NO DEBE. – oberstet

+0

El algoritmo de enmascaramiento es trivial: carga útil [i]^= máscara [i% 4], donde la carga útil y la máscara son matrices de bytes e indexa la carga útil del marco. – oberstet

1

No creo que haya ningún gzip aquí. Parece que el violinista comenzó a agregar soporte para websockets, pero todavía es un trabajo en progreso.

El registro muestra una conexión
... entonces un primer mensaje de 12 bytes (461 287-bandeja de entrada. Los bytes inicial 81 8C muestran un nuevo marco de texto, completo, con 4 máscara byte y 12 bytes de datos. Fiddler decodifica esto correctamente.)
... luego un segundo mensaje de 19 bytes (los bytes 81 93 - 19 bytes en la secuencia - muestra un cuadro de texto nuevo, completo con máscara de 4 bytes y 19 bytes de datos)
. ..entonces un tercer mensaje de 19 bytes (los bytes posteriores 81 93 - aproximadamente 44 bytes en la secuencia - muestra un nuevo, completo, marco de texto con máscara de 4 bytes y 19 bytes de datos)

+0

gracias, amigo. Podría mostrarle un registro de mi implementación de websocket donde se ve el texto completo. – f0x

+0

ah, por supuesto, veo que el enmascaramiento es de hecho 'falso ', así que es solo la ofuscación de la carga útil. http://i43.tinypic.com/2n8tug1.png oh y +1 jaja :) – f0x