web-dev-qa-db-ja.com

プロキシ-Pacファイル-myAdresse()を使用したipv6?

Squidのプロキシpacファイルを作成しようとしています。たとえば、ユーザーが私のネットワークにいる場合や自宅にいる場合は、リダイレクトを変更することを想定しており、myAdress()を使用してリダイレクトを作成しようとしています。関数。

私はこのPACをテストしましたが、PACで使用できる関数のほとんどは: http://findproxyforurl.com/debug-pac-file/ です。

function FindProxyForURL(url, Host) {

   debugPAC ="PAC Debug Information\n";
   debugPAC +="-----------------------------------\n";
   debugPAC +="Machine IP: " + myIpAddress() + "\n";        <-----|
   debugPAC +="Hostname: " + Host + "\n";
   if (isResolvable(Host)) {resolvableHost = "True"} else {resolvableHost = "False"};
    debugPAC +="Host Resolvable: " + resolvableHost + "\n";
    debugPAC +="Hostname IP: " + dnsResolve(Host) + "\n";
    if (isPlainHostName(Host)) {plainHost = "True"} else {plainHost = "False"};
    debugPAC +="Plain Hostname: " + plainHost + "\n";
    debugPAC +="Domain Levels: " + dnsDomainLevels(Host) + "\n";
    debugPAC +="URL: " + url + "\n";

    // Protocol can only be determined by reading the entire URL.
    if (url.substring(0,5)=="http:") {protocol="HTTP";} else
        if (url.substring(0,6)=="https:") {protocol="HTTPS";} else
           if (url.substring(0,4)=="ftp:") {protocol="FTP";}
                else {protocol="Unknown";}
    debugPAC +="Protocol: " + protocol + "\n";

    // Reduce volume of alerts to a useable level, e.g. only alert on static text pages.
    if (!shExpMatch(url,"*.(js|xml|ico|gif|png|jpg|jpeg|css|swf)*")) {alert(debugPAC);}

   return "DIRECT";
}

しかし、出力には、ipv6アドレスがありますか?!

PAC-alert: PAC Debug Information
-----------------------------------
Machine IP: fe80::xxx:xxx:xxxx:xxxx        <-----|
Hostname: download.cdn.mozilla.net
Host Resolvable: True
Hostname IP: 93.184.221.133
Plain Hostname: False
Domain Levels: 3
URL:     http://download.cdn.mozilla.net/pub/firefox/releases/37.0.2/update/win32/fr/firefox-37.0.2.complete.mar
Protocol: HTTP

それは正常ですか?または、ユーザーのipv4アドレスを取得する別の方法はありますか?もしそうなら、私は次のようなテストを行うことはできません:

if ( isInNet(myAddress, "10.0.0.0","255.0.0.0") )   ?

ご協力いただきありがとうございます

1
user63946

myIpAddress関数は、ホストのアドレスが1つしかないという前提に基づいています。これは決して有効な仮定ではありませんでした。

より良い代替手段は、IPアドレスのリストを返す関数です。 Microsoftが独自の extension を導入したようです。

myIpAddressが、最も有用な情報を提供するアドレスを返すことは理にかなっています。しかし、あなたはそれに頼ることはできません。 myIpAddressが時々127.0.0.1を返すという報告がありますが、これはほとんど役に立たないものです。

あなたの場合、リンクローカルアドレスにはローカルアドレスやグローバルアドレスよりもPACスクリプトに役立つ情報が含まれていないため、明らかに最適な選択は行われませんでした。そして、あなたの場合、ホストには少なくとも1つのローカルアドレスまたはグローバルアドレスがあり、代わりに返される可能性があると思います。

全体として、ホストのIPアドレスを知る必要がないようにFindProxyForURLを作成することをお勧めします(または、PACスクリプトを提供するサーバーに、サーバー側からクライアントのIPアドレスをスクリプトに埋め込んでもらいますスクリプト)。

ユーザーのかなりの部分がMicrosoftの extension をサポートするブラウザーを実行している場合は、FindProxyForURLExを利用するmyIPAddressEx関数を追加することもできます。

また、DNS解決が行われているときにブラウザがブロックされる可能性があるため、PACスクリプトでdnsResolveを使用することはお勧めできません。

1
kasperd