PAC (Proxy auto-config) sintaksisi
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);