វាក្យសម្ព័ន្ធ 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);