¿Cómo uso el proxy de compresión de datos de Google en Firefox?

20

Estoy usando GNU Icecat (versión GNU de Mozilla Firefox) en Trisquel GNU / Linux . Para minimizar / optimizar el uso de datos durante la navegación web, quiero usar el proxy de compresión de datos de Google .

Entonces, ¿cómo uso el Proxy de compresión de datos de Google en Firefox?

Nota / Historia: Estaba deambulando para encontrar una solución a mi problema . La respuesta me llevó a una sala de chat , donde finalmente encontré el camino .

Pandya
fuente
1
wiki.mozilla.org/Mobile/Janus ¿ Agarra a Janus de github y ejecuta tu propio servicio?
ssnobody
code.google.com/p/datacompressionproxy También puede ser código útil ...
ssnobody
1
Como nota, configurar directamente el proxy HTTP para compress.googlezip.net:80 o 74.125.205.211:80 me conectó al Proxy de compresión de datos, pero no pude cargar ningún sitio con: "Esta página no se puede cargar a través de Chrome Data Compression Proxy. Intenta volver a cargar la página ". Supongo que el proxy se pudo comprobar por algún superior de cromo-específica ...
ssnobody
Parece que el encabezado específico que busca el proxy es Chrome-Proxy. El código para generar ese encabezado correctamente está dentro de background.js en el proxy de compresión de datos vinculado anteriormente.
ssnobody

Respuestas:

19

El uso del Proxy de compresión de datos de Google Chrome en navegadores que no son Chrome implica dos pasos.

  1. Establezca su proxy HTTP en proxy.googlezip.nety puerto 80.
  2. Para cada una de sus solicitudes, calcule e inyecte un Chrome-Proxyencabezado en su solicitud.

El Chrome-Proxyencabezado debe contener la siguiente cadena: ps=<timestamp>-<num1>-<num2>-<num3>, sid=<md5 string>, b=<build>, p=<patch>, c=<platform>donde:

  • marca de tiempo: es el número actual de segundos transcurridos desde la época de Unix
  • num1, num2, num3: son números aleatorios que se pueden establecer en 0
  • cadena md5: es la md5 de la cadena de autenticación
  • cadena de autenticación: " <timestamp>" + " <auth key>" + " <timestamp>"
  • Clave de autenticación: ac4500dd3b7579186c1b0620614fdb1f7d61f944
  • build: número de compilación de Chrome, se puede establecer en 2214
  • parche: número de parche de Chrome, se puede establecer en 115
  • plataforma: plataforma Chrome, se puede configurar en " win"

Como ejemplo completo del encabezado que podría tener: Chrome-Proxy: ps=1439961190-0-0-0, sid=9fb96126616582c4be88ab7fe26ef593, b=2214, p=115, c=win

Ahora, para implementar esto prácticamente, creo que la solución más fácil es usar una extensión, pero no parece haber una para Firefox que ya tenga esta funcionalidad.

Por lo tanto, he implementado mi propia extensión de Firefox para Firefox versión 38 o superior que permite a cualquier persona usar el Proxy de compresión de datos de Google Chrome en Firefox e incluyo el código a continuación.

El siguiente es el procedimiento que usé para desarrollar y probar la extensión, y permitiría que otros regeneren la extensión desde cero.


  1. Obtén e instala nodejs
  2. Usar npmdesde nodejs para instalar a jpmtravés denpm install jpm

    Tenga en cuenta que algunas versiones de paquetes de Ubuntu nodecomo nodejspor lo que si jpmno puede encontrar nodepuede que tenga que instalar otra distribución de nodejs o crear un vínculo para nodequenodejs

  3. Cree un nuevo directorio para la extensión y cden él

  4. jpm init
  5. Responda las solicitudes con valores predeterminados
  6. Reemplace su index.js con el código proporcionado a continuación
  7. jpm run

    Tenga en cuenta que si jpmno puede encontrar Firefox en las ubicaciones estándar, también deberá pasar el indicador -b jpmpara indicarle dónde encontrar su navegador. (por ejemplo jpm run -b /path/to/Firefox/Nightly)

Ahora debería tener Firefox abierto con esta nueva extensión cargada y todo el tráfico proxy a través del Proxy de compresión de datos de Google Chrome durante esta sesión.

Debido a que jpm runcrea un perfil temporal, necesitará jpm runesta extensión cada vez que desee que su tráfico sea proxy. También podría jpm xpiy Install Add-on From Fileen el administrador de complementos.

Puede verificar que sus datos se están representando mediante el examen de los encabezados de respuesta para el Viaencabezado que indica que los datos se envían a través del Proxy de compresión de Chrome (por ejemplo Via: "1.1 Chrome-Compression-Proxy")

Puede determinar cuántos datos está guardando comparando el Content-Lengthencabezado con el X-Original-Content-Lengthencabezado en las respuestas del servidor.


El código para index.js sigue:

