Это своего рода часть вторая отсюда.
Когда клиенты подключаются к моей сети через VPN, им назначается IP-адрес, который, в свою очередь, дает им параметр 252 от DHCP. Затем автоматическое обнаружение захватывает этот файл
По сути, мне нужен способ для proxy.pac выяснить, подключен ли клиент к VPN-соединению, чтобы он мог разрешить для них ПРЯМОЕ.
Итак, если я сделаю простой var myIp = myipAddress () а затем просто сопоставьте его со списком этих фиксированных адресов, и тогда он будет решен. Однако функция myIpAddress (), похоже, принимает локальный IP-адрес машины (например, 192.168.10.1), а не сетевой адаптер. В моем случае этот локальный адрес - это мой MS Loopback, который необходим для некоторых из моих локальных виртуальных машин. Если я отключу свой адаптер Loopback, он начнет определять правильный адрес. Это не идеальный обходной путь.
Итак, как мне разрешить IP-адрес, который я хочу получить от правильного адаптера?
Заранее спасибо...
К сожалению, получение myIpAddress () верного адреса в Windows делает включает изменение приоритета сетевых адаптеров (в Windows XP это находится в диалоговом окне «Дополнительные параметры ...» меню «Дополнительно» диалогового окна «Сетевые подключения»).
Вот чья-то проблема, похожая на то, что вы видите: http://www.geurtsrus.com/gerke/2005/01/proxy-auto-configuration-blues.html
Возможно, вам лучше определить IP-адрес, который требует проксирования, а не те, которые этого не делают (то есть локальные подсети в компании), и в противном случае предполагать DIRECT.
Другой альтернативой было бы передать клиентам в VPN другую опцию PAC DHCP. Это может быть легко, если ваши пользователи VPN выходят из выделенной подсети, но может быть не так, если они выходят из подсети LAN.
Можно перенаправить wpad.dat на wpad.aspx и найти IP-адрес с помощью ASP:
<%
Dim strClientIP As String
strClientIP = Request.UserHostAddress()
%>
function FindProxyForURL(url, host)
{
//proxy definition
var UseProxy = "PROXY x.x.x.x:8080"
if (isPlainHostName(host)) {return "DIRECT"; }
if (isInNet("<%Response.Write(strClientIP)%>", "x.x.1.0", "255.255.255.0"))
return UseProxy;
else
return "DIRECT";
}
Какой браузер вы используете? У браузеров на основе Mozilla были проблемы с этим, но их было нелегко решить, потому что вызов функции был первоначально определен в предположении, что система была односетевой (что полностью неверно, если вы не отключены от физической сети и не работает только с обратной связью).