局域网设置自动配置脚本文件的写法与用途

因为有朋友在深圳大学,他们学校的网络比较变态。如果访问了教育网指定的免费IP之外的IP,每M 6元钱。 
我本来想教她用二级代理之类的,不过无奈这个对她来讲太难了。所以权宜之下,我只好让她使用IE的自动配置脚本文件来限制以防万一,至少能保证她在使用浏览器上网的时候不会因为不小心访问了收费的IP而挨宰。 
虽然说这么变态的学校不多,但是终究还是有的,所以把自动配置脚本文件的写法写出来,如果有需要的朋友可以参考着来。 
首先我们先来介绍一下自动配置脚本文件: 
打开IE,点击"工具"--"Internet选项"--"局域网设置",你就可以看到"使用自动配置脚本" 
自动配置脚本起的作用就是,当IE访问网页的时候会根据脚本文件里面界定的内容来访问。比方说,你在脚本文件里面限定了访问某些IP使用某个代理的时候,访问另外一些IP使用另外的代理,这就很方便通过脚本文件来完成。 
一个PAC文件其实就是一个文本文件,最简单的格式就是包含一个叫FindProxyForURL的JScript函数,IE通过传入两个变量来调用这个函数,一个是用户浏览的地址URL全路经,一个是这个URL中的主机名部分(host)。 
这个FindProxyForURL函数有三种可能的字符串返回值,一是"DIRECT",就是直接连接,不通过代理;二是"PROXY proxyaddr:port",其中proxyaddr和port分别是代理的地址和代理的端口;三是"SOCKS socksaddr:port",其中socksaddr和port分别是socks代理的地址和端口,一个自动代理文件可以是多个选择的组合,其中用分号(;)隔开,如: 
function FindProxyForURL(url,host) 

if (host == "www.mydomain.com") 
return "DIRECT"; 
return "PROXY myproxy:80; 
PROXY myotherproxy:8080; 
DIRECT"; 

下面是代理脚本可能用到的函数和说明(英文不好的朋友可以直接跳过去看应用): 
PAC Helper Functions 
dnsDomainIs(host, domain) Returns true if the host is part of the specified domain, false otherwise. 
isInNet(hostname, Resolves the hostname and subnet IP, subnet mask) returns true if the hostname is within the subnet 
specified by the IP address and the subnet mask, false otherwise. 
isPlainHostName(host) Returns true if there are no dots in the hostname, false otherwise. 
isResolvable(host) Internet Explorer tries to resolve the hostname through DNS and returns true if successful, false otherwise. 
localHostOrDomainIs Returns true if the host matches (host, domain) the host portion of the domain, or if the host matches the host and domain portions of the domain, false otherwise. (Executed only for URLs in the local domain.) 
dnsDomainLevels(host) Returns the number of dots in the hostname. 
dnsResolve(host) Returns a string containing the IP address of the specified host. 
myIPAddress( ) Returns a string containing the local machine's IP address. 
shExpMatch(url, shexp) Returns true if the supplied URL matches the specified shell expression, false otherwise. 
dateRange(parmList) Returns true if the current date falls within the dates specified in parmList, false otherwise. 
timeRange(parmList) Returns true if the current time falls within the times specified in parmList, false otherwise. 
weekdayRange(parmList) Returns true if today is within the days of the week specified in parmList, false otherwise. 
下面是各个函数应用的例子: 
作者: xmudahai 2006-10-17 00:33   回复此发言 
--------------------------------------------------------------------------------
2 自动配置脚本文件的写法与用途(原创) 
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域的主机名,而域名不是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,如果是就使用代理,否则直接连接。 
unction 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; 


利用上面的函数和例子说明,大家就可以写出比较复杂有效的自动代理脚本。

(0)

