让IE部分网站或IP进行代理访问

让IE只对指定的网站使用代理,可使用系统自带的代理脚本功能,自动为咱们设定的网站使用代理!

这个要使用代理自动配置脚本代码以下:
html

function FindProxyForURL(url,host){服务器

    if((isPlainHostName(host))||shExpMatch(url,"http://127.0.0.1/*")||isInNet(host,"192.168.0.0", "255.255.255.0")){负载均衡

        return "direct"; dom

    } else { socket

          if(myIpAddress()=="192.168.0.49")
               return "PROXY 192.168.0.6:808";
        else
ide

              return "direct";
    }
}函数

 

把以上代码另存为proxy.pac的文件,如:c:\proxy.pac,而后在IE的菜单里"工具"->"INTEL选项"->"链接"->局域网设置工具


把使用自动配置脚本选上,而后在地址栏填入file://c:/proxy.pac,注意file后是两斜杠,要使设置生效,须要关闭IE再从新打开.学习


如今咱们介绍下这个proxy.pac脚本文件,脚本的语法是js语法,js的内置函数可使用,要实现自动配置代理,须要实现FindProxyForURL这个函数,其参数url表明要访问的链接,host表明要访问链接的主机名,该函数有三个返回参数网站

direct:直接链接

proxy IP:PORT

socket IP:PORT

返回结果大小写不敏感

 

PAC的其余内置语法见http://wp.netscape.com/eng/mozilla/2.0/relnotes/demo/proxy-live.html


PAC脚本另一个重要的应用是多台代理服务器并存的状况下,经过pac脚本的控制: 

用户随机选择使用多台代理服务器中的任意一台来达到流量负载均衡的目的;

管理员经过PAC脚本控制用户使用和不使用某台代理服务器,这样能够空出时间对代理服务器进行维护;

让服务器工做在主备模式,当主服务器宕机时,会自动切换到其它备用服务器而不会中断服务;

根据访问目的地的不一样,自动选择最佳代理服务器。


下面列举几个PAC的实例,顺便学习下它的语法


a、isPlainHostName(host),本例演示判断是否为本地主机,如http://myservername/

  的方式访问,若是是直接链接,不然使用代理

 

function FindProxyForURL(url, host)

  {

    if (isPlainHostName(host))

      return "DIRECT";

    else

      return "PROXY proxy:80";

  }

 

 

 

 

 

 



 b、dnsDomainIs(host, "")、localHostOrDomainIs(host, ""),本例演示判断访问主机
  是否属于某个域和某个域名,若是属于.company.com域的主机名,而域名不是
  www.company.com和home.company.com的直接链接,不然使用代理访问。

 

 function FindProxyForURL(url, host)

  {

    if ((isPlainHostName(host) ||

       dnsDomainIs(host, ".company.com")) &&

      !localHostOrDomainIs(host, "www.company.com") &&

      !localHostOrDomainIs(host, "home.company.com"))


      return "DIRECT";

    else

      return "PROXY proxy:80";

  }


c、isResolvable(host),本例演示主机名可否被dns服务器解析,若是能直接访问,否
  则就经过代理访问。

 

 function FindProxyForURL(url, host)

  {

    if (isResolvable(host))

      return "DIRECT";

    else

      return "PROXY proxy:80";

  }




  d、isInNet(host, "", ""),本例演示访问IP是否在某个子网内,若是是就直接访问,
  不然就经过代理,例子演示访问清华IP段的主页不用代理。
  
function FindProxyForURL(url, host)
{
    if (isInNet(host, "166.111.0.0", "255.255.0.0"))
      return "DIRECT";
    else
      return "PROXY proxy:80";
}

  
e、shExpMatch(host, ""),本例演示根据主机域名来改变链接类型,本地主机、*.edu、
  *.com分别用不一样的链接方式。
  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:80";
  }

  
f、url.substring(),本例演示根据不一样的协议来选择不一样的代理,http、https、ftp、
  gopher分别使用不一样的代理。
  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, 7) == "gopher:") {
        return "PROXY gproxy";
      }
      else if (url.substring(0, 6) == "https:") {
        return "PROXY secproxy:8080";
      }
      else {
        return "DIRECT";
      }
  }

  
  g、dnsResolve(host),本例演示判断访问主机是否某个IP,若是是就使用代理,不然直
  接链接。
function FindProxyForURL(url, host)
{
   if (dnsResolve(host) == "166.111.8.237") {
        return "PROXY secproxy:8080";
      }
      else {
        return "PROXY proxy:80";
      }
}

  
  h、myIpAddress(),本例演示判断本地IP是否某个IP,若是是就使用代理,不然直接使
  用链接。
  function FindProxyForURL(url, host)
  {
      if (myIpAddress() == "166.111.8.238") { 
        return "PROXY proxy:80";
      }
      else {
        return "DIRECT";
      }
  }

  
  i、dnsDomainLevels(host),本例演示访问主机的域名级数是几级,就是域名有几个点
  若是域名中有点,就经过代理访问,不然直接链接。
 
 function FindProxyForURL(url, host)
  {
      if (dnsDomainLevels(host) > 0) { // if number of dots in host > 0
        return "PROXY proxy:80";
      }
        return "DIRECT";
  }

  
  j、weekdayRange(),本例演示当前日期的范围来改变使用代理,若是是GMT时间周三
  到周六,使用代理链接,不然直接链接。
  function FindProxyForURL(url, host)
  {
    if(weekdayRange("WED", "SAT", "GMT")) 
     return "PROXY proxy:80";
    else 
     return "DIRECT";
  }

  
  k、最后一个例子是演示随机使用代理,这样能够好好利用代理服务器。
function FindProxyForURL(url,host)
{
      return randomProxy();
}

function randomProxy()
{
     switch( Math.floor( Math.random() * 5 ) )
     {
         case 0:
             return "PROXY proxy1:80";
             break;
         case 1:
             return "PROXY proxy2:80"; 
             break;
         case 2:
             return "PROXY proxy3:80";
             break;
         case 3:
             return "PROXY proxy4:80";
             break;
         case 4:
             return "PROXY proxy5:80";
             break;
     }    
}