Как обнаружить прокси de, используемый в pac

В FireFox интернет-соединение сделано через автоматический файл конфигурации прокси "something.pac"

Как я знаю для определенного URL, какой прокси-сервер используется?

Спасибо.

8
задан KirdApe 18 June 2010 в 10:09
поделиться

1 ответ

.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 (хост, шаблон, маска) возвращает ИСТИНА , если IP-адрес хоста соответствует указанному шаблону . Маска указывает, какая часть 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 }

Надеюсь, что это поможет!

7
ответ дан 5 December 2019 в 12:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: