通过SwitchyOmega插件实现Chrome的PAC模式代理网络连接
文章目录
- 通过SwitchyOmega插件实现Chrome的PAC模式代理网络连接
- SwitchyOmega的安装
- PAC脚本示例
- 示例 1:如果主机是本地主机,则直接连接
- 示例 2:如果主机在防火墙内部,则直接连接
- 示例 3:如果主机名可解析,则直接连接
- 示例 4:如果主机在指定的子网中,则直接连接
- 示例 5:根据主机域确定连接类型
- 示例 6:根据协议确定连接类型
- 示例 7:根据与 IP 地址匹配的主机名确定代理服务器
- 示例 8:如果主机 IP 地址与指定 IP 地址匹配,则使用代理服务器连接
- 示例 9:如果主机名中有句点,则使用代理服务器连接
- 示例 10:根据特定的星期几使用代理服务器连接
SwitchyOmega的安装
SwitchyOmega插件下载地址:https://github.com/FelisCatus/SwitchyOmega/releases
安装后打开SwitchyOmega配置,点击“圆圈"图标,选择“选项配置”。
新建情景模式
选择PAC模式
根据自己的网络配置进行PAC脚本编写,在编写完成之后,需要点击”应用选项“保存。
PAC脚本示例
PAC即使用自动代理配置脚本优化性能 ,PAC脚本采用javaScript脚本语言编写。
示例 1:如果主机是本地主机,则直接连接
在此示例中,如果主机是本地主机,则可以直接连接。 但是,如果服务器不是本地服务器,则必须通过代理服务器连接。 isPlainHostName
函数将检查主机名中是否存在任何句点 (.)。 如果该函数发现句点,则意味着主机不是本地主机,它将返回 False。 否则,该函数将返回 True。
function FindProxyForURL(url, host){
if (isPlainHostName(host))
return "DIRECT";
else
return "PROXY proxy:80";
}
示例 2:如果主机在防火墙内部,则直接连接
在此示例中,如果主机在防火墙内部,则可以直接连接。 但是,如果服务器在防火墙外部,则必须通过代理服务器连接。 具体而言,localHostOrDomainIs
函数将仅针对本地域中的 URL 运行。 如果主机域名与提供的域信息匹配,dnsDomainIs
函数将返回 True。
function FindProxyForURL(url, host) {
if ((isPlainHostName(host) ||
dnsDomainIs(host, ".company.com")) &&
!localHostOrDomainIs(host, "www.company.com") &&
!localHostOrDoaminIs(host, "home.company.com"))
return "DIRECT";
else
return "PROXY proxy:80";
}
示例 3:如果主机名可解析,则直接连接
在此示例中,如果主机名可解析,则可以直接连接。 但是,如果无法解析该名称,则服务器必须通过代理服务器连接。 具体而言,此函数会请求 DNS 服务器解析传递给它的主机名。 如果该名称可以解析,则进行直接连接。 如果该名称无法解析,则使用代理进行连接。 这在使用内部 DNS 服务器解析所有内部主机名时十分有用。
重要提示
isResolvable
函数将查询域名系统 (DNS) 服务器。 对 Object Model 对象、属性或方法的引用将导致代理自动配置文件以静默方式失败。 例如,所有 window.open(...)
、alert(...)
和 password(...)
引用都将导致代理自动配置文件失败。
function FindProxyForURL(url, host) {
if (isResolvable(host))
return "DIRECT";
else
return "PROXY proxy:80";
}
示例 4:如果主机在指定的子网中,则直接连接
在此示例中,如果主机在指定的子网中,则可以直接连接。 但是,如果服务器在指定的子网外部,则必须通过代理服务器连接。 具体而言,如果主机 IP 地址匹配特定的模式, isInNet
(主机、模式、掩码)函数将返回 Ture。 掩码指示要匹配的 IP 地址的哪一部分(255=匹配,0=忽略)。
重要提示
isInNet
函数将查询 DNS 服务器。 对 Object Model 对象、属性或方法的引用将导致代理自动配置文件以静默方式失败。 例如,所有 window.open(...)
、alert(...)
和 password(...)
引用都将导致代理自动配置文件失败。
function FindProxyForURL(url, host) {
if (isInNet(host, "999.99.9.9", "255.0.255.0"))
return "DIRECT";
else
return "PROXY proxy:80";
}
示例 5:根据主机域确定连接类型
在此示例中,如果主机是本地主机,服务器可以直接连接。 但是,如果主机不是本地主机,此函数将根据主机域确定使用哪个代理。 具体而言,如果 shExpMatch(str, shexp)
匹配使用 shell 表达式模式的 str
,则 shexp
函数返回 True。 这在主机域名是用于代理选择的一个条件时十分有用。
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";
}
示例 6:根据协议确定连接类型
在此示例中,将从服务器中提取正在使用的协议,并将其用于选择代理。 如果没有匹配的协议,服务器将直接连接。 具体而言,substring
函数将从字符串中提取指定数目的字符。 这在协议是用于代理选择的一个条件时十分有用。
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, 6) == "https:") {
return "PROXY secproxy:8080";
}
else {
return "DIRECT";
}
}
示例 7:根据与 IP 地址匹配的主机名确定代理服务器
在此示例中,通过将主机名转换为 IP 地址,然后将该地址与指定的字符串进行比较来选择代理服务器。
重要提示
dnsResolve
函数将查询 DNS 服务器。 对 Object Model 对象、属性或方法的引用将导致代理自动配置文件以静默方式失败。 例如,所有 window.open(...)
、alert(...)
和 password(...)
引用都将导致代理自动配置文件失败。
function FindProxyForURL(url, host) {
if (dnsResolve(host) == "999.99.99.999") { // = https://secproxy
return "PROXY secproxy:8080";
}
else {
return "PROXY proxy:80";
}
}
示例 8:如果主机 IP 地址与指定 IP 地址匹配,则使用代理服务器连接
在此示例中,通过显式获取 IP 地址,然后将其与指定字符串进行比较来选择代理服务器。 如果没有匹配的协议,服务器将直接连接。 具体而言,myIpAddress
函数将返回运行浏览器的主机的 IP 地址(采用整数句点格式)。
function FindProxyForURL(url, host) {
if (myIpAddress() == "999.99.999.99") {
return "PROXY proxy:80";
}
else {
return "DIRECT";
}
}
示例 9:如果主机名中有句点,则使用代理服务器连接
在此示例中,函数将检查主机名中是否存在句点 (.)。 如果存在任何句点,将使用代理服务器连接。 如果没有句点,将直接连接。 具体而言,dnsDomainLevels
函数将返回与主机名中句点数目相等的整数。
注意
这是根据主机名特征确定连接类型的另一种方法。
function FindProxyForURL(url, host) {
if (dnsDomainLevels(host) > 0) { // if the number of periods in host > 0
return "PROXY proxy:80";
}
return "DIRECT";
}
示例 10:根据特定的星期几使用代理服务器连接
在此示例中,函数将根据星期几确定是否连接到代理服务器。 在指定日期参数范围之外的日期连接可以使服务器进行直接连接。 具体而言, weekdayRange(day1 [,day2] [,GMT] )
函数将返回当前系统时间是否位于参 day1
、 day2
和 GMT
指定的范围之内。 只有第一个参数是必需的。 GMT 参数假定时间值为格林威治标准时间而不在本地时区。 对于希望在通信繁忙时使用代理服务器,但在通信量较少时允许直接连接的情况,此函数将十分有用。
function FindProxyForURL(url, host) {
if (weekdayRange("WED", "SAT", "GMT"))
return "PROXY proxy:80";
else
return "DIRECT";
}