Синтаксис 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);