Proxy Auto Config - Proxy Server per Skript setzen

    Jeder Laptop-User, der im Firmennetzwerk einen Proxy Server verwenden muss, kennt die Problematik: Die Arbeit ist vorbei - man geht nach Hause und will übers heimische WLAN - proxyserverfrei - ins Internet. Im Firefox gibt es ja die Möglichkeit mehrere Profile zu verwenden, aber der Internet Explorer zwingt einen dazu sich durch das Menü zu hangeln und den Proxyserver manuell zu deaktivieren.

    Wäre es nicht schön, wenn der Proxy Server über ein Skript konfiguriert werden könnte? Und wenn dieses Skript dann auch auf dem Mac vom Cheffe funktioniert?

    Moderne Browser können ihre Proxy Server Konfiguration aus der sog. Proxy Auto Config (PAC-) Datei beziehen. Dabei handelt es sich um eine normale Textdatei, die eine JavaScript-Funktion FindProxyForURL(url, host) enthält. Diese hat als Rückgabewert einen Proxy Server - mit der Möglichkeit Failover Proxys anzugeben.
    Die PAC-Datei wird im Firmennetzwerk auf einen beliebigen Webserver abgelegt - vorausgesetzt die Clients können diesen ohne Proxyserver erreichen.

    Eine PAC-Datei könnte wir folgt aussehen:
    Code:
    function FindProxyForURL(url, host) { 
        // lokale Netwerknamen -> kein Proxy
        if ( isPlainHostName(host) || dnsDomainIs(host, ".company.com")) &&  !localHostOrDomainIs(host, "www.company.com") ) 
         return "DIRECT";
    
        // wenn der Client aus dem 192.168.1.0 / 26 Bereich kommt
        if ( shExpMatch(host, "192.168.1.*" )) 
         return "DIRECT";
    
        // Alle anderen Anfragen -> Proxy benutzen
        // wenn Proxy nicht erreichbar -> direkter Zugriff
        return "PROXY 192.168.1.1:8080; DIRECT"; 
    }
    Das Script sollte so einfach wie möglich gehalten werden - allzu kreativer Zugriff auf JavaScript Object Model Objekte, Methoden oder Funktionen (window.open(), alert(), ...) führen dazu, dass das Skript nicht ausgeführt wird ...

    Code:
    return "PROXY 192.168.1.1:8080; DIRECT";
    In diesem Fall werden zwei Proxyeinstellungen zurückgegeben. Zunächst würde der Browser versuchen eine Verbindung über den Proxy Server 192.168.1.1 aufzubauen. Ist dieser Server nicht erreichbar, z.B. weil der Laptop in ein proxyfreies Netzwerk gewechselt hat, wird versucht die direkt eine Verbindung aufzubauen.

    Code:
    if ( isPlainHostName(host) || dnsDomainIs(host, ".company.com")) &&  !localHostOrDomainIs(host, "www.company.com") ) 
      return "DIRECT";
    Für lokale Server wird im Regelfall kein Proxyserver benötigt.
    isPlainHostName(host) prüft ob im Hostname ein Punkt vorkommt. Kommt kein Punkt vor gibt die Funktion true zurück.
    dnsDomainIs(host, domain) gibt true zurück wenn der Hostname Teil der angegebenen Domain.
    dnsDomainIs("www.company.com", ".company.com") -> true
    dnsDomainIs("intranet.company.com", ".company.com") -> true
    dnsDomainIs("www.web.de", ".company.com") -> false
    localHostOrDomainIs(host, domain) gibt nur true zurück, wenn der Hostname exakt der Domain entspricht oder der Hostname keine Domainnamen enthält und dem unqualifizierten Teil der Domain (Subdomain) entspricht.
    localHostOrDomainIs("www.company.com", "www.company.com") -> true : Exakte Übereinstimmung
    localHostOrDomainIs("www", "www.company.com") -> true : der Host enthält keine Domainnamen und stimmt mit der Subdomain überein
    localHostOrDomainIs("intranet.company.com", "www.company.com") -> false : Keine Übereinstimmung
    Code:
    if (url.substring(0, 5) == "http:") 
       return "PROXY httpproxy:80";
    
    if (url.substring(0, 6) == "https:") 
     return "PROXY secureproxy:8080";
    
    if (url.substring(0, 4) == "ftp:") 
       return "SOCKS sockproxy:1080";
    Möchte man bei der Proxy Server Konfiguration das verwendete Protokoll miteinbeziehen, kann man sich der substring() Funktion bedienen, um das Protokoll aus der URL zu ermitteln.

    Code:
    if (myIpAddress() == "192.168.1.123")
      return "DIRECT";
    Zum Schluss noch der gute "ich bin Admin ich darf das" Modus: Benutze kein Proxy wenn die IP Adresse der IP Adresse meines Laptops entspricht


    Die PAC-Datei muss im lokalen Netzwerk auf einem Webserver (IIS, Apache, ...) bereitgestellt werden, welcher sich ohne Proxy Server erreichen lässt. Beim Hinzufügen muss darauf geachtet werden, dass man der Dateiendung ".pac" den MIME-Type "application/x-ns-proxy-autoconfig" zuweist.

    Der Browser selbst muss noch so konfiguriert werden, dass er die Proxy Auto Config verwendet.
    Im Falle des Internet Explorers im Firmennetzwerk lässt sich dies relativ einfach über eine Gruppenrichtlinie umsetzen.

    Unter Benutzerkonfiguration > Richtlinien > Windows-Einstellungen > Internet Explorer-Wartung > Verbindung > Automatische Browserkonfiguration wird die AutoProxy-URL angegeben.
    Eine weitere Möglichkeit wäre das Web Proxy Autodiscovery (WPAD-) Protocol, auf das wir hier aber (zunächst) nicht weiter eingehen werden.

    sections Sections

    Recent Forum Posts Recent Forum Posts

    php_online_editor

    Ein knappes Jahr später gibt es auch die erste alpha Version von 3.0 :-)

    Download zip 3.0.0.1.a Gehe zum letzten Beitrag

    James Blond on 03.09.2010

    Windows 2008 R2 Share Permissions

    Hier der Teil des Scriptes. Bei Windows 2003 funktioniert dies einwandfrei. (Everyone=Full)
    Beide OS ion Englisch

    share
    Sub Share
    Dim strPath, strNewPath, strName, strOldName, strDesc, strMax,... Gehe zum letzten Beitrag

    nightman on 03.09.2010

    Windows 2008 R2 Share Permissions

    Bitte poste mal dein script, das Du bisher verwendest, dann kann ich Abends mal ausprobieren. Gehe zum letzten Beitrag

    James Blond on 03.09.2010

    Windows 2008 R2 Share Permissions

    Hallo zusammen, ich habe ein kleines Problem.
    Unter Windows 2008 gibt es einen Ordner auf dem Laufwerk D:
    D:\LogDaten die Freigabe ist LogDatei$
    Die Freigabe wird per Script ersrtellt.

    Nun... Gehe zum letzten Beitrag

    nightman on 02.09.2010

    batch ruft programm auf das eingabe erfordert

    das mit dem weiterleiten der ausgabe hat leider auch nicht funktioniert, aber mit autoit lies es sich einwandfrei machen, ist echt eine coole sache, danke goink Gehe zum letzten Beitrag

    gagabu on 27.08.2010

    Recent Comments Recent Comments

    Recent Articles Recent Articles