PAC (Proxy auto-config) sintaksisi
Sənəddə xəta aşkar etsəniz və ya təklifiniz olsa, Mudfish forumunda (https://forums.mudfish.net) mesaj yazın. Buradakı nümunə və izahlar aşağıdakı saytlardakı məlumatlar tərcümə edilərək və ya istinad kimi istifadə olunaraq hazırlanıb.
Mudfish brauzer genişlənməsi PAC (Proxy auto-config) fayl formatını dəstəkləyir.
PAC funksiyaları
PAC formatını dəstəkləyən brauzerlər adətən Netscape-in müəyyən etdiyi standart formatdakı funksiyaları dəstəkləyir.
Bu funksiyalar adətən sandbox daxilində işlədiyindən ciddi məhdudlaşdırılmış mühitdə icra olunur. Məsələn, User Agent məlumatına baxmaq kimi əməliyyatlar tamamilə qadağandır.
Aşağıda sandbox mühitində icazə verilən funksiyalar izah olunur.
dnsDomainIs
Host adını yoxlayır və uyğunluq olduqda true qaytarır. Adətən ayrı-ayrı host adları üçün istisnaları yoxlamaqda istifadə olunur.
// Host adı google.com və ya onun alt ünvanlarından biri ilə uyğun gələrsə
// (məsələn, maps.google.com, www.google.com),
// brauzer proksidən keçmədən birbaşa qoşulur.
if (dnsDomainIs(host, "google.com"))
return "DIRECT";
shExpMatch
Host adını və ya URL-i shell ifadəsi ilə verilən sətirlə müqayisə edir və uyğunluq olduqda true qaytarır.
// Bütün sorğular (.local ilə bitən bütün host adları üçün)
// brauzerdən proksisiz, birbaşa göndərilir.
if (shExpMatch(url, "*.local"))
return "DIRECT";
// vpn.domain.com ünvanına və ya
// http://abcdomain.com/folder/ altındakı bütün qovluq və fayllara
// edilən sorğular proksidən keçmədən birbaşa göndərilir.
if (shExpMatch(host, "vpn.domain.com") ||
shExpMatch(url, "http://abcdomain.com/folder/*"))
return "DIRECT";
isInNet
Host adının IP ünvanını yoxlayır və müəyyən alt şəbəkədədirsə true qaytarır. Arqument kimi host adı verildikdə DNS həlli vasitəsilə IP ünvanına çevrilir.
// Sorğu edilən host adının IP ünvanı (DNS həllindən sonra)
// arqument kimi verilmiş IP diapazonundadırsa, birbaşa qoşulur.
if (isInNet(dnsResolve(host), "172.16.0.0", "255.240.0.0"))
return "DIRECT";
myIpAddress
Hazırkı kompüterin IP ünvanını qaytarır.
// Kompüterin IP ünvanı müəyyən diapazondadırsa, sorğu
// 10.10.5.1 proksisinin 8080 portu vasitəsilə göndərilir.
if (isInNet(myIpAddress(), "10.10.1.0", "255.255.255.0"))
return "PROXY 10.10.5.1:8080";
dnsResolve
DNS həlli vasitəsilə host adını IP ünvanına çevirir.
// Sorğu edilən hostun IP ünvanı göstərilən diapazonlardan birindədirsə,
// birbaşa qoşulur.
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
Host adında heç bir . (nöqtə) simvolu yoxdursa true qaytarır. Məsələn, http://intranet kimi ünvanlara, adətən daxili şəbəkədəki veb ünvanlarına müraciət zamanı istifadə edilə bilər.
// İstifadəçi sadə host adına (məsələn, http://intranet/ və ya
// http://webserver-name01/) sorğu göndərirsə, birbaşa qoşulur.
if (isPlainHostName(host))
return "DIRECT";
localHostOrDomainIs
Host adını yoxlayır və host adı hissəsi uyğun olduqda true qaytarır.
// Sorğu edilən host adı "www" və ya "www.google.com" olarsa,
// birbaşa qoşulur.
if (localHostOrDomainIs(host, "www.google.com"))
return "DIRECT";
isResolvable
Host adını IP ünvanına çevirir və əməliyyat uğurludursa true qaytarır.
Domen adı düzgün həll edilə bilməsə, brauzer qısa müddətə dona (dayana) bilər. Bu funksiyanı ehtiyatla istifadə edin.
// Sorğu edilən host adı DNS serveri tərəfindən həll edilə bilirsə,
// sorğu proxy1.example.com proksisi vasitəsilə göndərilir.
if (isResolvable(host))
return "PROXY proxy1.example.com:8080";
dnsDomainLevels
Host adını yoxlayır və sətirdə neçə . (nöqtə) olduğunu qaytarır. Məsələn, daxili şəbəkədəki veb serverləri istisna kimi təyin etməkdə istifadə oluna bilər.
// Host adında ən azı bir . (nöqtə) varsa, proxy1.example.com
// proksisi vasitəsilə, əks halda birbaşa qoşulur.
if (dnsDomainLevels(host) > 0)
return "PROXY proxy1.example.com:8080";
else
return "DIRECT";
weekdayRange
Vaxt əsasında qayda yaratmaq üçün istifadə oluna bilər. Məsələn, proksi tənzimləməsinin yalnız müəyyən günlərdə qaytarılmasını təmin edir.
// Bazar ertəsindən cüməyədək proxy1.example.com proksisindən
// istifadə edilir, digər günlərdə internetə birbaşa qoşulur.
if (weekdayRange("MON", "FRI"))
return "PROXY proxy1.example.com:8080";
else
return "DIRECT";
dateRange
Vaxt əsasında qayda yaratmaq üçün istifadə oluna bilər. Məsələn, proksini yalnız müəyyən aylarda tətbiq etmək istədikdə istifadə edilir.
// Yanvardan martadək proxy1.example.com proksisindən istifadə edilir,
// digər aylarda birbaşa qoşulur.
if (dateRange("JAN", "MAR"))
return "PROXY proxy1.example.com:8080";
else
return "DIRECT";
timeRange
Proksidən yalnız müəyyən saatlarda istifadə etmək üçün tətbiq olunur.
// Yalnız səhər saat 8-dən axşam saat 6-dək proxy1.example.com istifadə edilir,
// digər vaxtlarda birbaşa qoşulur.
if (timeRange(8, 18))
return "PROXY proxy1.example.com:8080";
else
return "DIRECT";
alert
Bu funksiya ilkin PAC formatında mövcud deyildi, lakin problemlərin diaqnostikası üçün Internet Explorer və Firefox brauzerlərində müəyyən edilib.
// DNS həllinin nəticəsini brauzerin xəta konsolunda göstərir.
resolved_host = dnsResolve(host);
alert(resolved_host);