Перейти к основному содержимому

Синтаксис PAC (Proxy auto-config)

к сведению

Если в документе есть ошибки или у вас есть предложения, оставьте сообщение на форуме Mudfish (https://forums.mudfish.net). Примеры и пояснения ниже переведены или подготовлены на основе материалов следующих сайтов.

Браузерное расширение Mudfish поддерживает формат файлов PAC (Proxy auto-config).

Функции PAC​

Браузеры с поддержкой PAC обычно поддерживают функции стандартного формата, определённого Netscape.

Однако эти функции обычно выполняются в песочнице с жёсткими ограничениями. Например, доступ к сведениям User Agent полностью запрещён.

Ниже описаны функции, разрешённые в песочнице.

dnsDomainIs​

Проверяет имя хоста и возвращает true при совпадении. Обычно используется для проверки отдельных имён хостов, добавляемых в исключения.

   // Если имя хоста — google.com или его поддомен
// (например, maps.google.com или www.google.com),
// браузер подключается напрямую, без прокси.

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

shExpMatch​

Сравнивает имя хоста или URL со строкой, заданной выражением оболочки, и возвращает true при совпадении.

   // Для запросов к именам хостов, оканчивающимся на .local,
// браузер подключается напрямую, без прокси.

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​

Проверяет IP-адрес хоста и возвращает true, если он находится в указанной подсети. Если аргументом передано имя хоста, для преобразования в IP-адрес выполняется DNS-запрос.

   // Если IP-адрес запрошенного хоста после разрешения DNS
// находится в указанной подсети, подключение выполняется напрямую.

if (isInNet(dnsResolve(host), "172.16.0.0", "255.240.0.0"))
return "DIRECT";

myIpAddress​

Возвращает IP-адрес текущего компьютера.

   // Если компьютер находится в указанной подсети,
// запросы идут через прокси 10.10.5.1 на порту 8080.

if (isInNet(myIpAddress(), "10.10.1.0", "255.255.255.0"))
return "PROXY 10.10.5.1:8080";

dnsResolve​

Преобразует имя хоста в IP-адрес через DNS.

   // Если 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​

Возвращает true, если имя хоста не содержит точек. Например, http://intranet. Обычно применяется при доступе к веб-адресам внутренней сети.

   // При запросе простого имени хоста, например http://intranet/
// или http://webserver-name01/, подключение выполняется напрямую.

if (isPlainHostName(host))
return "DIRECT";

localHostOrDomainIs​

Проверяет имя хоста и возвращает true, если части имени хоста совпадают.

   // Если запрошено имя хоста «www» или «www.google.com»,
// подключение выполняется напрямую.

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

isResolvable​

Преобразует имя хоста в IP-адрес и возвращает true при успехе.

Если разрешение доменного имени не удаётся, браузер может ненадолго зависнуть. Используйте эту функцию осторожно.

   // Если DNS-сервер может разрешить запрошенное имя хоста,
// запрос идёт через прокси proxy1.example.com.

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

dnsDomainLevels​

Возвращает число точек в имени хоста. Например, можно использовать для исключения веб-серверов внутренней сети.

   // Если имя хоста содержит хотя бы одну точку, запрос идёт
// через 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​

Используется, если прокси должен работать только в определённое время суток.

   // С 8 утра до 6 вечера используется прокси proxy1.example.com,
// в остальное время — прямое подключение.

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

alert​

Этой функции не было в первоначальном определении PAC, но она добавлена в Internet Explorer и Firefox для устранения неполадок.

   // Вывести результат разрешения DNS в консоль ошибок браузера.

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