PAC (Proxy auto-config) Syntax
စာရွက်စာတမ်းတွင် အမှားအယွင်းများ ရှိပါက သို့မဟုတ် အကြံပြုလိုသည်များ ရှိပါက Mudfish ဖိုရမ် (https://forums.mudfish.net) တွင် မက်ဆေ့ခ်ျ ချန်ထားခဲ့နိုင်ပါသည်။ ဤနေရာတွင် ဖော်ပြထားသော နမူနာများနှင့် ရှင်းလင်းချက်များကို အောက်ပါ ဝဘ်ဆိုက်များမှ အကြောင်းအရာများကို ဘာသာပြန်ခြင်း သို့မဟုတ် ကိုးကားခြင်း ပြုလုပ်၍ ရေးသားထားခြင်း ဖြစ်ပါသည်-
Mudfish ဘရောက်ဇာ တိုးချဲ့အပိုပရိုဂရမ်သည် PAC (Proxy auto-config) ဖိုင်ပုံစံကို ထောက်ပံ့ပေးပါသည်။
PAC Function များ
PAC ပုံစံကို ထောက်ပံ့ပေးသော ဘရောက်ဇာများသည် ပုံမှန်အားဖြင့် Netscape မှ သတ်မှတ်ထားသော စံသတ်မှတ်ချက်တွင် ဖော်ပြထားသည့် function များကို ထောက်ပံ့ပေးထားပါသည်။
သို့သော် ထိုလုပ်ဆောင်ချက်များသည် sandbox အတွင်း အလုပ်လုပ်သောကြောင့် တင်းကျပ်စွာ ကန့်သတ်ထားသော ပတ်ဝန်းကျင်တွင် လည်ပတ်ပါသည်။ ဥပမာအားဖြင့် User Agent အချက်အလက်များကို ကြည့်ရှုခြင်းကဲ့သို့သော လုပ်ဆောင်ချက်များကို လုံးဝ ပိတ်ပင်ထားပါသည်။
အောက်တွင် sandbox ပတ်ဝန်းကျင်အတွင်း ခွင့်ပြုထားသော function များကို ဖော်ပြထားပါသည်-
dnsDomainIs
Hostname ကို စစ်ဆေးပြီး ကိုက်ညီပါက true ကို ပြန်ပို့ပေးပါသည်။ ပုံမှန်အားဖြင့် ခြွင်းချက်အနေဖြင့် သီးခြား hostname တစ်ခုချင်းစီကို စစ်ဆေးရာတွင် အသုံးပြုပါသည်။
// hostname သည် google.com သို့မဟုတ် ၎င်း၏ subdomains များနှင့် ကိုက်ညီပါက
// (ဥပမာ maps.google.com, www.google.com)
// ဘရောက်ဇာကို proxy မဖြတ်ဘဲ တိုက်ရိုက် ချိတ်ဆက်စေပါမည်။
if (dnsDomainIs(host, "google.com"))
return "DIRECT";
shExpMatch
Hostname သို့မဟုတ် URL ကို shell expression ဖြင့် သတ်မှတ်ထားသော စာသားနှင့် နှိုင်းယှဉ်ပြီး ကိုက်ညီပါက true ကို ပြန်ပို့ပေးပါသည်။
// .local ဖြင့် ဆုံးသော hostname အားလုံးအတွက် request များကို
// ဘရောက်ဇာမှ proxy မဖြတ်ဘဲ တိုက်ရိုက် ချိတ်ဆက်စေပါမည်။
if (shExpMatch(url, "*.local"))
return "DIRECT";
// vpn.domain.com သို့ ချိတ်ဆက်ရန် ကြိုးစားခြင်း သို့မဟုတ်
// http://abcdomain.com/folder/ အောက်ရှိ ဖိုင်/ဖိုဒါများသို့ ချိတ်ဆက်သည့် request များကို
// proxy မပါဘဲ တိုက်ရိုက် ချိတ်ဆက်ပါမည်။
if (shExpMatch(host, "vpn.domain.com") ||
shExpMatch(url, "http://abcdomain.com/folder/*"))
return "DIRECT";
isInNet
ဤ function သည် hostname ၏ IP address ကို စစ်ဆေးပြီး သီးခြား subnet အောက်တွင် တည်ရှိပါက true ကို ပြန်ပို့ပေးပါသည်။ အကယ်၍ hostname ကို argument အဖြစ် ပေးပို့ပါက DNS resolving မှတစ်ဆင့် IP သို့ ပြောင်းလဲဆောင်ရွက်ပေးပါမည်။
// တောင်းဆိုထားသော hostname ၏ IP လိပ်စာသည် (DNS resolving ပြီးနောက်) ပေးထားသော
// IP range အတွင်း ပါဝင်ပါက တိုက်ရိုက် ချိတ်ဆက်ပါမည်။
if (isInNet(dnsResolve(host), "172.16.0.0", "255.240.0.0"))
return "DIRECT";
myIpAddress
လက်ရှိ မိမိ ကွန်ပျူတာ၏ IP လိပ်စာကို ပြန်လည်ပေးပို့ပါသည်။
// မိမိ၏ ကွန်ပျူတာသည် သတ်မှတ်ထားသော IP range အတွင်း ရှိနေပါက proxy 10.10.5.1 (port 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 သည် သတ်မှတ်ထားသော range အတွင်း ပါဝင်ပါက တိုက်ရိုက်
// ချိတ်ဆက်စေပါမည်။
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 တွင် မည်သည့် . (dot) အစက် သင်္ကေတမျှ မပါဝင်ပါက true ကို ပြန်ပို့ပေးပါသည်။ ဥပမာ http://intranet ကဲ့သို့သော အရာမျိုးဖြစ်ပြီး ပုံမှန်အားဖြင့် ပြည်တွင်းကွန်ရက် (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 လိပ်စာကို ကောင်းမွန်စွာ resolve မလုပ်နိုင်ပါက ဘရောက်ဇာကိုယ်တိုင် ခေတ္တရပ်တန့် (freeze) သွားနိုင်ပါသည်။ သတိပြု၍ အသုံးပြုသင့်ပါသည်။
// တောင်းဆိုထားသော hostname ကို DNS ဆာဗာမှ ဖြေရှင်းနိုင်ပါက
// proxy1.example.com proxy မှတစ်ဆင့် တောင်းဆိုပါမည်။
if (isResolvable(host))
return "PROXY proxy1.example.com:8080";
dnsDomainLevels
Hostname ကို စစ်ဆေးပြီး အဆိုပါ စာသားထဲတွင် . (dot) မည်မျှ ပါဝင်သည်ကို ပြန်လည် ပေးပို့ပါသည်။ ဥပမာ ပြည်တွင်း ကွန်ရက် ဝဘ်ဆာဗာများကို ခြွင်းချက်အဖြစ် သတ်မှတ်လိုသောအခါ အသုံးပြုနိုင်ပါသည်။
// hostname တွင် . (dot) အနည်းဆုံး တစ်ခု ပါဝင်နေပါက proxy1.example.com
// proxy မှတစ်ဆင့် ချိတ်ဆက်ပြီး မပါဝင်ပါက တိုက်ရိုက် ချိတ်ဆက်ပါမည်။
if (dnsDomainLevels(host) > 0)
return "PROXY proxy1.example.com:8080";
else
return "DIRECT";
weekdayRange
အချိန်ကို အခြေခံ၍ rule ဖန်တီးရာတွင် အသုံးပြုနိုင်ပြီး ဥပမာ သတ်မှတ်ထားသော နေ့များတွင်သာ proxy ဆက်တင်ကို ပြန်လည်ပေးပို့လိုသောအခါ အသုံးပြုနိုင်ပါသည်။
// တနင်္လာနေ့မှ သောကြာနေ့အတွင်း proxy1.example.com proxy ကို အသုံးပြုစေပြီး
// အခြားအချိန်များတွင် အင်တာနက်သို့ တိုက်ရိုက် ချိတ်ဆက်စေပါမည်။
if (weekdayRange("MON", "FRI"))
return "PROXY proxy1.example.com:8080";
else
return "DIRECT";
dateRange
အချိန်ကို အခြေခံ၍ rule ဖန်တီးရာတွင် အသုံးပြုနိုင်ပြီး ဥပမာ သတ်မှတ်ထားသော လများတွင်သာ proxy ကို အသုံးချလိုသောအခါ အသုံးပြုနိုင်ပါသည်။
// ဇန်နဝါရီလမှ မတ်လအထိ proxy1.example.com proxy ကို အသုံးပြုရန် သတ်မှတ်ပြီး
// အခြားအချိန်များတွင် တိုက်ရိုက် ချိတ်ဆက်ပါမည်။
if (dateRange("JAN", "MAR"))
return "PROXY proxy1.example.com:8080";
else
return "DIRECT";
timeRange
သတ်မှတ်ထားသော အချိန်အပိုင်းအခြားအတွင်း၌သာ proxy ကို အသုံးပြုစေလိုသောအခါ သုံးနိုင်ပါသည်။
// နံနက် ၈ နာရီမှ ညနေ ၆ နာရီအထိသာ proxy1.example.com ကို အသုံးပြုစေပြီး
// အခြားအချိန်များတွင် တိုက်ရိုက် ချိတ်ဆက်ပါမည်။
if (timeRange(8, 18))
return "PROXY proxy1.example.com:8080";
else
return "DIRECT";
alert
ဤ function သည် PAC ပုံစံကို စတင်သတ်မှတ်စဉ်က မပါဝင်ခဲ့သော်လည်း troubleshooting ပြုလုပ်နိုင်ရန်အတွက် Internet Explorer နှင့် Firefox ဘရောက်ဇာများတွင် သတ်မှတ်ထည့်သွင်းပေးထားသော function ဖြစ်ပါသည်။
// ဘရောက်ဇာ၏ error console တွင် DNS resolving ရလဒ်ကို ထုတ်ပေးပါမည်။
resolved_host = dnsResolve(host);
alert(resolved_host);