PAC-syntaks (Proxy auto-config)
Hvis du finder fejl eller har forslag, bedes du skrive på Mudfish-forummet (https://forums.mudfish.net). Eksemplerne og forklaringerne bygger på oversættelse af eller henvisninger til følgende sider.
Mudfish-browserudvidelsen understøtter PAC-filformatet (Proxy auto-config).
PAC-funktioner
Browsere, som understøtter PAC, tilbyder normalt funktionerne fra Netscapes standardformat.
Funktionerne kører normalt i en sandbox med strenge begrænsninger. Det er for eksempel ikke muligt at undersøge User Agent-oplysninger.
Nedenfor beskrives de funktioner, som sandboxen tillader. Kodeeksemplerne og deres koreanske kommentarer er bevaret uændret fra originalen; hvert eksempel forklares på dansk umiddelbart før koden.
dnsDomainIs
Kontrollerer værtsnavnet og returnerer true, hvis det matcher. Bruges normalt til at kontrollere enkelte værtsnavne som undtagelser.
Eksemplet forbinder direkte uden proxy, hvis værtsnavnet matcher google.com eller en underadresse, for eksempel maps.google.com eller www.google.com.
// 만약 hostname 이 google.com 과 같거나 하위 주소들이 매치된다면
// (예를 들어 maps.google.com, www.google.com),
// 브라우저로 하여금 proxy 을 거치지 않고 직접 접속하게 합니다.
if (dnsDomainIs(host, "google.com"))
return "DIRECT";
shExpMatch
Sammenligner værtsnavnet eller URL’en med en shell-lignende tekstregel og returnerer true ved et match.
Første regel forbinder direkte ved navne, der slutter på .local. Anden regel forbinder direkte til vpn.domain.com eller filer og mapper under 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
Kontrollerer, om værtsnavnets IP-adresse ligger i et bestemt subnet, og returnerer true, hvis den gør. Et værtsnavn omdannes til en IP-adresse via DNS.
Eksemplet forbinder direkte, hvis den opslåede IP-adresse ligger i det angivne netværk.
// 만약 요청한 hostname 의 IP 주소가 (DNS resolving 후) 인자로 넘겨진
// IP 대역에 포함되는 것이면 직접 접속합니다.
if (isInNet(dnsResolve(host), "172.16.0.0", "255.240.0.0"))
return "DIRECT";
myIpAddress
Returnerer IP-adressen på din computer.
Hvis computeren er i det angivne netværk, bruger eksemplet proxyen 10.10.5.1 på port 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
Omdanner et værtsnavn til en IP-adresse via DNS.
Eksemplet forbinder direkte, hvis værtens IP-adresse ligger i et af de angivne netværk.
// 만약 요청한 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
Returnerer true, hvis værtsnavnet ikke indeholder et punktum. Det gælder for eksempel http://intranet og kan bruges til interne webadresser.
Eksemplet forbinder direkte til simple værtsnavne såsom http://intranet/ eller http://webserver-name01/.
// 만약 사용자가 plain hostname (예를 들면, http://intranet/ 혹은
// http://webserver-name01/) 를 요청할 경우, 직접 접속하도록 합니다.
if (isPlainHostName(host))
return "DIRECT";
localHostOrDomainIs
Kontrollerer værtsnavnet og returnerer true, når værtsnavnsdelen matcher.
Eksemplet forbinder direkte, hvis værtsnavnet er "www" eller "www.google.com".
// 만약 요청한 hostname 이 "www" 혹은 "www.google.com" 일 경우, 직접
// 접속합니다.
if (localHostOrDomainIs(host, "www.google.com"))
return "DIRECT";
isResolvable
Forsøger at omdanne værtsnavnet til en IP-adresse og returnerer true, hvis det lykkes.
Hvis domænet ikke kan slås op korrekt, kan browseren kortvarigt fryse. Brug funktionen med omtanke.
Hvis DNS kan slå værtsnavnet op, sender eksemplet anmodningen gennem proxy1.example.com.
// 만약 요청한 hostname 이 DNS 서버로 부터 resolving 이 될 수 있다면,
// proxy1.example.com 프록시를 통해 요청합니다.
if (isResolvable(host))
return "PROXY proxy1.example.com:8080";
dnsDomainLevels
Returnerer antallet af punktummer i værtsnavnet. Kan for eksempel bruges til at undtage interne webservere.
Eksemplet bruger proxy1.example.com, hvis navnet indeholder mindst ét punktum, og forbinder ellers direkte.
// 만약 hostname 이 . (dot) 을 하나라도 포함하고 있으면 proxy1.example.com
// 프록시를 통해 접속하고 그렇지 않으면 직접 접속합니다.
if (dnsDomainLevels(host) > 0)
return "PROXY proxy1.example.com:8080";
else
return "DIRECT";
weekdayRange
Kan bruges til tidsbaserede regler, for eksempel kun at returnere proxyindstillinger på bestemte ugedage.
Eksemplet bruger proxy1.example.com fra mandag til fredag og forbinder ellers direkte.
// 만약 월요일부터 금요일 사이에는 proxy1.example.com 프록시를 사용하도록
// 하고 그렇지 않을 경우는 직접 인터넷에 접속하도록 합니다.
if (weekdayRange("MON", "FRI"))
return "PROXY proxy1.example.com:8080";
else
return "DIRECT";
dateRange
Kan bruges til tidsbaserede regler, for eksempel kun at bruge proxy i bestemte måneder.
Eksemplet bruger proxy1.example.com fra januar til marts og forbinder ellers direkte.
// 만약 1월부터 3월까지는 proxy1.example.com 프록시를 사용하도록 설정하고
// 그렇지 않을 경우는 직접 접속하도록 조치합니다.
if (dateRange("JAN", "MAR"))
return "PROXY proxy1.example.com:8080";
else
return "DIRECT";
timeRange
Kan bruges til kun at anvende proxy i et bestemt tidsrum.
Eksemplet bruger proxy1.example.com fra kl. 8 til kl. 18 og forbinder ellers direkte.
// 오직 아침 8 시부터 오후 6 시까지만 proxy1.example.com 을 사용하도록
// 하고 그렇지 않을 경우는 직접 접속합니다.
if (timeRange(8, 18))
return "PROXY proxy1.example.com:8080";
else
return "DIRECT";
alert
Funktionen fandtes ikke i den oprindelige PAC-definition, men er tilføjet i Internet Explorer og Firefox til fejlfinding.
Eksemplet viser resultatet af DNS-opslaget i browserens fejlkonsol.
// 브라우저의 error 콘솔창에 DNS resolving 한 결과를 출력하도록 합니다.
resolved_host = dnsResolve(host);
alert(resolved_host);