Үндсэн агуулга руу алгасах

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);