现在浏览器基本都支持PAC格式的代理脚本。本文仅介绍PAC脚本语法,并不解释使用方法。
参考文档:
https://en.wikipedia.org/wiki/Proxy_auto-config#DnsResolve
http://www.360doc.com/content/12/0618/16/2633_219014023.shtml

示例脚本

function FindProxyForURL(url, host) {// our local URLs from the domains below example.com don't need a proxy:if (shExpMatch(host, "*.example.com")){return "DIRECT";}// URLs within this network are accessed through// port 8080 on fastproxy.example.com:if (isInNet(host, "10.0.0.0", "255.255.248.0")){return "PROXY fastproxy.example.com:8080";}// All other requests go through port 8080 of proxy.example.com.// should that fail to respond, go directly to the WWW:return "PROXY proxy.example.com:8080; DIRECT";
}

主体

PAC脚本主体是一个FindProxyForURL的JS函数。函数的反回值有三类:

function FindProxyForURL(url,host)
{if(host=="http://www.domain.com/") return "DIRECT";return "PROXY myproxy:80;PROXY myotherproxy:8080;DIRECT";}

函数

isPlainHostName(host)

判断是否是本地主机

dnsDomainIs(host,domain) localHostOrDomainIs(host,”“)

判断访问主机是否属于某个域和某个域名
示例:

function FindProxyForURL(url, host)
{if ((isPlainHostName(host) ||dnsDomainIs(host, ".company.com")) &&!localHostOrDomainIs(host, "http://www.company.com/") &&!localHostOrDomainIs(host, "home.company.com"))return "DIRECT";elsereturn "PROXY proxy:80";
}

isResolvable(host)

主机名是否能被dns服务器解析

function FindProxyForURL(url, host)
{if (isResolvable(host))return "DIRECT";elsereturn "PROXY proxy:80";
}

isInNet(host,”“,”“)

访问IP是否在某个子网内

function FindProxyForURL(url, host)
{if (isInNet(host, "166.111.0.0", "255.255.0.0"))return "DIRECT";elsereturn "PROXY proxy:80";
}

shExpMatch(host,”“)

主机名判断

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";elsereturn "PROXY proxy:80";
}

url.substring(0,n)

截取协议字符串

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";}
}

dnsResolve(host)

域名ip解析

unction FindProxyForURL(url, host)
{
if (dnsResolve(host) == "166.111.8.237") {
return "PROXY secproxy:8080";
}
else {
return "PROXY proxy:80";
}
}

myIpAddress

本地IP

function FindProxyForURL(url, host)
{if (myIpAddress() == "166.111.8.238") {return "PROXY proxy:80";
}
else {return "DIRECT";
}
}

dnsDomainLevels(host)

几级域名

function FindProxyForURL(url, host)
{if (dnsDomainLevels(host) > 0) { // if number of dots in host > 0return "PROXY proxy:80";}return "DIRECT";
}

weekdayRange

星期几

function FindProxyForURL(url, host)
{if(weekdayRange("WED", "SAT", "GMT"))return "PROXY proxy:80";elsereturn "DIRECT";
}

Math数学函数

通用js函数

Math.floor(Math.random()*5)

其它

iis设置mime

“扩展名”填 .pac
“MIME类型”填 .txt 或者 .h

PAC脚本语法(代理自动配置)相关推荐

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

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

  2. win 10 使用本地代理自动配置pac

    win 10 使用本地代理自动配置pac 1.修改注册表 以下内容保为pac.reg,双击.或手动修改注册表. Windows Registry Editor Version 5.00[HKEY_LO ...

  3. Android 代理自动配置PAC研究

    Android 代理自动配置PAC研究 环境 小米6 MIUI9.2 Android7.1.1 MacOS 10.13.3 Charles 4.0.2 什么是PAC PAC,全称Proxy Auto ...

  4. 详解代理自动配置 PAC

    转自知乎 最近一直在做跨域中华局域网的工作,了解了很多代理知识和基础概念,很零散,也很细碎.希望通过一段时间的学习,能够自由地穿梭在国际互联网和中华局域网之间.后续会写一系列文章记录我了解到的知识点, ...

  5. 代理自动配置PAC学习

    什么是 PAC PAC,一个自动代理配置脚本,包含了很多使用 JavaScript 编写的规则,它能够决定网络流量走默认通道还是代理服务器通道,控制的流量类型包括:HTTP.HTTPS 和 FTP. ...

  6. 【pac文件】win10自动配置代理

    目的 手动代理:所有地址经过代理,指定ip不经过代理 现在需求:实现指定ip范围才使用该代理 可以通过"自动设置代理"的方式实现 准备 已有代理地址,如:192.168.18.10 ...

  7. 代理自动配置文件PAC的使用方法

    注意:          1.微软从Internet Explorer(IE)11版本开始,已经弃用本地PAC文件的方式(也就是我们说的"file://"方式)配置自动代理了,只能 ...

  8. PAC 代理自动发现简介

    一 简介 1.1 什么是PAC文件 代理自动配置(PAC)文件包含一组用javaScript编码的规则,允许web浏览器确定是将Web流量直接发送到Internet还是通过代理服务器发送       ...

  9. springboot自动配置原理

    概述 Springboot的基本认识 对于Spring框架,我们接触得比较多的是Spring mvc,Spring IOC.AOP.DI.而这框架如果在使用过程中,随着项目越来越大,引入的技术越来越多 ...

最新文章

  1. Good Luck!_JAVA
  2. 程序员面试题精选100题(06)-二元查找树的后序遍历结果[数据结构]
  3. 20144306《网络对抗》Web基础
  4. 【Linux学习】Linux的文件权限(一)
  5. 众多SEO专家集体盛赞
  6. Linux下安装和配置solr/tomcat/IK分词器 详细实例二.
  7. linux进程退出没有log,Linux下应用进程消失原因分析-Go语言中文社区
  8. PHP获取远程文件内容
  9. 【转】freetextbox的ToolBarLayout属性设置
  10. 信安教程第二版-第19章操作系统安全保护
  11. codeblocks哪个字体最舒服_如果给你一百万让你放弃一种美食永远不吃,你会放弃哪个?...
  12. c语言 去掉双引号_技术分享|浅谈C语言陷阱和缺陷
  13. openshift启动失败
  14. leetcode python3 简单题1.Two Sum
  15. java nio connect_服务器或客户端上的Java NIO套接字在什么时...
  16. 【原】移动web页面兼容处理的思考
  17. 自动控制原理复习——第二章 控制系统的数学模型,系统框图简化,信号流图,梅森公式,控制系统的传递函数(详细介绍)
  18. 好用的局域网共享工具
  19. coso全称是什么_COSO更新有关企业风险管理的草案
  20. ASP.NET Core 解决控制台输出日志内容前面[40m等乱码字符

热门文章

  1. 个人知识体系(持续更新)
  2. unity 如何制作成网页游戏版本
  3. 昱章电气在科创板IPO终止:曾计划募资约5亿元,客户集中度较高
  4. 学习PLC有什么好方法吗
  5. Dom轮播图 三级联动 Dom常用尺寸
  6. 3D激光雷达和相机融合
  7. 如何让便签的提醒事项间隔一段时间再次提醒
  8. 点击查看图片---弹窗直接显示图片并带关闭按钮
  9. PHP对接阿里云虚拟号-号码隐私保护
  10. 智能家居的发展简史,未来的发展方向有哪些