Complexe ProxyPAC

Publicatiedatum
Reacties Geen

Hieronder een voorbeeld ProxyPAC file waarin je zelf een aantal eenvoudige zaken kan regelen zoals:

  1. Lokale netwerken waarvoor je geen Proxy nodig hebt.
  2. Hostnamen waarvoor je Proxy nodig hebt.
  3. Netwerken waarbinnen je de Proxy dan wel dient te gebruiken
  4. Simpele load balancing tussen 2 proxies

Zie ook http://findproxyforurl.com/ voor meer details over elke functie.

// ProxyPAC example
// Don't use it without modifications to the tables.

We maken een array aan met domain namen die niet door de proxy hoeven te gaan.
Let daarbij op dat my.website.example.com via de proxy wordt gestuurd omdat er geen match voor is in dit voorbeeld.

// Direct domain names
// List of domains that do need to go through the proxy
var Direct = new Array(
	"*.example.com",
	"example.com",
	"*.example.net",
	"example.net",
	"*.logmeinrescue.com",
	"webex.com",
	"*.webex.com"
	);

Dan is er een array van netwerken waar geen proxy voor nodig is.
Elke hostname die terug vertaald kan worden naar een IP adres uit deze lijst zal dus ook niet door een proxy gaan.

// Local Networks
// List of networks that can connected without the proxy
var LocalNets = [
	["127.0.0.0", "255.0.0.0"],
	["10.0.0.0", "255.0.0.0"],
	["172.16.0.0","255.240.0.0"],
	["172.16.0.0","255.240.0.0"],
	["169.254.0.0", "255.255.0.0"]
	];

De array van netwerken waarin een client moet zitten om gebruik te maken van een proxy.

// Client Networks
// Proxy should only be used when part of one of these networks
var ClientNets = [
	["172.16.16.0","255.255.255.0"],
	["172.31.55.0","255.255.255.0"]
	];

Hier definieren we de proxies als variabelen.
let op dat je hier een werkende naam uit je AD DNS moet gebruiken als je bijvoorbeeld Kerberos wil gebruiken.

// Proxies go here:
// Use domain names if you want to use Kerberos !!!
var PROXYODD = "PROXY proxy.example.net:80";
var PROXYEVEN = "PROXY proxy.example.com:8080";
var NOPROXY = "DIRECT";

De procedure om een proxy te vinden begint hier.

// Now select my proxy
function FindProxyForURL(url, host) {

Bepaal of het IP adres even of oneven is.

	// Odd or Even:
	var myIP = myIpAddress();
	var myOctet = myIP.split(".");
	var myHost = parseInt(myOctet[3]);
	var Even = (myHost===Math.floor(myHost/2)*2);

Directe hostnamen hebben geen proxy nodig.

	// Direct names go direct
	if(isPlainHostName(host)) {
		return NOPROXY;
	}

Voor Real Player en Media player is ook geen proxy nodig.

	// RealPlayer & MediaPlayer
	// We don't want to feed these protocols through a proxy
	var urllower = url.toLowerCase();
	if((urllower.substring(0,5)=="rtsp:")		||
		(urllower.substring(0,6)=="rtspt:")	||
		(urllower.substring(0,6)=="rtspu:")	||
		(urllower.substring(0,4)=="mms:")	||
		(urllower.substring(0,5)=="mmst:")	||
		(urllower.substring(0,5)=="mmsu:"))
			return NOPROXY;

Geen proxy voor de uitzonderde hostnamen.

	// Direct
	for (var loop=0; loop<Direct.length; loop++) {
		var checksite = Direct[loop];
		if (shExpMatch(host, checksite)) {
			return NOPROXY;
		}
	}

Ook geen proxy voor lokale netwerken

	// LocalNets
	var HostIP = dnsResolve(host);
	for (var loop=0; loop<LocalNets.length; loop++) {
		var Network = LocalNets[loop][0];
		var SubnetMask = LocalNets[loop][1];
		if (isInNet(HostIP, Network, SubnetMask)) {
			return NOPROXY;
		}
	}

En we willen alleen maar een proxy gebruiken als we in 1 van de juiste netwerken zitten.

	// Regular
	var MyIP = myIpAddress();
	for (var loop=0; loop<ClientNets.length; loop++) {
		var Network = ClientsNets[loop][0];
		var SubnetMask = ClientNets[loop][1];
		if (isInNet(MyIP), Network, SubnetMask)) {
			if (Even) {
				return PROXYEVEN;
			} else {
				return PROXYODD;
			}
		}
	}

En dat was het dan voor vandaag.

	// WE ARE DONE HERE
}

Als je alle bovenstaande text blokken bij elkaar zet heb je een leuke template om je eigen proxypac file mee te maken.

Medewerker
Categorie

Reacties

Op dit artikel kan niet gereageerd worden.

← Ouder Nieuwer →