LAN設定用自動設定スクリプトファイルの書き方・使い方
2022-02-07 19:27:18
深圳大学に友人がいるため、彼らの学校のネットワークはかなり変態的である。教育ネットワークから割り当てられた無料IP以外のIPにアクセスすると、1Mあたり6RMBもかかる。
セカンダリープロキシーとかを教えてあげたかったのですが、彼女には難しすぎましたね。
まず、自動設定スクリプトファイルから見ていきましょう。
IEを開き、[ツール]-[インターネットオプション]-[LAN設定]をクリックすると、[自動構成スクリプトを使用]が表示されます。
自動設定スクリプトが行うことは、IEがWebページにアクセスする際に、スクリプトファイル内で定義された内容に基づいてアクセスすることです。例えば、スクリプトファイル内で、あるプロキシを使用している一部のIPへのアクセスを制限し、別のプロキシを使用している他のIPにアクセスする場合、スクリプトファイルを通して簡単に行うことができます。
PACファイルは実際にはテキストファイルであり、最も単純な形式はFindProxyForURLというJScript関数を含むことです。IE は、ユーザーが閲覧しているアドレス URL のフルパスと、その URL のホスト名部分 (ホスト) の 2 つの変数を渡すことで、この関数を呼び出します。
このFindProxyForURL関数の戻り値は3つあります。1つは "DIRECT" で、これはプロキシを介さない直接接続です;2つは "PROXY proxyaddr:port" で、proxyaddr と port はそれぞれプロキシのアドレスとポート;3つは "SOCKS socksaddr.Port; です。 port" で、socksaddr と port はそれぞれ socks proxy のアドレスとポートです。自動プロキシファイルは、複数の選択肢を組み合わせて、セミコロン(;)で区切って記述することも可能です。
関数 FindProxyForURL(url,host)
{
if (host == "www.mydomain.com")
return "DIRECT"。
return "PROXY myproxy:80;
PROXY myotherproxy:8080;
DIRECT"。
}
以下、プロキシスクリプトで使用する可能性のある関数と説明です(英語が苦手な方は、そのまま応用編まで読み飛ばしてください)。
PACヘルパー関数
dnsDomainIs(host, domain) ホストが指定されたドメインの一部であればtrueを、そうでなければfalseを返します。
isInNet(hostname, ホスト名とサブネットのIP、サブネットマスクを解決) ホスト名がサブネット内にある場合、真を返します。
IPアドレスとサブネットマスクで指定され、そうでない場合は偽となります。
isPlainHostName(host) ホスト名にドットがなければ真を,なければ偽を返します。
isResolvable(host) Internet ExplorerがDNSを通してホスト名の解決を試み、成功すればtrueを、そうでなければfalseを返す。
localHostOrDomainIs ホストが (host, domain) ドメインのホスト部分に一致する場合、またはホストが (local domain の URL に対してのみ実行されます) のホスト部分とドメイン部分に一致する場合に true を返します。
dnsDomainLevels(host) ホスト名に含まれるドットの数を返します。
dnsResolve(host) 指定されたホストの IP アドレスを含む文字列を返します。
myIPAddress( ) ローカルマシンの IP アドレスを含む文字列を返します。
shExpMatch(url, shexp) 与えられたURLが指定されたシェル式にマッチする場合に真を、そうでない場合に偽を返します。
dateRange(parmList) 現在の日付がparmListで指定された日付に含まれる場合に真を、そうでない場合に偽を返します。
timeRange(parmList) 現在時刻がparmListで指定された時刻に含まれる場合はtrue、そうでない場合はfalseを返します。
weekdayRange(parmList) 今日がparmListで指定された曜日内であればtrueを、そうでなければfalseを返します。
各関数の応用例として、以下のようなものがあります。
著者: xmudahai 2006-10-17 00:33 この発言に返信する
--------------------------------------------------------------------------------
2 自動設定スクリプトファイルの書き方・使い方(オリジナル)
a. isPlainHostName(host)、この例は、http://myservername/ のようなローカルホストかどうかを判断するために実証しています。
直接接続の場合はアクセス方法、そうでない場合はプロキシを使用する
関数 FindProxyForURL(url, host)
{
if (isPlainHostName(host))
return "DIRECT"。
その他
return "PROXY proxy:80";
}
bのdnsDomainIs(ホスト、"")、localHostOrDomainIs(ホスト、"")、この例は、アクセスホストがドメインとドメイン名、ホスト名に属しているかどうかを判断することを示しています場合は、会社。comと直接接続用のホーム.com社ではない、その他のプロキシアクセス使用されます。
関数 FindProxyForURL(url, host)
{
if ((isPlainHostName(host) ││)
dnsDomainIs(host, ".company.com")) &&
!localHostOrDomainIs(host, "www.company.com") &&
!localHostOrDomainIs(host, "home.company.com")))
return "DIRECT"。
その他
return "PROXY proxy:80";
}
c. isResolvable(host), この例は、ホスト名がDNSサーバーで解決できるかどうかを示し、直接アクセスできる場合は、プロキシを通してアクセスすることになります。
関数 FindProxyForURL(url, host)
{
if (isResolvable(host))
return "DIRECT"。
その他
return "PROXY proxy:80";
}
d. isInNet(host, "", ""), この例は、アクセスIPが特定のサブネット内にあるかどうかを示し、もしそうなら、直接アクセスし、そうでなければプロキシを経由します。
関数 FindProxyForURL(url, host)
{
if (isInNet(host, "166.111.0.0", "255.255.0.0"))
return "DIRECT"。
その他
return "PROXY proxy:80";
}
e. shExpMatch(host, ""), この例は、ホストドメインに基づいて接続タイプを変更し、localhost, *.edu, *.com に対してそれぞれ異なる接続を行うことを示しています。
関数 FindProxyForURL(url, host)
{
if (isPlainHostName(host))
return "DIRECT"。
else if (shExpMatch(host, "*.com"))
return "PROXY comproxy:80"。
else if (shExpMatch(host, "*.edu"))
return "PROXY edup}.
f. url.substring(), この例は、異なるプロトコルに基づいた異なるプロキシを選択することを示しています。
関数 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"。
}
}
g. dnsResolve(host), この例は、アクセスするホストが特定のIPであるかどうかを判断し、もしそうならプロキシを使い、そうでなければ直接接続することを示している。
unction FindProxyForURL(url, host)
{
if (dnsResolve(host) == "166.111.8.237")。{
return "PROXY secproxy:8080";
}
else {
return "PROXY proxy:80";
}
}
h. myIpAddress(), この例は、ローカルIPが特定のIPであるかどうかを判断し、もしそうならプロキシを使用し、そうでなければ直接接続を使用することを示しています。
関数 FindProxyForURL(url, host)
{
if (myIpAddress() == "166.111.8.238") {
return "PROXY proxy:80";
}
else {
return "DIRECT"。
}
}
i. dnsDomainLevels(host), この例は、ホストにアクセスするドメイン名のレベル、つまり、ドメイン名のポイント数を示しています ドメイン名にポイントがある場合、それはプロキシを介してアクセスされ、それ以外の場合は直接接続されています.
関数 FindProxyForURL(url, host)
{
if (dnsDomainLevels(host) > 0) { // ホストのドットの数 > 0 の場合
return "PROXY proxy:80";
}
return "DIRECT"。
}
j. weekdayRange()は、この例では、プロキシを使用して変更するには、現在の日付の範囲は、それがGMT水曜日から土曜日の場合は、接続するプロキシを使用して、それ以外の場合は直接接続することを示しています。
関数 FindProxyForURL(url, host)
{
if(weekdayRange("WED", "SAT", "GMT")).
return "PROXY proxy:80";
その他
return "DIRECT"。
}
k. 最後の例は、プロキシサーバーをうまく利用できるように、プロキシのランダムな利用を実証しています。
関数 FindProxyForURL(url,host)
{
return randomProxy();
}
関数 randomProxy()
{
switch( Math.floor( Math.random() * 5 ) )
{
の場合、0。
return "PROXY proxy1:80";
を壊してください。
の場合、1.
return "PROXY proxy2:80";
を壊してください。
の場合、2.
return "PROXY proxy3:80";
を壊します。
の場合、3.
return "PROXY proxy4:80";
を壊してください。
の場合、4.
return "PROXY proxy5:80";
を壊してください。
}
}
以上の関数と命令例を利用すれば、より複雑で効果的な自動プロキシスクリプトを書くことができる。
セカンダリープロキシーとかを教えてあげたかったのですが、彼女には難しすぎましたね。
まず、自動設定スクリプトファイルから見ていきましょう。
IEを開き、[ツール]-[インターネットオプション]-[LAN設定]をクリックすると、[自動構成スクリプトを使用]が表示されます。
自動設定スクリプトが行うことは、IEがWebページにアクセスする際に、スクリプトファイル内で定義された内容に基づいてアクセスすることです。例えば、スクリプトファイル内で、あるプロキシを使用している一部のIPへのアクセスを制限し、別のプロキシを使用している他のIPにアクセスする場合、スクリプトファイルを通して簡単に行うことができます。
PACファイルは実際にはテキストファイルであり、最も単純な形式はFindProxyForURLというJScript関数を含むことです。IE は、ユーザーが閲覧しているアドレス URL のフルパスと、その URL のホスト名部分 (ホスト) の 2 つの変数を渡すことで、この関数を呼び出します。
このFindProxyForURL関数の戻り値は3つあります。1つは "DIRECT" で、これはプロキシを介さない直接接続です;2つは "PROXY proxyaddr:port" で、proxyaddr と port はそれぞれプロキシのアドレスとポート;3つは "SOCKS socksaddr.Port; です。 port" で、socksaddr と port はそれぞれ socks proxy のアドレスとポートです。自動プロキシファイルは、複数の選択肢を組み合わせて、セミコロン(;)で区切って記述することも可能です。
関数 FindProxyForURL(url,host)
{
if (host == "www.mydomain.com")
return "DIRECT"。
return "PROXY myproxy:80;
PROXY myotherproxy:8080;
DIRECT"。
}
以下、プロキシスクリプトで使用する可能性のある関数と説明です(英語が苦手な方は、そのまま応用編まで読み飛ばしてください)。
PACヘルパー関数
dnsDomainIs(host, domain) ホストが指定されたドメインの一部であればtrueを、そうでなければfalseを返します。
isInNet(hostname, ホスト名とサブネットのIP、サブネットマスクを解決) ホスト名がサブネット内にある場合、真を返します。
IPアドレスとサブネットマスクで指定され、そうでない場合は偽となります。
isPlainHostName(host) ホスト名にドットがなければ真を,なければ偽を返します。
isResolvable(host) Internet ExplorerがDNSを通してホスト名の解決を試み、成功すればtrueを、そうでなければfalseを返す。
localHostOrDomainIs ホストが (host, domain) ドメインのホスト部分に一致する場合、またはホストが (local domain の URL に対してのみ実行されます) のホスト部分とドメイン部分に一致する場合に true を返します。
dnsDomainLevels(host) ホスト名に含まれるドットの数を返します。
dnsResolve(host) 指定されたホストの IP アドレスを含む文字列を返します。
myIPAddress( ) ローカルマシンの IP アドレスを含む文字列を返します。
shExpMatch(url, shexp) 与えられたURLが指定されたシェル式にマッチする場合に真を、そうでない場合に偽を返します。
dateRange(parmList) 現在の日付がparmListで指定された日付に含まれる場合に真を、そうでない場合に偽を返します。
timeRange(parmList) 現在時刻がparmListで指定された時刻に含まれる場合はtrue、そうでない場合はfalseを返します。
weekdayRange(parmList) 今日がparmListで指定された曜日内であればtrueを、そうでなければfalseを返します。
各関数の応用例として、以下のようなものがあります。
著者: xmudahai 2006-10-17 00:33 この発言に返信する
--------------------------------------------------------------------------------
2 自動設定スクリプトファイルの書き方・使い方(オリジナル)
a. isPlainHostName(host)、この例は、http://myservername/ のようなローカルホストかどうかを判断するために実証しています。
直接接続の場合はアクセス方法、そうでない場合はプロキシを使用する
関数 FindProxyForURL(url, host)
{
if (isPlainHostName(host))
return "DIRECT"。
その他
return "PROXY proxy:80";
}
bのdnsDomainIs(ホスト、"")、localHostOrDomainIs(ホスト、"")、この例は、アクセスホストがドメインとドメイン名、ホスト名に属しているかどうかを判断することを示しています場合は、会社。comと直接接続用のホーム.com社ではない、その他のプロキシアクセス使用されます。
関数 FindProxyForURL(url, host)
{
if ((isPlainHostName(host) ││)
dnsDomainIs(host, ".company.com")) &&
!localHostOrDomainIs(host, "www.company.com") &&
!localHostOrDomainIs(host, "home.company.com")))
return "DIRECT"。
その他
return "PROXY proxy:80";
}
c. isResolvable(host), この例は、ホスト名がDNSサーバーで解決できるかどうかを示し、直接アクセスできる場合は、プロキシを通してアクセスすることになります。
関数 FindProxyForURL(url, host)
{
if (isResolvable(host))
return "DIRECT"。
その他
return "PROXY proxy:80";
}
d. isInNet(host, "", ""), この例は、アクセスIPが特定のサブネット内にあるかどうかを示し、もしそうなら、直接アクセスし、そうでなければプロキシを経由します。
関数 FindProxyForURL(url, host)
{
if (isInNet(host, "166.111.0.0", "255.255.0.0"))
return "DIRECT"。
その他
return "PROXY proxy:80";
}
e. shExpMatch(host, ""), この例は、ホストドメインに基づいて接続タイプを変更し、localhost, *.edu, *.com に対してそれぞれ異なる接続を行うことを示しています。
関数 FindProxyForURL(url, host)
{
if (isPlainHostName(host))
return "DIRECT"。
else if (shExpMatch(host, "*.com"))
return "PROXY comproxy:80"。
else if (shExpMatch(host, "*.edu"))
return "PROXY edup}.
f. url.substring(), この例は、異なるプロトコルに基づいた異なるプロキシを選択することを示しています。
関数 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"。
}
}
g. dnsResolve(host), この例は、アクセスするホストが特定のIPであるかどうかを判断し、もしそうならプロキシを使い、そうでなければ直接接続することを示している。
unction FindProxyForURL(url, host)
{
if (dnsResolve(host) == "166.111.8.237")。{
return "PROXY secproxy:8080";
}
else {
return "PROXY proxy:80";
}
}
h. myIpAddress(), この例は、ローカルIPが特定のIPであるかどうかを判断し、もしそうならプロキシを使用し、そうでなければ直接接続を使用することを示しています。
関数 FindProxyForURL(url, host)
{
if (myIpAddress() == "166.111.8.238") {
return "PROXY proxy:80";
}
else {
return "DIRECT"。
}
}
i. dnsDomainLevels(host), この例は、ホストにアクセスするドメイン名のレベル、つまり、ドメイン名のポイント数を示しています ドメイン名にポイントがある場合、それはプロキシを介してアクセスされ、それ以外の場合は直接接続されています.
関数 FindProxyForURL(url, host)
{
if (dnsDomainLevels(host) > 0) { // ホストのドットの数 > 0 の場合
return "PROXY proxy:80";
}
return "DIRECT"。
}
j. weekdayRange()は、この例では、プロキシを使用して変更するには、現在の日付の範囲は、それがGMT水曜日から土曜日の場合は、接続するプロキシを使用して、それ以外の場合は直接接続することを示しています。
関数 FindProxyForURL(url, host)
{
if(weekdayRange("WED", "SAT", "GMT")).
return "PROXY proxy:80";
その他
return "DIRECT"。
}
k. 最後の例は、プロキシサーバーをうまく利用できるように、プロキシのランダムな利用を実証しています。
関数 FindProxyForURL(url,host)
{
return randomProxy();
}
関数 randomProxy()
{
switch( Math.floor( Math.random() * 5 ) )
{
の場合、0。
return "PROXY proxy1:80";
を壊してください。
の場合、1.
return "PROXY proxy2:80";
を壊してください。
の場合、2.
return "PROXY proxy3:80";
を壊します。
の場合、3.
return "PROXY proxy4:80";
を壊してください。
の場合、4.
return "PROXY proxy5:80";
を壊してください。
}
}
以上の関数と命令例を利用すれば、より複雑で効果的な自動プロキシスクリプトを書くことができる。
関連
-
git eclipseプラグインのインストール
-
[解決済み】'const char*' から 'char*' への無効な変換。
-
[解決済み】git pullの取り消し、レポを古い状態に戻す方法
-
[解決済み】TypeError:/のオペランド型が未サポートです。'str'と'str'
-
[解決済み】ssh: ホスト 'ホスト名' の真正性を確立することができない
-
[解決済み】 do_one(nmeth) のエラー : 外部関数呼び出し (arg 1) の NA/NaN/Inf)
-
[解決済み】ValueError: コンボリューション使用中のオブジェクトが目的の配列に対して深すぎる
-
[解決済み】演算子のオーバーロード時のエラー(非静的メンバ関数でなければならない)
-
[解決済み] テスト
-
[解決済み】Android "ビュー階層を作成した元のスレッドだけが、そのビューに触れることができる"
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】「g++」が内部コマンド、外部コマンド、操作可能なプログラム、バッチファイルとして認識されない。
-
[解決済み】C++エラー: 予想されるunqualified-idを修正する方法
-
[解決済み】lm.fit(x,y,offset = offset, singular.ok,...) boxcox式で0非NAケースでエラーになる。
-
[解決済み】コレクションが変更され、列挙操作が実行されないことがある。
-
[解決済み] MIPSのフェッチアドレスがワード境界にアライメントされていないため、.align 4を使用したが、まだうまくいかない
-
[解決済み】CSV入力で1行目の列数が不正になるエラー
-
[解決済み】Pythonエラーメッセージ io.UnsupportedOperation: not readable
-
[解決済み] テスト
-
[解決済み] Layout の割り当て時にエラーが発生しました。BoxLayout は共有できない
-
[解決済み】エラー。Invalid input: date_trans works with objects of class Date only (無効な入力: date_trans は Date クラスのオブジェクトでのみ動作します)