Asosiy tarkibga oʻtish

PAC (Proxy auto-config) sintaksisi

Maʼlumot

Hujjatda xatoliklar yoki takliflar boʻlsa, Mudfish forumida xabar qoldiring. Bu yerdagi misollar va tushuntirishlar quyidagi manbalar asosida tuzilgan:

Mudfish brauzer kengaytmasi PAC (Proxy auto-config) fayl formatini qoʻllab-quvvatlaydi.

PAC funksiyalari​

PAC formatini qoʻllab-quvvatlovchi brauzerlar Netscape kompaniyasi tomonidan ishlab chiqilgan standart formatdagi funksiyalarni taqdim etadi.

Biroq bu funksiyalar cheklangan sandbox muhitida ishlaydi. Masalan, brauzerning User Agent maʼlumotlarini olish imkoniyati butunlay cheklangan.

Quyida sandbox muhitida ruxsat berilgan funksiyalar tavsifi keltirilgan:

dnsDomainIs​

Xost nomini (hostname) tekshiradi va u mos kelsa true qiymatini qaytaradi. Odatda alohida xostlar uchun istisno belgilashda qoʻllaniladi.

   // Agar hostname google.com bilan bir xil boʻlsa yoki uning quyi manzillariga mos kelsa
// (masalan, maps.google.com, www.google.com),
// brauzer proksisiz toʻgʻridan-toʻgʻri ulanadi.

if (dnsDomainIs(host, "google.com"))
return "DIRECT";

shExpMatch​

Xost nomi yoki URL manzilini shell ifodasi bilan solishtiradi va mos kelsa true qiymatini qaytaradi.

   // .local bilan tugaydigan barcha soʻrovlar uchun
// brauzer proksisiz toʻgʻridan-toʻgʻri ulanadi.

if (shExpMatch(url, "*.local"))
return "DIRECT";

// vpn.domain.com manziliga ulanishda yoki
// http://abcdomain.com/folder/ ostidagi barcha jild va fayllarga boʻlgan
// soʻrovlar proksisiz toʻgʻridan-toʻgʻri ulanadi.

if (shExpMatch(host, "vpn.domain.com") ||
shExpMatch(url, "http://abcdomain.com/folder/*"))
return "DIRECT";

isInNet​

Ushbu funksiya xost nomining IP manzilini tekshiradi va agar u maʼlum bir subnet (quyi tarmoq) ostida boʻlsa, true qiymatini qaytaradi. Agar argument sifatida xost nomi berilsa, DNS resolving orqali IP manziliga oʻgiriladi.

   // Agar soʻralgan xostning IP manzili (DNS aniqlangach)
// koʻrsatilgan IP diapazoniga tegishli boʻlsa, toʻgʻridan-toʻgʻri ulanadi.

if (isInNet(dnsResolve(host), "172.16.0.0", "255.240.0.0"))
return "DIRECT";

myIpAddress​

Joriy kompyuterning IP manzilini qaytaradi.

   // Agar kompyuter maʼlum bir IP diapazoniga tegishli boʻlsa,
// 10.10.5.1:8080 proksi orqali soʻrov yuboriladi.

if (isInNet(myIpAddress(), "10.10.1.0", "255.255.255.0"))
return "PROXY 10.10.5.1:8080";

dnsResolve​

DNS soʻrovi (resolving) orqali xost nomini IP manziliga aylantiradi.

   // Agar soʻralgan xostning IP manzili koʻrsatilgan diapazonga tegishli boʻlsa,
// toʻgʻridan-toʻgʻri ulanadi.

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​

Agar xost nomida birorta ham nuqta (.) belgisi boʻlmasa, true qiymatini qaytaradi. Masalan, http://intranet kabi ichki tarmoq veb-manzillariga kirishda foydalaniladi.

   // Agar foydalanuvchi oddiy xost nomini (masalan, http://intranet/ yoki
// http://webserver-name01/) soʻrasa, toʻgʻridan-toʻgʻri ulanadi.

if (isPlainHostName(host))
return "DIRECT";

localHostOrDomainIs​

Xost nomini tekshiradi va koʻrsatilgan qism mos kelsa true qaytaradi.

   // Agar soʻralgan xost nomi "www" yoki "www.google.com" boʻlsa,
// toʻgʻridan-toʻgʻri ulanadi.

if (localHostOrDomainIs(host, "www.google.com"))
return "DIRECT";

isResolvable​

Xost nomini IP manzilga aylantirish muvaffaqiyatli boʻlsa, true qaytaradi.

Agar domen manzilini aniqlash (resolving) imkoni boʻlmasa, brauzer vaqtincha qotib qolishi mumkin. Shuning uchun ehtiyotkorlik bilan foydalanish kerak.

   // Agar soʻralgan xost nomi DNS server orqali aniqlanishi mumkin boʻlsa,
// proxy1.example.com:8080 proksi orqali soʻrov yuboriladi.

if (isResolvable(host))
return "PROXY proxy1.example.com:8080";

dnsDomainLevels​

Xost nomida nechta nuqta (.) belgisi borligini aniqlaydi va sonini qaytaradi. Masalan, ichki tarmoq veb-serverlarini istisno sifatida belgilashda qoʻllanilishi mumkin.

   // Agar xost nomida kamida bitta nuqta (.) mavjud boʻlsa, proxy1.example.com:8080
// proksi orqali ulanadi, aks holda toʻgʻridan-toʻgʻri ulanadi.

if (dnsDomainLevels(host) > 0)
return "PROXY proxy1.example.com:8080";
else
return "DIRECT";

weekdayRange​

Hafta kunlariga asoslangan qoida yaratishda qoʻllaniladi. Masalan, faqat maʼlum kunlarda proksi sozlamalarini qoʻllash uchun kerak boʻladi.

   // Dushanbadan jumagacha proxy1.example.com:8080 proksisi ishlatiladi,
// boshqa kunlari esa toʻgʻridan-toʻgʻri ulanadi.

if (weekdayRange("MON", "FRI"))
return "PROXY proxy1.example.com:8080";
else
return "DIRECT";

dateRange​

Sana va oylarga asoslangan qoida yaratishda foydalaniladi. Masalan, faqat maʼlum oylarda proksini faollashtirish uchun:

   // Yanvardan martgacha proxy1.example.com:8080 proksisi ishlatiladi,
// aks holda toʻgʻridan-toʻgʻri ulanadi.

if (dateRange("JAN", "MAR"))
return "PROXY proxy1.example.com:8080";
else
return "DIRECT";

timeRange​

Faqat maʼlum soat oraligʻida proksidan foydalanish uchun qoʻllaniladi:

   // Faqat ertalab soat 8 dan kechki 18 gacha proxy1.example.com:8080 ishlatiladi,
// qolgan vaqtlarda toʻgʻridan-toʻgʻri ulanadi.

if (timeRange(8, 18))
return "PROXY proxy1.example.com:8080";
else
return "DIRECT";

alert​

Ushbu funksiya dastlab PAC formatida mavjud boʻlmagan, biroq xatoliklarni aniqlash (troubleshooting) uchun Internet Explorer va Firefox brauzerlarida joriy etilgan:

   // DNS aniqlash natijasini brauzer konsoliga chiqaradi.

resolved_host = dnsResolve(host);
alert(resolved_host);