Frage:
Was ist eine Proxy-Pac-Datei, und gibt es Beispiele?
Umgebung: Cisco Web Security Appliance
Hinweis: Dieser Knowledge Base-Artikel bezieht sich auf Software, die nicht von Cisco gewartet oder unterstützt wird. Die Informationen werden Ihnen gerne zur Verfügung gestellt. Wenden Sie sich für weitere Unterstützung an den Softwareanbieter.
Referenzlink: Beispieldateien für JavaScript oder JScript-Autoproxy
JavaScript- oder JScript-Autoproxy-Beispieldateien
Die folgenden Skripte geben Beispiele, wie mithilfe einer PAC-Datei eine Auto-Proxy-URL angegeben werden kann. Zur Verwendung dieser Funktionen müssen Sie die Proxy-Namen, Portnummern und IP-Adressen ändern.
- Die Funktionen isInNet, isResolvable und dnsResolve fragen einen DNS-Server ab
- Verweise auf Objekte, Eigenschaften oder Methoden des Objektmodells führen dazu, dass die automatische Proxykonfigurationsdatei im Hintergrund fehlschlägt. Beispielsweise führen die Verweise window.open(...), alert(...) und password(...) dazu, dass die Proxy-Autokonfigurationsdatei in Internet Explorer fehlschlägt.
Beispiel 1: Lokale Hosts stellen eine direkte Verbindung her, alle anderen stellen eine Verbindung über Proxy her
Die folgende Funktion überprüft, ob der Hostname ein lokaler Host ist und ob die Verbindung direkt ist. Wenn der Hostname kein lokaler Host ist, erfolgt die Verbindung über den Proxy (Proxy).
Funktion FindProxyForURL(url, host)
{
if ( isPlainHostName(host) )
return "DIRECT";
Sonst
return "PROXY proxy:80";
}
Die isPlainHostName-Funktion überprüft, ob der Hostname Punkte enthält. Ist dies der Fall, gibt sie false zurück. Andernfalls gibt die Funktion true zurück.
Hinweis: Für eine direkte Verbindung zum lokalen Webserver kann auch eine Domain- oder Subnetzübereinstimmung erforderlich sein. Nicht alle Anfragen an lokale Webserver werden nur mit Hostnamen durchgeführt
Beispiel 2: Hosts innerhalb der Firewall stellen eine direkte Verbindung her, externe lokale Server stellen eine Verbindung über Proxy her
Die folgende Funktion überprüft, ob der Host entweder ein "einfacher" Hostname (d. h. der Domänenname ist nicht enthalten) oder Teil einer bestimmten Domäne (.company.com) ist, der Hostname jedoch weder www noch home ist.
Funktion FindProxyForURL(url, host)
{
if ((isPlainHostName(host) ||
dnsDomainIs(host, ".company.com")) &&
!localHostOrDomainIs(host, "www.company.com") &&
!localHostOrDomainIs(host, "home.company.com"))
return "DIRECT";
Sonst
return "PROXY proxy:80";
}
Anmerkung:
- Die Funktion localHostOrDomainIs wird nur für URLs in der lokalen Domäne ausgeführt.
- Die dnsDomainIs-Funktion gibt true zurück, wenn die Domäne des Hostnamens mit der angegebenen Domäne übereinstimmt.
Beispiel 3: Wenn der Host auflösbar ist, stellen Sie eine direkte Verbindung her. Andernfalls stellen Sie eine Verbindung über einen Proxy her.
Die folgende Funktion fordert den DNS-Server auf, den an ihn übergebenen Hostnamen aufzulösen. Wenn es möglich ist, wird eine direkte Verbindung hergestellt. Wenn dies nicht möglich ist, wird die Verbindung über den Proxy hergestellt. Dies ist nützlich, wenn ein interner DNS-Server zum Auflösen aller internen Hostnamen verwendet wird.
Funktion FindProxyForURL(url, host)
{
if (isResolvable(host))
return "DIRECT";
Sonst
return "PROXY proxy:80";
}
Siehe Hinweis zur Funktion isResolvable oben auf der Seite.
Beispiel 4: Wenn sich der Host im angegebenen Subnetz befindet, stellen Sie eine direkte Verbindung her. Andernfalls stellen Sie eine Verbindung über einen Proxy her.
Die folgende Funktion vergleicht ein bestimmtes IP-Adressmuster und eine bestimmte IP-Adressmaske mit dem Hostnamen. Dies ist nützlich, wenn bestimmte Hosts in einem Subnetz direkt und andere über einen Proxy verbunden werden sollen.
Funktion FindProxyForURL(url, host)
{
if (isInNet(host, "999.99.9.9", "255.0.255.0"))
return "DIRECT";
Sonst
return "PROXY proxy:80";
}
Siehe Hinweis zur isInNet-Funktion oben auf der Seite.
Die isInNet-Funktion (host, pattern, mask) gibt true zurück, wenn die IP-Adresse des Hosts mit dem angegebenen Muster übereinstimmt. Die Maske gibt an, welcher Teil der IP-Adresse übereinstimmen muss (255=übereinstimmen, 0=ignorieren).
Beispiel 5: Bestimmen des Verbindungstyps anhand der Hostdomäne
Die folgende Funktion gibt eine direkte Verbindung an, wenn der Host lokal ist. Wenn der Host nicht lokal ist, bestimmt diese Funktion anhand der Hostdomäne, welcher Proxy verwendet werden soll. Dies ist nützlich, wenn der Hostdomänenname eines der Kriterien für die Proxyauswahl ist.
Funktion FindProxyForURL(url, host)
{
if ( isPlainHostName(host) )
return "DIRECT";
else if (shExpMatch(host, "*.com"))
return "PROXY comproxy:80";
else if (shExpMatch(host, "*.edu"))
return "PROXY eduproxy:80";
Sonst
return "PROXY proxy";
}
Die shExpMatch(str, shexp)-Funktion gibt true zurück, wenn str mit Shellausdrucksmustern mit dem Shexp übereinstimmt.
Beispiel 6: Bestimmen des Verbindungstyps anhand des verwendeten Protokolls
Die folgende Funktion extrahiert das verwendete Protokoll und wählt einen Proxy entsprechend aus. Wenn keine Übereinstimmung mit dem Protokoll erzielt wird, wird eine direkte Verbindung hergestellt. Dies ist nützlich, wenn das verwendete Protokoll eines der Kriterien für die Proxy-Auswahl ist.
Funktion FindProxyForURL(url, host)
{
if (url.substring(0, 5) == "http:") {
return "PROXY proxy:80";
}
else if (url.substring(0, 4) == "ftp:") {
return "PROXY fproxy:80";
}
else if (url.substring(0, 7) == "gopher:") {
return "PROXY gproxy";
}
else if (url.substring(0, 6) == "https:") {
return "PROXY secproxy:8080";
}
else {
return "DIRECT";
}
}
Die Teilzeichenfolgenfunktion extrahiert die angegebene Anzahl von Zeichen aus einer Zeichenfolge.
Beispiel 7: Bestimmen Sie die Proxyeinstellung, indem Sie überprüfen, ob der Hostname mit der IP-Adresse übereinstimmt.
Die folgende Funktion trifft eine Proxy-Auswahl, indem sie den Hostnamen in eine IP-Adresse übersetzt und mit einer angegebenen Zeichenfolge vergleicht.
Funktion FindProxyForURL(url, host)
{
if (dnsResolve(host) == "999.99.99.999") { // = http://proxy
return "PROXY secproxy:8080";
}
else {
return "PROXY proxy:80";
}
}
Siehe Hinweis zur dnsResolve-Funktion oben auf der Seite.
Beispiel 8: Wenn die Host-IP mit der angegebenen IP übereinstimmt, stellen Sie eine Verbindung über den Proxy her, andernfalls stellen Sie eine direkte Verbindung her
Die folgende Funktion ist eine weitere Möglichkeit, eine Proxy-Auswahl basierend auf der Angabe einer IP-Adresse zu treffen. In diesem Beispiel wird anders als in Beispiel 7 der Funktionsaufruf verwendet, um die numerische IP-Adresse explizit abzurufen (Beispiel 7 verwendet die dnsResolve-Funktion, um den Hostnamen in die numerische IP-Adresse zu übersetzen).
Funktion FindProxyForURL(url, host)
{
if (myIpAddress() == "999.99.999.99") {
return "PROXY proxy:80";
}
else {
return "DIRECT";
}
}
Die Funktion myIpAddress gibt die IP-Adresse (im Ganzzahlpunktformat) des Hosts zurück, auf dem der Browser ausgeführt wird.
Beispiel 9: Wenn der Hostname Punkte enthält, stellen Sie eine Verbindung über einen Proxy her. Andernfalls stellen Sie eine direkte Verbindung her.
Die folgende Funktion überprüft, wie viele Punkte im Hostnamen enthalten sind. Wenn der Hostname Punkte enthält, stellen Sie eine Verbindung über den Proxy her. Wenn der Hostname keine Punkte enthält, stellen Sie eine direkte Verbindung her. Dies ist eine weitere Möglichkeit, Verbindungstypen auf der Grundlage von Hostnameneigenschaften zu bestimmen.
Funktion FindProxyForURL(url, host)
{
if (dnsDomainLevels(host) > 0) { // if the number of dots in host > 0
return "PROXY proxy:80";
}
return "DIRECT";
}
Die dnsDomainLevels-Funktion gibt eine ganze Zahl zurück, die der Anzahl der Punkte im Hostnamen entspricht.
Beispiel 10: Geben Sie die Wochentage an, an denen eine Verbindung über den Proxy hergestellt werden soll, andere Tage, an denen eine direkte Verbindung hergestellt werden soll
Die folgende Funktion bestimmt den Verbindungstyp durch Angabe der Wochentage, die für einen Proxy geeignet sind. Tage, die nicht zwischen diesen Parametern liegen, verwenden eine direkte Verbindung. Diese Funktion kann in Situationen nützlich sein, in denen Sie bei starkem Datenverkehr einen Proxy verwenden und bei geringem Datenverkehr eine direkte Verbindung zulassen möchten.
Funktion FindProxyForURL(url, host)
{
if(weeklyRange("WED", "SAT", "GMT"))
return "PROXY proxy:80";
Sonst
return "DIRECT";
}
Die Funktion weekRange(day1 [,day2] [,GMT] ) gibt zurück, ob die aktuelle Systemzeit in den Bereich fällt, der durch die Parameter day1, day2 und GMT angegeben wird. Nur der erste Parameter ist erforderlich. Der GMT-Parameter geht davon aus, dass die Zeitwerte in der Greenwich Mean Time und nicht in der lokalen Zeitzone liegen.
Beispiel 11: Lastenausgleich mit einer einfachen Mathematikfunktion
Funktion FindProxyForURL(url, host){
return randomProxy();
}
function randomProxy()
{
switch( Math.floor( Math.random() *2))
{
case 0: return "PROXY 1.1.1.1:3128; PROXY 2.2.2; PROXY DIRECT;"
Fall 1: return "PROXY 2.2.2.2:3128; PROXY 1.1.1; PROXY DIRECT;"
}
}
Sie werden sehen, dass die Gehäuse auch einen Failover implementieren, falls ein Proxy nicht verfügbar ist.