我想通过代理自动配置脚本Proxy Auto-Config File来控制用户访问internet,代理服务器只发布80和443端口(客户端只能使用http和https两种方式访问internet),具体的要求是
1:比如说172.16.82.0 网段的客户端通过A代理走
2:比如说172.16.83.0 网段的客户端也通过A代理走
3: 比如说172.16.84.0 网段的客户端通过B代理走
4: 不属于以上三个网段的地址,以上的代理设置不生效。
需求:
1:请问该pac文件怎么写?
2:另外有了这个文件后,整个设置该如何部署生效呢?
1:比如说172.16.82.0 网段的客户端通过A代理走
2:比如说172.16.83.0 网段的客户端也通过A代理走
3: 比如说172.16.84.0 网段的客户端通过B代理走
4: 不属于以上三个网段的地址,以上的代理设置不生效。
需求:
1:请问该pac文件怎么写?
2:另外有了这个文件后,整个设置该如何部署生效呢?
回答:根据您的描述,我对这个问题的理解是:您想使用Proxy Auto-Config 文件来控制用户访问互联网。如果我的理解有误,请告诉我。
Proxy Auto-Config使用的是JavaScript,对于coding的问题,我们建议您与MSDN联系。由
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地址为172.16.1.1, B代理的IP地址为172.16.1.2。
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";
else
172.16.82.0 网段的客户端通过A代理走。
172.16.83.0 网段的客户端也通过A代理走。
172.16.84.0 网段的客户端通过B代理走。
不属于以上三个网段的地址,以上的代理设置不生效。
我们假定A代理的IP地址为172.16.1.1, B代理的IP地址为172.16.1.2。
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";
else
if (shExpMatch(url, "* ")) && (isInNet(myIpAddress(),"172.16.84.0","255.255.255.0"))
return "PROXY 172.16.1.2:80";
else
{
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:443";
else
if (shExpMatch(url, "* ")) && (isInNet(myIpAddress(),"172.16.84.0","255.255.255.0"))
return "PROXY 172.16.1.2:443";
else
return "DIRECT";
}
return "PROXY 172.16.1.2:80";
else
{
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:443";
else
if (shExpMatch(url, "* ")) && (isInNet(myIpAddress(),"172.16.84.0","255.255.255.0"))
return "PROXY 172.16.1.2:443";
else
return "DIRECT";
}
}
以上的script仅供您参考。
其中isInNet(myIpAddress(),"172.16.84.0","255.255.255.0")指的是主机IP地址是172.16.84.0网段,shExpMatch(url, "* ")指的是以开头的网站。
如果您的PAC文件已经没有错误,您可以在IE中设置来使用该PAC文件。具体做法如下:
1. 打开IE,选择“Internet选项”。
2. 点击“连接”,“局域网设置”。
3. 选择“使用自动配置脚本”,并输入脚本的位置,比如file:// C:/WINDOWS/system32/drivers/etc。
您也可以通过组策略来配置:
1. 打开组策略编辑器,选择“用户配置”“\Windows设置”\“Internet Expleror维护”\“连接”。
2. 双击“自动配置”,选择“启用自动配置”,在自动代理选项中中设置该pac文件的路径。
以上的script仅供您参考。
其中isInNet(myIpAddress(),"172.16.84.0","255.255.255.0")指的是主机IP地址是172.16.84.0网段,shExpMatch(url, "* ")指的是以开头的网站。
如果您的PAC文件已经没有错误,您可以在IE中设置来使用该PAC文件。具体做法如下:
1. 打开IE,选择“Internet选项”。
2. 点击“连接”,“局域网设置”。
3. 选择“使用自动配置脚本”,并输入脚本的位置,比如file:// C:/WINDOWS/system32/drivers/etc。
您也可以通过组策略来配置:
1. 打开组策略编辑器,选择“用户配置”“\Windows设置”\“Internet Expleror维护”\“连接”。
2. 双击“自动配置”,选择“启用自动配置”,在自动代理选项中中设置该pac文件的路径。
如何编写 PAC (Proxy Auto-Config) 文件
2009-06-29 16:30
| ||||
用本本上网时,往返家里和单位,因为单位是用的代理上网,家里是直接连接.因此每次都要修改IE的代理设置,虽然是个小事,但是每次都要修改总是有点烦,于是参考GOOGLE,写了一个自动配置代理的脚本.这样无论在家和在公司,只要连上局域网就可以上网了.
function FindProxyForURL(url,host){
if((isPlainHostName(host))||shExpMatch(url,"127.0.0.1/*")||isInNet(host,"192.168.0.0", "255.255.255.0")){
return "direct";
} else {
if(myIpAddress()=="192.168.0.49")
return "PROXY 192.168.0.6:808";
else
return "direct";
if((isPlainHostName(host))||shExpMatch(url,"127.0.0.1/*")||isInNet(host,"192.168.0.0", "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的菜单里"工具"->"INTEL选项"->"连接"->局域网设置
把使用自动配置脚本选上,然后在地址栏填入file://c:/proxy.pac,注意file后是两斜杠,要使设置生效,需要关闭IE再重新打开.
现在我们介绍下这个proxy.pac脚本文件,脚本的语法是js语法,js的内置函数可以使用,要实现自动配置代理,需要实现FindProxyForURL这个函数,其参数url代表要访问的连接,host代表要访问连接的主机名,该函数有三个返回参数
direct:直接连接
proxy IP:PORT
socket IP:PORT
返回结果大小写不敏感
direct:直接连接
proxy IP:PORT
socket IP:PORT
返回结果大小写不敏感
PAC的其他内置语法见wpscape/eng/mozilla/2.0/relnotes/demo/proxy-live.html
PAC脚本另外一个重要的应用是多台代理服务器并存的情况下,通过pac脚本的控制:
用户随机选择使用多台代理服务器中的任意一台来达到流量负载均衡的目的;
管理员通过PAC脚本控制用户使用和不使用某台代理服务器,这样可以空出时间对代理服务器进行维护;
让服务器工作在主备模式,当主服务器宕机时,会自动切换到其它备用服务器而不会中断服务;
根据访问目的地的不同,自动选择最佳代理服务器。
管理员通过PAC脚本控制用户使用和不使用某台代理服务器,这样可以空出时间对代理服务器进行维护;
让服务器工作在主备模式,当主服务器宕机时,会自动切换到其它备用服务器而不会中断服务;
根据访问目的地的不同,自动选择最佳代理服务器。
下面列举几个PAC的实例,顺便学习下它的语法
a、isPlainHostName(host),本例演示判断是否为本地主机,如myservername/
的方式访问,如果是直接连接,否则使用代理
的方式访问,如果是直接连接,否则使用代理
function FindProxyForURL(url, host)
{
if (isPlainHostName(host))
return "DIRECT";
else
return "PROXY proxy:80";
}
b、dnsDomainIs(host, "")、localHostOrDomainIs(host, ""),本例演示判断访问主机
是否属于某个域和某个域名,如果属于pany域的主机名,而域名不是
wwwpany和homepany的直接连接,否则使用代理访问。
function FindProxyForURL(url, host)
{
if ((isPlainHostName(host) ||
dnsDomainIs(host, "pany")) &&
{
if (isPlainHostName(host))
return "DIRECT";
else
return "PROXY proxy:80";
}
b、dnsDomainIs(host, "")、localHostOrDomainIs(host, ""),本例演示判断访问主机
是否属于某个域和某个域名,如果属于pany域的主机名,而域名不是
wwwpany和homepany的直接连接,否则使用代理访问。
function FindProxyForURL(url, host)
{
if ((isPlainHostName(host) ||
dnsDomainIs(host, "pany")) &&
!localHostOrDomainIs(host, "wwwpany") &&
!localHostOrDomainIs(host, "homepany"))
!localHostOrDomainIs(host, "homepany"))
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";
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、
*分别用不同的连接方式。
function FindProxyForURL(url, host)
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、
*分别用不同的连接方式。
function FindProxyForURL(url, host)
{
if (isPlainHostName(host))
return "DIRECT";
else if (shExpMatch(host, "*"))
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 (isPlainHostName(host))
return "DIRECT";
else if (shExpMatch(host, "*"))
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";
}
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,如果是就使用代理,否则直
接连接。
g、dnsResolve(host),本例演示判断访问主机是否某个IP,如果是就使用代理,否则直
接连接。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论