PAC (Proxy auto-config) sözdizimi
Belgede hata bulursanız veya öneriniz varsa Mudfish Forumu'na (https://forums.mudfish.net) mesaj bırakın. Buradaki örnekler ve açıklamalar aşağıdaki sitelerdeki içeriklerin çevrilmesi veya referans alınmasıyla hazırlanmıştır:
Mudfish tarayıcı uzantıları PAC (Proxy auto-config) dosya biçimini destekler.
PAC işlevleri
PAC destekleyen tarayıcılar genellikle Netscape'in belirlediği standart biçimdeki işlevleri destekler.
Ancak bu işlevler çoğunlukla sandbox içinde, sıkı kısıtlamalar altında çalışır. Örneğin User Agent bilgisine erişim tamamen engellenmiştir.
Aşağıda sandbox içinde izin verilen işlevler açıklanır. Kod örneklerindeki özgün Korece yorumlar korunmuştur; anlamları her örneğin önünde Türkçe açıklanır.
dnsDomainIs
Ana makine adını kontrol eder ve eşleşirse true döndürür. Genellikle tek tek ana makine adları için istisna tanımlamakta kullanılır.
Örnekte ad google.com ile aynıysa veya maps.google.com, www.google.com gibi alt adresler eşleşiyorsa tarayıcı proxy kullanmadan doğrudan bağlanır.
// 만약 hostname 이 google.com 과 같거나 하위 주소들이 매치된다면
// (예를 들어 maps.google.com, www.google.com),
// 브라우저로 하여금 proxy 을 거치지 않고 직접 접속하게 합니다.
if (dnsDomainIs(host, "google.com"))
return "DIRECT";
shExpMatch
Ana makine adını veya URL'yi shell ifadesiyle belirtilen dizgeyle karşılaştırır ve eşleşirse true döndürür.
İlk örnekte .local ile biten tüm ana makine istekleri doğrudan yapılır. İkinci örnekte vpn.domain.com veya http://abcdomain.com/folder/ altındaki tüm klasör ve dosya istekleri proxy kullanmadan yapılır.
// 모든 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
Ana makinenin IP adresini kontrol eder; belirli alt ağdaysa true döndürür. Argüman olarak ana makine adı verilirse DNS çözümlemesiyle IP adresine dönüştürülür.
Örnekte istenen ana makinenin IP adresi DNS çözümlemesinden sonra verilen IP aralığındaysa doğrudan bağlanılır.
// 만약 요청한 hostname 의 IP 주소가 (DNS resolving 후) 인자로 넘겨진
// IP 대역에 포함되는 것이면 직접 접속합니다.
if (isInNet(dnsResolve(host), "172.16.0.0", "255.240.0.0"))
return "DIRECT";
myIpAddress
Bilgisayarınızın mevcut IP adresini döndürür.
Örnekte bilgisayar belirtilen IP aralığındaysa istek 10.10.5.1 proxy sunucusunun 8080 bağlantı noktasından yapılır.
// 만약 나의 컴퓨터가 특정 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
DNS çözümlemesiyle ana makine adını IP adresine dönüştürür.
Örnekte istenen ana makinenin IP adresi belirtilen aralıklardan birindeyse doğrudan bağlanılır.
// 만약 요청한 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
Ana makine adında hiç nokta (.) yoksa true döndürür. Örneğin http://intranet gibi iç ağ web adreslerine erişirken kullanılabilir.
Örnekte kullanıcı http://intranet/ veya http://webserver-name01/ gibi yalın bir ana makine adı isterse doğrudan bağlanılır.
// 만약 사용자가 plain hostname (예를 들면, http://intranet/ 혹은
// http://webserver-name01/) 를 요청할 경우, 직접 접속하도록 합니다.
if (isPlainHostName(host))
return "DIRECT";
localHostOrDomainIs
Ana makine adlarını kontrol eder ve ana makine kısmı eşleşirse true döndürür.
Örnekte istenen ad "www" veya "www.google.com" ise doğrudan bağlanılır.
// 만약 요청한 hostname 이 "www" 혹은 "www.google.com" 일 경우, 직접
// 접속합니다.
if (localHostOrDomainIs(host, "www.google.com"))
return "DIRECT";
isResolvable
Ana makine adın ı IP adresine dönüştürmeyi dener; başarılıysa true döndürür.
Alan adı düzgün çözümlenemezse tarayıcı kısa süre donabilir. Dikkatli kullanın.
Örnekte ad DNS sunucusu tarafından çözümlenebiliyorsa istek proxy1.example.com proxy sunucusundan yapılır.
// 만약 요청한 hostname 이 DNS 서버로 부터 resolving 이 될 수 있다면,
// proxy1.example.com 프록시를 통해 요청합니다.
if (isResolvable(host))
return "PROXY proxy1.example.com:8080";
dnsDomainLevels
Ana makine adındaki nokta (.) sayısını döndürür. Örneğin iç ağ web sunucuları için istisna tanımlamakta kullanılabilir.
Örnekte ad en az bir nokta içeriyorsa proxy1.example.com üzerinden, aksi halde doğrudan bağlanılır.
// 만약 hostname 이 . (dot) 을 하나라도 포함하고 있으면 proxy1.example.com
// 프록시를 통해 접속하고 그렇지 않으면 직접 접속합니다.
if (dnsDomainLevels(host) > 0)
return "PROXY proxy1.example.com:8080";
else
return "DIRECT";
weekdayRange
Zamana bağlı kurallar oluşturmak, örneğin yalnızca belirli günlerde proxy ayarı döndürmek için kullanılabilir.
Örnekte pazartesiden cumaya proxy1.example.com kullanılır; diğer günlerde internete doğrudan bağlanılır.
// 만약 월요일부터 금요일 사이에는 proxy1.example.com 프록시를 사용하도록
// 하고 그렇지 않을 경우는 직접 인터넷에 접속하도록 합니다.
if (weekdayRange("MON", "FRI"))
return "PROXY proxy1.example.com:8080";
else
return "DIRECT";
dateRange
Zamana bağlı kurallar oluşturmak, örneğin yalnızca belirli aylarda proxy kullanmak için kullanılabilir.
Örnekte ocaktan marta proxy1.example.com kullanılır; diğer aylarda doğrudan bağlanılır.
// 만약 1월부터 3월까지는 proxy1.example.com 프록시를 사용하도록 설정하고
// 그렇지 않을 경우는 직접 접속하도록 조치합니다.
if (dateRange("JAN", "MAR"))
return "PROXY proxy1.example.com:8080";
else
return "DIRECT";
timeRange
Yalnızca belirli saatlerde proxy kullanmak için kullanılabilir.
Örnekte yalnızca sabah 8 ile akşam 18 arasında proxy1.example.com kullanılır; diğer saatlerde doğrudan bağlanılır.
// 오직 아침 8 시부터 오후 6 시까지만 proxy1.example.com 을 사용하도록
// 하고 그렇지 않을 경우는 직접 접속합니다.
if (timeRange(8, 18))
return "PROXY proxy1.example.com:8080";
else
return "DIRECT";