最新IE代理自动配置脚本

上传人:张哥 文档编号:138407029 上传时间:2022-08-20 格式:DOCX 页数:15 大小:21.13KB
收藏 版权申诉 举报 下载
最新IE代理自动配置脚本_第1页
第1页 / 共15页
最新IE代理自动配置脚本_第2页
第2页 / 共15页
资源描述:

《最新IE代理自动配置脚本》由会员分享,可在线阅读,更多相关《最新IE代理自动配置脚本(15页珍藏版)》请在装配图网上搜索。

1、最新IE代理自动配置脚本我想通过代理自动配置脚本Proxy Auto-Config File来控制用户访问internet,代理效劳器只发布80和443端口客户端只能使用 和 s两种方式访问internet,具体的要求是1:比方说172.16.82.0 网段的客户端通过A代理走2:比方说172.16.83.0 网段的客户端也通过A代理走3: 比方说172.16.84.0 网段的客户端通过B代理走4: 不属于以上三个网段的地址,以上的代理设置不生效。需求:1:请问该pac文件怎么写?2:另外有了这个文件后,整个设置该如何部署生效呢?答复:根据您的描述,我对这个问题的理解是:您想使用Proxy A

2、uto-Config 文件来控制用户访问互联网。如果我的理解有误,请告诉我。Proxy Auto-Config使用的是JavaScript,对于coding的问题,我们建议您与MSDN联系。由于MSDN的相关支持不是由我们新闻组负责的,请您直接拨打该免费 :8008203800,以便于更好的沟通和交流。在此我列出一些Proxy Auto-Config文件的编写,供您参考:172.16.82.0 网段的客户端通过A代理走。172.16.83.0 网段的客户端也通过A代理走。172.16.84.0 网段的客户端通过B代理走。不属于以上三个网段的地址,以上的代理设置不生效。我们假定A代理的IP地址为

