سؤال:
ما هو ملف مسوغات الوصول المحمي (PAC) للوكيل، وهل هناك أي أمثلة؟
البيئة: أجهزة أمان الويب من Cisco
ملاحظة: تشير مقالة قاعدة المعارف هذه إلى البرامج التي لا يتم صيانتها أو دعمها من قبل Cisco. يتم توفير المعلومات كنوع من المجاملة لراحتك. للحصول على مزيد من المساعدة، يرجى الاتصال بمورد البرامج.
إرتباط المرجع: ملفات أمثلة الوكيل الآلي ل JavaScript أو JScript
ملفات أمثلة باستخدام بروكسي آلي أو JavaScript
تقدّم البرامج النصية التالية أمثلة على كيفية استخدام ملف '.pac' لتحديد عنوان URL لوكيل تلقائي. لاستخدام هذه الوظائف، يجب عليك تغيير أسماء الوكيل وأرقام المنافذ وعناوين IP.
- تقوم وظائف isInNet وisResolable وdnsResolve بالاستعلام عن خادم DNS
- تؤدي المراجع لكائنات نموذج الكائن أو خصائصه أو أساليبه إلى فشل ملف التكوين التلقائي للوكيل بصمت. على سبيل المثال، تتسبب المراجع window.open(...) وalert(...) وpassword(...) جميعها في فشل ملف التكوين التلقائي للوكيل على Internet Explorer.
مثال 1: يتصل المضيفون المحليون مباشرة، وتتصل جميع البيئات الأخرى عبر وكيل
تتحقق الدالة التالية من أن المضيف محلي، وإذا كان كذلك، ما إذا كان الاتصال مباشرا. إذا لم يكن اسم المضيف مضيفا محليا، يكون الاتصال من خلال الوكيل (الوكيل).
الدالة FindProxyForURL(url، المضيف)
{
if (isPlainHostName(host))
إرجاع "DIRECT"؛
غير ذلك
إرجاع "الوكيل:80"؛
}
تقوم الدالة isPlainHostName بالتحقق من وجود أي نقاط في اسم المضيف. إذا كان الأمر كذلك، ترجع الدالة false، وإلا ترجع الدالة true.
ملاحظة: من أجل الاتصال المباشر بخادم الويب المحلي، قد تكون هناك حاجة أيضا لمطابقة مجال أو شبكة فرعية. لا يتم إجراء كافة الطلبات على خوادم الويب المحلية باستخدام أسماء المضيف فقط
المثال 2: البيئات المضيفة داخل جدار الحماية تتصل مباشرة، خارج الخوادم المحلية تتصل عبر الوكيل
تتحقق الدالة التالية لمعرفة ما إذا كان المضيف إما اسم مضيف "عادي" (بمعنى أن اسم المجال غير مضمن) أو جزء من مجال معين (.company.com) ولكن اسم المضيف ليس www أو home.
الدالة FindProxyForURL(url، المضيف)
{
إذا ((isPlainHostName(host) ||
DNSdomainIs(المضيف، ".company.com") &
!localHostOrDomainIs(المضيف، www.company.com") &
!localHostOrDoaminIs(المضيف، "home.company.com")
إرجاع "DIRECT"؛
غير ذلك
إرجاع "الوكيل:80"؛
}
ملاحظة:
- يتم تنفيذ الدالة localHostOrDomainIs فقط لعناوين URL في المجال المحلي.
- ترجع الدالة dnsDomainIs true إذا كان مجال اسم المضيف يطابق المجال المعطى.
المثال 3: إذا كان المضيف قابلا للحل، فقم بالاتصال المباشر. وإلا فقم بالاتصال باستخدام وكيل.
تتطلب الوظيفة التالية من خادم DNS محاولة حل اسم المضيف الذي تم تمريره إليها. وإذا كان ذلك ممكنا، فحينئذ يجري صنع اتصال مباشر. وإذا تعذر ذلك، يتم إجراء الاتصال عبر الوكيل. ويكون هذا مفيدا عند إستخدام خادم DNS داخلي لحل جميع أسماء المضيف الداخلية.
الدالة FindProxyForURL(url، المضيف)
{
إذا (isResolable(المضيف))
إرجاع "DIRECT"؛
غير ذلك
إرجاع "الوكيل:80"؛
}
راجع الملاحظة الموجودة في الدالة isResolable في أعلى الصفحة.
المثال 4: إذا كان المضيف موجودا في شبكة فرعية محددة، فقم بالاتصال المباشر. وإلا فقم بالاتصال باستخدام وكيل.
تقوم الدالة التالية بمقارنة نمط عنوان IP وقناع معينين باسم المضيف. وهذا مفيد إذا كان يجب توصيل مضيفين معينين في شبكة فرعية مباشرة وكان يجب توصيل مضيفين آخرين باستخدام وكيل.
الدالة FindProxyForURL(url، المضيف)
{
إذا (isInNet(المضيف، "999.99.9.9"، "255.0.255.0")
إرجاع "DIRECT"؛
غير ذلك
إرجاع "الوكيل:80"؛
}
راجع ملاحظة على وظيفة isInNet في أعلى الصفحة.
الدالة isInNet(المضيف، النمط، القناع) ترجع صحيح إذا كان عنوان IP المضيف يطابق النمط المحدد. يشير القناع إلى أي جزء من عنوان IP يجب مطابقته (255=match، 0=ignore).
المثال 5: تحديد نوع الاتصال استنادا إلى مجال المضيف
تحدد الوظيفة التالية اتصالا مباشرا إذا كان المضيف محليا. إذا كان المضيف غير محلي، تحدد هذه الوظيفة الوكيل الذي سيتم إستخدامه استنادا إلى مجال المضيف. ويكون هذا مفيدا إذا كان اسم مجال المضيف أحد معايير تحديد الوكيل.
الدالة FindProxyForURL(url، المضيف)
{
if (isPlainHostName(host))
إرجاع "DIRECT"؛
وإلا إذا (shExpMatch(المضيف، "*.com")
إرجاع "Proxy comproxy:80"؛
وإلا إذا (shExpMatch(المضيف، "*.edu")
إرجاع "Proxy eUrlProxy:80"؛
غير ذلك
إرجاع "الوكيل"؛
}
الدالة shExpMatch(str، shexp) ترجع صحيح إذا كان str يطابق ال shexp باستخدام أنماط تعبير طبقة.
المثال 6: تحديد نوع الاتصال استنادا إلى البروتوكول الجاري إستخدامه
تستخرج الدالة التالية البروتوكول المستخدم وتقوم بتحديد وكيل وفقا لذلك. إذا لم يتم إجراء أي تطابق على البروتوكول، يتم إجراء اتصال مباشر. ويكون هذا الإجراء مفيدا إذا كان البروتوكول المستخدم أحد معايير تحديد الوكيل.
الدالة FindProxyForURL(url، المضيف)
{
إذا (url.substring(0، 5) == "http:") {
إرجاع "الوكيل:80"؛
}
وإلا إذا (url.substring(0، 4) == "ftp:") {
إرجاع "الوكيل: 80"؛
}
وإلا إذا (url.substring(0، 7) == "gopher:") {
إرجاع "الوكيل الوكيل"؛
}
وإلا إذا (url.substring(0، 6) == "https:") {
إرجاع "Proxy Secproxy:8080"؛
}
غير ذلك {
إرجاع "DIRECT"؛
}
}
تستخرج دالة السلسلة الفرعية العدد المحدد من الأحرف من سلسلة.
المثال 7: تحديد إعداد الوكيل عن طريق التحقق لمعرفة ما إذا كان اسم المضيف يطابق عنوان IP أم لا
تقوم الدالة التالية بتحديد وكيل عن طريق ترجمة اسم المضيف إلى عنوان IP ومقارنته بسلسلة محددة.
الدالة FindProxyForURL(url، المضيف)
{
إذا (dnsResolve(المضيف) == "999.99.99.999") { // = http://proxy
إرجاع "Proxy Secproxy:8080"؛
}
غير ذلك {
إرجاع "الوكيل:80"؛
}
}
راجع ملاحظة على وظيفة DNSresolve في أعلى الصفحة.
المثال 8: إذا تطابقت IP للمضيف مع IP المحدد، فقم بالاتصال عبر الوكيل، وإلا فقم بالاتصال المباشر
الدالة التالية هي طريقة أخرى لعمل تحديد وكيل بناء على تحديد عنوان IP. هذا المثال، على عكس المثال 7، يستخدم إستدعاء الدالة للحصول بشكل صريح على عنوان IP الرقمي (المثال 7 يستخدم دالة dnsResolve لترجمة اسم المضيف إلى عنوان IP رقمي).
الدالة FindProxyForURL(url، المضيف)
{
إذا (myIpAddress() == "999.99.999.99") {
إرجاع "الوكيل:80"؛
}
غير ذلك {
إرجاع "DIRECT"؛
}
}
ترجع وظيفة MyIpAddress عنوان IP (بتنسيق عدد صحيح-dot) للمضيف الذي يعمل المستعرض عليه.
المثال 9: إذا كانت هناك أي نقاط في اسم المضيف، فقم بالاتصال باستخدام وكيل. وإلا، فقم بالاتصال المباشر.
تتحقق الدالة التالية من عدد النقاط الموجودة في اسم المضيف. إذا كانت هناك أي نقاط في اسم المضيف، فقم بإجراء اتصال عبر الوكيل. في حالة عدم وجود نقاط في اسم المضيف، قم بإجراء اتصال مباشر. هذه طريقة أخرى لتحديد أنواع الاتصال استنادا إلى خصائص اسم المضيف.
الدالة FindProxyForURL(url، المضيف)
{
إذا كان (dnsDomainLevels(المضيف) > 0) { // إذا كان عدد النقاط في المضيف > 0
إرجاع "الوكيل:80"؛
}
إرجاع "DIRECT"؛
}
ترجع الدالة dnsDomainLevels عددا صحيحا مساويا لعدد النقاط في اسم المضيف.
مثال 10: تحديد أيام الأسبوع للاتصال عبر الوكيل، أيام أخرى للاتصال المباشر
تحدد الوظيفة التالية نوع الاتصال عن طريق تحديد أيام الأسبوع المناسبة للوكيل. تستخدم الأيام التي لا تقع بين هذه المعلمات اتصالا مباشرا. يمكن أن تكون هذه الدالة مفيدة في الحالات التي قد ترغب في إستخدام وكيل فيها عندما تكون حركة المرور ثقيلة وتسمح باتصال مباشر عندما تكون حركة المرور خفيفة.
الدالة FindProxyForURL(url، المضيف)
{
if(weekdayRange("WED"، "SAT"، "GMT")
إرجاع "الوكيل:80"؛
غير ذلك
إرجاع "DIRECT"؛
}
تقوم الدالة weekdayRange(day1 [،day2] [،gmt] ) بإرجاع ما إذا كان وقت النظام الحالي يقع ضمن النطاق المحدد بواسطة المعلمات اليوم 1، اليوم 2، و GMT. المعلمة الأولى فقط مطلوبة. تفترض معلمة GMT أن قيم الوقت موجودة في توقيت جرينتش المركزي بدلا من المنطقة الزمنية المحلية.
مثال 11: موازنة الأحمال بوظيفة رياضيات بسيطة
الدالة FindProxyForURL(url، المضيف){
Return RandomProxy()؛
}
function randomProxy()
{
switch( math.floor( math.random() *2))
{
الحالة 0: إرجاع "الوكيل 1.1.1.1:3128؛ الوكيل 2.2.2.2؛ الوكيل Direct؛"
الحالة 1: إرجاع "الوكيل 2.2.2.2:3128؛ الوكيل 1.1.1.1؛ الوكيل Direct؛"
}
}
سترى أن الحالات أيضا تنفذ تجاوز الفشل في حالة عدم توفر وكيل واحد.