ADC

配置重写操作

警告

自 Citrix ADC 12.0 版本 56.20 开始不建议使用重写操作中的模式函数,作为替代方法,Citrix 建议您使用搜索重写操作参数。

重写操作表示在将请求或响应发送到服务器或客户端之前对其进行的更改。

表达式定义以下内容:

  • 重写操作类型。

  • 重写操作的位置。

  • 重写操作配置类型。

例如,DELETE 操作只使用目标表达式。REPLACE 操作使用目标表达式和表达式来配置替换文本。

启用重写功能后,您需要配置一个或多个操作,除非内置的重写操作足够了。所有内置操作的名称都以字符串 ns_cvpn 开头,后跟一串字母和下划线字符。内置操作可执行有用且复杂的任务,例如解码无客户端 VPN 请求的部分或响应或修改 JavaScript 或 XML 数据。可以查看、启用和禁用内置操作,但不能修改或删除。

注意:

只能用于 HTTP 重写的操作类型在“重写操作类型”列中标识。

有关详细信息,请参阅 Type 参数

使用命令行界面创建重写操作

在命令提示符下,键入以下命令以创建重写操作并验证配置:

  • add rewrite action <name> <type> <target> [<stringBuilderExpr>] [-search <expression>] [refineSearch <expression>] [-comment<string>]
  • show rewrite action <name>

有关详细信息,请参阅 重写操作类型及其参数 表。

重写功能具有以下内置操作:

  • NOREWRITE - 向用户发送请求或响应而不重写。

  • RESET - 重置连接并通知用户的浏览器,以便用户可以重新发送请求。

  • DROP - 在不向用户发送响应的情况下丢弃连接。

以下流程类型之一与每个操作隐式关联:

  • 请求-操作适用于请求。

  • 回应-操作适用于响应。

  • 中立-操作同时适用于请求和响应。

名称

