高级策略表达式:ip和MAC地址,吞吐量,vlan id
可以使用高级策略表达式前缀返回IPv4和IPv6地址,MAC地址,IP子网,有用的客户端和服务器数据,例如接口端口(Rx, Tx和RxTx)的吞吐速率以及接收数据包的VLAN的ID。然后,您可以使用各种运算符来评估这些表达式前缀返回的数据。
IP地址和IP子网的表达式
您可以使用高级策略表达式评估网络协议版本4 (IPv4)或互联网协议版本6 (IPv6)格式的地址和子网。IPv6地址和子网的表达式前缀在前缀中包括IPv6。IPv4地址和子网的表达式前缀在前缀中包含IP地址。下面是标识请求是否源自特定IPv4子网的表达式示例。
client.ip.src.in_subnet (147.1.0.0/16) < !——NeedCopy >
下面是两个重写策略示例,它们检查从中接收数据包的子网并对主机头执行重写操作。配置了这两个策略后,执行的重写操作取决于请求中的子网。这两个策略评估IPv4地址格式的IP地址。
-添加重写动作url -重写动作替换"http.req.header("Host")""www.mycompany1.com" -添加重写策略url -rewrite-policy "http.req.header("Host").contains("www.test1.com") && client.ip.src.in_subnet(147.1.0.0/16)"url -rewrite-action替换“http.req.header("Host")”"www.mycompany2.com" -添加重写策略url -rewrite-policy "http.req.header("Host").contains("www.test2.com") && client.ip.src.in_subnet(10.202.0.0/16)"URL2-rewrite-action < !——NeedCopy >
注意
上述示例是您在Citrix ADC命令行界面(CLI)中键入的命令,因此,每个引号的前面必须有反斜杠(\)。有关详细信息,请参阅在策略中配置高级策略表达式。”
Ipv4地址和IP子网的前缀
下表描述了返回IPv4地址和子网以及IPv4地址段的前缀。您可以使用这些前缀特定于IPv4地址的数字运算符和运算符。有关数字运算的更多信息,请参阅”表达式前缀的基本操作“和”数字的复合运算”。”
表 1.评估IP和MAC地址的前缀
前缀 | 说明 |
---|---|
CLIENT.IP.SRC | 以IP地址或数字形式返回当前数据包的源IP。 |
CLIENT.IP.DST | 以IP地址或数字形式返回当前数据包的目标IP。 |
SERVER.IP.SRC | 以IP地址或数字形式返回当前数据包的源IP。 |
SERVER.IP.DST | 以IP地址或数字形式返回当前数据包的目标IP。 |
Ipv4地址的操作
Ipv4操作的前缀表描述了可以与返回IPv4地址的前缀一起使用的运算符。
关于IPv6表达式
IPv6地址格式比较旧的IPv4格式具有更大的灵活性。IPv6地址采用十六进制格式(RFC 2373)。在以下示例中,示例1是IPv6地址,示例2是包含IPv6地址的URL,示例3包含IPv6地址和端口号。
示例 1:
9901:0ab1:22a2:88a3:3333:4a4b: 5555:6666 < !——NeedCopy >
示例 2:
http:// [9901:0ab1:22a2:88a3:3333:4a4b 5555:6666): / < !——NeedCopy >
示例 3:
https:// [9901:0ab1:22a2:88a3:3333:4a4b 5555:6666):: 8080 / < !——NeedCopy >
在示例3中,括号将IP地址与端口号(8080)分开。
请注意,您只能使用' + '运算符将IPv6表达式与其他表达式相结合。输出是从各个表达式返回的字符串值的连接。您不能将任何其他算术运算符与IPv6表达式结合使用。下面的语法是一个示例:
client.ipv6。SRC + server.ip.dst
例如,如果客户端源IPv6地址为ABCD: 1234:: ABCD
,服务器目标IPv4地址为10.100.10.100
,则返回前面的表达式“ABCD: 1234:: ABCD10.100.10.100”
。
请注意,Citrix ADC设备收到IPv6数据包时,它会从未使用的IPv4地址范围分配临时IPv4地址,并将数据包的源地址更改为此临时地址。在响应时,传出数据包的源地址将替换为原始IPv6地址。
注意
除了生成布尔结果的表达式之外,您可以将IPv6表达式与任何其他表达式组合在一起。
IPv6地址的表达式前缀
下表中的表达式前缀返回的IPv6地址可视为文本数据。例如,前缀client.ipv6。dst返回目标IPv6地址作为可以评估为文本的字符串。
下表描述了返回IPv6地址的表达式前缀。
表 3.IPv6表达式前缀返回文本
前缀 | 说明 |
---|---|
客户端。IPV6 | 使用当前数据包在中的IPv6地址上运行。 |
CLIENT.IPV6.DST | 返回IP标头的目标字段中的IPv6地址。 |
CLIENT.IPV6.SRC | 返回IP标头的源字段中的IPv6地址。以下是示例:client.ipv6.src.in_subnet (2007:: 2008/64) client.ipv6.src.get1.le (2008) |
服务器。IPV6 | 使用当前数据包在中的IPv6地址上运行。 |
SERVER.IPV6.DST | 返回IP标头的目标字段中的IPv6地址。 |
SERVER.IPV6.SRC | 返回IP标头的源字段中的IPv6地址。以下是示例:server.ipv6.src.in_subnet (2007:: 2008/64) server.ipv6.src.get1.le (2008) |
IPv6前缀的操作
下表描述了可用于返回IPv6地址的前缀的运算符:
表 4.评估IPv6地址的操作
IPv6操作 | 说明 |
---|---|
< ipv6 >。EQ (< IPv6_address > |
如果IP地址地址值与< IPv6_address > 参数相同,则返回布尔值真。下面是一个示例:client.ipv6.dst.eq (ABCD: 1234:: ABCD) |
|
以数字形式返回IPv6地址的段落。以下示例表达式从ipv6地址1000:1001:CD10:0000:0000:89AB: 4567: CDEF:client.ipv6.dst。Get5提取0000 中的第五组位检索段。client.ipv6.dst。get6提取89AB。 client.ipv6.dst。Get7提取4567。 您可以对这些段执行数字操作。请注意,您无法在检索整个IPv6地址时执行数字操作。这是因为返回整个IPv6地址(如CLIENT.IPV6.SRC)的表达式以文本格式返回该地址。 |
< ipv6 > .IN_SUBNET(<子网>) |
如果IPv6地址值位于<子网> 参数指定的子网中,则返回布尔值真。下面是一个示例:client.ipv6.dst.eq (1000:1001: CD10:0000:0000:89AB: 4567: CDEF / 60) |
< ipv6 >。IS_IPV4 |
如果这是IPv4客户端,则返回布尔值TRUE,如果不是,则返回布尔值FALSE。 |
< ipv6 > .SUBNET (< n >) |
应用指定为参数的子网掩码后返回IPv6地址。子网掩码可以采用介于 0 到 128 之间的值。例如:CLIENT.IPV6.SRC.SUBNET (24) |
MAC地址的表达式
MAC地址由以冒号分隔的十六进制值组成,格式为 ##:##:##:##:##:##, 其中每个“#”表示0到9的数字或到F的字母。默认语法表达式前缀和运算符可用于评估源和目标MAC地址。
MAC地址的前缀
下表描述了返回MAC地址的前缀。
表 5.评估MAC地址的前缀
前缀 | 说明 |
---|---|
client.ether.dstmac |
返回以太网标头的目标字段中的MAC地址。 |
client.ether.srcmac |
返回以太网标头的源字段中的MAC地址。 |
MAC地址的操作
下表描述了可用于返回MAC地址的前缀的运算符。
表 6.MAC地址上的操作
前缀 | 说明 |
---|---|
< mac地址> .EQ(<地址>) |
如果MAC地址值与<地址> 参数相同,则返回布尔值真。 |
|
返回从get操作中指定的MAC地址段中提取的数值。例如,如果MAC地址是12:34:56:78:9a:bc,则以下内容返回34:client.ether.dstmac.get2 |
数字客户端和服务器数据的表达式
下表介绍了用于处理数字客户端和服务器数据(包括吞吐量,端口号和vlan id)的前缀。
表 7.用于评估数字客户端和服务器数据的前缀
前缀 | 说明 |
---|---|
client.interface.rxthroughput | 返回一个整数、表示前七秒内的原始接收流量吞吐量(以千字节/秒(kbps)为单位)。 |
client.interface.txthroughput | 返回一个整数,表示前七秒内的原始传输流量吞吐量(kbps)。 |
client.interface.rxtxthroughput | 返回一个整数,表示前七秒内的原始接收和传输流量吞吐量(kbps)。 |
server.interface.rxthroughput | 返回一个整数,表示前七秒内的原始接收流量吞吐量(kbps)。 |
server.interface.txthroughput | 返回一个整数,表示前七秒内的原始传输流量吞吐量(kbps)。 |
server.interface.rxtxthroughput | 返回一个整数,表示前七秒内的原始接收和传输流量吞吐量(kbps)。 |
server.vlan.id | 返回当前数据包进入Citrix ADC的VLAN数字ID。 |
客户端.vlan.id | 返回当前数据包进入Citrix ADC的VLAN的数字ID。 |