3

Я установил ActivePerl и включил PPM на работе, но я не могу подключить его к хранилищу модулей через прокси. Я установил переменную среды

HTTP_PROXY = http://user:pass@proxy.full.name:port

но PPM все еще показывает ошибку 407 Proxy Authentication Required. Я думаю, что это прокси NTLM, но я не уверен.

После этого я получаю ошибку 500: Неверное имя хоста для ppm4.activestate.com. Оказывается, PPM просит мой DNS-сервер разрешить это имя, но мой локальный DNS-сервер не может разрешить такие внешние доменные имена. Только прокси делает это и только для HTTP-трафика ...

Вот скриншот того, что показывает Wireshark (работающий на виртуальной машине BackTrack на той же Windows XP):

Моя коробка Windows - 10.75.82.221. Сервер DNS - 10.7.3.110.

Wireshark снифф

Вот что TraceRoute показывает из Windows:

G:\>tracert ppm4.activestate.com
No se puede resolver el nombre de destino ppm4.activestate.com.

Что значит:

Не удается разрешить ppm4.activestate.com

как и ожидалось.

Как я уже говорил в комментариях, браузер, похоже, не запускает никаких DNS-запросов. Вот снимок экрана Wireshark (из BT), который показывает доступ к www.google.es из Firefox (из WXP):

Моя коробка Windows - 10.75.82.221 . Прокси - 10.7.8.46.

Wireshark снифф

Как видите, при обращении через браузер DNS-запросы вообще отсутствуют.

Мне кажется, это просто функция безопасности, и мне нужно будет попросить разрешения разрешить мне использовать инструмент PPM ActiveState ... что неправдоподобно, даже если большинство (99%) скриптов, которые я здесь делаю, предназначены для ускорения работа.

5 ответов5

2

Решение ошибки 407 описано в perl.org Вопросы и ответы :

В: Даже когда http_proxy настроен на правильный сервер с правильными учетными данными (используя соглашение username:password@server.tld:port), я все еще не могу установить пакеты через cpan. «Сбой LWP с сообщением кода [407] [Требуется проверка подлинности прокси-сервера (ISA-серверу требуется авторизация для выполнения запроса. Доступ к службе веб-прокси запрещен.)]»

A: CPAN не поддерживает аутентификацию NTLM, и трудно заставить Authen::NTLM работать с CPAN. В итоге я использовал ntlmaps в качестве локального прокси для аутентификации NTLM.

Первое, что вам нужно сделать, это получить последнюю версию NTLMAPS из репозитория svn, распаковать ее куда-нибудь. Далее вам нужно получить последнюю версию Python и установить ее. Откройте NTLMAPS 'server.cfg, установите PARENT_PROXY в качестве адреса или IP-адреса вашего прокси-сервера, PARENT_PROXY_PORT в качестве порта, на котором работает прокси (обычно 80 или 8080), NT_DOMAIN для вашего домена и USER для вашего имени пользователя.

Запустите runserver.bat. Он спросит ваш пароль, введите его и нажмите Enter. Затем вы должны настроить cpan для использования NTLMAPS в качестве прокси. Перейдите в клубнику \perl \lib \CPAN и откройте Config.pm. Установите для http_proxy значение http://localhost:5865. Запустите CPAN и используйте его как обычно. Теперь вам нужно только запустить NTLMAPS перед запуском CPAN, чтобы заставить его работать правильно.

Просто короткое примечание:вам может потребоваться принудительная аутентификация LM + NT, а не LM; Для этого откройте файл NTLMAPS server.cfg, установите для NT_PART значение 1 и для NTLM_FLAGS значение 07820000.

Удаление HTTP_PROXY и изменение CPAN/Config.pm, как указано, может решить проблему.

Резюме комментариев ниже:

Исследование дампов Wireshark показывает, что ActivePerl выдает DNS-запросы, которые DNS-сервер возвращает как неизвестные. Возможные решения:

  1. Реконфигурация DNS-сервера (невозможно для автора)
  2. Запуск запроса на сайте сообщества ActiveState, чтобы остановить эти бесполезные запросы (без каких-либо гарантий скорейшего облегчения)
  3. Загрузите и установите модули вручную (осталось только практическое решение).
1

Вот альтернатива использованию NTLMAPS + Python (как описано выше harrymc). Идея очень похожа, но более "обтекаема":

  • Установите Fiddler.
  • Настройте PPM для использования Fiddler в качестве прокси. В командной строке введите:

    set http_proxy=http://127.0.0.1:8888
    
  • Обязательно сначала откройте любую интернет-страницу из любого браузера (это создаст аутентифицированный сеанс между Fiddler и вашим корпоративным прокси-сервером).

  • Попробуйте PPM.

Посетите сайт сообщества ActiveState для более подробной информации.

Если это все еще не работает, вам может потребоваться включить pac-скрипты в fiddler.

Сервис -> Параметры Fiddler -> Подключения

Отметьте «Использовать PAC-скрипт»

1

Это выстрел в темноте ... никто не упоминал, что пробовал это, но похоже, что у всех нет идей ... если это правда:

"Turns out PPM asks my DNS server to resolve that name, but my local DNS server cannot resolve such external domain names."

Затем отредактируйте:

C:\Windows\System32\Drivers\etc\hosts

добавьте строку:

204.244.102.19  ppm4.activestate.com

Посмотрите, если это имеет значение.


Для устранения неполадок ntlmaps:

В server.cfg DEBUG и BIN_DEBUG есть две опции, если у вас есть двойники с сервером, поэтому установите эти опции на DEBUG:1 и BIN_DEBUG:1 непосредственно перед запросом проблемной страницы (или ресурса). Вы должны перезапустить прокси-сервер, чтобы перечитать server.cfg. Это даст вам 3 файла журнала на HTTP-запрос (если быть точным на каждое соединение), например, 127.0.0.1-1048, 127.0.0.1-1048.bin.client и 127.0.0.1-1048.bin.rserver. В первом есть информация о том, что сделал APS, два других содержат необработанный трафик от клиента и от прокси.

http://ntlmaps.sourceforge.net/

1

Если это NTLM, вам понадобится модуль Perl NTLM . В документации ActiveState PPM говорится, что вы можете получить пакет ppmx из репозитория, но я не смог найти такую ссылку. Однако вы все равно можете скачать файлы ppd и tar.gz и установить их:

wget http://ppm4.activestate.com/MSWin32-x86/5.12/1205/N/NB/NBEBOUT/NTLM-1.09.ppd
wget http://ppm4.activestate.com/MSWin32-x86/5.12/1205/N/NB/NBEBOUT/NTLM-1.09.tar.gz
ppm install NTLM-1.09.ppd

Также обратите внимание, что если ваш компьютер принадлежит домену Windows, вам не нужно явно указывать учетные данные - http://proxy.full.name:port должно быть достаточно для NTLM/Kerberos, в дополнение к большей безопасности.


Недавно программное обеспечение Microsoft переключилось с NTLM на Kerberos - хотя обычно прокси-серверы поддерживают оба, может случиться так, что NTLM будет отключен в вашем. Существует немного документации по прокси Kerberos с PPM, но HTTP-Negotiate может стоить попробовать, если вы не можете заставить работать NTLM.

0

Вместо того, чтобы делать set http_proxy = http://user:pass@proxy.full.name:port, просто попробуйте установить прокси без имени пользователя и пароля.

Просто делать:

установить http_proxy = http://proxy.full.name:port

Причина: я где-то читал, что для последней версии Perl 5.22 аутентификация через прокси не нужна. Это сработало для меня как волшебство.

Надеюсь, это решит вашу проблему.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .