Eine Proxy Auto-Config-Datei (PAC Datei) ist eine nicht mehr wegzudenkende Datei, vor allem bei Unternehmen. Sie ist dafür zuständig, dass Webbrowser und andere Software automatisch den passenden Proxy Server für eine gewünschte URL finden können. Diese proxy.pac kann sehr einfach, aber auch sehr komplex sein. Es gibt viele Möglichkeiten eine PAC Datei zu bauen. Wir geben hier einige Anregungen und PAC Datei Beispiele.

PAC Datei erstellen / PAC Datei Beispiele
In einem früheren Beitrag wird erklärt, wie man eine proxy.pac per IIS Webserver bereitstellen kann. Aber davor brauchen wir natürlich erst einmal eine PAC Datei. Hier zeigen wir einige Beispiele für PAC Dateien.
Information: PAC Dateien basieren auf JavaScript.
[thrive_text_block color=”light” headline=”Direktes Verbinden bei lokalem Host”]
Hier kann der Host eine direkte Verbindung herstellen, wenn es sich um einen lokalen Host handelt. Wenn er nicht lokal ist, muss er über den Proxy gehen. Mit der Funktion isPlainHostName
wird geprüft, ob der Hostname Punkte “.” enthält. Wenn der Host Punkte enthält, ist er NICHT lokal.
function FindProxyForURL(url, host) { if (isPlainHostName(host)) return "DIRECT"; else return "PROXY proxy:80"; }
[/thrive_text_block]
[thrive_text_block color=”light” headline=”Direktes Verbinden bei einem Host innerhalb der Firewall”]
In diesem Fall kann der Host eine direkte Verbindung herstellen, wenn der Host sich innerhalb der Firewall befindet. Falls nicht, muss über den Proxy gegangen werden. Die Funktion localHostOrDomainIs
wird nur für eine URL in der lokalen Domäne ausgeführt.
function FindProxyForURL(url, host) { if ((isPlainHostName(host) || dnsDomainIs(host, ".yourcompany.com")) && !localHostOrDomainIs(host, "www.yourcompany.com") && !localHostOrDoaminIs(host, "intranet.yourcompany.com")) return "DIRECT"; else return "PROXY proxy:80"; }
[/thrive_text_block]
[thrive_text_block color=”light” headline=”Direktes Verbinden bei auflösbarem Hostnamen”]
Wenn der Hostname aufgelöst werden kann, wird eine direkte Verbindung hergestellt. Wenn nicht -> PROXY. Die Funktion isResolvable
fragt bei einem DNS Server an.
function FindProxyForURL(url, host) { if (isResolvable(host)) return "DIRECT"; else return "PROXY proxy:80"; }
[/thrive_text_block]
[thrive_text_block color=”light” headline=”Direktes Verbinden, wenn sich der Host in einem angegebenen Subnetz befindet”]
Hier kann der Host sich direkt verbinden, falls er sich ein einem angegebenen Subnetz befindet. Die Funktion isInNet
gibt “true” zurück, wenn die IP des Hosts mir dem angegebenen Muster übereinstimmt. Die Vorlage gibt an, welche IP Blöcke verglichen werden soll. In diesem Beispiel ist “255” eine Übereinstimmung, die “0” wird ignoriert.
function FindProxyForURL(url, host) { if (isInNet(host, "999.99.9.9", "255.0.255.0")) return "DIRECT"; else return "PROXY proxy:80"; }
[/thrive_text_block]
[thrive_text_block color=”light” headline=”Verbindungstyp anhand des Protokolls”]
Hier wird geprüft welches Protokoll angefordert ist. Egal ob http, https, ftp, etc. Falls keine Übereinstimmung statt findet, wird direkt verbunden. Die Funktion substring
extrahiert die angegebene Anzahl von Zeichen aus der Zeichenfolge. (Beispiel: http = 5, https = 6)
function 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, 6) == "https:") { return "PROXY secureproxy:8080"; } else { return "DIRECT"; } }
[/thrive_text_block]
[thrive_text_block color=”light” headline=”Verbindungstyp anhand der Domäne”]
In diesem Fall wird nachgesehen, welche Domainendung die angesurfte Seite hat. die Funktion shExpMatch
prüft dies.
function 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"; else return "PROXY proxy"; }
[/thrive_text_block]
[thrive_text_block color=”light” headline=”Verbinden, wenn bestimmter Wochentag”]
Es kann sogar geprüft werden, an welchem Wochentag wie verbunden wird. weekdayRange
definiert die Tage. Der Parameter “GMT” besagt, dass die Zeitwerte der Greenwich Mean Time und nicht der lokalen Zeitzone entsprechen.
function FindProxyForURL(url, host) { if(weekdayRange("WED", "SAT", "GMT")) return "PROXY proxy:80"; else return "DIRECT"; }
[/thrive_text_block]
Zum Schluss noch eine relativ komplexe PAC Datei, in der viele Dinge kombiniert werden und viele Werte überprüft werden. Hier wird sogar mit Variablen gearbeitet 🙂
function FindProxyForURL(url, host) { // variable strings to return var proxy_yes = "PROXY 10.4.5.20:8080"; var proxy_no = "DIRECT"; var resolved_ip = dnsResolve(host); // If a specific URL needs to bypass the proxy then send traffic direct. if (shExpMatch(url, "*.domain.local*")) { return proxy_no; } if (shExpMatch(url, "*.dmshm.local*")) { return proxy_no; } if (shExpMatch(url, "*rms.domain.com.au*")) { return proxy_no; } if (shExpMatch(url, "*.domain.net.au*")) { return proxy_no; } if (isInNet(resolved_ip, "10.0.0.0", "255.0.0.0")) { return proxy_no; } // If the source IP is in VIC then send traffic via the proxy if (isInNet(myIpAddress(), "10.3.0.0", "255.255.0.0"))return proxy_yes; // If the source IP is in NSW then send traffic via the proxy if (isInNet(myIpAddress(), "10.2.0.0", "255.255.0.0"))return proxy_yes; // If the proxy fails or the request doesn't meet any of the above criteria then send the traffic direct elsereturn "DIRECT"; }