Automatyczne wykrywanie proxy przez MSIE
Mimo iż wszscy klną na Internet Explorera i inne produkty micro$oftu jest to system najczęściej używany na stacjach roboczych. Jedną z funkcji tej przeglądarki jest automatyczne wykrywanie proxy (Web Proxy AutoDiscovery – WPAD). Nie będę tutaj omawiał przydatności tej funkcji gdyż znajdą się jej zwolennicy jak i przeciwnicy, ale skupie się na konfiguracji tej usługi. Jak zwykle raczej nie piszę tego dla osób zupełnie zielonych. Jeżeli chcesz dalej czytać, to wiedz iż potrzebujesz serwera www na którym umiesz/możesz robić virtualhosty oraz umieć/móc modyfikować zawartość domeny w której pracują stacje robocze.
IE podczas uruchamiania wyszukuje w lokalnej domenie hosta o nazwie ‘wpad’ i stara się z niego pobrać plik ‘wpad.dat’ przy użyciu protokołu http. Prościej mówiąc, IE szuka dokumentu http://wpad.lokalnadomena/wpad.dat. Plik ten jest najzwyklejszym skryptem w javascript który zwraca informacje jak ma wykonać połączenie IE. Ale pokolei.
Co to jest lokalna domena? Jest to domena jaką mają ustawione komputery windowsowe we właściwościach TCP/IP na zakładce DNS, lub też domena jaką przydzielamy poprzez DHCP. Najprościej ją sprawdzić z Menu Start / Uruchom / winipcfg. Wtedy widzimy w jakiej domenie pracuje komputer. Załóżmy na potrzeby tego tekstu iż jest to domena ‘domenalokalna.pl’. Tworzymy w tej domenie host wpad wskazujący na serwer WWW na którym robimy virtualhost’a wpad.domenalokalna.pl. Jeżeli to już zrobiliśmy, pozostaje tylko napisać skrypt wpad.dat.
Skrypt ten powinien zawierać funkcje FindProxyURL i zwracać ‘PROXY host:port" albo "DIRECT". Możliwe jest także mieszanie tych odpowiedzi. Najprostszy taki skrypt może wyglądać tak:
function FindProxyForURL(url, host)
{
return "PROXY 217.98.20.195:8080";
}
Taki skrypt informuje aby każde połączenie było wykonywane poprzez proxy 217.98.20.195 na procie 8080. Jak widać do funkcji tej są przekazywane url i http host. Jako że sam niestety nie znam się zbyt dobrze na programowaniu w javascripcie posłużę się przykładem z Supermedii aby opisać bardziej zaawansowany skrypt autokonfiguracji.
function FindProxyForURL(url, host)
{
// Jeżeli próbujemy połączyć się ze stroną www w naszej
// domenie, niech IE robi to bezpośrednio.
if (shExpMatch(url,"*.domenalokalna.pl/*"))
return "DIRECT";
// Jeżeli próbujemy sie połączyć ze stroną w sieci lan
// (adresy prywatne), niech IE robi to też bezpośrednio.
else if (shExpMatch(url,"*://10.*.*.*/*"))
return "DIRECT";
else if (shExpMatch(url,"*://192.168.*.*/*"))
return "DIRECT";
else
{
// Konfiguracja proxy dla konkretnych protokołów
// kolejno http, https, gopher i ftp.
// Wszystkie idą poprzez 217.98.20.195 czyli
// w3cache.tpnet.pl. Ale nic nie stoii na przeszkodzie
// by wyłączyć proxy dla jednego z adresów bądź
// skierować ja na inne proxy. Jeżeli połączenie z proxy nie
// uda się to będziemy starali się łączyć bezpośrednio.
if( url.substring(0, 5) == "http:" )
{
return "PROXY 217.98.20.195:8080; DIRECT";
}
else if( url.substring(0, 6) == "https:" )
{
return "PROXY 217.98.20.195:8080; DIRECT";
}
else if( url.substring(0, 6) == "gopher:" )
{
return "PROXY 217.98.20.195:8080; DIRECT";
}
else if( url.substring(0, 6) == "ftp:" )
{
return "PROXY 217.98.20.195:8080; DIRECT";
}
else
{
// I na koniec regułka żeby w ostateczności
// (nieznany protokół, błąd) była zwracana
// informacja o bezpośrednim połączeniu
return "DIRECT";
}
}
}
Mam nadzieje że komuś te podstawowe informacje się przydadzą na początek.