Vraag:
Wat is een Proxy Pac-bestand en zijn er voorbeelden?
Omgeving: Cisco Web security applicatie
Opmerking: dit Knowledge Base-artikel verwijst naar software die niet wordt onderhouden of ondersteund door Cisco. De informatie wordt verstrekt als hoffelijkheid voor uw gemak. Voor verdere assistentie kunt u contact opnemen met de softwareleverancier.
Referentie link: JavaScript of JScript auto-Proxy voorbeeldbestanden
JavaScript of JScript Auto-Proxy voorbeeldbestanden
Het volgende script bevat voorbeelden van manieren waarop een pac-bestand kan worden gebruikt om een auto-proxy-URL op te geven. Om deze functies te gebruiken, moet u de proxy-namen, poortnummers en IP-adressen wijzigen.
- De functies isInNet, isResolvable en dnsResolve zoeken een DNS-server
- Verwijzingen naar objecten, eigenschappen, of methoden zorgen ervoor dat het proxy-bestand voor automatische configuratie op een stille manier mislukt. Bijvoorbeeld, alarmvenster.open(...), alarmvenster(...) en wachtwoord(...) zorgen er alle voor dat het proxy-automatische configuratiebestand op Internet Explorer mislukt.
Voorbeeld 1: Lokale hosts verbinden direct, alle anderen verbinden via proxy
De volgende functie controleert om te zien of de hostname een lokale host is, en of het een lokale host is, of de verbinding direct is. Als de hostname geen lokale host is, is de verbinding via de proxy (proxy).
functie FindProxyForURL (URL, host)
{
als (isPlainHostName (host))
"DIRECT" retourneren;
anders
retourneren "PROXY-proxy:80";
}
De functie isPlainHostName controleert om te zien of er punten zijn in de hostnaam. Als dit het geval is, geeft hij de fout terug, anders geeft de functie de waarheid terug.
Opmerking: voor een directe verbinding met lokale webserver kan ook een domein of subnetmatch nodig zijn. Niet alle verzoeken aan lokale webservers worden gedaan met behulp van alleen hostnames
Voorbeeld 2: Hosts in de firewall verbinden direct, buiten lokale servers verbinden via proxy
De volgende functie controleert om te zien of de host ofwel een "gewone" hostname is (dat wil zeggen dat de domeinnaam niet is opgenomen) of onderdeel van een bepaald domein (.company.com), maar de hostname is niet www of home.
functie FindProxyForURL (URL, host)
{
Als (isPlainHostName (host) ||
dnsDomainIs(host, ".company.com") en
!localHostOrDomainIs(host, "www.company.com") en
!localHostOrDomainIs(host, "home.company.com")
"DIRECT" retourneren;
anders
retourneren "PROXY-proxy:80";
}
Opmerking:
- De functie LocalHostOrDomainIs wordt alleen uitgevoerd voor URL's in het lokale domein.
- De functie dnsDomainIs retourneert true als het domein van de hostnaam overeenkomt met het gegeven domein.
Voorbeeld 3: Als host oplosbaar is, sluit u direct aan. Anders verbinden met behulp van een proxy.
De volgende functie vraagt de DNS server om te proberen om de hostname op te lossen die aan het wordt doorgegeven. Als het kan, dan wordt een directe verbinding gemaakt. Als het niet kan, wordt de verbinding gemaakt via proxy. Dit is handig wanneer een interne DNS server wordt gebruikt om alle interne hostnamen op te lossen.
functie FindProxyForURL (URL, host)
{
als (isOplosbaar (host))
"DIRECT" retourneren;
anders
retourneren "PROXY-proxy:80";
}
Zie opmerking over de functie isResolvable bovenaan de pagina.
Voorbeeld 4: Als host in opgegeven subnetverbinding staat, sluit u direct aan. Anders verbinden met behulp van een proxy.
De volgende functie vergelijkt een gegeven IP-adrespatroon en -masker met de hostnaam. Dit is handig als bepaalde hosts in een subnetverbinding direct verbonden moeten zijn en anderen met behulp van een proxy verbonden moeten zijn.
functie FindProxyForURL (URL, host)
{
indien (isInNet(host, "999.9.9.9", "255.0.255.0"))
"DIRECT" retourneren;
anders
retourneren "PROXY-proxy:80";
}
Zie opmerking over de functie isInNet bovenaan de pagina.
De isInNet-functie (host, patroon, masker) keert waar terug als het IP-adres van de host overeenkomt met het opgegeven patroon. Het masker geeft aan welk deel van het IP-adres moet worden gekoppeld (255=match, 0=negeren).
Voorbeeld 5: Verbindingstype bepalen op basis van hostdomein
De volgende functie specificeert een directe verbinding als de host lokaal is. Als de host niet lokaal is, bepaalt deze functie welke proxy wordt gebruikt op basis van het hostdomein. Dit is handig als de host domeinnaam een van de criteria voor proxyselectie is.
functie FindProxyForURL (URL, host)
{
als (isPlainHostName (host))
"DIRECT" retourneren;
Anders als (shExpMatch(host, "*.com")
retourneren "PROXY-proxy:80";
Anders indien (shExpMatch(host, "*.edu"))
retourneren "PROXY eduproxy:80";
anders
retourneren "PROXY proxy";
}
De functie shExpMatch (str, shexp) geeft true als str overeenkomt met de shexp met behulp van shell expressiepatronen.
Voorbeeld 6: Verbindingstype bepalen op basis van gebruikt protocol
De volgende functie extraheert het protocol dat gebruikt wordt en maakt dienovereenkomstig een proxy selectie. Als er geen overeenkomst met het protocol wordt gemaakt, wordt er een directe verbinding tot stand gebracht. Dit is handig als het gebruikte protocol een van de criteria voor proxyselectie is.
functie FindProxyForURL (URL, host)
{
if (url.substring(0, 5) == "http:") {
retourneren "PROXY-proxy:80";
}
anders if (url.substring(0, 4) == "ftp:") {\displaystyle \mathbb {0, 4}}
retourneren "PROXY proxy:80";
}
anders if (url.substring(0, 7) == "gopher:") {
retourneren "PROXY proxy";
}
else if (url.substring(0, 6) == "https:") {
retourneren "PROXY secproxy:8080";
}
anders {
"DIRECT" retourneren;
}
}
De substring functie extraheert het gegeven aantal karakters uit een string.
Voorbeeld 7: Bepaal proxy-instelling door te controleren of hostname overeenkomt met IP-adres
De volgende functie maakt een proxyselectie door de hostnaam te vertalen naar een IP-adres en het te vergelijken met een gespecificeerde string.
functie FindProxyForURL (URL, host)
{
if (dnsResolve(host) == "999.99.99.999") { // = http://proxy
retourneren "PROXY secproxy:8080";
}
anders {
retourneren "PROXY-proxy:80";
}
}
Zie opmerking over de functie dnsResolve bovenaan de pagina.
Voorbeeld 8: Als IP-host overeenkomt met opgegeven IP, sluit u verbinding via proxy, anders sluit u direct aan
De volgende functie is een andere manier om een proxy selectie te maken gebaseerd op het opgeven van een IP adres. Dit voorbeeld, in tegenstelling tot Voorbeeld 7, gebruikt de functieaanroep om expliciet het numerieke IP-adres te krijgen (Voorbeeld 7 gebruikt de functie dnsResolve om de hostnaam te vertalen naar het numerieke IP-adres).
functie FindProxyForURL (URL, host)
{
if (myIpAddress() == "999.99.999.99") {
retourneren "PROXY-proxy:80";
}
anders {
"DIRECT" retourneren;
}
}
De functie myIpAddress retourneert het IP-adres (in integer-dot formaat) van de host waarop de browser actief is.
Voorbeeld 9: Als er punten zijn in de hostname, sluit dan een proxy aan. Anders sluit u direct aan.
De volgende functie controleert om te zien hoeveel punten in de hostname zijn. Als er punten zijn in de hostname, maak een verbinding via proxy. Als er geen punten in de hostname staan, maak dan een directe verbinding. Dit is een andere manier om verbindingstypes te bepalen die op hostname kenmerken worden gebaseerd.
functie FindProxyForURL (URL, host)
{
als (dnsDomainLevels(host) > 0) { // als het aantal punten in host > 0
retourneren "PROXY-proxy:80";
}
"DIRECT" retourneren;
}
De functie dnsDomainLevels retourneert een geheel getal dat gelijk is aan het aantal punten in de hostnaam.
Voorbeeld 10: Geef dagen van de week op om verbinding te maken via proxy, andere dagen verbinden direct
De volgende functie bepaalt het verbindingstype door dagen van de week te specificeren die voor een volmacht aangewezen zijn. Dagen die niet tussen deze parameters vallen maken gebruik van een directe verbinding. Deze functie kan handig zijn in situaties waar je een proxy zou kunnen gebruiken als er veel verkeer is en een directe verbinding zou kunnen toestaan als er weinig verkeer is.
functie FindProxyForURL (URL, host)
{
if(weekdagRange("WO", "SAT", "GMT")
retourneren "PROXY-proxy:80";
anders
"DIRECT" retourneren;
}
De weekdagRange (day1 [,day2] [,GMT] ) functie retourneert of de huidige systeemtijd binnen het bereik valt dat is gespecificeerd door de parameters day1, day2 en GMT. Alleen de eerste parameter is vereist. De parameter GMT veronderstelt dat de tijdswaarden in Greenwich Mean Time in plaats van de lokale tijdzone zijn.
Voorbeeld 11: Taakverdeling met een eenvoudige wiskundige functie
functie FindProxyForURL (url, host){
willekeurige proxy() retourneren;
}
functie randomProxy()
{
switch( Math.floor( Math.random() *2))
{
geval 0: terugkeer "PROXY 1.1.1.1:3128; PROXY 2.2.2.2; PROXY DIRECT;"
geval 1: terugkeer "PROXY 2.2.2.2:3128; PROXY 1.1.1.1; PROXY DIRECT;"
}
}
U zult zien dat de cases ook een failover implementeren als er geen proxy beschikbaar is.