/*
 * Data Compressor Proxy 0.0.1
 * License: MPL
 *
 * Based on
 * Data Compression Proxy Extension for Google Chrome on Desktop
 * (c) 2014 Jerzy Glowacki. License: Apache 2.0

 * and includes
 * JavaScript MD5 1.0.1
 * https://github.com/blueimp/JavaScript-MD5
 * Copyright 2011, Sebastian Tschan
 * https://blueimp.net
 * Licensed under the MIT license:
 * http://www.opensource.org/licenses/MIT
 *
 * JavaScript MD5 1.0.1 is Based on
 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
 * Digest Algorithm, as defined in RFC 1321.
 * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009
 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
 * Distributed under the BSD License
 * See http://pajhome.org.uk/crypt/md5 for more info.
 */

var self = require('sdk/self');
var { Class } = require('sdk/core/heritage');
var { Unknown } = require('sdk/platform/xpcom');
var {Cc, Ci} = require("chrome");
var prefsvc = require("sdk/preferences/service");

var httpRequestObserver = Class(
{
  extends:  Unknown,
  interfaces: [ 'nsIObserver' ],
  topic: '*',
  observe: function(subject, topic, data)
  {
    if (topic == "http-on-modify-request") {
      var httpChannel = subject.QueryInterface(Ci.nsIHttpChannel);
      httpChannel.setRequestHeader("Chrome-Proxy", this.authHeader(), false);
    }
  },

  get observerService() {
    return Cc["@mozilla.org/observer-service;1"]
                     .getService(Ci.nsIObserverService);
  },

  authHeader : function() {
    var authValue = 'ac4500dd3b7579186c1b0620614fdb1f7d61f944';
    var timestamp = Date.now().toString().substring(0, 10);
    return 'ps=' + timestamp + '-' + '0' + '-' + '0' + '-' + '0' + ', sid=' + md5(timestamp + authValue + timestamp) + ', b=2214' + ', p=115' + ', c=win';
  },

  register: function()
  {
    this.observerService.addObserver(this, "http-on-modify-request", false);
  },

  unregister: function()
  {
    this.observerService.removeObserver(this, "http-on-modify-request");
  }
});

var httprequestobserver = httpRequestObserver();
httprequestobserver.register();
prefsvc.set("network.proxy.http", "proxy.googlezip.net");
prefsvc.set("network.proxy.http_port", 80);
prefsvc.set("network.proxy.type", 1);

