Saltar al contenido principal

Sintaxis PAC (Proxy auto-config)

info

Si encuentra errores o tiene sugerencias, deje un mensaje en el foro de Mudfish (https://forums.mudfish.net). Los ejemplos y explicaciones de esta página se han traducido o elaborado a partir del sitio siguiente.

La extensión del navegador Mudfish admite el formato de archivo PAC (configuración automática de Proxy).

Funciones PAC​

Los navegadores que admiten el formato PAC normalmente admiten funciones presentadas en el formato estándar especificado por Netscape.

Estas funciones se ejecutan en un entorno aislado (sandbox) con restricciones estrictas. Por ejemplo, no pueden consultar la información del agente de usuario (User Agent).

A continuación se describen las funciones permitidas dentro del entorno sandbox.

dnsDomainIs​

Comprueba el nombre de host y devuelve true si coincide. Suele utilizarse para comprobar nombres de host concretos que deben tratarse como excepciones.

   // Si el nombre de host es google.com o uno de sus subdominios
// (por ejemplo, maps.google.com o www.google.com),
// el navegador se conecta directamente, sin pasar por el proxy.

if (dnsDomainIs(host, "google.com"))
return "DIRECT";

shExpMatch​

Compara el nombre de host o la URL con un patrón de shell y devuelve true si coincide.

   // Las solicitudes a nombres de host terminados en .local
// se conectan directamente, sin pasar por el proxy.

if (shExpMatch(url, "*.local"))
return "DIRECT";

// Las solicitudes a vpn.domain.com o a cualquier carpeta o archivo
// bajo http://abcdomain.com/folder/
// se conectan directamente, sin pasar por el proxy.

if (shExpMatch(host, "vpn.domain.com") ||
shExpMatch(url, "http://abcdomain.com/folder/*"))
return "DIRECT";

isInNet​

Comprueba si la dirección IP del host pertenece a una subred determinada y, en ese caso, devuelve true. Si recibe un nombre de host como argumento, primero lo resuelve mediante DNS para obtener su IP.

   // Si la IP del host solicitado, una vez resuelta mediante DNS,
// pertenece al intervalo indicado, se conecta directamente.

if (isInNet(dnsResolve(host), "172.16.0.0", "255.240.0.0"))
return "DIRECT";

myIpAddress​

Devuelve la dirección IP del equipo local.

   // Si el equipo pertenece al intervalo indicado, utiliza el proxy
// 10.10.5.1 en el puerto 8080.

if (isInNet(myIpAddress(), "10.10.1.0", "255.255.255.0"))
return "PROXY 10.10.5.1:8080";

dnsResolve​

Resuelve un nombre de host mediante DNS para obtener su dirección IP.

   // Si la IP del host solicitado pertenece a alguno de estos intervalos,
// se conecta directamente.

if (isInNet(dnsResolve(host), "10.0.0.0", "255.0.0.0") ||
isInNet(dnsResolve(host), "172.16.0.0", "255.240.0.0") ||
isInNet(dnsResolve(host), "192.168.0.0", "255.255.0.0") ||
isInNet(dnsResolve(host), "127.0.0.0", "255.255.255.0"))
return "DIRECT";

isPlainHostName​

Devuelve true si el nombre de host no contiene ningún punto (.). Por ejemplo, http://intranet. Puede utilizarse al acceder a direcciones web de una red interna.

   // Si se solicita un nombre de host sin puntos (por ejemplo,
// http://intranet/ o http://webserver-name01/), se conecta directamente.

if (isPlainHostName(host))
return "DIRECT";

localHostOrDomainIs​

Comprueba los nombres de host y devuelve true si sus partes correspondientes al nombre de host coinciden.

   // Si el nombre de host solicitado es "www" o "www.google.com",
// se conecta directamente.

if (localHostOrDomainIs(host, "www.google.com"))
return "DIRECT";

isResolvable​

Resuelve el nombre de host para obtener una dirección IP y devuelve true si lo consigue.

Si no se puede resolver el dominio, el navegador puede quedar bloqueado durante un momento. Utilice esta función con precaución.

   // Si el servidor DNS puede resolver el nombre de host solicitado,
// la solicitud pasa por el proxy proxy1.example.com.

if (isResolvable(host))
return "PROXY proxy1.example.com:8080";

dnsDomainLevels​

Cuenta los puntos (.) del nombre de host y devuelve su número. Puede utilizarse, por ejemplo, para definir excepciones para servidores web de la red interna.

   // Si el nombre de host contiene al menos un punto, utiliza el proxy
// proxy1.example.com; en caso contrario, se conecta directamente.

if (dnsDomainLevels(host) > 0)
return "PROXY proxy1.example.com:8080";
else
return "DIRECT";

weekdayRange​

Se puede utilizar al crear una regla basada en el tiempo. Por ejemplo, se puede utilizar cuando desee devolver la configuración del proxy sólo en días específicos.

   // De lunes a viernes, utiliza el proxy proxy1.example.com;
// los demás días, se conecta directamente a Internet.

if (weekdayRange("MON", "FRI"))
return "PROXY proxy1.example.com:8080";
else
return "DIRECT";

dateRange​

Se puede utilizar al crear una regla basada en el tiempo. Por ejemplo, se puede utilizar cuando se desea aplicar un proxy sólo en meses específicos.


// De enero a marzo, utiliza el proxy proxy1.example.com;
// los demás meses, se conecta directamente.

if (dateRange("JAN", "MAR"))
return "PROXY proxy1.example.com:8080";
else
return "DIRECT";

timeRange​

Permite utilizar el proxy solo durante un intervalo horario determinado.

   // Utiliza proxy1.example.com solo de las 8:00 a las 18:00;
// fuera de ese horario, se conecta directamente.

if (timeRange(8, 18))
return "PROXY proxy1.example.com:8080";
else
return "DIRECT";

alert​

Esta función no formaba parte de la definición original del formato PAC. Internet Explorer y Firefox la incorporan para facilitar el diagnóstico de problemas.

   // Muestra el resultado de la resolución DNS en la consola de errores del navegador.

resolved_host = dnsResolve(host);
alert(resolved_host);