lamina
2004-07-27, 09:42 PM
趁空閒時翻的一部份,也許有辭不達意或錯誤的情形,有疑問者請參考 help\Matching Commands.html
還有一部份未翻,所以沒貼.....
$ALERT(message text)
限制: Match or replace
過濾類型: All
$ALERT 的動作很像 JavaScript 的 alert() 功能。它會顯示你所設定訊息的對話方塊,可以利用在除蟲或是提醒使用者某些事件的發生。訊息內容也可以使用像 \1 和 \h 來抓取文字、主機名稱...等等
$CONFIRM(message text)
限制: Match or replace
過濾類型: All
像 $ALERT,$CONFIRM 會顯示你所設定訊息的對話方塊,不過它也可以包含 "Yes" 和 "No" 的按鈕。它可以使用在像是測試過濾時,是要過濾還是不要過濾。也就是說,你可以根據使用者的回應去做不同的事。就像 $ALERT 一樣,訊息內容也可以使用其他取代命令來顯示。
$AV(match)
限制: Match only
過濾類型: IN Headers, OUT Headers, or Match
這可以過濾任何屬性值,它會解析並分離屬性值 - 自動從引號或無引號中擷取屬性值。
例如:過濾 ALT 內含有 "Gargalishous!" 的圖形標籤...
<img * alt=$AV(*gargalishous!*) *>
而下面都符合...
<img src="foo" alt="My is this trout ever Gargalishous!">
<img src="foo" alt='Gee your hair is Gargalishous! Is that bison flavor?'>
<img src="foo" alt=JustRawGargalishous! >
即使不包含引號,仍然可以抓取內容。這表示假如你想要抓取含有引號的屬性值,你可以使用下面的方式...
<img * alt=($AV(\1))\2 *>
此處的 \2 將會包含最初的引號在內,而 \1 並沒有包含引號...
<img src="foo" alt="Move all Zig!">
\1 = Move all Zig!
\2 = "Move all Zig!"
但是這裡也有另一種處理的方式 - 就是使用 $AVQ()
$AVQ(match)
限制: Match only
過濾類型: All
它的動作完全類似 $AV(...) 除此之外,它也把屬性值的引號包含在內。如下...
<img * alt=$AVQ(\1) * >
抓取 alt 連引號在內的屬性值,並放入 \1。
$LOG([!][RGBYVCWw]text to log)
限制: None
過濾類型: All
$LOG 使用顯示在 Proxomitron 的 log 視窗 (假如有開啟的話)。它可以有效地用在除蟲和增加更多的過濾描述資訊。它的第一個字元是特殊字元 - 不會顯示在 log 視窗,但是如果是設定顏色將會顯示。例如...
$LOG(RThis will be red)
這裡列出有效的顏色:
R=Red;W=White;w=Gray;B=Blue;G=Green;Y=Yellow;V=Violet;C=Cyan
而且對於重要訊息,你可以直接隨意地在顏色字元之前,放置一個驚嘆號 "!"。它將會強迫開啟彈出 log 視窗...
$LOG(!R---This is Important---)
$LST(blockfile name)
限制: None
過濾類型: All
引入 blockfile 檔可使用在任何的 "matching expression" 上,並且一行一行比對直到找到相符的過濾條件。
$SET(\# or \0-\9=Value)
$SET(Variable=Expanded Value)
限制: Match or Replace
過濾類型: All
$SET 命令可以作兩種稍微不同的事情。第一、你可以指定特殊的值給位置變數(positional variable)。任何代替的文字、包括其他變數,都可以在此設定。第一個參數是位置變數 \0 到 \9 或是取代的堆疊變數 \# (雖然 "\" 是非必要的)。下一個跟隨的是設定值的等號。例如...
設定 \1 等於 "foobar":$SET(1=foobar)
設定變數 \1 內容為 \2:$SET(1=Two is \2)
使用 $SET 在過濾某些規則時,有時也可以如此使用,就像下面一樣,有 if/then/else 的效果...
Match: name=(
one $SET(0=Naoko) |
two $SET(0=Atsuko) |
three $SET(0=Michie) |
$SET(0=Default))
Replace: "\0 Matched"
將會產生下面的結果...
假如 name=one 結果 "Naoko Matched"
假如 name=two 結果 "Atsuko Matched"
假如 name=three 結果 "Michie Matched"
否則 "Default matched"
$SET 命令的限制:設定變數的值是無法展開(expanded)的,直到在 "replacement text" 被實際請求時。這意指假如 \1 為 "fish" 並且你使用 $SET 命令設定成 $SET(\2=\1 food),那麼 \2 將不會變成 "fish food",而將會是 "\1 food"。可是當 \2 在取代區段被取出時,將會展開為 "fish food"。但這種事情重要嗎?當然,這也就是說你不能把位置變數設定給自己 $SET(\1=something and \1)
這帶給我們的第二件事情就是:$SET 命令可以處理 - 在 Naoko 4.5 Proxomitron 版本時對 "全域變數(global variables)" 的想法。這些名稱變數可以設定指向任何過濾規則(web 或 header),並且維持到請求結束。所以一次的設定,其他不同的過濾規則都可以看到使用此變數。
全域變數的名稱構成是由文字和數字(a-z 和 0-9)等字元所構成的,但第一個字元必須是字母。設定變數可以如下...
$SET(VarName=some value)
$SET(Chiyo=tensai)
$SET(Osaka02=atamaga warui)
就像位置變數的值可以包含替代命令 - 然而與位置變數不同的是,它可以展開並指向 $SET 的請求。因此你可以設定變數,即使該過濾規則以後無法查核,你也可以設定給它自己。
清除全域變數只要使用 $SET 如下...
$SET(VarName=)
這可以釋放記憶體的使用和加快其他變數的查詢。
$GET(VariableName)
限制: Replace only
過濾類型: All
$GET 命令可以在 "replacement text" 插入使用 $SET 建立的全域變數(global variables)之值。例如...
Match: <a * href=$AVQ(\1)$SET(LinkURL=>>\1<<) *>
Replace: "The linked URL was: $GET(LinkURL)"
不像 "\1" 那樣的位置變數(positional variables),全域變數(global variables)只要在相同的請求下,可以取回其他過濾規則。因此它可以在網頁頂部抓取某些文字,然後稍遲在底部加以利用。另外一起使用 $SET 和 $GET 可以產生一些變化 - 例如...
$SET(foo=$GET(foo) more stuff) ...adds to the end of "foo"
$SET(foo=more stuff $GET(foo)) ...adds to the start of "foo"
$SET(foo=$GET(foo) \1) ...adds value of "\1" to the end of "foo"
$SET(foo=$GET(foo)$GET(bar)) ...adds value of "bar" to the end of "foo"
注意 $GET 應該使用在被命名的變數上,而不是用在位置變數上 "$GET(\1)" - 此變數只需使用 "\1" 就可以。
$TST(\# or \0-\9=Matching expression)
$TST(VariableName=Matching expression)
$TST(VariableName or \# or \0-\9)
限制: Match or Replace
過濾類型: All
$TST 命令可以檢測全域(global)或位置(positional)變數的內容是否符合某特定值。例如...
$TST(Chiyo=*(tensai|short)*)
這可以檢測 "Chiyo" 變數是否包含有 "tensai" 或 "short" 的值。另一個例子...
Match: <img * height=$AV(\1) * > $TST(\1=[#10-40])[/b]
這檢測了 "\1" 是否真的內含一個介於 10 到 40 的數值。當然想要過濾某部分的文字,你可以搭配使用星號 "*" 的使用,就如上面所提到的第一個例子。
$TST 也可以檢測標籤的完整性,例如...
Match: <([a-z]+)\1 * </$TST(\1)>
這可以是 "<AnyTag> stuff </AnyTag>",但卻不能是 "<AnyTag> stuff </ADifferentTag>"。
速度提醒:使用 $TST 可能會比一般的過濾語法來的慢一點,畢竟它還包含了變數的查核,所以最好的處理方式是把它放到一般過濾語法的後面,並且試著不要把萬用字元如星號 "*" 直接放在它的前面。例如...
Slow: <a *$TST(foo=*bar*)</a>
Better: <a *</a>$TST(foo=*bar*)
這可以有效的縮短 $TST 的查詢時間。
$IHDR(header-name:matching)
$OHDR(header-name:matching)
限制: Match or Replace
過濾類型: All
$OHDR 和 $IHDR 可以檢驗來自各地的進來或出去的 HTTP heeder。它首先檢驗特定的標頭檔(無萬用字元),之後過濾標頭檔的值(此時可用萬用字元)。$OHDR 檢驗發送出去的標頭檔,而 $IHDR 則檢驗傳送進來的標頭檔。例如:過濾 "Referer" 標頭內容含有 'microsoft.com' 的來源
$OHDR(Referer:*.microsoft.com)
使用這個命令,你可以在網頁過濾中過濾某些特定的標頭值,或是把標頭值放入變數內加以過濾取代。你也可以使用在 HTTP header filters 內加以檢驗過濾。
$TYPE(code)
限制: Match only
過濾類型: Web filters
內容類型(Content Type)的檢查命令。此命令可限制過濾規則只對哪一種類型的網頁有效(像只過濾 JavaScript 檔案)。而 "code" 參數必須是下面已知的類型...
htm- Web pages
css- Cascading style sheets
js - JavaScript
vbs- VB Script
oth- Anything else
這對網頁過濾非常有用,尤其是網址的部分。在 header filters 的值是未定義的(content-type 有可能是未知的),想要知道更多的 content-type 檢查,你可以看看 "$IHDR(Content-Type: ... )" 這裡的 "..." 可以是任何的過濾語法或是包括萬用字元。
$STOP()
限制: Match or Replace
過濾類型: All
$STOP 是一個相當簡單的命令。假如在過濾動作中有遇到符合 $STOP 命令,那麼該過濾規則在那次的連線中將會停止動作。當然當前的過濾動作還是會容許完成,但是下一次符合的過濾條件將不會繼續下去。這對只允許執行一次的過濾規則,將會非常有用。尤其是在想插入某些東西當作指標作用的一次動作規則。例如:你想插入一段簡短的 script 語法在 <BODY> 標題內,就可以使用...
Match:<body\s \1>
Replace:<body \1>
<script>my script</script>
$STOP()
這不僅僅只是用在這種插入一次的動作上,它也可以加快 Proxomitron 的速度,避免花費在某些查詢規則的時間上。
$USEPROXY(True or False boolean value)
限制: Match or replace
過濾類型: OUT header filters only
$USEPROXY 命令使用的布林邏輯值 "true" 或 "false" 並且無視 "Use remote proxy" 是否已經核取來開啟代理伺服器的使用與否。它可以確保代理伺服器是否有被使用在網頁上或是某些特定的動作上。此命令只能用在 *outgoing* header 過濾規則中,這是因為代理伺服器必須要建立在已經連線的網站上。
$SETPROXY(remote.proxy.name[:port])
限制: Match or replace
過濾類型: OUT header filters only
$SETPROXY 命令可以強迫使用特定的代理伺服器來連線。它可以無視是否有核取 "Use remote proxy" 和是否有在 "proxy selector" 中有選擇當前的代理伺服器。它在某些特定網址或安全考慮下是非常有用的。代理伺服器的設定必須要先在 "External Proxy Selector" 的列表中有輸入資料。此命令會簡易地在列表中查詢並設定代理伺服器,它通常只需要輸入代理伺服器的名稱 - 第一個在列表中符合的將會被使用(不能使用萬用字元)。
此命令只能用在 *outgoing* header 過濾規則中。
還有一部份未翻,所以沒貼.....
$ALERT(message text)
限制: Match or replace
過濾類型: All
$ALERT 的動作很像 JavaScript 的 alert() 功能。它會顯示你所設定訊息的對話方塊,可以利用在除蟲或是提醒使用者某些事件的發生。訊息內容也可以使用像 \1 和 \h 來抓取文字、主機名稱...等等
$CONFIRM(message text)
限制: Match or replace
過濾類型: All
像 $ALERT,$CONFIRM 會顯示你所設定訊息的對話方塊,不過它也可以包含 "Yes" 和 "No" 的按鈕。它可以使用在像是測試過濾時,是要過濾還是不要過濾。也就是說,你可以根據使用者的回應去做不同的事。就像 $ALERT 一樣,訊息內容也可以使用其他取代命令來顯示。
$AV(match)
限制: Match only
過濾類型: IN Headers, OUT Headers, or Match
這可以過濾任何屬性值,它會解析並分離屬性值 - 自動從引號或無引號中擷取屬性值。
例如:過濾 ALT 內含有 "Gargalishous!" 的圖形標籤...
<img * alt=$AV(*gargalishous!*) *>
而下面都符合...
<img src="foo" alt="My is this trout ever Gargalishous!">
<img src="foo" alt='Gee your hair is Gargalishous! Is that bison flavor?'>
<img src="foo" alt=JustRawGargalishous! >
即使不包含引號,仍然可以抓取內容。這表示假如你想要抓取含有引號的屬性值,你可以使用下面的方式...
<img * alt=($AV(\1))\2 *>
此處的 \2 將會包含最初的引號在內,而 \1 並沒有包含引號...
<img src="foo" alt="Move all Zig!">
\1 = Move all Zig!
\2 = "Move all Zig!"
但是這裡也有另一種處理的方式 - 就是使用 $AVQ()
$AVQ(match)
限制: Match only
過濾類型: All
它的動作完全類似 $AV(...) 除此之外,它也把屬性值的引號包含在內。如下...
<img * alt=$AVQ(\1) * >
抓取 alt 連引號在內的屬性值,並放入 \1。
$LOG([!][RGBYVCWw]text to log)
限制: None
過濾類型: All
$LOG 使用顯示在 Proxomitron 的 log 視窗 (假如有開啟的話)。它可以有效地用在除蟲和增加更多的過濾描述資訊。它的第一個字元是特殊字元 - 不會顯示在 log 視窗,但是如果是設定顏色將會顯示。例如...
$LOG(RThis will be red)
這裡列出有效的顏色:
R=Red;W=White;w=Gray;B=Blue;G=Green;Y=Yellow;V=Violet;C=Cyan
而且對於重要訊息,你可以直接隨意地在顏色字元之前,放置一個驚嘆號 "!"。它將會強迫開啟彈出 log 視窗...
$LOG(!R---This is Important---)
$LST(blockfile name)
限制: None
過濾類型: All
引入 blockfile 檔可使用在任何的 "matching expression" 上,並且一行一行比對直到找到相符的過濾條件。
$SET(\# or \0-\9=Value)
$SET(Variable=Expanded Value)
限制: Match or Replace
過濾類型: All
$SET 命令可以作兩種稍微不同的事情。第一、你可以指定特殊的值給位置變數(positional variable)。任何代替的文字、包括其他變數,都可以在此設定。第一個參數是位置變數 \0 到 \9 或是取代的堆疊變數 \# (雖然 "\" 是非必要的)。下一個跟隨的是設定值的等號。例如...
設定 \1 等於 "foobar":$SET(1=foobar)
設定變數 \1 內容為 \2:$SET(1=Two is \2)
使用 $SET 在過濾某些規則時,有時也可以如此使用,就像下面一樣,有 if/then/else 的效果...
Match: name=(
one $SET(0=Naoko) |
two $SET(0=Atsuko) |
three $SET(0=Michie) |
$SET(0=Default))
Replace: "\0 Matched"
將會產生下面的結果...
假如 name=one 結果 "Naoko Matched"
假如 name=two 結果 "Atsuko Matched"
假如 name=three 結果 "Michie Matched"
否則 "Default matched"
$SET 命令的限制:設定變數的值是無法展開(expanded)的,直到在 "replacement text" 被實際請求時。這意指假如 \1 為 "fish" 並且你使用 $SET 命令設定成 $SET(\2=\1 food),那麼 \2 將不會變成 "fish food",而將會是 "\1 food"。可是當 \2 在取代區段被取出時,將會展開為 "fish food"。但這種事情重要嗎?當然,這也就是說你不能把位置變數設定給自己 $SET(\1=something and \1)
這帶給我們的第二件事情就是:$SET 命令可以處理 - 在 Naoko 4.5 Proxomitron 版本時對 "全域變數(global variables)" 的想法。這些名稱變數可以設定指向任何過濾規則(web 或 header),並且維持到請求結束。所以一次的設定,其他不同的過濾規則都可以看到使用此變數。
全域變數的名稱構成是由文字和數字(a-z 和 0-9)等字元所構成的,但第一個字元必須是字母。設定變數可以如下...
$SET(VarName=some value)
$SET(Chiyo=tensai)
$SET(Osaka02=atamaga warui)
就像位置變數的值可以包含替代命令 - 然而與位置變數不同的是,它可以展開並指向 $SET 的請求。因此你可以設定變數,即使該過濾規則以後無法查核,你也可以設定給它自己。
清除全域變數只要使用 $SET 如下...
$SET(VarName=)
這可以釋放記憶體的使用和加快其他變數的查詢。
$GET(VariableName)
限制: Replace only
過濾類型: All
$GET 命令可以在 "replacement text" 插入使用 $SET 建立的全域變數(global variables)之值。例如...
Match: <a * href=$AVQ(\1)$SET(LinkURL=>>\1<<) *>
Replace: "The linked URL was: $GET(LinkURL)"
不像 "\1" 那樣的位置變數(positional variables),全域變數(global variables)只要在相同的請求下,可以取回其他過濾規則。因此它可以在網頁頂部抓取某些文字,然後稍遲在底部加以利用。另外一起使用 $SET 和 $GET 可以產生一些變化 - 例如...
$SET(foo=$GET(foo) more stuff) ...adds to the end of "foo"
$SET(foo=more stuff $GET(foo)) ...adds to the start of "foo"
$SET(foo=$GET(foo) \1) ...adds value of "\1" to the end of "foo"
$SET(foo=$GET(foo)$GET(bar)) ...adds value of "bar" to the end of "foo"
注意 $GET 應該使用在被命名的變數上,而不是用在位置變數上 "$GET(\1)" - 此變數只需使用 "\1" 就可以。
$TST(\# or \0-\9=Matching expression)
$TST(VariableName=Matching expression)
$TST(VariableName or \# or \0-\9)
限制: Match or Replace
過濾類型: All
$TST 命令可以檢測全域(global)或位置(positional)變數的內容是否符合某特定值。例如...
$TST(Chiyo=*(tensai|short)*)
這可以檢測 "Chiyo" 變數是否包含有 "tensai" 或 "short" 的值。另一個例子...
Match: <img * height=$AV(\1) * > $TST(\1=[#10-40])[/b]
這檢測了 "\1" 是否真的內含一個介於 10 到 40 的數值。當然想要過濾某部分的文字,你可以搭配使用星號 "*" 的使用,就如上面所提到的第一個例子。
$TST 也可以檢測標籤的完整性,例如...
Match: <([a-z]+)\1 * </$TST(\1)>
這可以是 "<AnyTag> stuff </AnyTag>",但卻不能是 "<AnyTag> stuff </ADifferentTag>"。
速度提醒:使用 $TST 可能會比一般的過濾語法來的慢一點,畢竟它還包含了變數的查核,所以最好的處理方式是把它放到一般過濾語法的後面,並且試著不要把萬用字元如星號 "*" 直接放在它的前面。例如...
Slow: <a *$TST(foo=*bar*)</a>
Better: <a *</a>$TST(foo=*bar*)
這可以有效的縮短 $TST 的查詢時間。
$IHDR(header-name:matching)
$OHDR(header-name:matching)
限制: Match or Replace
過濾類型: All
$OHDR 和 $IHDR 可以檢驗來自各地的進來或出去的 HTTP heeder。它首先檢驗特定的標頭檔(無萬用字元),之後過濾標頭檔的值(此時可用萬用字元)。$OHDR 檢驗發送出去的標頭檔,而 $IHDR 則檢驗傳送進來的標頭檔。例如:過濾 "Referer" 標頭內容含有 'microsoft.com' 的來源
$OHDR(Referer:*.microsoft.com)
使用這個命令,你可以在網頁過濾中過濾某些特定的標頭值,或是把標頭值放入變數內加以過濾取代。你也可以使用在 HTTP header filters 內加以檢驗過濾。
$TYPE(code)
限制: Match only
過濾類型: Web filters
內容類型(Content Type)的檢查命令。此命令可限制過濾規則只對哪一種類型的網頁有效(像只過濾 JavaScript 檔案)。而 "code" 參數必須是下面已知的類型...
htm- Web pages
css- Cascading style sheets
js - JavaScript
vbs- VB Script
oth- Anything else
這對網頁過濾非常有用,尤其是網址的部分。在 header filters 的值是未定義的(content-type 有可能是未知的),想要知道更多的 content-type 檢查,你可以看看 "$IHDR(Content-Type: ... )" 這裡的 "..." 可以是任何的過濾語法或是包括萬用字元。
$STOP()
限制: Match or Replace
過濾類型: All
$STOP 是一個相當簡單的命令。假如在過濾動作中有遇到符合 $STOP 命令,那麼該過濾規則在那次的連線中將會停止動作。當然當前的過濾動作還是會容許完成,但是下一次符合的過濾條件將不會繼續下去。這對只允許執行一次的過濾規則,將會非常有用。尤其是在想插入某些東西當作指標作用的一次動作規則。例如:你想插入一段簡短的 script 語法在 <BODY> 標題內,就可以使用...
Match:<body\s \1>
Replace:<body \1>
<script>my script</script>
$STOP()
這不僅僅只是用在這種插入一次的動作上,它也可以加快 Proxomitron 的速度,避免花費在某些查詢規則的時間上。
$USEPROXY(True or False boolean value)
限制: Match or replace
過濾類型: OUT header filters only
$USEPROXY 命令使用的布林邏輯值 "true" 或 "false" 並且無視 "Use remote proxy" 是否已經核取來開啟代理伺服器的使用與否。它可以確保代理伺服器是否有被使用在網頁上或是某些特定的動作上。此命令只能用在 *outgoing* header 過濾規則中,這是因為代理伺服器必須要建立在已經連線的網站上。
$SETPROXY(remote.proxy.name[:port])
限制: Match or replace
過濾類型: OUT header filters only
$SETPROXY 命令可以強迫使用特定的代理伺服器來連線。它可以無視是否有核取 "Use remote proxy" 和是否有在 "proxy selector" 中有選擇當前的代理伺服器。它在某些特定網址或安全考慮下是非常有用的。代理伺服器的設定必須要先在 "External Proxy Selector" 的列表中有輸入資料。此命令會簡易地在列表中查詢並設定代理伺服器,它通常只需要輸入代理伺服器的名稱 - 第一個在列表中符合的將會被使用(不能使用萬用字元)。
此命令只能用在 *outgoing* header 過濾規則中。