Поблагодари автора прямо сейчас на странице Спасибо!

Wpad.dat

Материал из Пингвиньи радостей

Перейти к: навигация, поиск

Содержание

Статья о файле автоконфигурации прокси Wpad.dat

Wpad.dat это файл, предназначенный для автоматической конфигурации настроек прокси сервера в браузерах интернет.

Файл Wpad.dat представляет собой JavaScript загружаемый в браузер клиента в момент его старта. Скрипт состоит из одной функции FindProxyForURL, возвращающей адрес прокси-сервера в зависимости от запрашиваемого URL.

Способ передачи файла Wpad.dat определяется клиентом обычно в параметрах "Настройка прокси для доступа в Интернет \ URL автоматической настройки сервиса прокси " - например, при использовании для его раздачи веб-сервера, как http://IP-SERVER:PORT/PATH/wpad.dat .

В скрипте доступны имена хостов определённые в файле /etc/hosts.

Доступные функции

Внутри скрипта 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(<str>, <shexp>)
  возвращает значение true, если <str> соответствует шаблону оболочки <shexp>
  пример
     if (shExpMatch(host, "*.com"))
  isInNet(host, pattern, mask)
  возвращает значение true, если IP-адрес узла <host> соответствует указанному шаблону <pattern> (например, <999.99.9.9>).
  <mask> указывает, какую часть IP-адреса следует сопоставлять (255=сопоставлять, 0=игнорировать)
  пример
     if (isInNet(host, "999.99.9.9", "255.0.255.0"))
  url.substring(0, <country>)
  извлекает указанное количество знаков с начала строки <url>
  пример
     url.substring(0, 4)
  weekdayRange( day1 [, day2] [,"GMT"] )
  возвращает значение true, если текущее время системы попадает в диапазон,
  заданный с использованием параметров <day1> и <day2> (необязательный).
  Необязательный параметр 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";
}

Фильтрация контента

Файл Wpad.dat может быть использован как начальный фильтр http-контента по запрашиваемому имени хоста. При этом способе фильтрации могут быть исключены как HTTP так и HTTPS запросы.

Для фильтрации контента с помощью Wpad.dat

  • в файл добавляются например строки
   proxy_empty = "PROXY 127.0.0.1:3128";       // ссылка на несуществующий прокси
   if ( shExpMatch(url,"*://ads.*"))		{ return proxy_empty; }
   if ( shExpMatch(url,"*://banners.*"))	{ return proxy_empty; }
   if ( shExpMatch(url,"*doubleclick.net/*"))	{ return proxy_empty; }
  • запускается браузер с подключением автоконфигурации прокси
  # chromium --proxy-pac-url=http://IP:PORT/wpad.dat %U    - например для Chromium

Литература

Справочная информация

  • 30.11.2011: Wpad.dat: создание статьи о файле автоконфигурации прокси
  • 30.04.2018: Wpad.dat: добавлен раздел о Фильтрации контента
Личные инструменты