PAC (Proxy auto-config) синтакс
Баримт бичигт алдаа байвал эсвэл санал хүсэлт байвал Mudfish форум (https://forums.mudfish.net)-д зурвас үлдээнэ үү. Энд дурдагдсан жишээ болон тайлбаруудыг доорх сайтуудын агуулгаас лавлан орчуулж бэлтгэсэн болно.
Mudfish хөтчийн өргөтгөл нь PAC (Proxy auto-config) файлын форматыг дэмждэг.
PAC функцууд
PAC форматыг дэмждэг хөтчүүд нь ихэвчлэн Netscape компаниас гаргасан стандарт форматын функцуудыг дэмжихээр хийгдсэн байдаг.
Гэвч ихэвчлэн эдгээр функцууд нь хамгаалагдсан орчинд (sandbox) ажилладаг тул маш хатуу хязгаарлагдмал нөхцөлд гүйцэтгэгддэг. Жишээлбэл, User Agent мэдээллийг шалгах зэрэг үйлдлүүд бүрэн хаалттай байдаг.
Доор sandbox орчинд зөвшөөрөгдсөн функцуудын талаар тайлбарлав.
dnsDomainIs
Hostname-ийг шалгаад тохирч байвал true утга буцаана. Ихэвчлэн онцгой тусдаа hostname-ийг шалгах үед ашиглагдана.
// Хэрэв hostname нь google.com-той тэнцүү эсвэл дэд домэйнууд нь таарч байвал
// (жишээ нь maps.google.com, www.google.com),
// хөтчийг проксигоор дамжуулалгүй шууд холбогдохоор заана.
if (dnsDomainIs(host, "google.com"))
return "DIRECT";
shExpMatch
Hostname эсвэл URL-ийг shell илэрхийллээр заасан тэмдэгт мөртэй харьцуулж тохирч байвал true утга буцаана.
// Бүх хүсэлтийг (.local-ээр төгссөн бүх hostname-д хамаарна)
// хөтчийг прокси ашиглалгүй шууд холбогдохоор заана.
if (shExpMatch(url, "*.local"))
return "DIRECT";
// vpn.domain.com руу хандах эсвэл
// http://abcdomain.com/folder/ доорх бүх хавтас, файл руу хандах
// хүсэлтүүдийг прокси дамжуулалгүй шууд холбоно.
if (shExpMatch(host, "vpn.domain.com") ||
shExpMatch(url, "http://abcdomain.com/folder/*"))
return "DIRECT";
isInNet
Энэ функц нь hostname-ийн IP хаягийг шалгаад тодорхой дэд сүлжээнд (subnet) харьяалагдаж байвал true утга буцаана. Хэрэв hostname-ийг аргумент болгон өгвөл DNS resolving хийж IP руу хөрвүүлэх үйлдлийг гүйцэтгэнэ.
// Хэрэв хүссэн hostname-ийн IP хаяг (DNS resolving хийсний дараа) өгөгдсөн
// IP мужид багтаж байвал шууд холбогдоно.
if (isInNet(dnsResolve(host), "172.16.0.0", "255.240.0.0"))
return "DIRECT";
myIpAddress
Одоогийн тухайн компьютерын IP хаягийг буцаана.
// Хэрэв миний компьютер тодорхой 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 resolving-ээр дамжуулан hostname-ийг IP хаяг руу хөрвүүлнэ.
// Хэрэв хүссэн 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
Хэрэв hostname нь ямар нэгэн . (цэг) тэмдэгт агуулаагүй байвал true утга буцаана. Жишээлбэл http://intranet гэх мэт бөгөөд ихэвчлэн дотоод сүлжээний вэб хаягт хандах үед ашиглагдана.
// Хэрэв хэрэглэгч plain hostname (жишээ нь http://intranet/ эсвэл
// http://webserver-name01/) хүссэн бол шууд холбогдоно.
if (isPlainHostName(host))
return "DIRECT";
localHostOrDomainIs
Hostname-ийг шалгаж, hostname хэсгүүд хоорондоо тохирч байвал true утга буцаана.
// Хэрэв хүссэн hostname нь "www" эсвэл "www.google.com" байвал шууд
// холбогдоно.
if (localHostOrDomainIs(host, "www.google.com"))
return "DIRECT";
isResolvable
Hostname-ийг IP хаяг руу хөрвүүлээд амжилттай болбол true утга буцаана.
Хэрэв домэйн хаяг амжилттай resolve хийгдэхгүй бол хөтөч түр зуур гацах (зогсох) магадлалтай. Анхаарал болгоомжтой ашиглах хэрэгтэй.
// Хэрэв хүссэн hostname нь DNS серверээс амжилттай тодорхойлогдож чадвал,
// proxy1.example.com проксигоор дамжуулан хүсэлт илгээнэ.
if (isResolvable(host))
return "PROXY proxy1.example.com:8080";
dnsDomainLevels
Hostname-ийг шалгаад тухайн тэмдэгт мөрөнд хэдэн ширхэг . (цэг) байгааг буцаана. Жишээлбэл дотоод сүлжээний вэб серверийг үл хамаарах тохиолдолд оруулах үед ашиглаж болно.
// Хэрэв hostname дотор нэг ч гэсэн . (цэг) байвал proxy1.example.com
// проксигоор дамжин холбогдож, үгүй бол шууд холбогдоно.
if (dnsDomainLevels(host) > 0)
return "PROXY proxy1.example.com:8080";
else
return "DIRECT";
weekdayRange
Цаг хугацаанд үндэслэн дүрэм үүсгэхэд ашиглагддаг бөгөөд жишээлбэл зөвхөн тодорхой өдрүүдэд прокси тохиргоог буцаахаар хийхэд ашиглаж болно.
// Даваагаас Баасан гарагийн хооронд proxy1.example.com проксиг ашиглаж,
// бусад өдрүүдэд интернетэд шууд холбогдоно.
if (weekdayRange("MON", "FRI"))
return "PROXY proxy1.example.com:8080";
else
return "DIRECT";
dateRange
Цаг хугацаанд үндэслэн дүрэм үүсгэхэд ашиглагдах бөгөөд жишээлбэл зөвхөн тодорхой саруудад прокси ашиглахыг хүссэн үед хэрэглэж болно.
// 1-р сараас 3-р сар хүртэл proxy1.example.com проксиг ашиглахаар тохируулж,
// бусад тохиолдолд шууд холбогдохоор зохицуулна.
if (dateRange("JAN", "MAR"))
return "PROXY proxy1.example.com:8080";
else
return "DIRECT";
timeRange
Зөвхөн тодорхой цагийн бүсэд прокси ашиглахаар тохируулах үед ашиглаж болно.
// Зөвхөн өглөө 08:00 цагаас орой 18:00 цаг хүртэл proxy1.example.com-ийг ашиглаж,
// бусад цагт шууд холбогдоно.
if (timeRange(8, 18))
return "PROXY proxy1.example.com:8080";
else
return "DIRECT";
alert
Энэ функц нь анх PAC формат тодорхойлогдоход байгаагүй боловч алдааг илрүүлж засах (troubleshooting) зорилгоор Internet Explorer болон Firefox хөтчүүдэд тодорхойлогдсон функц юм.
// Хөтчийн error консол цонхонд DNS тодорхойлсон үр дүнг хэвлэнэ.
resolved_host = dnsResolve(host);
alert(resolved_host);