首先,这博文要是在知道什么是代理或如何使用代理的基础上的。如果不清楚,请查看下代理的有关方面的知识。

在这里主要是讲代理动态配置PAC(proxy auto config),它实际上是一个 Script;经由编写这个 Script,我们可以让系统判断在怎么样的情形下,要利用哪一台 Proxy 来进行联机。这样做主要的好处有:

1.分散 Proxy 的流量,避免 Proxy Server 负载过高

2.针对个别条件设定进行代理、加快浏览速度

3.设定要求顺序,在某台 Proxy 无法联机时,可自动尝试别种联机方式

Proxy Auto Config File 的格式

基本上 Proxy Auto Config File(以下简称 PAC)是一个纯文字文件,他的语法采用 JavaScript;所以建议要学习编写 PAC 的人,最好先学习基本的 JavaScript。一个 PAC 档必需是单独的JavaScript,其中不能包含任何 HTML 标签。

在 PAC 档中,一定要定义 Function FindProxyForURL 如下:

function FindProxyForURL( url, host )

{

...

}

如果使用了 PAC 档,则浏览器在接受我们要求的网址后,会去执行

ret = FindProxyForURL( url, host );

这样的指令。其中,url 是所要求网址的完整路径,host 是对方的计算机名称(就是在 :// 和 / 之中的部份);而 return 值 ret 则是 Proxy 的组态,它的格式有下列三种:

·DIRECT直接联机而不透过 Proxy

·PROXY host:port使用指定的 Proxy 伺服机

·SOCKS host:port使用指定的 Socks 伺服机

比如说当浏览器得到的是Proxy proxy.a.com:3128; Proxy proxy.b.com:3128; DIRECT的话,那浏览器会先尝试透过 proxy.a.com 来开启网页,如果无法使用,则尝试proxy.b.com,还是不行的话,就直接联机。

######################################### 函数介绍 #################################

PAC 中特别的 Function

在 PAC 中,除了可以使用一般 JavaScript 的 Function 外,它还定义了一些特别的 Function 可以使用:

·isPlainHostName()

·dnsDomainIs()

·localHostOrDomainIs()

·isResolvable()

·isInNet()

·dnsResolve()

·myIpAddress()

·dnsDomainLevels()

·shExpMatch()

·weekdayRange()

·dateRange()

·timeRange()

isPlainHostName( host )

host由网址取得的主机名称。

此 Function 会判断 host 是否为不包含网域 (Domain)。如果是,则 return true;如果包含,则return false。

范例:

1.isPlainHostName("www") 会 return true

2.isPlainHostName("www.netscape.com") 会 return false

dnsDomainIs( host, domain )

host由网址取得的主机名称。
domain指定的网域。

此 Function 会判断 host 是否属于网域 domain。如果是,则 return true;否,则 return false。

范例:

1.dnsDomainIs("www.netscape.com", ".netscape.com") 会 return true

2.dnsDomainIs("www", ".netscape.com") 会 return false

3.dnsDomainIs("www.mcom.com", ".netscape.com") 会 return false

localHostOrDomainIs( host, hostdom )

host由网址取得的主机名称。
hostdom完整的网域名称。

此 Function 会判断 host 是否为 hostdom,或 host 是否为 hostdom 的主机名称。如果是,则 return true;否,则 return false。

范例:

1.localHostOrDomainIs("www.netscape.com", "www.netscape.com") 会 return true (完全相同)

2.localHostOrDomainIs("www", "www.netscape.com") 会 return true (主机名称相同)

3.localHostOrDomainIs("www.mcom.com", "www.netscape.com") 会 return false (网域不同)

4.localHostOrDomainIs("home.netscape.com", "www.netscape.com") 会 return false (主机名称不同)

isResolvable( host )

host由网址取得的主机名称。

此 Function 会尝试透过 DNS 去解析 host,如果解析成功,则 return true;否则 return false。

范例:

1.isResolvable("www.netscape.com") 会 return true (除非 DNS 无法正常运作)

2.isResolvable("bogus.domain.foobar") 会 return false (除非真的冒出这个 domain 出来…)

isInNet( host, pattern, mask )

host主机名称,可以是 Domain Name 或 IP。如果是 Domain Name,则会透过 DNS 查出 IP。
pattern IP。
mask对应于 pattern 的屏蔽。

此 Function 会 host 是否在指定的 IP 范围内,如果是,则 return true;否则 return false。

范例:

1.isInNet(host, "198.95.249.79", "255.255.255.255") 当 host 为 198.95.249.79 时,会 return true。

2.isInNet(host, "140.115.0.0", "255.255.0.0") 当 host 为 140.115.*.* 时,会 return true。

dnsResolve( host )

host要透过 DNS 解晰的主机名称。

此 Function 会透过 DNS 去解析 host,return 值即为解析之结果。

范例:

1.dnsResolve("www.math.ncu.edu.tw") 会 return "140.115.25.9"。

myIpAddress()

此 Function 会 return 浏览器所在计算机之 IP 地址。

dnsDomainLevels( host )

host由网址取得的主机名称。

此 Function 会 return host 的 Domain 层数(点的数目)。

范例:

1.dnsDomainLevels("www") 会 return 0。

2.dnsDomainLevels("www.netscape.com") 会 return 2。

shExpMatch( str, shexp )

str要进行比对的字符串。
shexp比对的条件。

此 Function 会比对 str 是否符合 shexp 的表示式(此表示式为 shell expression 而非 regular expressions)。如果是,则 return true;否则 return false。

范例:

1.shExpMatch("http://home.netscape.com/people/ari/index.html", "*/ari/*") 会 return true

2.shExpMatch("http://home.netscape.com/people/montulli/index.html", "*/ari/*") 会 return false

weekdayRange()dateRange()timeRange()

这三个 Function 的功用都是检查线在时间是否在指定范围内,用这些 Function 就可以设定分时段使用 Proxy Server。但由于较为繁琐,如有兴趣或需要,请参考原始文件

################################ 事例proxy.pac ###############################

function FindProxyURL(url,host){

if(

dnsDomainIs(host,"www.qq.com") ||

dnsDomainIs(host,"www.weibo.com")

){

return "PROXY proxy.a.com:80" ;

}

return "DIRECT";

}

解释:如果访问的主机名是"www.qq.com"或者"www.weibo.com"的就使用代理服务器(proxy.a.com:80)进行访问,其他的则可以直接访问。

至此,自动代理的配置文件基本上可以写完了。剩下的就是使用部分了.

在浏览器中都会有使用代理功能,如Chrome下图:

可以看到有“更改代理服器设置”的按钮,点击就会弹出右边的“Internet 连接”的属性选项卡,其中的“连接部分”。

因为在这里的局域网使用的本地连接上网,所以我使用的是“局域网网设置”,就会弹出其设置的对话框,如下图:

按上面的配置,在“地址”处填写代理的配置文件的url路径,本地和网络的都可以,只要能访部到就可以了。


至此,已经大功告成了.

转载于:https://blog.51cto.com/plong/1303422

自动代理proxy.pac相关推荐

  1. ubunut自动代理文件pac的生成

    1-安装genpac sudo pip install genpac 2-先把SS调整到全局模式  系统设置->网络->网络代理->Sock主机号设置为127.0.0.1 端口108 ...

  2. PAC自动代理文件格式,教你如何写PAC文件

    前些天,同事给我抱怨,公司的GPO强制更改了笔记本的IE代理服务器,在办公室还好,一回家就上不了网了,必须手动更改代理设置,真是麻烦.我想了想,proxy.pac自动代理文件应该可以解决这个问题,于是 ...

  3. 如何通过组策略配置proxy.pac

    前些天,同事给我抱怨,公司的GPO强制更改了笔记本的IE代理服务器,在办公室还好,一回家就上不了网了,必须手动更改代理设置,真是麻烦.我想了想,proxy.pac自动代理文件应该可以解决这个问题,于是 ...

  4. 代理proxy网络代理自动发现wpad代理自动配置pac三个概念解析

    这里使用代理不是目的,抓包和修改请求和响应数据才是目的,使用代理只是为了实现抓包这个目的. 无代理模式 数据直来直往,浏览还可以通过devtools查看到接口的请求和响应数据,但是客户端无法查看和修改 ...

  5. PAC (proxy auto-config) 自动代理

    代理是个好东西,帮你节省时间,减少麻烦.今天讲一个自动代理文件格式-PAC,它是微软发明的,1999年就提交到了IETF标准化组织,但后来就没有下文了,好在常见的浏览器(Firefox,IE,Safa ...

  6. 转-IE浏览器自动配置代理脚本-Proxy.PAC文件及PAC相关语法

    用笔记本上网时,往返家里和单位,因为单位是用的代理上网,家里是直接连接.因此每次都要修改IE的代理设置,虽然是个小事,但是每次都要修改总是有点烦 ,于是参考GOOGLE,写了一个自动配置代理的脚本.这 ...

  7. 浅析PAC,修改PAC文件及user-rule文件实现自动代理

    浅析PAC,修改PAC文件及user-rule文件实现自动代理 代理自动配置(英语:Proxy auto-config,简称PAC)是一种网页浏览器技术,用于定义浏览器该如何自动选择适当的代理服务器来 ...

  8. 关于:自动代理 pac 文件示例

    // ======================================================================= // Proxy.pac // ========= ...

  9. 谈谈privoxy:关于广告过滤和自动代理切换

    转载自品略图书馆 http://www.pinlue.com/article/2020/04/0206/0310102132438.html privoxy:广告过滤和自动代理切换 最初用Privox ...

最新文章

  1. leecode---46---数组,dfs---求出数组的所有组合
  2. IT职场中外企面试最爱提的问题TOP10
  3. Python入门图文解说
  4. C++11中Thread类简单使用的例子
  5. 8.ActionContext类与Servlet API解耦的访问方式
  6. admin.php wordpress,wordpress 中使用自带 admin-ajax.php
  7. Web容器初始化过程
  8. 帆软9.0动态列之解决动态列的分组统计问题
  9. centos查看dns缓存_Linux下刷新DNS缓存(Ubuntu/CentOS)
  10. C/C++程序设计题
  11. 金晨想在无人车上劈叉,撒贝宁与数字祝融号对话…这届百度世界大会,有被惊艳到...
  12. 网络发现不了其他计算机,win10网络发现不了其他电脑怎么办_win10网络里找不到其他电脑如何处理...
  13. 【kuangbin】简单搜索 - 13.非常可乐【BFS】
  14. druid字段级_Druid配置
  15. 工具系列——XMind 8 Update 7的破解步骤
  16. mysql proxy atlas_mysql-proxy Atlas
  17. Python利用requests抓取页面源代码(基础)
  18. 推荐这款,SpringBoot 开源商城系统,挣钱太轻松了
  19. 2022年成都粘胶纤维产业申报条件、材料、流程
  20. mysql5.7.19收费》_mysql5.7.19安装

热门文章

  1. 使用ZeroTier组建异地虚拟局域网
  2. 华南师范学院研究生计算机分数线,2020华南师范大学研究生分数线汇总(含2016-2020历年复试)...
  3. 华南理工大学计算机研究生复试机试复习
  4. Serverless 开发,基于 IoT物联网 + 表格存储DB + DataV 搭建实时环境监控大屏
  5. java背单词软件_图灵单词王手机背单词软件大学版 For JAVA
  6. CSIG AI前沿技术培训首期开讲,携手百度飞桨走进北科大开启深度学习实战
  7. 【上海科技大学】考研初试复试资料分享
  8. 【记录ROS学习(五)2022/08/27】Win版ROS/Noetic 如何添加必要的依赖(rosdep)
  9. UWB-DW1000的天线延迟补偿和发射功率调节(二)
  10. 计算机毕业设计之java+springboot基于vue的漫画之家系统-动漫信息网站