相关推荐

  • 局域网设置自动配置脚本文件的写法与用途

    因为有朋友在深圳大学,他们学校的网络比较变态.如果访问了教育网指定的免费IP之外的IP,每M 6元钱.  我本来想教她用二级代理之类的,不过无奈这个对她来讲太难了.所以权宜之下,我只好让她使用IE的自动配置脚本文件来限制以防万一,至少能保证她在使用浏览器上网的时候不会因为不小心访问了收费的IP而挨宰.  虽然说这么变态的学校不多,但是终究还是有的,所以把自动配置脚本文件的写法写出来,如果有需要的朋友可以参考着来.  首先我们先来介绍一下自动配置脚本文件:  打开IE,点击"工具"--&

  • Linux下使用shell脚本自动执行脚本文件

    以下实例本人在Centos6.5 64位操作系统中使用 一.定时复制文件 a.在/usr/local/wfjb_web_back目录下创建 tomcatBack.sh文件 文件内容: #将tomcat中的应用wfjb_web 复制到 /usr/local/wfjb_web_back/tomcat_back/目录下 并按照日期作为文件名称 cp -af /usr/local/apache-tomcat-7.0.73/webapps/wfjb_web /usr/local/wfjb_web_back

  • linux adsl 拨号自动配置脚本的方法

    在使用动态vps服务器的时候发现一枚已经写好的自动配置拨号的shell脚本,分享一下,免去手动配置的烦恼,代码如下 #! /bin/sh PATH=/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin Log=/var/log/pppoe.log sed -i '/^GATEWAY/d' /etc/sysconfig/network-scripts/ifcfg-et

  • 初识Spring Boot框架之Spring Boot的自动配置

    在上篇博客初识Spring Boot框架中我们初步见识了SpringBoot的方便之处,很多小伙伴可能也会好奇这个spring Boot是怎么实现自动配置的,那么今天我就带小伙伴我们自己来实现一个简单的Spring Boot 自动配置的案例,看看这一切到底是怎么发生的. 假设我的需求是这样的:当我的项目中存在某个类的时候,系统自动为我配置该类的Bean,同时,我这个Bean的属性还可以在application.properties中进行配置,OK,就这样一个需求,我们来看看怎么实现. 1.新建s

  • Nginx缓存文件与动态文件自动均衡的配置脚本

    nginx Nginx (engine x) 是一个高性能的HTTP和反向代理服务,也是一个IMAP/POP3/SMTP服务.Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日. Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行.其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服

  • CentOS中使用Shell脚本实现每天自动备份网站文件和数据库并上传到FTP中

    一.安装Email发送程序 复制代码 代码如下: yum install sendmail mutt 二.安装FTP客户端程序 本脚本需要用到FTP客户端程序将文件上传到FTP空间上面,因此必须安装FTP客户端,否则将出现ftp命令无法找到的错误. 安装步骤请参考:<CentOS提示ftp:command not found> 三.在/root目录下新建脚本文件:AutoBackupToFtp.sh,内容如下: 复制代码 代码如下: #!/bin/bash #你要修改的地方从这里开始 MYSQ

  • 如何通过shell脚本自动生成vue文件详解

    前言 最近在写nuxt项目时候每次新建页面都要去新建然后引入各种需要的依赖很是麻烦,所以想写一个脚本自动生成文件 省去手动新建 现写下实现方法 给大家参考 Mac下可直接运行 Windows下需要安装Cygwin类软件且配置环境变量后运行 使用方法 1.需要修改package.json 的scrpts 加一条create 或者自定义名字 主要是为了我们在terminal中输入指令后运行对应的脚本 package.json 2.在项目根目录新建一个template文件夹放自己的模板文件 文件内容根

  • Python设置在shell脚本中自动补全功能的方法

    本篇博客将会简短的介绍,如何在ubuntu中设置python自动补全功能. 需求:由于python中的内建函数较多,我们在百纳乘时,可能记不清函数的名字,同时自动补全功能,加快了我们开发的效率. 方法以及要求:设置过程中需要看客具备一点ubuntu的基本知识,当然不懂也没有关系,跟着一步一步走,不懂得可以学习一下ubuntu的文件系统. 具体步骤 1.首先创建一个文件:~/.pythonrc 在ubuntu中创建文件的命令为: sudo gedit ~/.pythonrc #sudo表示使用管理

  • springboot自动配置原理以及spring.factories文件的作用详解

    目录 一.springboot 自动配置原理 二.spring.factories文件的作用 spring.factories 的妙用 什么是 SPI 机制? Spring Boot 中的 SPI 机制 Spring Factories 实现原理是什么? Spring Factories 在 Spring Boot 中的应用 一.springboot 自动配置原理 先说说我们自己的应用程序中Bean加入容器的办法: package com.ynunicom.dc.dingdingcontract

  • vue项目如何让局域网ip访问配置设置

    目录 vue让局域网ip访问配置设置 vue局域网使用ip无法访问的解决 vue让局域网ip访问配置设置 在开发中,为了让同一局域网的小伙伴,都可以通过IP地址访问到vue-cli搭建的项目,要怎么配置呢? 第一步:修改config文件中找到 index.js 文件的host改成 ‘0.0.0.0’ 第二步:检查 package.json 文件里进行配置,scripts.dev配置是否设置 host为‘0.0.0.0’ 这里我要强调下,第一步和第二步都有ip,其实第二步优先级高,这里第二步的ho

随机推荐