Firefox 如何发现pac中使用的反代理

Firefox 如何发现pac中使用的反代理,firefox,proxy,Firefox,Proxy,在FireFox中,通过代理自动配置文件“something.pac”进行internet连接 如何知道某个URL正在使用哪个代理服务器 谢谢。.pac文件只是一个ECMAscript-aka JavaScript。查看文件格式 如果复制PAC代码,则可以根据目标url对其进行处理,以查看正在使用的代理。如果您觉得有趣,您可以将脚本包装到一个网页(本地)中,以创建一个用于本地计算的工具 编辑: 作为我开始推荐的方法的替代方法,您可以在Google代码上查看。这将允许您快速测试一系列选项 如果您有

在FireFox中,通过代理自动配置文件“something.pac”进行internet连接

如何知道某个URL正在使用哪个代理服务器


谢谢。

.pac文件只是一个ECMAscript-aka JavaScript。查看文件格式

如果复制PAC代码,则可以根据目标url对其进行处理,以查看正在使用的代理。如果您觉得有趣,您可以将脚本包装到一个网页(本地)中,以创建一个用于本地计算的工具

编辑:

作为我开始推荐的方法的替代方法,您可以在Google代码上查看。这将允许您快速测试一系列选项

如果您有可用的.Net,并且对使用C#感兴趣,那么您可以查看哪些代码可以以与上述类似的方式使用

要扩展上述原始方法,主机浏览器可能(通常)提供许多功能。必须在
pac
文件中实现的基本功能是
FindProxyForUrl()
。这接受两个参数:url和主机(从url名称派生的主机)。“提供的”功能包括:
isInNet()
localHostOrDomainIs()
isPlainHostName()
isResolvable()
,等等

如果您在Microsoft环境中工作,那么您可以通过一些有用的示例查看描述.pac格式的文件

根据Microsoft文档中的
isInNet()

如果主机IP地址与指定的
模式匹配,则
isInNet(主机、模式、掩码)
函数返回
TRUE
掩码
指示要匹配的IP地址的哪一部分(255=匹配,0=忽略)

如果您想了解技术,下面是代理自动配置相关服务的实现。它将
isInNet()
的JS代码指定为:

200 function isInNet(ipaddr, pattern, maskstr) {
201     var test = /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/(ipaddr);
202     if (test == null) {
203         ipaddr = dnsResolve(ipaddr);
204         if (ipaddr == null)
205             return false;
206     } else if (test[1] > 255 || test[2] > 255 ||
207                test[3] > 255 || test[4] > 255) {
208         return false;    // not an IP address
209     }
210     var host = convert_addr(ipaddr);
211     var pat  = convert_addr(pattern);
212     var mask = convert_addr(maskstr);
213     return ((host & mask) == (pat & mask));
214     
215 }

希望有帮助

我创建了简单的HTML页面解析代理:

<html>
<head>
    <script type="text/javascript">
    function myIpAddress() {
        return "192.168.1.2"; // Your IP
    }

    function isInNet(ipaddr, pattern, maskstr) {
        var test = /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/(ipaddr);
        if (test == null) {
            ipaddr = dnsResolve(ipaddr);
            if (ipaddr == null) return false;
        } else if (test[1] > 255 || test[2] > 255 || test[3] > 255 || test[4] > 255) {
            return false;    // not an IP address
        }
        var host = convert_addr(ipaddr);
        var pat  = convert_addr(pattern);
        var mask = convert_addr(maskstr);
        return ((host & mask) == (pat & mask));
    }

    function dnsResolve(host) {
        try {
            return dns.resolve(host, 0).getNextAddrAsString();
        } catch (e) {
            return null;
        }
    }

    function convert_addr(ipchars) {
        var bytes = ipchars.split('.');
        var result = ((bytes[0] & 0xff) << 24) |
                     ((bytes[1] & 0xff) << 16) |
                     ((bytes[2] & 0xff) <<  8) |
                      (bytes[3] & 0xff);
        return result;
    }

    function isPlainHostName(host) {
        return host.search('\\\\.') == -1;
    }

    function shExpMatch(url, pattern) {
       pattern = pattern.replace(/\\./g, '\\\\.');
       pattern = pattern.replace(/\\*/g, '.*');
       pattern = pattern.replace(/\\?/g, '.');
       var newRe = new RegExp('^' + pattern + '$');
       return newRe.test(url);
    }

    function dnsDomainIs(host, domain) {
        return host.length >= domain.length && host.substring(host.length - domain.length) == domain;
    }
    </script>

    <!-- Your proxy script -->
    <script type="text/javascript" src="webproxy.js"></script>
</head>
<body>
    Host: <input id="host"/><br/>
    URL: <input id="url"/><br/>
    Proxy: <input id="proxy" disabled="disabled"/><br/>
    <input type="button" value="Resolve"
           onclick="document.getElementById('proxy').value = FindProxyForURL(document.getElementById('host').value, document.getElementById('url').value)"/><br/>
</body>
</html>

函数myIpAddress(){
返回“192.168.1.2”;//您的IP地址
}
函数ISINTNET(ipaddr、模式、maskstr){
var测试=/^(\d{1,3})\(\d{1,3})\(\d{1,3})\(\d{1,3})$/(ipaddr);
if(test==null){
ipaddr=dnsResolve(ipaddr);
if(ipaddr==null)返回false;
}否则如果(测试[1]>255 | |测试[2]>255 | |测试[3]>255 | |测试[4]>255){
返回false;//不是IP地址
}
var host=转换地址(ipaddr);
var pat=转换地址(模式);
变量掩码=转换地址(maskstr);
返回((主机和掩码)=(pat和掩码));
}
函数dnsResolve(主机){
试一试{
返回dns.resolve(主机,0).getNextAddrAsString();
}捕获(e){
返回null;
}
}
函数转换地址(ipchars){
var bytes=ipchars.split('.');

var result=((字节[0]&0xff)我已下载该文件并将.pac文件添加到本地网页。我尝试使用Firebug进行调试,但存在某些未知函数,如myIpAddress()(我创建该函数是为了返回我的ip)或isInNet()。希望扩展后的答案有帮助-您可以在我提供的mozilla链接上阅读更多源代码-它将为您提供其他相关函数(或查找它们的链接)。很抱歉没有说得更清楚。它没有工作,因为javascript错误isInNet没有定义。请注意,我必须从pac文件中找到代理服务器,这个工具:工作得很好。如果我能让它工作,这看起来很好…但是在这行
var test=/^(\d{1,3})\(\d{1,3})\(\d{1,3})\。(\d{1,3})前后放置一个警报(\d{1,3})$/(ipaddr);
这一行似乎打断了它…它与实际Mozilla文件中出现的那一行是同一行,所以我猜它是对的,但看这一行似乎不正确。将这一行更改为
var test1=/^(\d{1,3})\(\d{1,3})\(\d{1,3})\(\d{1,3})$/I;var test test test test1.exec(ipaddr)
似乎起到了作用…你的想法?在Windows上,
myIpAddress()的值
是DOS命令返回的IP
ipconfig
?为什么它是“主机和URL”表单?我需要使用代理在整个Internet上导航…我使用我的客户端IP,如何填充主机和URL?