Pregunta:
¿Qué es un archivo Pac de proxy? ¿Hay ejemplos?
Entorno: Dispositivo Cisco Web Security Appliance
Nota: este artículo de Knowledge Base hace referencia a software que Cisco no mantiene ni admite. La información se proporciona como cortesía para su conveniencia. Para obtener asistencia adicional, comuníquese con el proveedor de software.
Vínculo de referencia: Archivos de ejemplo de JavaScript o de proxy automático de JScript
Archivos de ejemplo de JavaScript o Auto-Proxy de JScript
Los siguientes guiones proporcionan ejemplos de cómo se puede utilizar un archivo ".pac" para especificar una URL de proxy automática. Para utilizar estas funciones, debe cambiar los nombres de proxy, los números de puerto y las direcciones IP.
- Las funciones isInNet, isResolvable y dnsResolve consultan un servidor DNS
- Las referencias a objetos, propiedades o métodos del modelo de objetos hacen que el archivo de configuración automática de proxy falle de forma silenciosa. Por ejemplo, las referencias window.open(...), alert(...) y password(...) hacen que el archivo de configuración automática del proxy falle en Internet Explorer.
Ejemplo 1: Los hosts locales se conectan directamente, todos los demás se conectan a través de proxy
La siguiente función verifica si el nombre de host es un host local y, si lo es, si la conexión es directa. Si el nombre de host no es un host local, la conexión se realiza a través del proxy (proxy).
function FindProxyForURL(url, host)
{
if (isPlainHostName(host))
devolver "DIRECT";
sino
devolver "proxy PROXY:80";
}
La función isPlainHostName verifica si hay puntos en el nombre de host. Si es así, devuelve false; de lo contrario, la función devuelve true.
Nota: Para una conexión directa con un servidor web local, también puede ser necesario un dominio o una subred coincidente. No todas las solicitudes a servidores web locales se realizan usando solo nombres de host
Ejemplo 2: los hosts dentro del firewall se conectan directamente, los servidores locales externos se conectan mediante proxy
La siguiente función verifica si el host es un nombre de host "normal" (lo que significa que el nombre de dominio no está incluido) o forma parte de un dominio en particular (.company.com) pero el nombre de host no es www ni home.
function FindProxyForURL(url, host)
{
if ((isPlainHostName(host) ||
dnsDomainIs(host, ".company.com") &&
!localHostOrDomainIs(host, "www.company.com") &&
!localHostOrDomainIs(host, "home.company.com")
devolver "DIRECT";
sino
devolver "proxy PROXY:80";
}
Nota:
- La función localHostOrDomainIs se ejecuta sólo para las URL del dominio local.
- La función dnsDomainIs devuelve true si el dominio del nombre de host coincide con el dominio dado.
Ejemplo 3: si el host se puede resolver, conéctese directamente. De lo contrario, conéctese mediante un proxy.
La siguiente función solicita al servidor DNS que intente resolver el nombre de host que se le ha pasado. Si puede, entonces se establece una conexión directa. Si no puede, la conexión se realiza mediante proxy. Esto es útil cuando se utiliza un servidor DNS interno para resolver todos los nombres de host internos.
function FindProxyForURL(url, host)
{
if (isResolvable(host))
devolver "DIRECT";
sino
devolver "proxy PROXY:80";
}
Consulte la nota sobre la función isResolvable en la parte superior de la página.
Ejemplo 4: si el host está en la subred especificada, conéctese directamente. De lo contrario, conéctese mediante un proxy.
La siguiente función compara un patrón de dirección IP y una máscara dados con el nombre de host. Esto es útil si ciertos hosts en una subred deben estar conectados directamente y otros deben estar conectados usando un proxy.
function FindProxyForURL(url, host)
{
if (isInNet(host, "999.99.9.9", "255.0.255.0"))
devolver "DIRECT";
sino
devolver "proxy PROXY:80";
}
Vea la nota sobre la función isInNet en la parte superior de la página.
La función isInNet(host, pattern, mask) devuelve true si la dirección IP del host coincide con el patrón especificado. La máscara indica qué parte de la dirección IP debe coincidir (255=coincidir, 0=ignorar).
Ejemplo 5: Determinar el tipo de conexión en función del dominio de host
La siguiente función especifica una conexión directa si el host es local. Si el host no es local, esta función determina qué proxy se utilizará en función del dominio del host. Esto es útil si el nombre de dominio del host es uno de los criterios para la selección de proxy.
function FindProxyForURL(url, host)
{
if (isPlainHostName(host))
devolver "DIRECT";
else if (shExpMatch(host, "*.com"))
devolver "compromiso PROXY:80";
else if (shExpMatch(host, "*.edu"))
devolver "PROXY eduproxy:80";
sino
devolver "proxy PROXY";
}
La función shExpMatch(str, shexp) devuelve true si str coincide con el shexp mediante patrones de expresión de shell.
Ejemplo 6: determinar el tipo de conexión en función del protocolo que se está utilizando
La siguiente función extrae el protocolo que se está utilizando y realiza una selección de proxy en consecuencia. Si no se realiza ninguna coincidencia en el protocolo, se realiza una conexión directa. Esto es útil si el protocolo que se está utilizando es uno de los criterios para la selección de proxy.
function FindProxyForURL(url, host)
{
if (url.substring(0, 5) == "http:") {
devolver "proxy PROXY:80";
}
else if (url.substring(0, 4) == "ftp:") {
devolver "PROXY fproxy:80";
}
else if (url.substring(0, 7) == "gopher:") {
devolver "proxy PROXY";
}
else if (url.substring(0, 6) == "https:") {
devolver "PROXY secproxy:8080";
}
else {
devolver "DIRECT";
}
}
La función substring extrae el número especificado de caracteres de una cadena.
Ejemplo 7: Determine la configuración del proxy comprobando si el nombre de host coincide con la dirección IP
La siguiente función realiza una selección de proxy traduciendo el nombre de host a una dirección IP y comparándolo con una cadena especificada.
function FindProxyForURL(url, host)
{
if (dnsResolve(host) == "999.99.99.999") { // = http://proxy
devolver "PROXY secproxy:8080";
}
else {
devolver "proxy PROXY:80";
}
}
Vea la nota sobre la función dnsResolve en la parte superior de la página.
Ejemplo 8: si la IP del host coincide con la IP especificada, conéctese mediante proxy; de lo contrario, conéctese directamente
La siguiente función es otra forma de realizar una selección de proxy basada en la especificación de una dirección IP. Este ejemplo, a diferencia del ejemplo 7, utiliza la llamada a la función para obtener explícitamente la dirección IP numérica (el ejemplo 7 utiliza la función dnsResolve para convertir el nombre de host en la dirección IP numérica).
function FindProxyForURL(url, host)
{
if (myIpAddress() == "999.99.999.99") {
devolver "proxy PROXY:80";
}
else {
devolver "DIRECT";
}
}
La función myIpAddress devuelve la dirección IP (en formato de punto entero) del host en el que se está ejecutando el explorador.
Ejemplo 9: Si hay puntos en el nombre de host, conéctese mediante un proxy. De lo contrario, conéctese directamente.
La siguiente función verifica cuántos puntos hay en el nombre de host. Si hay puntos en el nombre de host, realice una conexión a través de proxy. Si no hay puntos en el nombre de host, realice una conexión directa. Esta es otra manera de determinar los tipos de conexión basados en las características del nombre de host.
function FindProxyForURL(url, host)
{
if (dnsDomainLevels(host) > 0) { // if the number of dots in host > 0
devolver "proxy PROXY:80";
}
devolver "DIRECT";
}
La función dnsDomainLevels devuelve un entero igual al número de puntos en el nombre de host.
Ejemplo 10: Especifique los días de la semana para conectarse a través de proxy; los demás días se conectan directamente
La siguiente función determina el tipo de conexión especificando los días de la semana que son apropiados para un proxy. Los días que no se sitúan entre estos parámetros utilizan una conexión directa. Esta función puede ser útil en situaciones en las que se desee utilizar un proxy cuando el tráfico es denso y permitir una conexión directa cuando el tráfico es ligero.
function FindProxyForURL(url, host)
{
if(weekdayRange("WED", "SAT", "GMT"))
devolver "proxy PROXY:80";
sino
devolver "DIRECT";
}
La función weekdayRange(day1 [,day2] [,GMT] ) devuelve si la hora actual del sistema está dentro del rango especificado por los parámetros day1, day2 y GMT. Sólo se requiere el primer parámetro. El parámetro GMT presupone que los valores de hora se encuentran en la hora del meridiano de Greenwich en lugar de en la zona horaria local.
Ejemplo 11: Equilibrio de carga con una función matemática simple
function FindProxyForURL(url, host){
return randomProxy();
}
function randomProxy()
{
switch( Math.floor( Math.random() *2))
{
caso 0: devolver "PROXY 1.1.1.1:3128; PROXY 2.2.2.2; PROXY DIRECT;"
caso 1: devolución "PROXY 2.2.2.2:3128; PROXY 1.1.1.1; PROXY DIRECT;"
}
}
Verá que los casos también implementan un failover en caso de que un proxy no esté disponible.