`

[转帖]用PAC文件自动配置IE代理脚本

阅读更多
转自http://www.cnblogs.com/ttyp/archive/2005/11/18/279124.html

一个PAC文件其实就是一个文本文件,最简单的格式就是包含一个叫FindProxyForURL的JScript函数,IE通过传入两个变量来调用这个函数,一个是用户浏览的地址URL全路经,一个是这个URL中的主机名部分(host)。

这个FindProxyForURL函数有三种可能的字符串返回值,
一是"DIRECT",就是直接连接,不通过代理;
二是"PROXY proxyaddr:port",其中proxyaddr和port分别是代理的地址和代理的端口;
三是"SOCKS socksaddr:port",其中socksaddr和port分别是socks代理的地址和端口,

一个自动代理文件可以是多个选择的组合,其中用分号(;)隔开。

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;
    }    
}
分享到:
评论
1 楼 lyf443 2011-08-17  
很好,很受用

相关推荐

    论坛转帖工具.rar

    标题中的“论坛转帖工具.rar”表明这是一个用于在论坛之间转移帖子的软件工具,通常用于帮助用户方便地将一个论坛的帖子内容复制到另一个论坛,可能是为了分享信息、讨论或保存重要的帖子。这类工具可能包括自动抓取...

    转帖h3c一些命令配置

    本文将深入解析标题和描述中提及的H3C设备配置命令,以及它们在网络管理中的作用。 首先,配置终端操作密码是网络设备安全的基本措施。在H3C设备上,可以通过以下命令设置用户接口aux 0的密码: ``` [Sysname]user...

    贴吧转帖工具

    【贴吧转帖工具】是一种专为百度贴吧用户设计的便捷工具,主要用于提高用户...总的来说,【贴吧转帖工具】通过自动化操作,为百度贴吧用户提供了高效、便捷的互动方式,但用户在使用时也要注意风险防范和遵守社区规则。

    编辑人员转帖去水印工具

    本篇文章将详细探讨“编辑人员转帖去水印工具”,并介绍如何使用名为Teorex Inpaint的1.0.0.2版本的软件来实现这一目标。 首先,我们要理解什么是水印。水印通常是指在图像或视频中添加的半透明标记,它可以是文字...

    一键转帖功能插件 for 帝国CMS 6.0 GBK utf8 V1.0.rar

    《一键转帖功能插件 for 帝国CMS 6.0 GBK utf8 V1.0》 本文将深入探讨“一键转帖功能插件”在帝国CMS 6.0系统中的应用与实现,该插件适用于GBK及UTF-8编码环境,旨在提升网站内容的分享与传播效率。我们将从安装...

    【转帖】 使用 JProfiler 监控 JBoss 运行情况

    2. **配置JBoss启动参数**:在JBoss的启动脚本中添加JProfiler的代理库和监听端口等配置信息,例如: ```bash JAVA_OPTS="-agentlib:jprofilerti=port=8849 -Xbootclasspath/a:$JPROFILER_HOME/bin/agent.jar" ``...

    用PHP批量生成图片缩略图——活跃论坛转帖

    5. `开发文档.txt`:提供了关于如何使用这些脚本的说明,可能包含了使用方法、参数解释和示例代码。 在实际操作中,批量生成图片缩略图的步骤通常如下: 1. 检查上传的图片或指定的目录。 2. 对每个图片文件读取并...

    一键转帖功能插件 for 帝国CMS v1.0.rar

    总结一下,"一键转帖功能插件 for 帝国CMS v1.0" 提供了一种便捷的方式来增强帝国CMS站点的社交分享功能,通过简单的安装和配置,用户可以轻松地在多个平台上转发内容,有助于增加网站的曝光度和用户的参与度。...

    转帖:Android应用的自动升级、更新模块的实现docx.docx

    在Android应用开发中,自动升级和更新功能是一个重要的特性,它允许用户无缝地获取应用的最新版本,提高用户体验。本文将详细介绍如何实现这样一个模块。 **一、基础概念** 1. **版本标识**: 在AndroidManifest.xml...

    processbib.rar

    2. **脚本或程序**:如果“processbib”是一个可执行文件(如.py、.bat或.sh),那么它可能是一个脚本,用于自动化处理BibTeX文件,比如转换引用格式,或者从网页或数据库中抓取引用信息。 3. **配置文件**:如果是...

    UBB论坛转帖圣手.exe

    UBB论坛转帖圣手.exeUBB论坛转帖圣手.exe

    True FFS文件系统的构建指导

    5. **TrueFFS编程指南**:“Tornado之TrueFFS编程者指南”系列文件可能包含TrueFFS的详细使用说明,包括API函数、配置选项和故障排查等内容。这些指南对于理解和使用TrueFFS至关重要。 6. **BusyBox和小型文件系统*...

    用MyEclipse8.0构建SSH框架(转帖)

    在配置中指定Spring的配置文件,通常是`applicationContext.xml`。然后,设置SessionFactory的ID,这样在DAO层可以通过Spring来获取SessionFactory实例。取消创建SessionFactory基类,因为我们使用的是Spring管理的...

    discuz X2转帖工具、采集工具

    1. 社区营销:对于企业或个人来说,使用转帖工具可以帮助推广产品或服务,提升品牌知名度。 2. 信息聚合:对于新闻资讯类论坛,可以通过采集功能快速收集并分享最新信息,提升论坛的新闻价值。 3. 数据分析:通过...

    [转帖] 用C# Generator解决Hanoi塔问题

    【标题】:“用C# Generator解决Hanoi塔问题”揭示了如何使用C#编程语言来构建一个自动化生成器,以高效地处理经典的汉诺塔问题。汉诺塔问题是一个著名的递归问题,它涉及到将一组盘子从一根柱子移动到另一根柱子,...

    转帖工具插件 for PHPwind 7.5 正式版.rar

    1. **插件安装**:在 PHPwind 的后台,通常有一个“插件管理”或者“扩展中心”的区域,用户可以在那里上传 `.rar` 文件,系统会自动解压并安装。安装过程可能需要按照提示进行,确保所有必要的步骤都已完成。 2. *...

    轻松转帖之突破网页复制限制宣贯.pdf

    1. **查看源文件**:使用IE浏览器,可以通过菜单栏的“查看 - 源文件”选项,打开网页的HTML源代码,手动查找并复制所需内容。 2. **使用Word**:复制网页URL,然后在Word中打开,Word会下载网页内容,用户可以在...

    Html2UBBMaxcj_Softii论坛专用转帖工具

    - **Html2UBB**:这可能是实际的软件执行文件或库文件,用户需要运行或解压后才能使用转帖工具。 5. **使用步骤**: - 首先,阅读Readme.txt和站内插件安装方法,了解软件的使用条件和步骤。 - 如果需要,按照...

    [转帖]通过WebView获取访问网页的源代码

    总结,本主题涉及了WebView在Android中的使用,如何获取网页源代码,以及Android项目中的一些重要配置文件的作用。对于开发者来说,理解和掌握这些知识点是构建功能丰富的Android应用所必需的。

    【转帖】Flex 开发入门

    【Flex 开发入门】 Flex 是一种用于构建富互联网应用程序(RIA, Rich Internet Applications)的...通过查看源代码和资源文件,可以学习Flex如何创建动态的网页应用,包括组件使用、数据绑定、样式定制等方面的知识。

Global site tag (gtag.js) - Google Analytics