2010-06-18 23 views
7

En conexión a Internet Firefox es realizado a través de un archivo de configuración automática de proxy "something.pac"cómo descubrir de proxy utilizado en un pac

¿Cómo sé que para un determinado URL del servidor proxy, que se está utilizando?

Gracias.

+0

¿esto funcionó para usted? –

+0

Perdón por no ser más claro. No funcionó porque los errores de javascript isInNet no están definidos. – KirdApe

+0

Solo una nota, tuve que buscar el servidor proxy desde el archivo pac, y esta herramienta: http://code.google.com/p/pacparser/ funcionó bien. – Ayusman

Respuesta

7

.pac file es solo un script emca, también conocido como JavaScript. Consulte the wikipedia article en el formato de archivo.

Si copia el código PAC, puede procesarlo para ver qué proxy se está utilizando en función de la URL de destino. Si se siente elegante, puede envolver el guión en una página web (localmente) para crear una herramienta para evaluar localmente.

Editar:

Como alternativa al método empecé a recomendar, debes revisar PACTester, disponible en Google Code. Esto le permitirá probar rápidamente una gama de opciones.

Si tiene .Net disponible y está interesado en jugar con C#, puede consultar this article on MSDN que tiene un código que puede usar de manera similar a la anterior.

Para ampliar el método original descrito anteriormente, hay una serie de funciones que pueden (y suelen ser) proporcionadas por el navegador del host. La función básica que debe implementarse en un archivo pac es FindProxyForUrl(). Esto acepta dos parámetros: la url y el host (el host se deriva del nombre de url). Las funciones "proporcionadas" incluyen: isInNet(), localHostOrDomainIs(), isPlainHostName(), isResolvable(), etc.

Si está trabajando en un entorno Microsoft continuación puedes leer la this page on Technet que describe el formato .PAC con algunos ejemplos útiles.

por la documentación de Microsoft para isInNet():

La función devuelve isInNet(host, pattern, mask)TRUE si la dirección IP del host coincide con la pattern especificado. El mask indica qué parte de la dirección IP debe coincidir (255 = coincidencia, 0 = ignorar).

Si desea obtener información técnica, aquí está the Mozilla source code para la implementación de los servicios relacionados con proxy auto-config. En él se especifica el código JS para isInNet() como:

200 function isInNet(ipaddr, pattern, maskstr) { 
201  var test = /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/(ipaddr); 
202  if (test == null) { 
203   ipaddr = dnsResolve(ipaddr); 
204   if (ipaddr == null) 
205    return false; 
206  } else if (test[1] > 255 || test[2] > 255 || 
207    test[3] > 255 || test[4] > 255) { 
208   return false; // not an IP address 
209  } 
210  var host = convert_addr(ipaddr); 
211  var pat = convert_addr(pattern); 
212  var mask = convert_addr(maskstr); 
213  return ((host & mask) == (pat & mask)); 
214  
215 } 

Espero que ayude!

+2

Lo he descargado y he agregado el archivo .pac a una página web local. He intentado depurar con Firebug pero hay ciertas funciones desconocidas como myIpAddress() (que he creado para devolver mi ip) o isInNet(). – KirdApe

+0

Espero que la respuesta expandida te ayude, podrías leer más acerca de la fuente en el enlace de mozilla que he incluido, te dará las otras funciones relacionadas (o enlaces para encontrarlas). –

5

He creado sencilla página HTML proxy de resolver:

<html> 
<head> 
    <script type="text/javascript"> 
    function myIpAddress() { 
     return "192.168.1.2"; // Your IP 
    } 

    function isInNet(ipaddr, pattern, maskstr) { 
     var test = /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/(ipaddr); 
     if (test == null) { 
      ipaddr = dnsResolve(ipaddr); 
      if (ipaddr == null) return false; 
     } else if (test[1] > 255 || test[2] > 255 || test[3] > 255 || test[4] > 255) { 
      return false; // not an IP address 
     } 
     var host = convert_addr(ipaddr); 
     var pat = convert_addr(pattern); 
     var mask = convert_addr(maskstr); 
     return ((host & mask) == (pat & mask)); 
    } 

    function dnsResolve(host) { 
     try { 
      return dns.resolve(host, 0).getNextAddrAsString(); 
     } catch (e) { 
      return null; 
     } 
    } 

    function convert_addr(ipchars) { 
     var bytes = ipchars.split('.'); 
     var result = ((bytes[0] & 0xff) << 24) | 
        ((bytes[1] & 0xff) << 16) | 
        ((bytes[2] & 0xff) << 8) | 
         (bytes[3] & 0xff); 
     return result; 
    } 

    function isPlainHostName(host) { 
     return host.search('\\\\.') == -1; 
    } 

    function shExpMatch(url, pattern) { 
     pattern = pattern.replace(/\\./g, '\\\\.'); 
     pattern = pattern.replace(/\\*/g, '.*'); 
     pattern = pattern.replace(/\\?/g, '.'); 
     var newRe = new RegExp('^' + pattern + '$'); 
     return newRe.test(url); 
    } 

    function dnsDomainIs(host, domain) { 
     return host.length >= domain.length && host.substring(host.length - domain.length) == domain; 
    } 
    </script> 

    <!-- Your proxy script --> 
    <script type="text/javascript" src="webproxy.js"></script> 
</head> 
<body> 
    Host: <input id="host"/><br/> 
    URL: <input id="url"/><br/> 
    Proxy: <input id="proxy" disabled="disabled"/><br/> 
    <input type="button" value="Resolve" 
      onclick="document.getElementById('proxy').value = FindProxyForURL(document.getElementById('host').value, document.getElementById('url').value)"/><br/> 
</body> 
</html> 

Código de myIpAddress etc. Tengo a partir de fuentes de Mozilla.

+0

Esto se ve muy bien si puedo hacer que funcione ... sin embargo, poner una alerta antes y después de esta línea 'var test =/^ (\ d {1,3}) \. (\ D {1,3}) \ . (\ d {1,3}) \. (\ d {1,3}) $/(ipaddr); 'parece que esta línea lo rompe ... y es la misma línea que aparece en el archivo de Mozilla real , así que supongo que es correcto, pero mirando esto http://www.w3schools.com/js/js_obj_regexp.asp parece incorrecto. Cambiar la línea a este 'var test1 = /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1, 3}) $/i; var test = test1.exec (ipaddr); 'parecía hacer el truco ... ¿tus pensamientos? – user1135469

Cuestiones relacionadas