基于状态过滤会话
2026/3/17会话管理7.X.X大约 4 分钟
基于状态过滤会话
概述
diagnose sys session filter 命令提供了 session-state1 和 session-state2 两个参数,可以根据会话的状态标志对会话表进行精确过滤。
命令格式如下:
diagnose sys session filter <session-state1|session-state2> <state_bits> <state_bits_mask>state_bits:指定要过滤的状态位,多个状态可以通过相加(按位或)的方式组合使用。state_bits_mask:- 若设置为
ffffffff:只匹配仅包含指定状态的会话(精确匹配)。 - 若设置为与
state_bits相同的值:匹配包含指定状态的会话(含其他状态也可命中)。
- 若设置为
session-state1 状态位
在命令行输入以下命令(不加参数),可查看 session-state1 支持的所有状态位:
FortiGate # diagnose sys session filter session-state1Arguments: state_bits state_bits_mask
state1 bits:
|00000001: new |00000002: redir |00000004: log |00000008: block
|00000010: oe |00000020: re |00000040: wccp |00000080: dirty
|00000100: local |00000200: may_dirty |00000400: per_ip |00000800: auth
|00001000: nb |00002000: ndr |00004000: nds |00008000: br
|00010000: npu |00020000: npd |00040000: src-vis |00080000: ssc
|00100000: nlb |00200000: dst-vis |00400000: 3way |00800000: pol_sniff
|01000000: authed |02000000: need_sync |04000000: synced |08000000: os
|10000000: rs |20000000: ha_replicate |40000000: ndri提示
CLI 帮助中未显示的额外状态位:80000000: EXPECT (f31)
常用 session-state1 状态位说明:
| 状态位 | 状态名 | 说明 |
|---|---|---|
| 00000004 | log | 会话正在记录日志 |
| 00000080 | dirty | 会话参数已被修改 |
| 00000100 | local | 会话与 FortiGate 本地 IP 协议栈关联 |
| 00000200 | may_dirty | 会话参数允许被修改 |
| 00010000 | npu | 会话通过 NP 硬件加速芯片转发 |
| 00020000 | npd | 会话被拒绝进行硬件加速 |
| 00100000 | nlb | 会话来自负载均衡 VIP |
| 00800000 | pol_sniff | 策略中启用抓包功能后可见 |
| 02000000 | need_sync | 会话将在存活 30 秒后同步到 HA 对端 |
| 04000000 | synced | 会话已同步至 HA 对端 |
session-state2 状态位
在命令行输入以下命令(不加参数),可查看 session-state2 支持的所有状态位:
FortiGate # diagnose sys session filter session-state2Arguments: state_bits state_bits_mask
state2 bits:
|00000008: pcp_outbound |00000010: pcp_inbound |00000020: dym_src_port |00000040: inherit_sockport
|00000100: netflow-origin |00000200: netflow-reply |00000400: syn_ses |00000800: fec
|00001000: nosyn_ses |00002000: csf_syncd_log |00004000: app_valid |00008000: url_cat_valid
|00010000: route_preserve |00040000: exp_notify |00080000: pkt_dup |00100000: force_dup
|00200000: de_dup |00400000: dynamic_shaping |00800000: tcp_3way_rtt |01000000: access_proxy
|02000000: svc_dup |04000000: rpdb_dup提示
CLI 帮助中未显示的额外状态位:
| 状态位 | 状态名 | 适用场景 |
|---|---|---|
| 00000001 | LOG_FAILED_ATTEMPT | 通用 |
| 00000002 | LOG_FAILED_DNS | 通用 |
| 00000004 | LOG_FAILED_IP_CONN | 通用 |
| 00020000 | CLUSTER_SYNC | 通用 |
| 10000000 | LO_FWD | 仅 SLBC 机箱设备 |
| 20000000 | LI_REDIR | 仅 SLBC 机箱设备 |
| 40000000 | LO_MFPM_FWD | SLBC IPsec VPN 负载均衡 |
| 80000000 | LI_MFPM_REDIR | SLBC IPsec VPN 负载均衡 |
过滤示例
示例一:精确匹配指定状态的会话
过滤仅包含 may_dirty、nlb、nosyn_ses 三个状态(不含其他状态)的会话:
may_dirty的状态位(session-state1):00000200nlb的状态位(session-state1):00100000nosyn_ses的状态位(session-state2):00001000
diagnose sys session filter clear
diagnose sys session filter session-state1 00100200 ffffffff
diagnose sys session filter session-state2 00001000 ffffffff
diagnose sys session list命令输出示例:
session info: slot=0 ori_slot=0 proto=6 proto_state=02 duration=0 expire=9 timeout=3600 flags=00000000 sockflag=00000000 sockport=0 av_idx=0 use=4
origin-shaper=
reply-shaper=
per_ip_shaper=
class_id=0 ha_id=0 policy_dir=0 tunnel=/ helper=rsh vlan_cos=8/8
state=may_dirty nlb nosyn_ses
statistic(bytes/packets/allow_err): org=60/1/1 reply=0/0/0 tuples=2
tx speed(Bps/kbps): 0/0 rx speed(Bps/kbps): 0/0
orgin->sink: org pre->post, reply pre->post dev=103->105/105->103 gwy=169.254.0.66/0.0.0.0
hook=pre dir=org act=noop 10.101.10.5:11971->172.168.17.2:514(0.0.0.0:0)
hook=post dir=reply act=noop 172.168.17.2:514->10.101.10.5:11971(0.0.0.0:0)
pos/(before,after) 0/(0,0), 0/(0,0)
misc=0 policy_id=4294967295 auth_info=0 chk_client_info=0 vd=1
serial=0117979c tos=ff/ff app_list=0 app=0 url_cat=0
rpdb_link_id = 00000000 dd_type=0 dd_mode=0
npu_state=0x040000 no_ofld_reason: non-npu-intf
total session 60输出结果的 state 字段中可见 may_dirty nlb nosyn_ses,与过滤条件一致。
示例二:匹配包含某状态的所有会话
过滤所有包含 log 状态的会话(允许同时存在其他状态):
log的状态位(session-state1):00000004state_bits_mask设置为与state_bits相同的值(00000004),表示模糊匹配
diagnose sys session filter clear
diagnose sys session filter session-state1 00000004 00000004
diagnose sys session list命令输出示例:
session info: slot=0 ori_slot=0 proto=17 proto_state=00 duration=1179952 expire=139 timeout=0 flags=00000000 sockflag=00000000 sockport=0 av_idx=0 use=4
origin-shaper=
reply-shaper=
per_ip_shaper=
class_id=0 ha_id=0 policy_dir=0 tunnel=/ vlan_cos=8/8
state=log local may_dirty
statistic(bytes/packets/allow_err): org=1415664/19662/1 reply=0/0/0 tuples=2
tx speed(Bps/kbps): 1/0 rx speed(Bps/kbps): 0/0
orgin->sink: org pre->in, reply out->post dev=4->0/0->4 gwy=0.0.0.0/0.0.0.0
hook=pre dir=org act=noop 10.5.21.24:1950->10.5.31.255:8014(0.0.0.0:0)
hook=post dir=reply act=noop 10.5.31.255:8014->10.5.21.24:1950(0.0.0.0:0)
misc=0 policy_id=4294967295 auth_info=0 chk_client_info=0 vd=2
serial=00000872 tos=ff/ff app_list=0 app=0 url_cat=0
rpdb_link_id = 00000000 dd_type=0 dd_mode=0
npu_state=00000000 no_ofld_reason: local
total session 20输出结果的 state 字段中包含 log,同时还存在 local、may_dirty 等其他状态标志。