Sintaxe PAC (Proxy auto-config)
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);