讓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;
     }    
}
相關文章
相關標籤/搜索