.pac файл - это просто ECMAscript - он же JavaScript.Проверьте статью в википедии о формате файла.
Если вы скопируете код PAC, вы можете обработать его, чтобы увидеть, какой прокси-сервер используется на основе целевого URL.Если вам нравится, вы можете поместить скрипт в веб-страницу (локально), чтобы создать инструмент для локальной оценки.
Редактировать:
В качестве альтернативы методу, который я начал рекомендовать,Вы можете проверить PACTester , доступный в Google Code.Это позволит вам быстро протестировать ряд параметров.
Если у вас есть доступный .Net и вы хотите поиграть с C #, тогда вы можете прочитать эту статью на MSDN , в которой есть кодможно использовать аналогично описанному выше.
Чтобы расширить исходный метод, описанный выше, существует ряд функций, которые могут (и обычно есть) обеспечиваться браузером хоста.Основная функция, которая должна быть реализована в файле pac
: FindProxyForUrl()
.Это принимает два параметра: URL и хост (хост, полученный из имени URL).«Предоставляемые» функции включают в себя: isInNet()
, localHostOrDomainIs()
, isPlainHostName()
, isResolvable()
и т. Д.
Если вы работаете в среде Microsoft, вы можете проверить эту страницу наTechnet , который описывает формат .pac с некоторыми полезными примерами.
Согласно документации Microsoft для isInNet()
:
Функция isInNet(host, pattern, mask)
возвращает TRUE
, еслиIP-адрес хоста соответствует указанному pattern
.mask
указывает, какая часть IP-адреса должна совпадать (255 = совпадение, 0 = игнорирование).
Если вы хотите получить техническую информацию, вот исходный код Mozilla для реализации сервисов, связанных с автоматической настройкой прокси.Он определяет код JS для isInNet()
как:
200 function isInNet(ipaddr, pattern, maskstr) {
201 var test = /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/(ipaddr);
202 if (test == null) {
203 ipaddr = dnsResolve(ipaddr);
204 if (ipaddr == null)
205 return false;
206 } else if (test[1] > 255 || test[2] > 255 ||
207 test[3] > 255 || test[4] > 255) {
208 return false; // not an IP address
209 }
210 var host = convert_addr(ipaddr);
211 var pat = convert_addr(pattern);
212 var mask = convert_addr(maskstr);
213 return ((host & mask) == (pat & mask));
214
215 }
Надеюсь, это поможет!