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.

   // 만약 hostname 이 google.com 과 같거나 하위 주소들이 매치된다면
// (예를 들어 maps.google.com, www.google.com),
// 브라우저로 하여금 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.

   // 모든 request 들 (.local 로 끝나는 모든 hostname 에 해당) 이
// 브라우저로 하여금 proxy 을 거치지 않고 직접 접속하게 합니다.

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

// vpn.domain.com 에 접속할려고 하거나
// http://abcdomain.com/folder/ 하위의 모든 폴더 혹은 파일에 접속하는
// 요청들을 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.

   // 만약 요청한 hostname 의 IP 주소가 (DNS resolving 후) 인자로 넘겨진
// IP 대역에 포함되는 것이면 직접 접속합니다.

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

myIpAddress​

Devuelve la dirección IP del equipo local.

   // 만약 나의 컴퓨터가 특정 IP 대역에 속할 경우 proxy 10.10.5.1 (포트는 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.

   // 만약 요청한 host 의 IP 가 지정한 범위에 속할 경우 직접 접속하도록
// 합니다.

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.

   // 만약 사용자가 plain hostname (예를 들면, http://intranet/ 혹은
// http://webserver-name01/) 를 요청할 경우, 직접 접속하도록 합니다.

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

localHostOrDomainIs​

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

   // 만약 요청한 hostname 이 "www" 혹은 "www.google.com" 일 경우, 직접
// 접속합니다.

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.

   // 만약 요청한 hostname 이 DNS 서버로 부터 resolving 이 될 수 있다면,
// 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.

   // 만약 hostname 이 . (dot) 을 하나라도 포함하고 있으면 proxy1.example.com
// 프록시를 통해 접속하고 그렇지 않으면 직접 접속합니다.

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.

   // 만약 월요일부터 금요일 사이에는 proxy1.example.com 프록시를 사용하도록
// 하고 그렇지 않을 경우는 직접 인터넷에 접속하도록 합니다.

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.


// 만약 1월부터 3월까지는 proxy1.example.com 프록시를 사용하도록 설정하고
// 그렇지 않을 경우는 직접 접속하도록 조치합니다.

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

timeRange​

Permite utilizar el proxy solo durante un intervalo horario determinado.

   // 오직 아침 8 시부터 오후 6 시까지만 proxy1.example.com 을 사용하도록
// 하고 그렇지 않을 경우는 직접 접속합니다.

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.

   // 브라우저의 error 콘솔창에 DNS resolving 한 결과를 출력하도록 합니다.

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