Sintassi PAC (Proxy auto-config)
Se trovi errori o hai suggerimenti, lascia un messaggio nel forum Mudfish (https://forums.mudfish.net). Gli esempi e le spiegazioni del documento di origine sono stati tradotti o adattati dalle risorse seguenti.
L’estensione browser Mudfish supporta il formato PAC (Proxy auto-config).
Funzioni PAC
I browser che supportano PAC forniscono normalmente le funzioni definite nel formato standard di Netscape.
Queste funzioni vengono eseguite in una sandbox con forti restrizioni. Ad esempio, non è possibile leggere le informazioni dello User Agent.
Di seguito sono descritte le funzioni consentite nella sandbox. Gli esempi di codice originali, compresi i commenti in coreano, vengono conservati; ogni esempio è accompagnato dalla spiegazione in italiano.
dnsDomainIs
Controlla il nome host e restituisce true se corrisponde al dominio. Viene normalmente utilizzata per verificare singoli nomi host da trattare come eccezioni.
Se il nome host corrisponde a google.com o a un suo sottodominio, come maps.google.com o www.google.com, il browser si collega direttamente senza proxy.
// 만약 hostname 이 google.com 과 같거나 하위 주소들이 매치된다면
// (예를 들어 maps.google.com, www.google.com),
// 브라우저로 하여금 proxy 을 거치지 않고 직접 접속하게 합니다.
if (dnsDomainIs(host, "google.com"))
return "DIRECT";
shExpMatch
Confronta un nome host o un URL con una stringa espressa mediante un pattern della shell e restituisce true se corrisponde.
Il primo esempio collega direttamente tutte le richieste verso nomi host che terminano in .local. Il secondo collega direttamente vpn.domain.com e tutte le cartelle o i file sotto http://abcdomain.com/folder/.
// 모든 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
Controlla se l’indirizzo IP del nome host appartiene a una determinata sottorete e restituisce true in caso positivo. Se riceve un nome host, lo converte in IP tramite risoluzione DNS.
Se l’IP del nome host richiesto, dopo la risoluzione DNS, appartiene all’intervallo indicato, la connessione è diretta.
// 만약 요청한 hostname 의 IP 주소가 (DNS resolving 후) 인자로 넘겨진
// IP 대역에 포함되는 것이면 직접 접속합니다.
if (isInNet(dnsResolve(host), "172.16.0.0", "255.240.0.0"))
return "DIRECT";
myIpAddress
Restituisce l’indirizzo IP del computer locale.
Se il computer appartiene alla rete indicata, la richiesta passa attraverso il proxy 10.10.5.1 sulla porta 8080.
// 만약 나의 컴퓨터가 특정 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
Converte un nome host in indirizzo IP tramite risoluzione DNS.
Se l’IP dell’host richiesto appartiene a uno degli intervalli indicati, la connessione è diretta.
// 만약 요청한 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
Restituisce true se il nome host non contiene punti (.). Per esempio, http://intranet è un nome di questo tipo. È utile per accedere a siti della rete interna.
Se l’utente richiede un nome host semplice, come http://intranet/ oppure http://webserver-name01/, la connessione è diretta.
// 만약 사용자가 plain hostname (예를 들면, http://intranet/ 혹은
// http://webserver-name01/) 를 요청할 경우, 직접 접속하도록 합니다.
if (isPlainHostName(host))
return "DIRECT";
localHostOrDomainIs
Controlla il nome host e restituisce true se la parte relativa al nome host corrisponde.
Se il nome richiesto è “www” oppure “www.google.com”, la connessione è diretta.
// 만약 요청한 hostname 이 "www" 혹은 "www.google.com" 일 경우, 직접
// 접속합니다.
if (localHostOrDomainIs(host, "www.google.com"))
return "DIRECT";
isResolvable
Converte il nome host in IP e restituisce true se la risoluzione riesce.
Se il dominio non viene risolto correttamente, il browser può bloccarsi per un breve periodo. Usa questa funzione con cautela.
Se il server DNS riesce a risolvere il nome host, la richiesta passa attraverso il proxy proxy1.example.com.
// 만약 요청한 hostname 이 DNS 서버로 부터 resolving 이 될 수 있다면,
// proxy1.example.com 프록시를 통해 요청합니다.
if (isResolvable(host))
return "PROXY proxy1.example.com:8080";
dnsDomainLevels
Restituisce il numero di punti (.) presenti nel nome host. Può servire, ad esempio, a escludere i server web della rete interna.
Se il nome host contiene almeno un punto, viene utilizzato proxy1.example.com; altrimenti la connessione è diretta.
// 만약 hostname 이 . (dot) 을 하나라도 포함하고 있으면 proxy1.example.com
// 프록시를 통해 접속 하고 그렇지 않으면 직접 접속합니다.
if (dnsDomainLevels(host) > 0)
return "PROXY proxy1.example.com:8080";
else
return "DIRECT";
weekdayRange
Permette di creare regole temporali, ad esempio restituendo una configurazione proxy soltanto in determinati giorni.
Dal lunedì al venerdì viene utilizzato proxy1.example.com; negli altri giorni la connessione Internet è diretta.
// 만약 월요일부터 금요일 사이에는 proxy1.example.com 프록시를 사용하도록
// 하고 그렇지 않을 경우는 직접 인터넷에 접속하도록 합니다.
if (weekdayRange("MON", "FRI"))
return "PROXY proxy1.example.com:8080";
else
return "DIRECT";
dateRange
Permette di creare regole temporali, ad esempio applicando il proxy soltanto in determinati mesi.
Da gennaio a marzo viene utilizzato proxy1.example.com; negli altri mesi la connessione è diretta.
// 만약 1월부터 3월까지는 proxy1.example.com 프록시를 사용하도록 설정하고
// 그렇지 않을 경우는 직접 접속하도록 조치합니다.
if (dateRange("JAN", "MAR"))
return "PROXY proxy1.example.com:8080";
else
return "DIRECT";
timeRange
Permette di utilizzare il proxy soltanto in una determinata fascia oraria.
Dalle 8:00 alle 18:00 viene utilizzato proxy1.example.com; negli altri orari la connessione è diretta.
// 오직 아침 8 시부터 오후 6 시까지만 proxy1.example.com 을 사용하도록
// 하고 그렇지 않을 경우는 직접 접속합니다.
if (timeRange(8, 18))
return "PROXY proxy1.example.com:8080";
else
return "DIRECT";
alert
Questa funzione non faceva parte della definizione originale del formato PAC, ma è disponibile in Internet Explorer e Firefox per la risoluzione dei problemi.
Stampa il risultato della risoluzione DNS nella console degli errori del browser.
// 브라우저의 error 콘솔창에 DNS resolving 한 결과를 출력하도록 합니다.
resolved_host = dnsResolve(host);
alert(resolved_host);