3、172.16.1.1, B代理的IP地址为。function FindProxyForURL(url, host)if (shExpMatch(url, :/* ) & (isInNet(myIpAddress(),172.16.82.0,255.255.255.0) | (isInNet(myIpAddress(),172.16.83.0,255.255.255.0)return PROXY 172.16.1.1:80;elseif (shExpMatch(url, :/* ) & (isInNet(myIpAddress(),172.16.84.0,255.255.255.0)return

4、 PROXY 172.16.1.2:80;elseif (shExpMatch(url, s:/* ) & (isInNet(myIpAddress(),172.16.82.0,255.255.255.0) | (isInNet(myIpAddress(),172.16.83.0,255.255.255.0)return PROXY 172.16.1.1:443;elseif (shExpMatch(url, s:/* ) & (isInNet(myIpAddress(),172.16.84.0,255.255.255.0)return PROXY 172.16.1.2:443;elseret

5、urn DIRECT;以上的script仅供您参考。其中isInNet(myIpAddress(),172.16.84.0,255.255.255.0)指的是主机IP地址是网段,shExpMatch(url, :/* )指的是以 :/开头的网站。如果您的PAC文件已经没有错误,您可以在IE中设置来使用该PAC文件。具体做法如下:1. 翻开IE,选择“Internet选项。2. 点击“连接,“局域网设置。3. 选择“使用自动配置脚本,并输入脚本的位置,比方file:/ C:/WINDOWS/system32/drivers/etc。您也可以通过组策略来配置:1. 翻开组策略编辑器,选择“用户配置

6、“Windows设置“Internet Expleror维护“连接。2. 双击“自动配置,选择“启用自动配置,在自动代理选项中中设置该pac文件的路径。如何编写 PAC (Proxy Auto-Config) 文件2022-06-29 16:30PAC文件,就是Proxy Auto-Config文件的简称,事实上是一个javascript脚本。这个文件定义了如何根据浏览器访问url的不同,自动选取适当的代理(proxy)。如何编写PAC文件呢,首先必须定义一个主函数FindProxyForURL,格式如下:function FindProxyForURL(url, host).浏览器在访问每个

7、url的时候都会调用该函数:ret = FindProxyForURL(url, host);函数参数中url 是浏览器访问的完整url地址,例如 :/192.168.1.1:8000/host 是从完整url中截取的子字串,内容是从:/开始到下面第一个/或者:中间的局部,以上面url为例分别为我们来仔细看一下第三个例子,host字段中不包含端口8000。如果有需要,端口号可以从url字段中提取。ret 是字符串变量,根据FindProxyForURL()返回值返回单个字符串。如果返回NULL,即返回空字符串,那么浏览器不会使用任何代理,这样浏览器将无法翻开网页。返回值可以是以下三种结构块的任

8、意组合,每个不同的块之间用分号分割。DIRECT - 不调用代理,直接连接PROXY host:port - 调用指定代理(host:port)SOCKS host:port - 调用指定SOCKS代理(host:port)如果是选用由分号分割的多块设置,按照从左向右,最左边的代理会被最优先调用,除非浏览器无法成功和proxy建立连接,那么下一个配置就会被调用。如果浏览器遇到不可用的代理效劳器,浏览器将在30分钟后自动重试先前无响应的代理效劳器,一个小时后会再次进行尝试,依此类推,每次间隔时间为 30 分钟。这意味着,如果暂时关闭代理效劳器,客户机至多在其重新启动后 30 分钟便会重新开始使用

9、该代理效劳器。如果所有代理效劳器均停用且未指定DIRECT 返回值,浏览器将询问用户是否暂时忽略代理效劳器而尝试直接进行连接。Navigator 将询问是否应在 20 分钟后重试代理效劳器,接着过 20 分钟会再次询问,依此类推,每次间隔时间为 20 分钟。举例PROXY proxy.example :8080; PROXY proxy.example :8081; DIRECT下面是可用于FindProxyForURL()函数体中的条件函数:基于主机名的函数:isPlainHostName()dnsDomainIs()localHostOrDomainIs()isResolvable()is

10、InNet()相关的实用程序函数:dnsResolve()myIpAddress()dnsDomainLevels()基于 URL/主机名 的条件:shExpMatch()基于时间的条件:weekdayRange()dateRange()timeRange()isPlainHostName(host)host 即上文所述不包含端口号的,url中的主机名,下同,不再赘述。如果主机名中不包含域名那么返回true。参考如下:isPlainHostName(www) 返回 true.isPlainHostName( google ) 返回 false.dnsDomainIs(host, domain)

11、domain 用于和hostname进行比拟的域名。如果hostname的域名和domain的值相匹配那么返回true。参考如下:dnsDomainIs( google , .google ) 返回 true.dnsDomainIs(www, .google ) 返回 false.dnsDomainIs( apple , .google ) 返回 false.localHostOrDomainIs(host, hostdom)hostdom 是要进行匹配的指定的主机名。如果hostname和指定的hostdom相匹配,或者在hostname中没有指定要进行匹配的域名局部,函数返回true。参考

12、如下:localHostOrDomainIs( google , google ) 返回 true (exact match).localHostOrDomainIs(www, google ) 返回 true (hostname match, domain not specified).localHostOrDomainIs( apple , google ) 返回 false (domain name mismatch).localHostOrDomainIs(adc.apple , google ) 返回 false (hostname mismatch).isResolvable(ho

13、st)如果成功解析主机名那么返回true。参考如下:isResolvable( google ) 返回 true (除非由于防火墙或某些其他原因导致DNS无法解析).isResolvable(bogus.domain.foobar) 返回 false.isInNet(host, pattern, mask)host 在这里可以是DNS主机名,比方 google ,也可以是IP地址。如果传递的是主机名,此函数会将其解析成 IP 地址。 pattern 是点分隔格式的 IP 地址模式。mask 是IP地址模式掩码,用于确定应对IP地址的哪些局部进行匹配。值为0表示忽略;255表示匹配。如果主机的I

14、P地址与指定的IP地址模式匹配,那么返回true。参考如下:isInNet(host, 198.95.249.79, 255.255.255.255) 如果host的IP地址为198.95.249.79那么返回 true.isInNet(host, 198.95.0.0, 255.255.0.0) 如果host的IP地址为198.95.*.*那么返回 true.dnsResolve(host)host 是要解析的主机名。将给定DNS主机名解析成IP地址,并以点分隔格式的字符串形式将其返回。参考如下:dnsResolve( google ) 返回IP地址 64.233.189.104.myIpA

15、ddress()此函数将以点分隔格式的字符串形式返回运行浏览器的那台计算机的IP地址。dnsDomainLevels(host)返回url主机名中的DNS层数(圆点数)。参考如下:dnsDomainLevels(www) 返回 0dnsDomainLevels( google ) 返回 2shExpMatch(str, shexp)str 是要比拟的任何字符串(例如,url或主机名)。shexp 是用以进行比拟的shell表达式。如果字符串与指定的 shell 表达式匹配,那么此表达式为 true。参考如下:shExpMatch( :/ apple /downloads/macosx/inde

16、x.html, */macosx/*) 返回 true.shExpMatch( :/ apple /downloads/support/index.html, */macosx/*) 返回 false.weekdayRange(wd1, wd2, gmt)wd1 和 wd2 为以下任意一个星期日期字符串: SUN MON TUE WED THU FRI SAT, gmt 或者是字串 GMT 或者省略,前者表示格林威治标准时间,后者表示当地时间。 只有第一个参数wd1是强制性的。wd2、gmt 中的任一个或两者皆可省略。如果只有一个参数,那么此函数将在该参数所表示的星期日期返回true。如果指定

17、字符串GMT作为第二个参数,那么采用GMT时间,否那么采用当地时区的时间。如果wd1和wd2均被定义,那么该条件在当前星期日期介于这两个星期日期之间时为true。首末日期包括在内。参数顺序很重要;MON, “WED 指星期一到星期三,而 “WED, “MON 是从星期三到下周的星期一。weekdayRange(MON, FRI) 从星期一到星期五(当地时区)为 true.weekdayRange(MON, FRI, GMT) 从格林威治标准时间星期一到星期五为 true.weekdayRange(SAT) 当地时间星期六为 true.weekdayRange(SAT, GMT) 格林威治标准时

18、间星期六为 true.weekdayRange(FRI, MON) 从星期五到下星期一为 true (注意,顺序很重要).dateRange(day)dateRange(day1, day2)dateRange(mon)dateRange(month1, month2)dateRange(year)dateRange(year1, year2)dateRange(day1, month1, day2, month2)dateRange(month1, year1, month2, year2)dateRange(day1, month1, year1, day2, month2, year2)

19、dateRange(day1, month1, year1, day2, month2, year2, gmt)day 每月1到31号中的任意一天(整数类型).month 是如下表示月份的字符串中的一个:JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC, year 是表示年份的完整数字,例如1995(而不是95)。整数类型。gmt 或者为字符串GMT,或者保存为空,前者将以格林威治标准时间进行时间比拟,后者假定时间处于当地时区。尽管上面表示的函数语法不是每一个都包含gmt参数,事实上可以在上述9个任一调用配置文件中指定gmt参数,不过,它始终都要作

20、为最后一个参数。如果只指定了单个值(对于每个类别:day、month、year),那么此函数仅在与指定值匹配的日子才会返回true。如果指定了两个值,那么从指定的第一个时间到指定的第二个时间,结果均为truee。首末日期包括在内。参考如下:dateRange(1) 在当地时区每月的第一天为 true.dateRange(1, GMT) 在GMT时间每月的第一天为 true.dateRange(1, 15) 在当地时区每月的1号到15号为 true.dateRange(24, DEC) 在当地时区每年12月24号为 true.dateRange(24, DEC, 1995) 在当地时区1995年

21、12月24号为 true.dateRange(JAN, MAR) 在当地时区每年第一季度(1月到3月)为 true.dateRange(1, JUN, 15, AUG) 在当地时区每年6月1号到8月15号为 true, 首末日期包括在内.dateRange(1, JUN, 15, 1995, AUG, 1995) 在当地时区1995年6月1号到8月15号为 true, 首末日期包括在内.dateRange(OCT, 1995, MAR, 1996) 在当地时区1995年10月到1996年3月为 true.dateRange(1995) 在当地时区1995年为 true.dateRange(19

22、95, 1997) 在当地时区1995年1月1号到1997年12月31号(1995年初到1997年底)为 true.timeRange(hour)timeRange(hour1, hour2)timeRange(hour1, min1, hour2, min2)timeRange(hour1, min1, sec1, hour2, min2, sec2)timeRange(hour1, min1, sec1, hour2, min2, sec2, gmt)hour 是0点(午夜12点)到23点(晚上11点)表示小时的数值中的一个。min 是表示分钟的0到59中的一个值。sec 是表示秒钟的0到

23、59中的一个值。gmt 同上文所述。timerange(12)中午12点到下午1点之间为 true.timerange(12, 13)同上例.timerange(12, GMT)在GMT时间中午12点到下午1点之间为 true.timerange(9, 17)上午9点到下午5点之间为 true.timerange(8, 30, 17, 00)上午8点30分到下午5点之间为 true.timerange(0, 0, 0, 0, 0, 30)午夜0点到其后的30秒内为 true.用本本上网时,往返家里和单位,因为单位是用的代理上网,家里是直接连接.因此每次都要修改IE的代理设置,虽然是个小事,但是

24、每次都要修改总是有点烦,于是参考GOOGLE,写了一个自动配置代理的脚本.这样无论在家和在公司,只要连上局域网就可以上网了.function FindProxyForURL(url,host) if(isPlainHostName(host)|shExpMatch(url, 255.255.255.0) return direct; else if(myIpAddress()=192.168.0.49) return PROXY 192.168.0.6:808; else return direct; 把以上代码另存为proxy.pac的文件,如:c:proxy.pac,然后在IE的菜单里工具

25、-INTEL选项-连接-局域网设置把使用自动配置脚本选上,然后在地址栏填入file:/c:/proxy.pac,注意file后是两斜杠,要使设置生效,需要关闭IE再重新翻开.现在我们介绍下这个proxy.pac脚本文件,脚本的语法是js语法,js的内置函数可以使用,要实现自动配置代理,需要实现FindProxyForURL这个函数,其参数url代表要访问的连接,host代表要访问连接的主机名,该函数有三个返回参数direct:直接连接proxy IP:PORTsocket IP:PORT返回结果大小写不敏感PAC的其他内置语法见PAC脚本另外一个重要的应用是多台代理效劳器并存的情况下,通过pa

26、c脚本的控制:用户随机选择使用多台代理效劳器中的任意一台来到达流量负载均衡的目的;管理员通过PAC脚本控制用户使用和不使用某台代理效劳器,这样可以空出时间对代理效劳器进行维护;让效劳器工作在主备模式,当主效劳器宕机时,会自动切换到其它备用效劳器而不会中断效劳;根据访问目的地的不同,自动选择最正确代理效劳器。下面列举几个PAC的实例,顺便学习下它的语法a、isPlainHostName(host),本例演示判断是否为本地主机,如 :/myservername/ 的方式访问,如果是直接连接,否那么使用代理 function FindProxyForURL(url, host) if (isPlai

27、nHostName(host) return DIRECT; else return PROXY proxy:80; b、dnsDomainIs(host, )、localHostOrDomainIs(host, ),本例演示判断访问主机 是否属于某个域和某个域名,如果属于 pany 域的主机名,而域名不是 和的直接连接,否那么使用代理访问。 function FindProxyForURL(url, host) if (isPlainHostName(host) | dnsDomainIs(host, pany ) & !localHostOrDomainIs(host, ) & !loca

28、lHostOrDomainIs(host, home pany ) 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是否在某个子网内,如果是就直接访问, 否那么就通过代理,例子演示

29、访问清华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、 * 分别用不同的连接方式。 function FindProxyForURL(url, host) if (isPlainHostName(host) return DIRECT; else if (shExpMatch(

30、host, * ) return PROXY comproxy:80; else if (shExpMatch(host, *.edu) return PROXY eduproxy:80; else return PROXY proxy:80; f、url.substring(),本例演示根据不同的协议来选择不同的代理, 、 s、ftp、 gopher分别使用不同的代理。 function FindProxyForURL(url, host) if (url.substring(0, 5) = :) return PROXY proxy:80; else if (url.substring(0

31、, 4) = ftp:) return PROXY fproxy:80; else if (url.substring(0, 7) = gopher:) return PROXY gproxy; else if (url.substring(0, 6) = s:) return PROXY secproxy:8080; else return DIRECT; g、dnsResolve(host),本例演示判断访问主机是否某个IP,如果是就使用代理,否那么直 接连接。 h、myIpAddress(),本例演示判断本地IP是否某个IP,如果是就使用代理,否那么直接使 用连接。 function F

32、indProxyForURL(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; ret

33、urn 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: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!