PAC-syntax (Proxy auto-config)
Om du hittar fel eller har förslag, skriv på Mudfishs forum (https://forums.mudfish.net). Exemplen och beskrivningarna i originaldokumentationen har översatts från eller bygger på:
Mudfishs webbläsartillägg stöder PAC-formatet (Proxy auto-config).
PAC-funktioner
Webbläsare med PAC-stöd stöder vanligtvis funktionerna i Netscapes standardformat. De körs dock normalt i en strikt begränsad sandlåda. Det går till exempel inte att läsa User Agent-information.
Nedan beskrivs funktionerna som tillåts i sandlådan. Kodexemplen är oförändrade från originalet, inklusive de koreanska kommentarerna. Deras innebörd förklaras på svenska före varje exempel.
dnsDomainIs
Kontrollerar värdnamnet och returnerar true vid matchning. Används ofta för undantag för enskilda värdnamn. Exemplet ansluter direkt till google.com och underdomäner som 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
Jämför ett värdnamn eller en URL med ett mönster i shell-syntax och returnerar true vid matchning. Exemplen ansluter direkt till namn som slutar på .local, vpn.domain.com och allt 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
Kontrollerar om värdnamnets IP-adress finns i ett visst undernät och returnerar då true. Om ett värdnamn anges slås IP-adressen upp via DNS. Exemplet ansluter direkt om adressen tillhör det angivna nätet.
// 만약 요청한 hostname 의 IP 주소가 (DNS resolving 후) 인자로 넘겨진
// IP 대역에 포함되는 것이면 직접 접속합니다.
if (isInNet(dnsResolve(host), "172.16.0.0", "255.240.0.0"))
return "DIRECT";
myIpAddress
Returnerar den egna datorns IP-adress. Exemplet använder proxyn 10.10.5.1 på port 8080 om datorn tillhör det angivna nätet.
// 만약 나의 컴퓨터가 특정 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
Översätter ett värdnamn till en IP-adress via DNS. Exemplet ansluter direkt om adressen ligger i något av de angivna intervallen.
// 만약 요청한 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
Returnerar true om värdnamnet inte innehåller någon punkt. Det kan användas för interna adresser som http://intranet. Exemplet ansluter direkt till enkla värdnamn som http://intranet/ eller http://webserver-name01/.
// 만약 사용자가 plain hostname (예를 들면, http://intranet/ 혹은
// http://webserver-name01/) 를 요청할 경우, 직접 접속하도록 합니다.
if (isPlainHostName(host))
return "DIRECT";
localHostOrDomainIs
Kontrollerar värdnamnet och returnerar true om värdnamnsdelen matchar. Exemplet ansluter direkt om namnet är ”www” eller ”www.google.com”.
// 만약 요청한 hostname 이 "www" 혹은 "www.google.com" 일 경우, 직접
// 접속합니다.
if (localHostOrDomainIs(host, "www.google.com"))
return "DIRECT";
isResolvable
Returnerar true om värdnamnet kan översättas till en IP-adress.
Om domännamnet inte kan slås upp kan webbläsaren tillfälligt frysa. Använd funktionen med försiktighet.
Exemplet använder proxy1.example.com om DNS-uppslagningen lyckas.
// 만약 요청한 hostname 이 DNS 서버로 부터 resolving 이 될 수 있다면,
// proxy1.example.com 프록시를 통해 요청합니다.
if (isResolvable(host))
return "PROXY proxy1.example.com:8080";
dnsDomainLevels
Returnerar antalet punkter i värdnamnet. Kan till exempel användas för att undanta interna webbservrar. Exemplet använder proxy1.example.com om namnet innehåller minst en punkt, annars direkt anslutning.
// 만약 hostname 이 . (dot) 을 하나라도 포함하고 있으면 proxy1.example.com
// 프록시를 통해 접속하고 그렇지 않으면 직접 접속합니다.
if (dnsDomainLevels(host) > 0)
return "PROXY proxy1.example.com:8080";
else
return "DIRECT";
weekdayRange
Skapar tidsbaserade regler, till exempel en proxy som bara används vissa veckodagar. Exemplet använder proxy1.example.com måndag till fredag och direkt anslutning övriga dagar.
// 만약 월요일부터 금요일 사이에는 proxy1.example.com 프록시를 사용하도록
// 하고 그렇지 않을 경우는 직접 인터넷에 접속하도록 합니다.
if (weekdayRange("MON", "FRI"))
return "PROXY proxy1.example.com:8080";
else
return "DIRECT";
dateRange
Skapar datumbaserade regler, till exempel en proxy som bara används vissa månader. Exemplet använder proxy1.example.com från januari till mars och direkt anslutning resten av tiden.
// 만약 1월부터 3월까지는 proxy1.example.com 프록시를 사용하도록 설정하고
// 그렇지 않을 경우는 직접 접속하도록 조치합니다.
if (dateRange("JAN", "MAR"))
return "PROXY proxy1.example.com:8080";
else
return "DIRECT";
timeRange
Används för att välja proxy under vissa tider på dygnet. Exemplet använder proxy1.example.com endast mellan kl. 8 och 18, annars direkt anslutning.
// 오직 아침 8 시부터 오후 6 시까지만 proxy1.example.com 을 사용하도록
// 하고 그렇지 않을 경우는 직접 접속합니다.
if (timeRange(8, 18))
return "PROXY proxy1.example.com:8080";
else
return "DIRECT";
alert
Funktionen ingick inte i det ursprungliga PAC-formatet, men finns i Internet Explorer och Firefox för felsökning. Exemplet skriver resultatet av DNS-uppslagningen till webbläsarens felkonsol.
// 브라우저의 error 콘솔창에 DNS resolving 한 결과를 출력하도록 합니다.
resolved_host = dnsResolve(host);
alert(resolved_host);