រំលងទៅមាតិកាសំខាន់

វាក្យសម្ព័ន្ធ 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),
// ធ្វើឱ្យកម្មវិធីរុករកតភ្ជាប់ដោយផ្ទាល់ដោយមិនឆ្លងកាត់ proxy។

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

shExpMatch​

ប្រៀបធៀប hostname ឬ URL ជាមួយខ្សែអក្សរដែលបានបញ្ជាក់ដោយកន្សោម shell ហើយប្រសិនបើត្រូវគ្នា វានឹងត្រឡប់ true។

   // សំណើទាំងអស់ (ត្រូវគ្នានឹង hostname ទាំងអស់ដែលបញ្ចប់ដោយ .local)
// ធ្វើឱ្យកម្មវិធីរុករកតភ្ជាប់ដោយផ្ទាល់ដោយមិនឆ្លងកាត់ proxy។

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

// សំណើដែលព្យាយាមភ្ជាប់ទៅកាន់ vpn.domain.com ឬ
// សំណើដែលចូលប្រើថត ឬឯកសាររងទាំងអស់នៅក្រោម http://abcdomain.com/folder/
// ត្រូវបានតភ្ជាប់ដោយផ្ទាល់ដោយមិនឆ្លងកាត់ proxy។

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

isInNet​

អនុគមន៍នេះពិនិត្យមើលអាសយដ្ឋាន IP នៃ hostname ហើយប្រសិនបើវាមាននៅក្រោម subnet ជាក់លាក់ វានឹងត្រឡប់ true។ ប្រសិនបើ hostname ត្រូវបានបញ្ជូនជាអាគុយម៉ង់ វានឹងដំណើរការបម្លែង IP តាមរយៈការដោះស្រាយ DNS (DNS resolving)។

   // ប្រសិនបើអាសយដ្ឋាន IP នៃ hostname ដែលបានស្នើសុំ (បន្ទាប់ពីការដោះស្រាយ DNS)
// ស្ថិតនៅក្នុងជួរ 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​

បម្លែង hostname ទៅជាអាសយដ្ឋាន IP តាមរយៈការដោះស្រាយ DNS។

   // ប្រសិនបើ IP នៃ host ដែលបានស្នើសុំស្ថិតនៅក្នុងជួរដែលបានបញ្ជាក់
// សូមតភ្ជាប់ដោយផ្ទាល់។

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​

ត្រឡប់ true ប្រសិនបើ hostname មិនមានតួអក្សរ . (dot) ណាមួយឡើយ។ ឧទាហរណ៍ដូចជា 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។

ប្រសិនបើអាសយដ្ឋាន domain មិនអាចដោះស្រាយបានត្រឹមត្រូវទេ កម្មវិធីរុករកខ្លួនឯងអាចនឹងគាំងមួយភ្លែត (អាចផ្អាកដំណើរការ)។ អ្នកត្រូវតែប្រើប្រាស់វាដោយប្រុងប្រយ័ត្ន។

   // ប្រសិនបើ hostname ដែលបានស្នើសុំអាចត្រូវបានដោះស្រាយពីម៉ាស៊ីនបម្រើ DNS
// សូមធ្វើសំណើតាមរយៈប្រូកស៊ី proxy1.example.com។

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

dnsDomainLevels​

ពិនិត្យ hostname ហើយត្រឡប់ចំនួនតួអក្សរ . (dot) ដែលមាននៅក្នុងខ្សែអក្សរនោះ។ ឧទាហរណ៍ វាអាចត្រូវបានប្រើនៅពេលបញ្ជាក់ម៉ាស៊ីនបម្រើគេហទំព័របណ្តាញផ្ទៃក្នុងជាករណីលើកលែង។

   // ប្រសិនបើ hostname មានសញ្ញា . (dot) យ៉ាងហោចណាស់មួយ សូមតភ្ជាប់តាមរយៈប្រូកស៊ី
// 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​

អាចប្រើនៅពេលបង្កើតវិធានដោយផ្អែកលើពេលវេលា ឧទាហរណ៍ នៅពេលអ្នកចង់អនុវត្តប្រូកស៊ីសម្រាប់តែខែជាក់លាក់ណាមួយប៉ុណ្ណោះ។


// ប្រសិនបើស្ថិតនៅចន្លោះខែមករាដល់ខែមីនា សូមកំណត់ឱ្យប្រើប្រាស់ប្រូកស៊ី proxy1.example.com
// បើមិនដូច្នោះទេ សូមចាត់វិធានការតភ្ជាប់ដោយផ្ទាល់។

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

timeRange​

អាចប្រើនៅពេលដែលអ្នកចង់ឱ្យប្រូកស៊ីត្រូវបានប្រើប្រាស់តែក្នុងចន្លោះពេលជាក់លាក់ណាមួយប៉ុណ្ណោះ។

   // ប្រើប្រាស់ proxy1.example.com តែពីម៉ោង 8 ព្រឹកដល់ម៉ោង 6 ល្ងាចប៉ុណ្ណោះ
// បើមិនដូច្នោះទេ សូមតភ្ជាប់ដោយផ្ទាល់។

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

alert​

អនុគមន៍នេះមិនមានទេនៅពេលដែលទម្រង់ PAC ត្រូវបានកំណត់ដំបូង ប៉ុន្តែវាជាអនុគមន៍ដែលត្រូវបានកំណត់នៅក្នុងកម្មវិធីរុករក Internet Explorer និង Firefox ដើម្បីធ្វើការដោះស្រាយបញ្ហា (troubleshooting)។

   // បង្ហាញលទ្ធផលនៃការដោះស្រាយ DNS នៅក្នុង error console នៃកម្មវិធីរុករក។

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