Saltar para o conteúdo principal

Sintaxe PAC (Proxy auto-config)

info

Se encontrar erros neste documento ou tiver sugestões, deixe uma mensagem no fórum Mudfish (https://forums.mudfish.net). Os exemplos e as explicações apresentados foram traduzidos ou elaborados com base nos sites abaixo.

A extensão de navegador Mudfish suporta o formato de ficheiros PAC (Proxy auto-config).

Funções PAC​

Os navegadores que suportam o formato PAC disponibilizam normalmente as funções definidas no formato padrão da Netscape.

Estas funções são geralmente executadas numa sandbox, num ambiente estritamente limitado. Por exemplo, não é permitido consultar as informações do User Agent.

As funções permitidas nesse ambiente são descritas abaixo.

dnsDomainIs​

Verifica o nome do anfitrião e devolve true se corresponder. É geralmente utilizada para verificar nomes de anfitrião específicos que constituem exceções.

   // Se o nome do anfitrião for google.com ou um subdomínio, como maps.google.com ou www.google.com, utilize uma ligação direta, sem proxy.

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

shExpMatch​

Compara o nome do anfitrião ou o URL com uma cadeia definida por uma expressão de shell e devolve true se existir correspondência.

   // Encaminhe diretamente os pedidos correspondentes a nomes de anfitrião terminados em .local, sem proxy.

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

// Aceda diretamente a vpn.domain.com ou a ficheiros e pastas sob http://abcdomain.com/folder/, sem proxy.

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

isInNet​

Verifica o endereço IP do anfitrião e devolve true se pertencer à sub-rede indicada. Se receber um nome de anfitrião como argumento, resolve-o através de DNS para obter o IP.

   // Se o endereço IP do anfitrião, após a resolução DNS, pertencer à rede indicada, estabeleça uma ligação direta.

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

myIpAddress​

Devolve o endereço IP do computador atual.

   // Se o computador pertencer à rede indicada, utilize o proxy 10.10.5.1 na porta 8080.

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

dnsResolve​

Resolve um nome de anfitrião através de DNS para obter o respetivo endereço IP.

   // Se o IP do anfitrião de destino pertencer a um dos intervalos indicados, estabeleça uma ligação direta.

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​

Devolve true se o nome do anfitrião não contiver nenhum ponto (.). Por exemplo, http://intranet. Pode ser utilizada para aceder a endereços Web de uma rede interna.

   // Se for pedido um nome simples, como http://intranet/ ou http://webserver-name01/, estabeleça uma ligação direta.

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

localHostOrDomainIs​

Verifica o nome do anfitrião e devolve true se a parte correspondente ao nome do anfitrião coincidir.

   // Se o nome do anfitrião for "www" ou "www.google.com", estabeleça uma ligação direta.

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

isResolvable​

Tenta converter o nome do anfitrião num endereço IP e devolve true se conseguir.

Se a resolução do domínio falhar, o navegador pode ficar bloqueado por um breve período. Utilize esta função com cuidado.

   // Se o nome do anfitrião puder ser resolvido por DNS, utilize o proxy proxy1.example.com.

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

dnsDomainLevels​

Verifica o nome do anfitrião e devolve o número de pontos (.) na cadeia. Pode ser utilizada, por exemplo, para definir exceções para servidores Web internos.

   // Se o nome do anfitrião contiver pelo menos um ponto, utilize proxy1.example.com; caso contrário, estabeleça uma ligação direta.

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

weekdayRange​

Permite criar regras baseadas no tempo, por exemplo para devolver uma configuração de proxy apenas em determinados dias.

   // De segunda a sexta-feira, utilize proxy1.example.com; nos restantes dias, estabeleça uma ligação direta.

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

dateRange​

Permite criar regras baseadas no tempo, por exemplo para aplicar um proxy apenas em determinados meses.


// De janeiro a março, utilize proxy1.example.com; nos restantes meses, estabeleça uma ligação direta.

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

timeRange​

Permite utilizar o proxy apenas num determinado intervalo horário.

   // Utilize proxy1.example.com apenas entre as 8h e as 18h; fora desse horário, estabeleça uma ligação direta.

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

alert​

Esta função não existia na definição inicial do formato PAC, mas foi disponibilizada no Internet Explorer e no Firefox para resolução de problemas.

   // Apresente o resultado da resolução DNS na consola de erros do navegador.

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