用户定义的重写操作的名称。必须以字母、数字或下划线字符 (_) 开头,并且必须只包含字母、数字和连字符 (-)、句点 (.) 哈希 (#)、空格 ()、at (@)、等号 (=)、冒号 (:) 和下划线字符。可以在添加重写策略后进行更改。

类型参数

Type 参数显示用户定义的重写操作的类型。

以下是 Type 参数的值:

  • REPLACE <target> <string_builder_expr>。用字符串构建器表达式替换字符串。

例如

> add rewrite action replace_http_act replace http.res.body(100) '"new_replaced_data"'
Done
> sh rewrite action replace_http_act
Name: replace_http_act
Operation: replace
Target:http.res.body(100)
Value:"new_replaced_data"
Hits: 0
Undef Hits: 0
Action Reference Count: 0
Done

<!--NeedCopy-->
  • REPLACE_ALL <target> <string_builder_expr1> -(pattern|search) <string_builder_expr2>。在 <target> 指定的请求或响应中,将 <string_builder_expr1> 所定义的字符串的所有匹配项替换为 <string_builder_expr2> 定义的字符串。您可以使用 PCE 格式模式或搜索工具来查找要替换的字符串。

例如

> add policy patset pat_list_2
Done
> bind policy patset pat_list_2 "www.abc.com"
Done
> bind policy patset pat_list_2 "www.def.com"
Done
> add rewrite action refineSearch_act_31 replace_all "HTTP.RES.BODY(100000)" ""https://""-search "patset("pat_list_2")" -refineSearch "EXTEND(7,0).REGEX_SELECT(re#http://#)"
Done

> sh rewrite action refineSearch_act_31
Name: refineSearch_act_31
Operation: replace_all
Target:HTTP.RES.BODY(100000)
Refine Search:EXTEND(7,0).REGEX_SELECT(re#http://#)
Value:"https://"
Search: patset("pat_list_2")
Hits: 0
Undef Hits: 0
Action Reference Count: 0
Done

<!--NeedCopy-->
  • REPLACE_HTTP_RES <string_builder_expr>。用字符串构建器表达式定义的字符串替换完整的 HTTP 响应。

例如

> add rewrite action replace_http_res_act replace_http_res '"HTTP/1.1 200 OK\r\n\r\nSending from ADC"'
 Done
> sh rewrite action replace_http_res_act
Name: replace_http_res_act
Operation: replace_http_res
Target:"HTTP/1.1 200 OK
Sending from ADC"
Hits: 0
Undef Hits: 0
Action Reference Count: 0
Done

<!--NeedCopy-->
  • REPLACE_SIP_RES <target>。用 <target> 指定的字符串替换完整的 SIP 响应。

例如

> add rewrite action replace_sip_res_act replace_sip_res '"HTTP/1.1 200 OK\r\n\r\nSending from ADC"'
Done
> sh rewrite action replace_sip_res_act
Name: replace_sip_res_act
Operation: replace_sip_res
Target:"HTTP/1.1 200 OK
Sending from ADC"
Hits: 0
Undef Hits: 0
Action Reference Count: 0
Done

<!--NeedCopy-->
  • INSERT_HTTP_HEADER <header_string_builder_expr> <contents_string_builder_expr>。插入由指定的 HTTP 标头 <header_string_builder_expr> 和指定的标题内容 <contents_string_builder_expr>。

例如

> add rewrite action ins_cip_header insert_http_header "CIP" "CLIENT.IP.SRC"
Done
> sh rewrite action ins_cip_header
Name: ins_cip_header
Operation: insert_http_header
Target:CIP
Value:CLIENT.IP.SRC
Hits: 0
Undef Hits: 0
Action Reference Count: 0
Done

<!--NeedCopy-->
  • DELETE_HTTP_HEADER <target>。删除 <target> 指定的 HTTP 标头

例如

> add rewrite action del_true_client_ip_header delete_http_header "True-Client-IP"
Done
> sh rewrite action del_true_client_ip_header
Name: del_true_client_ip_header
Operation: delete_http_header
Target:True-Client-IP
Hits: 0
Undef Hits: 0
Action Reference Count: 0
Done

<!--NeedCopy-->
  • CORRUPT_HTTP_HEADER <target>。用损坏的名称替换 <target> 所指定的所有 HTTP 标头的标头名称,以便接收者无法识别该名称示例:MY_HEADER 更改为 MHEY_ADER。

例如


> add rewrite action corrupt_content_length_hdr corrupt_http_header "Content-Length"
Done
> sh rewrite action corrupt_content_length_hdr
Name: corrupt_content_length_hdr
Operation: corrupt_http_header
Target:Content-Length
Hits: 0
Undef Hits: 0
Action Reference Count: 0
Done

<!--NeedCopy-->
  • INSERT_BEFORE <string_builder_expr1> <string_builder_expr1>。查找在 <string_builder_expr1> 中指定的字符串并在其前面插入 <string_builder_expr2> 中的字符串。
> add rewrite action insert_before_ex_act insert_before http.res.body(100) '"Add this string in the starting"'
Done
> sh rewrite action insert_before_ex_act
Name: insert_before_ex_act
Operation: insert_before
Target:http.res.body(100)
Value:"Add this string in the starting"
Hits: 0
Undef Hits: 0
Action Reference Count: 0
Done

<!--NeedCopy-->
  • INSERT_BEFORE_ALL <target> <string_builder_expr1> -(pattern|search) <string_builder_expr2>。在 <target> 指定的请求或响应中,查找在 <string_builder_expr1> 中指定的字符串的所有匹配项并在其前面插入在 <string_builder_expr2> 中指定的字符串。您可以使用 PCE 格式模式或搜索工具来查找字符串。

例如


> add policy patset pat
 Done
> bind policy patset pat abcd
 Done
> add rewrite action refineSearch_act_1 insert_before_all http.res.body(10) 'target.prefix(10) + "refineSearch_testing"' -search patset("pat") -refineSearch extend(10,10)
 Done
> sh rewrite action refineSearch_act_1
Name: refineSearch_act_1
Operation: insert_before_all
Target:http.res.body(10)
Refine Search:extend(10,10)
Value:target.prefix(10) + "refineSearch_testing"
Search: patset("pat")
Hits: 0
Undef Hits: 0
Action Reference Count: 0
Done

<!--NeedCopy-->
  • INSERT_AFTER <string_builder_expr1> <string_builder_expr2>。查找在 <string_builder_expr1>中指定的字符串,然后在其后插入在 <string_builder_expr2> 中指定的字符串。

例如

> add rewrite action insert_after_act insert_after http.req.body(100) '"add this string after 100 bytes"'
Done
> sh rewrite action insert_after_act
Name: insert_after_act
Operation: insert_after
Target:http.req.body(100)
Value:"add this string after 100 bytes"
Hits: 0
Undef Hits: 0
Action Reference Count: 0
Done

<!--NeedCopy-->
  • INSERT_AFTER_ALL <target> <string_builder_expr1> -(pattern|search) <string_builder_expr>。在 <target> 指定的请求或响应中,查找在 <string_builder_expr1> 中指定的字符串的所有匹配项并在每个后面插入在 <string_builder_expr2> 中指定的字符串。您可以使用 PCE 格式模式或搜索工具来查找字符串。

例如


> add rewrite action refineSearch_act_2 insert_after_all http.res.body(100) '"refineSearch_testing"' -search text("abc") -refineSearch extend(0, 10)
Done
> sh rewrite action refineSearch_act_2
Name: refineSearch_act_2
Operation: insert_after_all
Target:http.res.body(100)
Refine Search:extend(0, 10)
Value:"refineSearch_testing"
Search: text("abc")
Hits: 0
Undef Hits: 0
Action Reference Count: 0
Done

<!--NeedCopy-->
  • DELETE <target>。查找并删除指定的目标。

例如

> add rewrite action delete_ex_act delete http.req.header("HDR")
Done
> sh rewrite action delete_ex_act
Name: delete_ex_act
Operation: delete
Target:http.req.header("HDR")
Hits: 0
Undef Hits: 0
Action Reference Count: 0
Done

<!--NeedCopy-->
  • DELETE_ALL <target> -(pattern|search) <string_builder_expr>。在由 <target> 指定的请求或响应中,查找并删除 <string_builder_expr> 所指定的字符串的所有匹配项。您可以使用 PCE 格式模式或搜索工具来查找字符串。

例如


>add rewrite action refineSearch_act_4 delete_all "HTTP.RES.BODY(50000)" -search text("Windows Desktops") -refineSearch "EXTEND(40,40).REGEX_SELECT(re#\s`\*`<AppData>.`\*`\s`\*`<\\/AppData>#)"
Done
> show REWRITE action refineSearch_act_4
Name: refineSearch_act_4
Operation: delete_all
Target:HTTP.RES.BODY(50000)
Refine Search:EXTEND(40,40).REGEX_SELECT(re#\s`\*`<AppData>.`\*`\s`\*`</AppData>#)
Search: text("Windows Desktops")
Hits: 0
Undef Hits: 0
Action Reference Count: 0
Done

<!--NeedCopy-->
  • REPLACE_DIAMETER_HEADER_FIELD <target> <field value>。在请求或响应中,修改由 <target> 指定的标题字段。使用 Diameter.req.flags.SET(<flag>)Diameter.req.flags.UNSET<flag> 作为 stringbuilderexpression 以设置或取消设置标志。

例如


> add rewrite action replace_diameter_field_ex_act  replace_diameter_header_field diameter.req.flags diameter.req.flags.set(PROXIABLE)
Done
> sh rewrite action replace_diameter_field_ex_act
Name: replace_diameter_field_ex_act
Operation: replace_diameter_header_field
Target:diameter.req.flags
Value:diameter.req.flags.set(PROXIABLE)
Hits: 0
Undef Hits: 0
Action Reference Count: 0
Done

<!--NeedCopy-->
  • REPLACE_DNS_HEADER_FIELD <target>。在请求或响应中修改由 <target> 指定的标题字段。

例如


> add rewrite action replace_dns_hdr_act replace_dns_header_field dns.req.header.flags.set(AA)
Done
> sh rewrite action replace_dns_hdr_act
Name: replace_dns_hdr_act
Operation: replace_dns_header_field
Target:dns.req.header.flags.set(AA)
Hits: 0
Undef Hits: 0
Action Reference Count: 0
Done

<!--NeedCopy-->
  • REPLACE_DNS_ANSWER_SECTION <target>。替换响应中的 DNS 答案部分。这目前仅适用于 A 和 AAAA 记录。使用 DNS.NEW_RRSET_ANS.NEW_RRSET_AAAA 表达式来配置新的答案部分。

例如


> add rewrite action replace_dns_ans_act replace_dns_answer_section  DNS.NEW_RRSET_A("1.1.1.1", 10)
Done
> sh rewrite action replace_dns_ans_act
Name: replace_dns_ans_act
Operation: replace_dns_answer_section
Target:DNS.NEW_RRSET_A("1.1.1.1", 10)
Hits: 0
Undef Hits: 0
Action Reference Count: 0
Done

<!--NeedCopy-->
  • CLIENTLESS_VPN_DECODE<target>。以无客户端 VPN 格式解码目标指定的模式。

例如


> add rewrite action cvpn_decode_act_1 clientless_vpn_decode http.req.body(100)
Done
> sh rewrite action cvpn_decode_act_1
Name: cvpn_decode_act_1
Operation: clientless_vpn_decode
Target:http.req.body(100)
Hits: 0
Undef Hits: 0
Action Reference Count: 0
Done

<!--NeedCopy-->
  • CLIENTLESS_VPN_DECODE_ALL<target>-search<expression>。以无客户端 VPN 格式解码搜索参数指定的所有模式。

例如


> add rewrite action act1 clientless_vpn_decode_all http.req.body(100) -search text("abcd")
Done
> sh rewrite action act1
Name: act1
Operation: clientless_vpn_decode_all
Target:http.req.body(100)
Search: text("abcd")
Hits: 0
Undef Hits: 0
Action Reference Count: 0
Done

<!--NeedCopy-->
  • CLIENTLESS_VPN_ENCODE<target>。以无客户端 VPN 格式对目标指定的模式进行编码。

例如


> add rewrite action cvpn_encode_act_1 clientless_vpn_encode http.req.body(100)
Done
> sh rewrite action cvpn_encode_act_1
Name: cvpn_encode_act_1
Operation: clientless_vpn_encode
Target:http.req.body(100)
Hits: 0
Undef Hits: 0
Action Reference Count: 0
Done

<!--NeedCopy-->
  • CLIENTLESS_VPN_ENCODE_ALL<target>-search<expression>。以无客户端 VPN 格式编码指定的搜索参数的所有模式。

例如


> add rewrite action act2 clientless_vpn_encode_all http.req.body(100) -search text("abcd")
Done
> sh rewrite action act2
Name: act1
Operation: clientless_vpn_encode_all
Target:http.req.body(100)
Search: text("abcd")
Hits: 0
Undef Hits: 0
Action Reference Count: 0
Done

<!--NeedCopy-->
  • CORRUPT_SIP_HEADER<target>。用损坏的名称替换 <target> 指定的所有 SIP 报头的标头名称,以便接收方无法识别。

例如


> add rewrite action corrupt_sip_hdr_act corrupt_sip_header SIP_HDR
Done
> sh rewrite action corrupt_sip_hdr_act
Name: corrupt_sip_hdr_act
Operation: corrupt_sip_header
Target:SIP_HDR
Hits: 0
Undef Hits: 0
Action Reference Count: 0
Done

<!--NeedCopy-->
  • INSERT_SIP_HEADER <header_string_builder_expr> <contents_string_builder_expr>。插入由 <header_string_builder_expr> 指定的 SIP 标头和 <contents_string_builder_expr> 指定的标头内容。

例如


> add rewrite action insert_sip_hdr_act insert_sip_header SIP_HDR '"inserting_sip_header"'
 Done
>sh rewrite action insert_sip_hdr_act
Name: insert_sip_hdr_act
Operation: insert_sip_header
Target:SIP_HDR
Value:"inserting_sip_header"
Hits: 0
Undef Hits: 0
Action Reference Count: 0
Done

<!--NeedCopy-->
  • DELETE_SIP_HEADER<target>。删除 <target> 指定的 SIP 标头

例如


> add rewrite action delete_sip_hdr delete_sip_header  SIP_HDR
Done
> sh rewrite action delete_sip_hdr
Name: delete_sip_hdr
Operation: delete_sip_header
Target:SIP_HDR
Hits: 0
Undef Hits: 0
Action Reference Count: 0
Done

<!--NeedCopy-->

Target 参数

Target 参数是指定要重写请求或响应的哪一部分的表达式。

StringBuilderExpr

StringBuilderExpr 是一个表达式,它指定要插入到指定位置的请求或响应中的内容。此表达式替换指定的字符串。

示例 1. 使用客户端 IP 插入 HTTP 标头


> add rewrite action insertact INSERT_HTTP_HEADER "client-IP" CLIENT.IP.SRC
Done
> show rewrite action insertact
Name: insertact
Operation: insert_http_header
Target:Client-IP
Value:CLIENT.IP.SRC
BypassSafetyCheck : NO
Hits: 0
Undef Hits: 0
Action Reference Count: 0
Done

<!--NeedCopy-->

示例 2. 替换 TCP 有效负载中的字符串(TCP 重写)


> add rewrite action client_tcp_payload_replace_all REPLACE_ALL
  'client.tcp.payload(1000)' '"new-string"' -search text("old-string")
Done
> show rewrite action client_tcp_payload_replace_all
Name: client_tcp_payload_replace_all
Operation: replace_all
Target:client.tcp.payload(1000)
Value:"new-string"
Search: text("old-string")
BypassSafetyCheck : NO
Hits: 0
Undef Hits: 0
Action Reference Count: 0
Done
>
<!--NeedCopy-->

搜索请求或响应的一部分以重写

搜索功能有助于在请求或响应中查找所需模式的所有实例。

需要在以下操作类型中使用搜索功能:

  • INSERT T_BEFORE_ALL
  • INSERT T_AFTER_ALL
  • REPLACE_ALL
  • DELETE E_ALL
  • CLIENTLESS_VPN_ENCODE_ALL
  • CLIENTLESS_VPN_DECODE_ALL

搜索功能不能与以下操作类型一起使用:

  • INSERT_HTTP_HEADER
  • INSERT_BEFORE
  • INSERT_AFTER
  • REPLACE
  • DELETE
  • DELETE_HTTP_HEADER
  • CORRUPT_HTTP_HEADER
  • REPLACE_HTTP_RES
  • CLIENTLESS_VPN_ENCODE
  • CLIENTLESS_VPN_DECODE
  • INSERT T_SIP_HEADER
  • DELETE_SIP_HEADER
  • CORRUPT_SIP_HEADER
  • REPLACE_DIAMETER_HEADER_FIELD
  • REPLACE_DNS_ANSWER_SECTION
  • REPLACE_DNS_HEADER_FIELD
  • REPLACE_SIP_RES

支持以下搜索类型:

  • Text - 字面字符串 示例:-search text (”hello”)
  • 正则表达式-用于匹配请求或响应中的多个字符串的模式 示例: -search regex(re~^hello*~)
  • XPATH - 用于搜索 XML 的 XPATH 表达式。 示例: -search xpath(xp%/a/b%)
  • JSON-用于搜索 JSON 的 XPATH 表达式。 示例:-search xpath_json(xp%/a/b%) HTML - 用于搜索 HTML 的 XPATH 表达式 示例:-search xpath_html(xp%/html/body%) Patset - 这将搜索绑定到 patset 实体的所有模式。 示例: -search patset(“patset1”)
  • Datset - 这将搜索绑定到 datset 实体的所有模式。 示例:-search dataset(“dataset1”)
  • AVP-AVP 编号,用于匹配直径/半径消息中的多个 AVP 示例:-search avp(999)

优化搜索结果

您可以使用 “细化搜索” 功能指定用于细化搜索结果的其他条件。只有在使用了搜索功能时,才能使用 “优化搜索” 功能。 细化搜索参数始终以“extend(m,n)” 操作开头,其中 m 指定搜索结果左侧的字节数,n 指定搜索结果右侧的字节数以扩展选定区域。

如果配置的重写操作是:


> add rewrite action test_refine_search replace_all http.res.body(10) '”testing_refine_search”' -search text("abc") -refineSearch extend(1,1)
And the HTTP response body is abcxxxx456.

<!--NeedCopy-->

然后,搜索参数查找模式“abc”,并且由于 refineSearch 参数还配置为在左侧检查额外的 1 个字节,在匹配模式右侧检查一个额外的一个字节。最终被替换的文本是:abcx。因此,此操作的输出为 testing_refine_searchxxx456

示例 1:使用 INSERT_BEFORE_ALL 操作类型中的细化搜索功能。


> add policy patset pat
Done
> bind policy patset pat abcd
Done
> add rewrite action refineSearch_act_1 insert_before_all http.res.body(10) 'target.prefix(10) + "refineSearch_testing"' -search patset("pat") -refineSearch extend(10,10)
Done
> sh rewrite action refineSearch_act_1
Name: refineSearch_act_1
Operation: insert_before_all
Target:http.res.body(10)
Refine Search:extend(10,10)
Value:target.prefix(10) + "refineSearch_testing"
Search: patset("pat")
Hits: 0
Undef Hits: 0
Action Reference Count: 0
Done

<!--NeedCopy-->

示例 2:使用 INSERT_AFTER_ALL 操作类型中的 “细化搜索功能”。


> add rewrite action refineSearch_act_2 insert_after_all http.res.body(100) '"refineSearch_testing"' -search text("abc") -refineSearch extend(0, 10)
Done
> sh rewrite action refineSearch_act_2
Name: refineSearch_act_2
Operation: insert_after_all
Target:http.res.body(100)
Refine Search:extend(0, 10)
Value:"refineSearch_testing"
Search: text("abc")
Hits: 0
Undef Hits: 0
Action Reference Count: 0
Done

<!--NeedCopy-->

示例 3:在 REACE_ALL 操作类型中使用细化搜索功能。


> add policy patset pat_list_2
Done
> bind policy patset pat_list_2 "www.abc.com"
Done
> bind policy patset pat_list_2 "www.def.com"
Done
> add rewrite action refineSearch_act_31 replace_all "HTTP.RES.BODY(100000)" ""https://"" -search "patset("pat_list_2")" -refineSearch "EXTEND(7,0).REGEX_SELECT(re#http://#)"
Done
> sh rewrite action refineSearch_act_31
Name: refineSearch_act_31
Operation: replace_all
Target:HTTP.RES.BODY(100000)
Refine Search:EXTEND(7,0).REGEX_SELECT(re#http://#)
Value:"https://"
Search: patset("pat_list_2")
Hits: 0
Undef Hits: 0
Action Reference Count: 0
Done

<!--NeedCopy-->

示例 4:在 DELETEE_ALL 操作类型中使用 “细化搜索功能”。


>add rewrite action refineSearch_act_4 delete_all "HTTP.RES.BODY(50000)" -search text("Windows Desktops") -refineSearch "EXTEND(40,40).REGEX_SELECT(re#\s*<AppData>.\*\s\*<\\/AppData>#)"
> show REWRITE action refineSearch_act_4
Name: refineSearch_act_4
Operation: delete_all
Target:HTTP.RES.BODY(50000)
Refine Search:EXTEND(40,40).REGEX_SELECT(re#\s*<AppData>.\*\s\*</AppData>#)
Search: text("Windows Desktops")
Hits: 0
Undef Hits: 0
Action Reference Count: 0
Done
>
<!--NeedCopy-->

示例 5:在 CLILESS_VPN_ENCODE_ALL 操作类型中使用 “细化搜索” 功能。

’’’

add rewrite action act2 clientless_vpn_encode_all http.req.body(100) -search text(“abcd”) Done sh rewrite action act2 Name: act1 Operation: clientless_vpn_encode_all Target:http.req.body(100) Search: text(“abcd”) Hits: 0 Undef Hits: 0 Action Reference Count: 0 Done

’’’

示例 6:在 CLILESS_VPN_DECODE_ALL 操作类型中使用 “细化搜索” 功能。


> add rewrite action act1 clientless_vpn_decode_all http.req.body(100) -search text("abcd")
Done
> sh rewrite action act1
Name: act1
Operation: clientless_vpn_decode_all
Target:http.req.body(100)
Search: text("abcd")
Hits: 0
Undef Hits: 0
Action Reference Count: 0
Done
>
<!--NeedCopy-->

使用命令行界面修改现有的重写操作

在命令提示符处,键入以下命令以修改现有的重写操作并验证配置:

  • set rewrite action <name> [-target<expression>] [-stringBuilderExpr<expression>] [-pattern<expression> | -search <expression>] [-refineSearch<expression>] [-comment<string>]
  • show rewrite action <name>

例如


> set rewrite action insertact -target "Client-IP"
 Done
> show rewrite action insertact

Name: insertact
Operation: insert_http_header   Target:Client-IP
Value:CLIENT.IP.SRC
Hits: 0
Undef Hits: 0
Action Reference Count: 0
Done

<!--NeedCopy-->

使用命令行界面删除重写操作

在命令提示符处,键入以下命令以删除重写操作:

rm rewrite action <name>

例如


> rm rewrite action insertact
Done

<!--NeedCopy-->

使用配置实用程序配置重写操作

  1. 导航到 AppExpert > Rewrite(重写)> Actions(操作)
  2. 在详细信息窗格中,执行以下操作之一:
    • 要创建操作,请单击 添加
    • 要修改现有操作,请选择该操作,然后单击 编辑
  3. 单击 Create(创建)或 OK(确定)。状态栏中将显示一条消息,指出已成功配置操作。
  4. 重复步骤 2 到 4,根据需要创建或修改任意数量的重写操作。
  5. 单击关闭配置重写操作

使用添加表达式对话框添加表达式

  1. 创建重写操作配置重写操作对话框中,在要输入的类型参数的文本区域下,单击添加
  2. 在 “ 添加表达式 ” 对话框中,在第一个列表框中为表达式选择第一个术语。

    • HTTP。HTTP 协议。如果要检查与 HTTP 协议有关的请求的某些方面,请选择此选项。
    • 系统。受保护的网站。如果要检查请求中与请求收件人有关的某些方面,请选择此选项。
    • 客户端。发送请求的计算机。如果要检查请求发件人的某些方面,请选择此选项。

当你做出选择时,最右边的列表框会列出表达式下一部分的适当术语。

  1. 在第二个列表框中,为表达式选择第二个术语。这些选择取决于您在上一步中所做的选择,并且适合上下文。进行第二次选择后,“构造表达式” 窗口下方的 “帮助” 窗口(该窗口为空)将显示描述刚刚选择的术语的用途和用法的帮助。

  2. 继续从上一列表框右侧显示的列表框中选择术语,或者在出现提示您输入值的文本框中键入字符串或数字,直到表达式完成。 有关 PI 表达式语言和为响应方策略创建表达式的更多信息,请参阅 “策略和表达式”。“

如果要测试在示例 HTTP 数据上使用重写操作的效果,则可以使用“重写表达式评估器”。

重写 TCP 有效负载

TCP 重写操作中的目标表达式必须以下表达式前缀之一开头:

  • CLIENT.TCP.PAYLOAD。用于在客户端请求中重写 TCP 有效负载。例如,CLIENT.TCP.PAYLOAD(10000).AFTER_STR(“string1”)。
  • SERVER.TCP.PAYLOAD。用于在服务器响应中重写 TCP 有效负载。例如,SERVER.TCP.PAYLOAD(1000).B64DECODE.BETWEEN(“string1”,”string2”)。

使用 “重写操作评估器” 对话框评估重写操作

  1. 在 “ 重写操作 详细信息” 窗格中,选择要评估的重写操作,然后单击 “ 评估”。
  2. 在 “重写表达式赋值器” 对话框中,指定以下参数的值。(星号表示必填参数。)

    重写操作-如果尚未选择要评估的重写操作,请从下拉列表中选择它。选择 “重写” 操作后,“详细信息” 部分将显示所选 “重写” 操作的详细信息。 新建-选择 “新建” 以打开 “创建重写操作” 对话框并创建重写操作。 修改-选择修改以打开配置重写操作对话框并修改选定的重写操作。 流程类型-指定是使用 HTTP 请求数据还是使用 HTTP 响应数据测试选定的重写操作。默认值为请求。如果要使用响应数据进行测试,请选择响应。 HTTP 请求/响应数据*-为您提供一个空间来提供重写操作评估器用于测试的 HTTP 数据。您可以直接将数据粘贴到窗口中,或者单击样本插入一些示例 HTTP 标头。 显示行尾-指定是否在示例 HTTP 数据的每行末尾显示 UNIX 风格的行尾字符 (\ n)。 示例-将示例 HTTP 数据插入 HTTP 请求/响应数据窗口中。您可以选择 GET 或 POST 数据。 浏览-打开本地浏览窗口,以便您可以从本地或网络位置选择包含示例 HTTP 数据的文件。 清除-从 “HTTP 请求/响应数据” 窗口清除当前示例 HTTP 数据。

  3. 单击评估。“ 重写操作评估器 ” 评估 “重写” 操作对所选示例数据的影响,并在 “结果” 窗口中显示由选定的 “ 重写 ” 操作修改的 结果 。添加和删除按照对话框左下角的图例所示突出显示。
  4. 继续评估重写操作,直到确定所有操作都具有所需的效果。

    • 您可以修改选定的重写操作并测试修改的版本,方法是单击 修改 以打开 配置重写操 作对话框,进行并保存更改,然后再次单击评估。
    • 您可以使用相同的请求或响应数据评估不同的重写操作,方法是从 “ 重写操作” 下拉列表中选择该操作 ,然后再次单击 “ 评估 ”。
  5. 单击 关闭 关闭 重写表达式赋值器 并返回到 重写操作 窗格。

  6. 要删除重写操作,请选择要删除的重写操作,然后单击 “删除,然后在提示时单击 “确定” 确认您的选择。 评估重写操作