高级策略表达式:IP地址、MAC地址、吞吐量、VLAN id
可以使用高级策略表达式前缀返回IPv4地址、IPv6地址、MAC地址、IP子网,以及接口端口(Rx、Tx、RxTx)的吞吐量、接收报文的vlan id等客户端和服务器的有用数据。然后可以使用各种运算符对这些表达式前缀返回的数据求值。
IP地址和IP子网的表达式
可以使用高级策略表达式对Internet Protocol version 4 (IPv4)或Internet Protocol version 6 (IPv6)格式的地址和子网进行计算。IPv6地址和子网的表达式前缀中包含IPv6。IPv4地址和子网的表达式前缀中包含IP。下面是一个表达式的示例,用于标识请求是否来自特定的IPv4子网。
client.ip.src.in_subnet (147.1.0.0/16) < !——NeedCopy >
以下是两个重写策略的示例,它们检查从哪个子网接收数据包,并对Host报头执行重写操作。配置了这两个策略后,执行的重写操作取决于请求中的子网。这两种策略对IPv4格式的IP地址进行评估。
-添加重写动作url -重写动作替换"http.req.header(\"Host\")""\"www.mycompany1.com\"" -添加重写策略url -重写策略"http.req.header(\"Host\").contains(\"www.test1.com\") && client.ip.src.in_subnet(147.1.0.0/16)"URL1-rewrite-action -添加重写操作URL2-rewrite-action替换"http.req.header(\"Host\")""\"www.mycompany2.com\"" -添加重写策略url2 -重写策略"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地址和端口号的URL。
示例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 > |
返回一个布尔值TRUE,如果IP地址值与< IPv6_address > 论点。示例如下:client.ipv6.dst.eq (ABCD: 1234:: ABCD) |
|
以数字形式返回IPv6地址的一个段。下面的示例表达式从ipv6地址1000:1001:cd10:000:000:89 ab:4567:CDEF:client.ipv6.dst。Get5提取0000 ,这是地址中的第五组位。client.ipv6.dst。get6提取物89AB。 client.ipv6.dst。Get7提取4567。 您可以对这些段执行数值操作。请注意,当您检索整个IPv6地址时,您不能执行数字操作。这是因为返回整个IPv6地址的表达式,如CLIENT.IPV6。以文本格式返回地址。 |
< ipv6 > .IN_SUBNET(<子网>) |
参数指定的子网内的IPv6地址返回一个布尔值TRUE<子网> 论点。示例如下: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的数字或从A到f的字母。高级策略表达式前缀和操作符可用于评估源和目的MAC地址。
MAC地址前缀
下表描述了返回MAC地址的前缀。
表5所示。用于评估MAC地址的前缀
前缀 | 描述 |
---|---|
client.ether.dstmac |
返回以太网报头目的字段中的MAC地址。 |
client.ether.srcmac |
返回以太网报头源字段中的MAC地址。 |
MAC地址操作
下表描述了可用于返回MAC地址的前缀的操作符。
表6所示。MAC地址操作
前缀 | 描述 |
---|---|
< mac地址> .EQ(<地址>) |
返回一个布尔值TRUE,如果MAC地址值与<地址> 论点。 |
|
返回从GET操作中指定的MAC地址段中提取的数值。例如,MAC地址为12:34:56:78:9a:bc,则返回值为34:client.ether.dstmac.get2 |
用于数字客户端和服务器数据的表达式
下表描述了用于处理数字客户机和服务器数据的前缀,包括吞吐量、端口号和VLAN id。
表7所示。用于计算数字客户机和服务器数据的前缀
前缀 | 描述 |
---|---|
client.interface.rxthroughput | 返回一个整数,表示前7秒的原始接收流量吞吐量,单位为KBps(千字节每秒)。 |
client.interface.txthroughput | 返回一个整数,表示前7秒的原始传输流量吞吐量,单位为KBps。 |
client.interface.rxtxthroughput | 返回一个整数,表示前7秒的原始接收和传输流量吞吐量,单位为KBps。 |
server.interface.rxthroughput | 返回一个整数,表示前7秒的原始接收流量吞吐量,单位为KBps。 |
server.interface.txthroughput | 返回一个整数,表示前7秒的原始传输流量吞吐量,单位为KBps。 |
server.interface.rxtxthroughput | 返回一个整数,表示前7秒的原始接收和传输流量吞吐量,单位为KBps。 |
server.vlan.id | 返回当前数据包进入Citrix ADC的VLAN的数字ID。 |
client.vlan.id | 返回当前数据包进入Citrix ADC的VLAN的数字ID。 |