!function(a){"use strict";function b(a,b){var c=(65535&a)+(65535&b),d=(a>>16)+(b>>16)+(c>>16);return d<<16|65535&c}function c(a,b){return a<<b|a>>>32-b}function d(a,d,e,f,g,h){return b(c(b(b(d,a),b(f,h)),g),e)}function e(a,b,c,e,f,g,h){return d(b&c|~b&e,a,b,f,g,h)}function f(a,b,c,e,f,g,h){return d(b&e|c&~e,a,b,f,g,h)}function g(a,b,c,e,f,g,h){return d(b^c^e,a,b,f,g,h)}function h(a,b,c,e,f,g,h){return d(c^(b|~e),a,b,f,g,h)}function i(a,c){a[c>>5]|=128<<c%32,a[(c+64>>>9<<4)+14]=c;var d,i,j,k,l,m=1732584193,n=-271733879,o=-1732584194,p=271733878;for(d=0;d<a.length;d+=16)i=m,j=n,k=o,l=p,m=e(m,n,o,p,a[d],7,-680876936),p=e(p,m,n,o,a[d+1],12,-389564586),o=e(o,p,m,n,a[d+2],17,606105819),n=e(n,o,p,m,a[d+3],22,-1044525330),m=e(m,n,o,p,a[d+4],7,-176418897),p=e(p,m,n,o,a[d+5],12,1200080426),o=e(o,p,m,n,a[d+6],17,-1473231341),n=e(n,o,p,m,a[d+7],22,-45705983),m=e(m,n,o,p,a[d+8],7,1770035416),p=e(p,m,n,o,a[d+9],12,-1958414417),o=e(o,p,m,n,a[d+10],17,-42063),n=e(n,o,p,m,a[d+11],22,-1990404162),m=e(m,n,o,p,a[d+12],7,1804603682),p=e(p,m,n,o,a[d+13],12,-40341101),o=e(o,p,m,n,a[d+14],17,-1502002290),n=e(n,o,p,m,a[d+15],22,1236535329),m=f(m,n,o,p,a[d+1],5,-165796510),p=f(p,m,n,o,a[d+6],9,-1069501632),o=f(o,p,m,n,a[d+11],14,643717713),n=f(n,o,p,m,a[d],20,-373897302),m=f(m,n,o,p,a[d+5],5,-701558691),p=f(p,m,n,o,a[d+10],9,38016083),o=f(o,p,m,n,a[d+15],14,-660478335),n=f(n,o,p,m,a[d+4],20,-405537848),m=f(m,n,o,p,a[d+9],5,568446438),p=f(p,m,n,o,a[d+14],9,-1019803690),o=f(o,p,m,n,a[d+3],14,-187363961),n=f(n,o,p,m,a[d+8],20,1163531501),m=f(m,n,o,p,a[d+13],5,-1444681467),p=f(p,m,n,o,a[d+2],9,-51403784),o=f(o,p,m,n,a[d+7],14,1735328473),n=f(n,o,p,m,a[d+12],20,-1926607734),m=g(m,n,o,p,a[d+5],4,-378558),p=g(p,m,n,o,a[d+8],11,-2022574463),o=g(o,p,m,n,a[d+11],16,1839030562),n=g(n,o,p,m,a[d+14],23,-35309556),m=g(m,n,o,p,a[d+1],4,-1530992060),p=g(p,m,n,o,a[d+4],11,1272893353),o=g(o,p,m,n,a[d+7],16,-155497632),n=g(n,o,p,m,a[d+10],23,-1094730640),m=g(m,n,o,p,a[d+13],4,681279174),p=g(p,m,n,o,a[d],11,-358537222),o=g(o,p,m,n,a[d+3],16,-722521979),n=g(n,o,p,m,a[d+6],23,76029189),m=g(m,n,o,p,a[d+9],4,-640364487),p=g(p,m,n,o,a[d+12],11,-421815835),o=g(o,p,m,n,a[d+15],16,530742520),n=g(n,o,p,m,a[d+2],23,-995338651),m=h(m,n,o,p,a[d],6,-198630844),p=h(p,m,n,o,a[d+7],10,1126891415),o=h(o,p,m,n,a[d+14],15,-1416354905),n=h(n,o,p,m,a[d+5],21,-57434055),m=h(m,n,o,p,a[d+12],6,1700485571),p=h(p,m,n,o,a[d+3],10,-1894986606),o=h(o,p,m,n,a[d+10],15,-1051523),n=h(n,o,p,m,a[d+1],21,-2054922799),m=h(m,n,o,p,a[d+8],6,1873313359),p=h(p,m,n,o,a[d+15],10,-30611744),o=h(o,p,m,n,a[d+6],15,-1560198380),n=h(n,o,p,m,a[d+13],21,1309151649),m=h(m,n,o,p,a[d+4],6,-145523070),p=h(p,m,n,o,a[d+11],10,-1120210379),o=h(o,p,m,n,a[d+2],15,718787259),n=h(n,o,p,m,a[d+9],21,-343485551),m=b(m,i),n=b(n,j),o=b(o,k),p=b(p,l);return[m,n,o,p]}function j(a){var b,c="";for(b=0;b<32*a.length;b+=8)c+=String.fromCharCode(a[b>>5]>>>b%32&255);return c}function k(a){var b,c=[];for(c[(a.length>>2)-1]=void 0,b=0;b<c.length;b+=1)c[b]=0;for(b=0;b<8*a.length;b+=8)c[b>>5]|=(255&a.charCodeAt(b/8))<<b%32;return c}function l(a){return j(i(k(a),8*a.length))}function m(a,b){var c,d,e=k(a),f=[],g=[];for(f[15]=g[15]=void 0,e.length>16&&(e=i(e,8*a.length)),c=0;16>c;c+=1)f[c]=909522486^e[c],g[c]=1549556828^e[c];return d=i(f.concat(k(b)),512+8*b.length),j(i(g.concat(d),640))}function n(a){var b,c,d="0123456789abcdef",e="";for(c=0;c<a.length;c+=1)b=a.charCodeAt(c),e+=d.charAt(b>>>4&15)+d.charAt(15&b);return e}function o(a){return unescape(encodeURIComponent(a))}function p(a){return l(o(a))}function q(a){return n(p(a))}function r(a,b){return m(o(a),o(b))}function s(a,b){return n(r(a,b))}function t(a,b,c){return b?c?r(b,a):s(b,a):c?p(a):q(a)}"function"==typeof define&&define.amd?define(function(){return t}):a.md5=t}(this);
ssnobody
fuente
3
Algo que vale la pena señalar es que en ubuntu 14.04 (y trisquel es una variante ideológicamente pura en esto, el comando del nodo es nodejs no node. Por lo tanto, tiendo a recomendar el uso de una versión más nueva en un repositorio alternativo - nodeource es lo que prefiero.
Journeyman Geek
1
Finalmente funciona bien en Abrowser 38 en Trisquel GNU / Linux
Pandya
¿Puedes ayudarme allí?
Pandya
Use jpm xpipara construir un XPI e instalarlo.
ssnobody
@ssnobody gracias; ya has mencionado en tu respuesta, pero me lo perdí!
Pandya
7

Ahora hay un proxy de Google DataSaver para la extensión de Firefox publicado en el sitio web de complementos de Mozilla.

Proxy de compresión de datos de Google para Firefox: habilita la función DataSaver para Firefox

galacticninja
fuente
Quien lo construyó usó el código que publiqué anteriormente, pero realizó varias mejoras, como soporte de navegación privada y listas blancas. ¡Muy agradable!
ssnobody