====== Описание параметров файла автоконфигурации прокси Wpad.dat ====== Файл Wpad.dat это файл предназначенный для автоматической конфигурации прокси сервера в браузерах клиентов. Как правило он располагается в корне www-сервера, например /var/www (apache2). Файл представляет собой javascript загружаемый в браузер клиента в момент его старта. Скрипт состоит из одной функции возвращающей адрес прокси-сервера в зависимости от URL открываемого в браузере. В скрипте доступны имена хостов определённые в файле /etc/hosts. Для получения дополнительной информации смотри статью Proxy auto-config. ====== Доступные функции ====== Внутри скрипта Wpad.dat доступны следующие функции * isResolvable(host) запрос имени хоста (прверка существования) на DNS-сервере пример if (isResolvable(host)) * dnsResolve(host) запрос DNS-сервера для перевода имени в ip пример if (dnsResolve(host) == "999.99.99.999") * myIpAddress() возвращает IP-адрес (состоящий из целых чисел и точек) узла, на котором запущен браузер пример if (myIpAddress() == "999.99.999.99") * isPlainHostName(host) проверяет, содержатся ли точки в имени узла Если точка найдена, то возвращается значение false; если нет, возвращается значение true пример if (isPlainHostName(host)) * dnsDomainLevels(host) возвращает целое число, равное количеству точек в имени узла пример if (dnsDomainLevels(host) > 0) * dnsDomainIs(host,".company.com") возвращает значение true, если домен из имени узла совпадает с заданным доменом пример if (isPlainHostName(host) || dnsDomainIs(host, ".company.com")) * localHostOrDomainIs(host, "www.company.com") возвращает значение true, если домен из имени узла совпадает с заданным доменом (?) выполняется только для URL-адресов, относящихся к локальному домену пример if (!localHostOrDomainIs(host, "www.company.com")) * shExpMatch(, ) возвращает значение true, если соответствует шаблону оболочки пример if (shExpMatch(host, "*.com")) * isInNet(host, pattern, mask) возвращает значение true, если IP-адрес узла соответствует указанному шаблону (например, <999.99.9.9>). указывает, какую часть IP-адреса следует сопоставлять (255=сопоставлять, 0=игнорировать) пример if (isInNet(host, "999.99.9.9", "255.0.255.0")) * url.substring(0, ) извлекает указанное количество знаков с начала строки пример url.substring(0, 4) * weekdayRange( day1 [, day2] [,"GMT"] ) возвращает значение true, если текущее время системы попадает в диапазон, заданный с использованием параметров и (необязательный). Необязательный параметр GMT указывает, что задано не местное время, а время по Гринвичу. пример if(weekdayRange("WED", "SAT", "GMT")) * dateRange(day1 [,month1] [,year1] [,day2] [,month2] [,year2] [,gmt] ) day - число дня месяца между 1 и 31 month - строка: JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC year - полный (четырёхзначный) год gmt - зона "GMT" (по Гринвичу) примеры dateRange(1) true on the first day of each month, local timezone. dateRange(1, "GMT") true on the first day of each month, GMT timezone. dateRange(1, 15) true on the first half of each month. dateRange(24, "DEC") true on 24th of December each year. dateRange(24, "DEC", 1995) true on 24th of December, 1995. dateRange("JAN", "MAR") true on the first quarter of the year. dateRange(1, "JUN", 15, "AUG") true from June 1st until August 15th, each year (including June 1st and August 15th). dateRange(1, "JUN", 15, 1995, "AUG", 1995) true from June 1st, 1995, until August 15th, same year. dateRange("OCT", 1995, "MAR", 1996) true from October 1995 until March 1996 (including the entire month of October 1995 and March 1996). dateRange(1995) true during the entire year 1995. dateRange(1995, 1997) true from beginning of year 1995 until the end of year 1997. * timeRange(hour1 [,min1] [,sec1] [,hour2] [,min2] [,sec2] [,gmt] ) hour - число часа от 0 до 23 min - число минут от 0 до 59 sec - число секунд от 0 до 59 gmt - зона "GMT" (по Гринвичу) примеры timerange(12) true from noon to 1pm. timerange(12, 13) same as above. timerange(12, "GMT") true from noon to 1pm, in GMT timezone. timerange(9, 17) true from 9am to 5pm. timerange(8, 30, 17, 00) true from 8:30am to 5:00pm. timerange(0, 0, 0, 0, 0, 30) true between midnight and 30 seconds past midnight. Структура файла Файл wpad.dat имеет следующую структуру function FindProxyForURL(url, host) { // где // url - URL-адрес обращения введённые в строке ввода url // host - имя узла, выделенное из URL-адреса // это формируемые браузером строки и передаваемые функции в виде параметров // в функции могут быть определены переменные ip_host = dnsResolve(host); ip_localnet = "192.168.0.0"; ip_localhost = "127.0.0.1"; proxy_general = "PROXY gwhost.my:3128"; proxy_local = "PROXY localhost:3128"; // далее следует установка правил фильтрации запросов URL // пример правил для получения внутренних ресурсов локальной сети минуя прокси if (shExpMatch( host, "192.168.0.*" ) || shExpMatch( host, "127.*" ) || shExpMatch( host, "localhost" ) || shExpMatch( host, "*.my" ) || isPlainHostName( host ) || dnsDomainIs( host, ".debian.my" )) { return "DIRECT"; } // пример правила по виду запрашиваемого url if (shExpMatch( url, "http://tdkare.ru/*" )) { return proxy_general; } // пример правилаа по протоколу if (shExpMatch(url, "http:*") || shExpMatch(url, "https:*") || shExpMatch(url, "ftp:*") || shExpMatch(url, "socks:*")) { return proxy_local; } // установка прокси если предыдущие правила не выполнены return "PROXY localhost:8888; DIRECT"; }