F5 BIG-IP Estate — example report

Generated 2026-08-24 13:06:16 UTC · 2 devices · query engine v2.1.24-15+g58aeae0e

BIG-IP Report Generator & f5‑query by bitwisecook
36Orphaned Objects

Architecture

how the loaded devices relate as tiers — auto-detected from address overlap
Devices by tier
Tier 0
bigip-lab-01.example.net ltm
bigip-edge-02.example.net ltm

bigip-lab-01.example.net

TMOS 15.1.8.2 lab-device-01.ucs
This BIG-IP branch reached EoTS and completed its EoL lifecycle 601 days ago.
Branch 15.1.x · policy snapshot 2026-07-01
Released
2019-12-11
EoSD
2024-12-31
EoTS / EoL
2024-12-31
Software lifecycle only; hardware and FIPS exceptions have independent dates. Verify against F5 K5903.
This BIG-IP branch reached EoTS and completed its EoL lifecycle 601 days ago.
1 orphaned pools (defined, referenced by nothing — no iRule can attach them either)
2 orphaned nodes (defined, referenced by nothing — no iRule can attach them either)
1 orphaned rules (defined, referenced by nothing — no iRule can attach them either)
3 orphaned monitors (defined, referenced by nothing — no iRule can attach them either)
5 orphaned profiles (defined, referenced by nothing — no iRule can attach them either)
3 pool(s) with no members: css_pool, jpg.pool, js.io_t80_pool
4 virtual server(s) with no default pool (forwarding / policy-driven)
5 SSL profile(s) in use
Configuration diagnostics 8
BIGIP6003 Virtual server 'app1_t80_vs' references iRule '/Common/_sys_https_redirect' which is not defined. warning
BIGIP6003 Virtual server 'app2_t80_vs' references iRule '/Common/_sys_https_redirect' which is not defined. warning
BIGIP6003 Virtual server 'app4_t80_vs' references iRule '/Common/_sys_https_redirect' which is not defined. warning
BIGIP6012 Virtual server 'app3_t8443_vs' attaches iRules '/Common/app3_rule', '/Common/app3_rule2' which all handle event 'HTTP_REQUEST' at priority 500; execution order between them is ambiguous. warning
BIGIP6004 iRule 'app4_pool_rule' on virtual 'app4_t80_vs' uses HTTP:: commands but no HTTP profile is attached. hint
BIGIP6038 Virtual server 'app3_t8443_vs' cannot reach iRule 'app3_rule' handler 'HTTP_REQUEST' at effective priority 500: the event requires profile FASTHTTP or HTTP, but active profiles are CLIENTSSL, SERVERSSL, TCP. warning
BIGIP6038 Virtual server 'app3_t8443_vs' cannot reach iRule 'app3_rule2' handler 'HTTP_REQUEST' at effective priority 500: the event requires profile FASTHTTP or HTTP, but active profiles are CLIENTSSL, SERVERSSL, TCP. warning
BIGIP6038 Virtual server 'app4_t80_vs' cannot reach iRule 'app4_pool_rule' handler 'HTTP_REQUEST' at effective priority 500: the event requires profile FASTHTTP or HTTP, but active profiles are TCP. warning
Bundle as app: 0 selected tick virtual servers, name the app, then open the Apps tab
NameDestinationPortPool ProfilesiRulesSNATProto
app1_t80_vs 192.168.1.21 80 tcphttp _sys_https_redirect tcp
app1_t443_vs 192.168.1.21 443 app1_t80_pool tcphttp automap tcp
app2_t80_vs 192.168.2.21 80 tcphttp _sys_https_redirect tcp
app2_t443_vs 192.168.2.21 443 app2_t80_pool tcphttp automap tcp
persistTest_80_vs 10.6.3.4 80 tcphttp tcp i
app3_t8443_vs 192.168.1.51 8443 app3_t8443_pool tcpapp3_clientsslapp3_serversslhttp app3_ruleapp3_rule2app3_rule3 app3_snat_pool tcp
app4_t80_vs 192.168.2.25 80 app4_pool tcphttp _sys_https_redirectapp4_pool_rule tcp i
forwarder_net_0.0.0.0 0.0.0.0 0 fastl4_loose
bigiq.benlab.io_t443_vs 10.200.244.15 443 bigiq.benlab.io_t443_pool httpASM_basic_policy_1f5-tcp-progressivewebsecurity automap tcp i
Configuration diagnostics 3
BIGIP6008 Pool 'css_pool' has no members defined. hint
BIGIP6008 Pool 'jpg.pool' has no members defined. hint
BIGIP6008 Pool 'js.io_t80_pool' has no members defined. hint
NameMembersMonitorLB ModeUsed By
MemberAddressPortMonitor
app1_Node1:80192.168.1.2280
app1_Node2:80192.168.1.2380
MemberAddressPortMonitor
app2_Node1:80192.168.2.2280
app2_Node2:80192.168.2.2380
MemberAddressPortMonitor
app3_Node1:8443192.168.1.528443
app3_Node2:8443192.168.1.538443
MemberAddressPortMonitor
10.3.110.10:8010.3.110.1080
10.3.110.10:44310.3.110.10443
10.3.110.10:844310.3.110.108443
dw1.lab.io:84438443
dw2.lab.io:443443/Common/http
MemberAddressPortMonitor
api.chucknorris.io:443443
MemberAddressPortMonitor
10.200.244.15:44310.200.244.15443
NameAddressMonitorUsed By Pools
10.10.10.1 10.10.10.1 app4_pool_rule
192.168.200.42 orphan 192.168.200.42 nothing
api.chucknorris.io app4_pool
app1_Node1 192.168.1.22 app1_t80_pool
app1_Node2 192.168.1.23 app1_t80_pool
app2_Node1 192.168.2.22 app2_t80_pool
app2_Node2 192.168.2.23 app2_t80_pool
app3_Node1 192.168.1.52 app3_t8443_pool
app3_Node2 192.168.1.53 app3_t8443_pool
app5_Node5 orphan 192.168.10.23 nothing
10.200.244.15 10.200.244.15 bigiq.benlab.io_t443_pool
NameTypeIntervalTimeoutSendReceiveUsed By
dubNameTst1_monitor dns 5 16 none 0
global_http_monitor http 5 16 GET /anywebsite.com\r\n ok 200 1
global_https_monitor https 5 16 GET /any-secure-website.com\r\n 201 continue 1
test_tcp_monitor tcp 5 16 send a tcp string receive a tcp string 0
app1_tcp_half_open_quick_monitor tcp-half-open 1 4 1
test_udp_monitor udp 5 16 default send string recieve-what? 0
bigiq_https_monitor https 5 16 GET /something \r\n none 1
Configuration diagnostics 8
BIGIP6002 Pool 'reference' not found in BIG-IP configuration. warning
BIGIP6002 Pool 'web1Pool' not found in BIG-IP configuration. warning
BIGIP6002 Pool 'refernce' not found in BIG-IP configuration. warning
BIGIP6002 Pool 'reference' not found in BIG-IP configuration. warning
BIGIP6002 Pool 'reference' not found in BIG-IP configuration. warning
BIGIP6002 Pool 'that' not found in BIG-IP configuration. warning
BIGIP6002 Pool 'missing_pool' not found in BIG-IP configuration. warning
BIGIP6002 Pool 'referenced' not found in BIG-IP configuration. warning
NameEventsLinesAttached To
No pool / node / snatpool / data-group references (static or dynamic) in this iRule.
#comment

when HTTP_REQUEST {
    # add more here
}
No pool / node / snatpool / data-group references (static or dynamic) in this iRule.
#comment

when HTTP_REQUEST {
    # ben test 444
}
No pool / node / snatpool / data-group references (static or dynamic) in this iRule.
# app3_rule3 header

when SERVERSSL_DATA {
    # got something from server
}
Referenced objects: pool css_pool pool jpg.pool pool js.io_t80_pool
Potentially referenced objects — resolved for app4_t80_vs in partition /Common
Determined filterTypeMatching objects (this partition)
*-poolpoolnone defined match
### test rule for corkscrew

  # 

when HTTP_REQUEST {

  # pool reference by variable declaration
  set html-pool web1Pool

  if { [HTTP::path] ends_with "*.css" }{

    # regular pool refernce
    pool css_pool

  } elseif { [HTTP::path] ends_with "*.jpg" }{

    # pool member refernce
    pool jpg.pool member 10.10.10.1 80

  } elseif { [HTTP::path] ends_with "*.js" }{

    # another pool reference with special characters
    pool js.io_t80_pool 

  } elseif { [HTTP::path] ends_with "*.xx" }{

    # pool reference not in tmos config
    ### *** seems the gui won't let you attach an irule to a vs with a pool that doesn't exist
    #pool missing_pool

  } elseif { [HTTP::path] ends_with "*.txt" }{

    # node reference
    node 10.10.10.1 80

  } else {

    # pool referenced by variable
    pool $html-pool

  }
}
No pool / node / snatpool / data-group references (static or dynamic) in this iRule.
Configuration diagnostics 9
BIGIP6006 Data-group '____appsvcs_declaration-1601897418975' is defined but not referenced by any iRule in this configuration. hint
BIGIP6006 Data-group '____appsvcs_declaration-1601900242421' is defined but not referenced by any iRule in this configuration. hint
BIGIP6006 Data-group '____appsvcs_declaration-1601900272772' is defined but not referenced by any iRule in this configuration. hint
BIGIP6006 Data-group '____appsvcs_declaration-1602008840967' is defined but not referenced by any iRule in this configuration. hint
BIGIP6006 Data-group '__appsvcs_update' is defined but not referenced by any iRule in this configuration. hint
BIGIP6006 Data-group 'dataStore' is defined but not referenced by any iRule in this configuration. hint
BIGIP6006 Data-group 'datastore' is defined but not referenced by any iRule in this configuration. hint
BIGIP6006 Data-group 'config' is defined but not referenced by any iRule in this configuration. hint
BIGIP6006 Data-group 'dataStore' is defined but not referenced by any iRule in this configuration. hint
NameTypeRecordsUsed By
01
01
01
01
as3_async_records0
config0
bigip-fast-templates0examples0goodFastTemplates0
NameTypeParentCertificateCiphersUsed By
app2_clientssl CLIENT_SSL clientssl 0
app3_clientssl CLIENT_SSL clientssl 1
test1 CLIENT_SSL clientssl 0
fastl4_loose FASTL4 1
global_http_monitor FTP ftp 1
dubNameTst1_profile HTTP http 0
dubName.Tst1_profile HTTP httpcompression 0
app3_serverssl SERVER_SSL serverssl 1
test2 SERVER_SSL serverssl 0

Certificate inventory pulled straight from the config — every sys file ssl-cert stanza carries its own expiry, subject and issuer. Days remaining is computed live against your clock, so this view is current whenever the report is opened. Sorted soonest-to-expire first; expired and expiring-within-30-days are flagged. Click a row for the SAN list, fingerprint and what uses it.

No sys file ssl-cert objects in this config. A UCS backup or a full config save (tmsh save sys config) includes them; a partial bigip.conf that only defines LTM objects may not.

Offline TLS assurance from the shared SslicTcl engine. It resolves BIG-IP profile inheritance and TMOS-version defaults, preserves every cert-key-chain SNI variant, verifies certificate signatures and constraints against embedded client trust programs, and gives a transparent SSL Labs-style estimate. This is configuration analysis, not a live handshake: grades include a confidence value and never make a network request.

No virtual server with an attached client-ssl or server-ssl profile was found.

A small, high-confidence set of offline security-posture checks — factory/default credentials, SNMP and password-policy weaknesses, plaintext secrets, unprotected private-key material, and shell-access review. Detection is entirely passive: nothing here authenticates to the device or makes a network request, and no password, hash, salt, master key, private key or decrypted secret value is ever shown. Confirmed findings need action; clear means the check ran and found nothing; not applicable means there was nothing to check (e.g. no such account); could not inspect means the material is present but not in a form this generator can verify (see each finding's remediation). A partial bigip.conf with no UCS filestore will show more "not applicable"/"could not inspect" results — this is expected, not a bug.

No security findings were produced for this source.

Every credential-bearing field in the config — SSL private-key passphrases, monitor / RADIUS / SNMP / iApp secrets. BIG-IP stores these encrypted under the unit master key (f5mku -K). Values are masked: when the report was generated with the master key you can reveal the decrypted secret; otherwise it stays encrypted and cannot be shown. Nothing here was uploaded, and printing only shows secrets you have revealed.

ObjectFieldSecret
auth radius-server /Common/system_auth_name1 secret •••••••••••• encrypted
ltm auth radius-server /Common/system_auth_name1 secret •••••••••••• encrypted
sys file ssl-key /Common/f5_api_com.key passphrase •••••••••••• encrypted
Configuration diagnostics 29
BIGIP6013 pool '/Common/app1_t80_pool' has registry-declared reference '/Common/http' in property 'monitor' which could not be resolved; define a compatible target or use a static full path. warning
BIGIP6013 pool '/Common/app1_t80_pool' has registry-declared reference '/Common/tcp' in property 'monitor' which could not be resolved; define a compatible target or use a static full path. warning
BIGIP6013 pool '/Common/app3_t8443_pool' has registry-declared reference '/Common/http_head_f5' in property 'monitor' which could not be resolved; define a compatible target or use a static full path. warning
BIGIP6013 pool '/Common/app3_t8443_pool' has registry-declared reference '/Common/http2_head_f5' in property 'monitor' which could not be resolved; define a compatible target or use a static full path. warning
BIGIP6013 pool '/Common/app3_t8443_pool' has registry-declared reference '/Common/http' in property 'monitor' which could not be resolved; define a compatible target or use a static full path. warning
BIGIP6013 pool '/Common/app3_t8443_pool' has registry-declared reference '/Common/tcp_half_open' in property 'monitor' which could not be resolved; define a compatible target or use a static full path. warning
BIGIP6013 pool '/Common/manyOptions_pool' has registry-declared reference '/Common/10.3.110.10:80' in property 'members' which could not be resolved; define a compatible target or use a static full path. warning
BIGIP6013 pool '/Common/manyOptions_pool' has registry-declared reference '/Common/10.3.110.10:443' in property 'members' which could not be resolved; define a compatible target or use a static full path. warning
BIGIP6013 pool '/Common/manyOptions_pool' has registry-declared reference '/Common/10.3.110.10:8443' in property 'members' which could not be resolved; define a compatible target or use a static full path. warning
BIGIP6013 pool '/Common/manyOptions_pool' has registry-declared reference '/Common/dw1.lab.io:8443' in property 'members' which could not be resolved; define a compatible target or use a static full path. warning
BIGIP6013 pool '/Common/manyOptions_pool' has registry-declared reference '/Common/dw2.lab.io:443' in property 'members' which could not be resolved; define a compatible target or use a static full path. warning
BIGIP6013 pool '/Common/manyOptions_pool' has registry-declared reference '/Common/gateway_icmp' in property 'monitor' which could not be resolved; define a compatible target or use a static full path. warning
BIGIP6013 pool '/Common/manyOptions_pool' has registry-declared reference '/Common/http' in property 'monitor' which could not be resolved; define a compatible target or use a static full path. warning
BIGIP6013 pool '/Common/manyOptions_pool' has registry-declared reference '/Common/http2' in property 'monitor' which could not be resolved; define a compatible target or use a static full path. warning
BIGIP6013 pool '/Common/manyOptions_pool' has registry-declared reference '/Common/nvgre' in property 'profiles' which could not be resolved; define a compatible target or use a static full path. warning
BIGIP6013 virtual '/Common/persistTest_80_vs' has registry-declared reference '/Common/10.6.3.4:80' in property 'destination' which could not be resolved; define a compatible target or use a static full path. warning
BIGIP6013 monitor dns '/Common/dubNameTst1_monitor' has registry-declared reference '/Common/dns' in property 'defaults-from' which could not be resolved; define a compatible target or use a static full path. warning
BIGIP6013 monitor http '/Common/global_http_monitor' has registry-declared reference '/Common/http' in property 'defaults-from' which could not be resolved; define a compatible target or use a static full path. warning
BIGIP6013 monitor https '/Common/global_https_monitor' has registry-declared reference '/Common/https' in property 'defaults-from' which could not be resolved; define a compatible target or use a static full path. warning
BIGIP6013 monitor tcp '/Common/test_tcp_monitor' has registry-declared reference '/Common/tcp' in property 'defaults-from' which could not be resolved; define a compatible target or use a static full path. warning
BIGIP6013 monitor tcp-half-open '/Common/app1_tcp_half_open_quick_monitor' has registry-declared reference '/Common/tcp_half_open' in property 'defaults-from' which could not be resolved; define a compatible target or use a static full path. warning
BIGIP6013 monitor udp '/Common/test_udp_monitor' has registry-declared reference '/Common/udp' in property 'defaults-from' which could not be resolved; define a compatible target or use a static full path. warning
BIGIP6013 dns-resolver '/Common/f5-aws-dns' has registry-declared reference '/Common/0' in property 'route-domain' which could not be resolved; define a compatible target or use a static full path. warning
BIGIP6013 virtual '/Common/bigiq.benlab.io_t443_vs' has registry-declared reference '/Common/10.200.244.15:443' in property 'destination' which could not be resolved; define a compatible target or use a static full path. warning
BIGIP6013 virtual '/Common/bigiq.benlab.io_t443_vs' has registry-declared reference '/Common/ASM_basic_policy_1' in property 'profiles' which could not be resolved; define a compatible target or use a static full path. warning
BIGIP6013 virtual '/Common/bigiq.benlab.io_t443_vs' has registry-declared reference '/Common/vlan255_f5peer' in property 'vlans' which could not be resolved; define a compatible target or use a static full path. warning
BIGIP6013 virtual '/Common/bigiq.benlab.io_t443_vs' has registry-declared reference '/Common/vlan245' in property 'vlans' which could not be resolved; define a compatible target or use a static full path. warning
BIGIP6013 virtual '/Common/bigiq.benlab.io_t443_vs' has registry-declared reference '/Common/vlan230' in property 'vlans' which could not be resolved; define a compatible target or use a static full path. warning
BIGIP6013 monitor https '/Common/bigiq_https_monitor' has registry-declared reference '/Common/https' in property 'defaults-from' which could not be resolved; define a compatible target or use a static full path. warning
Virtual Pool Node Monitor iRule Profile

Click a node to open its detail drawer. Click a connector line to light up everything connected to it (e.g. an iRule→pool link highlights every virtual using that iRule, and the pool's nodes). Dashed edges are pool references found inside an iRule.

Enter a client flow — which virtual server picks it up? Results are ranked most-specific first (the matched listener is highlighted at the top); virtuals at the same specificity are shown side by side. Click any listener to load the exact flow that reaches it and simulate its processing. Supports IPv4 and IPv6, VLANs and route domains. Source defaults to 0.0.0.0/0.

Curated F5 community, support and security-incident-response resources. Because this report is often generated from a .ucs archive of a device under investigation, the UCS forensic checklist below ties each archive path to the attacker behaviour to look for and its MITRE ATT&CK technique. Every link opens on F5 DevCentral, my.F5 or CISA — nothing here is loaded to render the page or phones home.

UCS forensic checklist — where to hunt and what it maps to

List the archive with tar -ztf archive.ucs, then extract and inspect the paths below. Compare against a known-good backup where you have one — a UCS taken from an already-compromised host can itself carry the implant.

Where to look (UCS path / config)What an attacker does thereMITRE ATT&CK
home/*/.bashrc, .bash_profile, .bash_login Shell-init hooks that silently re-launch malware whenever a user logs in — a favourite way to survive a clean-up. T1546.004
home/*/.ssh/authorized_keys Attacker-controlled SSH key for durable access. On password-auth deployments this file is normally absent or empty — any key is suspect. T1098.004
etc/passwd, etc/shadow Backdoor local accounts, unexpected UID 0 users, or altered password hashes. T1136 · T1078
etc/nsswitch.conf, etc/openldap/*, etc/krb5.conf, etc/security/* Redirected or weakened external authentication (LDAP/AD/RADIUS/Kerberos/PAM) to plant rogue trust or harvest credentials. T1556
etc/syslog-ng/* Logging disabled or quietly redirected so on-box activity is never recorded or forwarded. T1562.006
config/* iRules — cross-check the iRules tab An HTTP-event iRule acting as a web shell / covert C2: running commands or exfiltrating on a magic URI, header or cookie. T1505.003 · T1059
System binaries (running host, not in the UCS): /usr/bin/umount, /usr/sbin/httpd Trojanised binaries — hash, size or mtime that differ from the known-good release. T1554
etc/motd Tampered login banner (defacement / taunt, or to mask changes). T1491
Point-in-time indicators (2025 F5 incident & SIRT reporting). Reported artefacts have included the files /run/bigtlog.pipe and /run/bigstart.ltm; size / hash / timestamp mismatches on /usr/bin/umount and /usr/sbin/httpd; the account f5hubblelcdadmin reaching iControl REST from localhost; auditd entries that disable SELinux; and C2 disguised as HTTP 201 responses carrying a text/css content-type. These indicators are volatile and version-specific — confirm against the current F5 SIRT and CISA guidance rather than treating them as a fixed signature list.

Run the real f5-query DSL against this device, live in your browser — the query engine is compiled to WebAssembly and embedded in this page along with the config. Nothing leaves the page. Press Ctrl/⌘+Enter to run.


    

bigip-edge-02.example.net

TMOS 15.1.0.4 lab-device-02.ucs
This BIG-IP branch reached EoTS and completed its EoL lifecycle 601 days ago.
Branch 15.1.x · policy snapshot 2026-07-01
Released
2019-12-11
EoSD
2024-12-31
EoTS / EoL
2024-12-31
Software lifecycle only; hardware and FIPS exceptions have independent dates. Verify against F5 K5903.
This BIG-IP branch reached EoTS and completed its EoL lifecycle 601 days ago.
2 orphaned monitors (defined, referenced by nothing — no iRule can attach them either)
3 orphaned profiles (defined, referenced by nothing — no iRule can attach them either)
3 virtual server(s) with no default pool (forwarding / policy-driven)
5 SSL profile(s) in use
Configuration diagnostics 4
BIGIP6003 Virtual server 'app1_t80_vs' references iRule '/Common/_sys_https_redirect' which is not defined. warning
BIGIP6003 Virtual server 'app2_t80_vs' references iRule '/Common/_sys_https_redirect' which is not defined. warning
BIGIP6038 Virtual server 'app3_t8443_vs' cannot reach iRule 'app3_rule' handler 'HTTP_REQUEST' at effective priority 500: the event requires profile FASTHTTP or HTTP, but active profiles are CLIENTSSL, SERVERSSL, TCP. warning
BIGIP6038 Virtual server 'app3_t8443_vs' cannot reach iRule 'app3_rule2' handler 'HTTP_RESPONSE' at effective priority 500: the event requires profile FASTHTTP or HTTP, but active profiles are CLIENTSSL, SERVERSSL, TCP. warning
Bundle as app: 0 selected tick virtual servers, name the app, then open the Apps tab
NameDestinationPortPool ProfilesiRulesSNATProto
app1_t80_vs 192.168.1.21 80 tcphttp _sys_https_redirect tcp
app1_t443_vs 192.168.1.21 443 app1_t80_pool tcphttp automap tcp
app2_t80_vs 192.168.2.21 80 tcphttp _sys_https_redirect tcp
app2_t443_vs 192.168.2.21 443 app2_t80_pool tcphttp automap tcp
app3_t8443_vs 192.168.1.51 8443 app3_t8443_pool tcpapp3_clientsslapp3_serversslhttp app3_ruleapp3_rule2app3_rule3 app3_snat_pool tcp
forwarder_net_0.0.0.0 0.0.0.0 0 fastl4_loose
NameMembersMonitorLB ModeUsed By
MemberAddressPortMonitor
app1_Node1:80192.168.1.2280
app1_Node2:80192.168.1.2380
MemberAddressPortMonitor
app2_Node1:80192.168.2.2280
app2_Node2:80192.168.2.2380
MemberAddressPortMonitor
app3_Node1:8443192.168.1.528443
app3_Node2:8443192.168.1.538443
NameAddressMonitorUsed By Pools
app1_Node1 192.168.1.22 app1_t80_pool
app1_Node2 192.168.1.23 app1_t80_pool
app2_Node1 192.168.2.22 app2_t80_pool
app2_Node2 192.168.2.23 app2_t80_pool
app3_Node1 192.168.1.52 app3_t8443_pool
app3_Node2 192.168.1.53 app3_t8443_pool
NameTypeIntervalTimeoutSendReceiveUsed By
global_http_monitor http 5 16 GET /anywebsite.com\r\n ok 200 1
global_https_monitor https 5 16 GET /any-secure-website.com\r\n 201 continue 1
test_tcp_monitor tcp 5 16 send a tcp string receive a tcp string 0
app1_tcp_half_open_quick_monitor tcp-half-open 1 4 1
test_udp_monitor udp 5 16 default send string recieve-what? 0
NameEventsLinesAttached To
No pool / node / snatpool / data-group references (static or dynamic) in this iRule.
#comment

when HTTP_REQUEST {
    # add more here
}
No pool / node / snatpool / data-group references (static or dynamic) in this iRule.
#rule2

when HTTP_RESPONSE {
    # 22222222
}
No pool / node / snatpool / data-group references (static or dynamic) in this iRule.
# app3_rule3 header

when SERVERSSL_DATA {
    # got something from server
}
Configuration diagnostics 9
BIGIP6006 Data-group '____appsvcs_declaration-1600355676391' is defined but not referenced by any iRule in this configuration. hint
BIGIP6006 Data-group '____appsvcs_declaration-1600358372079' is defined but not referenced by any iRule in this configuration. hint
BIGIP6006 Data-group '____appsvcs_declaration-1600691736572' is defined but not referenced by any iRule in this configuration. hint
BIGIP6006 Data-group '____appsvcs_declaration-1600691777336' is defined but not referenced by any iRule in this configuration. hint
BIGIP6006 Data-group '__appsvcs_update' is defined but not referenced by any iRule in this configuration. hint
BIGIP6006 Data-group 'dataStore' is defined but not referenced by any iRule in this configuration. hint
BIGIP6006 Data-group 'datastore' is defined but not referenced by any iRule in this configuration. hint
BIGIP6006 Data-group 'config' is defined but not referenced by any iRule in this configuration. hint
BIGIP6006 Data-group 'dataStore' is defined but not referenced by any iRule in this configuration. hint
NameTypeRecordsUsed By
01
01
01
01
as3_async_records0
config0
bigip-fast-templates0examples0goodFastTemplates0
NameTypeParentCertificateCiphersUsed By
app2_clientssl CLIENT_SSL clientssl 0
app3_clientssl CLIENT_SSL clientssl 1
test1 CLIENT_SSL clientssl 0
fastl4_loose FASTL4 1
app3_serverssl SERVER_SSL serverssl 1
test2 SERVER_SSL serverssl 0

Certificate inventory pulled straight from the config — every sys file ssl-cert stanza carries its own expiry, subject and issuer. Days remaining is computed live against your clock, so this view is current whenever the report is opened. Sorted soonest-to-expire first; expired and expiring-within-30-days are flagged. Click a row for the SAN list, fingerprint and what uses it.

No sys file ssl-cert objects in this config. A UCS backup or a full config save (tmsh save sys config) includes them; a partial bigip.conf that only defines LTM objects may not.

Offline TLS assurance from the shared SslicTcl engine. It resolves BIG-IP profile inheritance and TMOS-version defaults, preserves every cert-key-chain SNI variant, verifies certificate signatures and constraints against embedded client trust programs, and gives a transparent SSL Labs-style estimate. This is configuration analysis, not a live handshake: grades include a confidence value and never make a network request.

No virtual server with an attached client-ssl or server-ssl profile was found.

A small, high-confidence set of offline security-posture checks — factory/default credentials, SNMP and password-policy weaknesses, plaintext secrets, unprotected private-key material, and shell-access review. Detection is entirely passive: nothing here authenticates to the device or makes a network request, and no password, hash, salt, master key, private key or decrypted secret value is ever shown. Confirmed findings need action; clear means the check ran and found nothing; not applicable means there was nothing to check (e.g. no such account); could not inspect means the material is present but not in a form this generator can verify (see each finding's remediation). A partial bigip.conf with no UCS filestore will show more "not applicable"/"could not inspect" results — this is expected, not a bug.

No security findings were produced for this source.

Every credential-bearing field in the config — SSL private-key passphrases, monitor / RADIUS / SNMP / iApp secrets. BIG-IP stores these encrypted under the unit master key (f5mku -K). Values are masked: when the report was generated with the master key you can reveal the decrypted secret; otherwise it stays encrypted and cannot be shown. Nothing here was uploaded, and printing only shows secrets you have revealed.

ObjectFieldSecret
auth radius-server /Common/system_auth_name1 secret •••••••••••• encrypted
ltm auth radius-server /Common/system_auth_name1 secret •••••••••••• encrypted
sys file ssl-key /Common/f5_api_com.key passphrase •••••••••••• encrypted
Configuration diagnostics 12
BIGIP6013 pool '/Common/app1_t80_pool' has registry-declared reference '/Common/http' in property 'monitor' which could not be resolved; define a compatible target or use a static full path. warning
BIGIP6013 pool '/Common/app1_t80_pool' has registry-declared reference '/Common/tcp' in property 'monitor' which could not be resolved; define a compatible target or use a static full path. warning
BIGIP6013 pool '/Common/app3_t8443_pool' has registry-declared reference '/Common/http_head_f5' in property 'monitor' which could not be resolved; define a compatible target or use a static full path. warning
BIGIP6013 pool '/Common/app3_t8443_pool' has registry-declared reference '/Common/http2_head_f5' in property 'monitor' which could not be resolved; define a compatible target or use a static full path. warning
BIGIP6013 pool '/Common/app3_t8443_pool' has registry-declared reference '/Common/http' in property 'monitor' which could not be resolved; define a compatible target or use a static full path. warning
BIGIP6013 pool '/Common/app3_t8443_pool' has registry-declared reference '/Common/tcp_half_open' in property 'monitor' which could not be resolved; define a compatible target or use a static full path. warning
BIGIP6013 monitor http '/Common/global_http_monitor' has registry-declared reference '/Common/http' in property 'defaults-from' which could not be resolved; define a compatible target or use a static full path. warning
BIGIP6013 monitor https '/Common/global_https_monitor' has registry-declared reference '/Common/https' in property 'defaults-from' which could not be resolved; define a compatible target or use a static full path. warning
BIGIP6013 monitor tcp '/Common/test_tcp_monitor' has registry-declared reference '/Common/tcp' in property 'defaults-from' which could not be resolved; define a compatible target or use a static full path. warning
BIGIP6013 monitor tcp-half-open '/Common/app1_tcp_half_open_quick_monitor' has registry-declared reference '/Common/tcp_half_open' in property 'defaults-from' which could not be resolved; define a compatible target or use a static full path. warning
BIGIP6013 monitor udp '/Common/test_udp_monitor' has registry-declared reference '/Common/udp' in property 'defaults-from' which could not be resolved; define a compatible target or use a static full path. warning
BIGIP6013 dns-resolver '/Common/f5-aws-dns' has registry-declared reference '/Common/0' in property 'route-domain' which could not be resolved; define a compatible target or use a static full path. warning
Virtual Pool Node Monitor iRule Profile

Click a node to open its detail drawer. Click a connector line to light up everything connected to it (e.g. an iRule→pool link highlights every virtual using that iRule, and the pool's nodes). Dashed edges are pool references found inside an iRule.

Enter a client flow — which virtual server picks it up? Results are ranked most-specific first (the matched listener is highlighted at the top); virtuals at the same specificity are shown side by side. Click any listener to load the exact flow that reaches it and simulate its processing. Supports IPv4 and IPv6, VLANs and route domains. Source defaults to 0.0.0.0/0.

Curated F5 community, support and security-incident-response resources. Because this report is often generated from a .ucs archive of a device under investigation, the UCS forensic checklist below ties each archive path to the attacker behaviour to look for and its MITRE ATT&CK technique. Every link opens on F5 DevCentral, my.F5 or CISA — nothing here is loaded to render the page or phones home.

UCS forensic checklist — where to hunt and what it maps to

List the archive with tar -ztf archive.ucs, then extract and inspect the paths below. Compare against a known-good backup where you have one — a UCS taken from an already-compromised host can itself carry the implant.

Where to look (UCS path / config)What an attacker does thereMITRE ATT&CK
home/*/.bashrc, .bash_profile, .bash_login Shell-init hooks that silently re-launch malware whenever a user logs in — a favourite way to survive a clean-up. T1546.004
home/*/.ssh/authorized_keys Attacker-controlled SSH key for durable access. On password-auth deployments this file is normally absent or empty — any key is suspect. T1098.004
etc/passwd, etc/shadow Backdoor local accounts, unexpected UID 0 users, or altered password hashes. T1136 · T1078
etc/nsswitch.conf, etc/openldap/*, etc/krb5.conf, etc/security/* Redirected or weakened external authentication (LDAP/AD/RADIUS/Kerberos/PAM) to plant rogue trust or harvest credentials. T1556
etc/syslog-ng/* Logging disabled or quietly redirected so on-box activity is never recorded or forwarded. T1562.006
config/* iRules — cross-check the iRules tab An HTTP-event iRule acting as a web shell / covert C2: running commands or exfiltrating on a magic URI, header or cookie. T1505.003 · T1059
System binaries (running host, not in the UCS): /usr/bin/umount, /usr/sbin/httpd Trojanised binaries — hash, size or mtime that differ from the known-good release. T1554
etc/motd Tampered login banner (defacement / taunt, or to mask changes). T1491
Point-in-time indicators (2025 F5 incident & SIRT reporting). Reported artefacts have included the files /run/bigtlog.pipe and /run/bigstart.ltm; size / hash / timestamp mismatches on /usr/bin/umount and /usr/sbin/httpd; the account f5hubblelcdadmin reaching iControl REST from localhost; auditd entries that disable SELinux; and C2 disguised as HTTP 201 responses carrying a text/css content-type. These indicators are volatile and version-specific — confirm against the current F5 SIRT and CISA guidance rather than treating them as a fixed signature list.

Run the real f5-query DSL against this device, live in your browser — the query engine is compiled to WebAssembly and embedded in this page along with the config. Nothing leaves the page. Press Ctrl/⌘+Enter to run.


    
f5-query
📖 f5-query manual — DSL grammar, builtin functions & cookbook
F5 QUERY DSL — GRAMMAR

A query is a pipeline of stages joined by ``|``.  Each stage transforms
the current value (``.``) into one or more new values.  Pipelines may
be chained with ``;`` to evaluate multiple statements against the same
root.

  program       := pipeline (';' pipeline)*
  pipeline      := comma_expr ('|' comma_expr)*
  comma_expr    := pipe_stage (',' pipe_stage)*
  pipe_stage    := or_expr (ASSIGN_OP pipe_stage)?
  ASSIGN_OP     := '=' | '|=' | '+=' | '-='
  or_expr       := and_expr ('or' and_expr)*
  and_expr      := not_expr ('and' not_expr)*
  not_expr      := 'not' not_expr | cmp_expr
  cmp_expr      := add_expr (('==' | '!=' | '<' | '<=' | '>' | '>=') add_expr)?
  add_expr      := mul_expr (('+' | '-') mul_expr)*
  mul_expr      := unary    (('*' | '/') unary)*
  unary         := '-' unary | postfix
  postfix       := primary path_tail
  primary       := literal | call | path | variable | list_literal
                 | object_literal | if_expr | '(' pipeline ')'
  if_expr       := 'if' pipeline 'then' pipeline
                   ('elif' pipeline 'then' pipeline)*
                   ('else' pipeline)? 'end'
  variable      := '$' IDENT          /* root container of a named
                                         source loaded alongside this
                                         query (`f5 query` accepts
                                         several configs with
                                         filename-stem default names
                                         and an explicit --name N=PATH
                                         override).  Postfix path
                                         steps land afterwards, so
                                         `$gtm.gtm.wideip[]` reads from
                                         the source bound under
                                         `$gtm`.                       */
  object_literal:= '{' (entry (',' entry)*)? '}'
                                       /* jq-style object constructor:
                                          { name, destination: .dest }
                                          builds a dict per input.
                                          Stream values broadcast
                                          element-wise so one stream
                                          field becomes one row per
                                          item.                        */
  entry         := IDENT (':' pipe_stage)?
                 | STRING ':' pipe_stage
                                       /* Bareword shorthand: { name }
                                          desugars to { name: .name }.
                                          Wrap pipe/comma values in
                                          parens: {x: (.a | .b)}.     */
  pipe_stage    := or_expr (ASSIGN_OP pipe_stage)?
                 | or_expr 'as' '$' IDENT '|' pipeline
                                       /* let-binding: bind each
                                          value from `or_expr` to
                                          $IDENT and evaluate the
                                          downstream pipeline with
                                          that binding in scope.
                                          Right-associative so
                                          `.a[] as $x | .b | $x.c +
                                          ...` keeps $x bound across
                                          subsequent pipe stages.     */
  list_literal  := '[' pipeline? ']'        /* jq's array constructor */
  path          := '.'
                 | '.' field path_tail
                 | '.' '[' subscript ']' path_tail
  path_tail     := ('.' field '?'? | '[' subscript ']' '?'?)*
  field         := IDENT | STRING
  subscript     := /* empty -> stream */
                 | NUMBER
                 | STRING                /* exact subscript by string  */
                                         /* STRING starting with "~"
                                            inside [ ] is the regex
                                            subscript form            */
                 | pipeline              /* dynamic subscript          */
  call          := IDENT ('(' (pipe_stage (',' pipe_stage)*)? ')')?
                                         /* parens optional for 1-arg
                                            builtins — bare ``length``
                                            is equivalent to
                                            ``length(.)``               */
  literal       := NUMBER | STRING | 'true' | 'false' | 'null'

Pipelines iterate **streams**, not plain lists.  ``[]`` produces a
stream and stream-returning builtins do too; ``|`` then runs the next
stage once per item.  Plain lists (e.g. the value of ``.rules``) pass
through ``|`` whole — to fold a stream into a list for aggregators
like ``sort`` / ``unique``, wrap it: ``[.ltm.virtual[].name] | sort``.

Comma concatenates streams, matching jq's array-constructor idiom:
``[1, 2, .ltm.virtual[].name]`` evaluates each comma part against the
same input and collects the flattened stream.  Commas inside function
arguments and object entries remain structural separators; wrap a comma
stream in parentheses when it is a single argument or field value.

Assignment is a *trailing operator* on a pipe-stage, not a top-level
statement.  That makes ``.ltm.virtual[] | .destination |= ip(...)``
parse as ``.ltm.virtual[] | (.destination |= ip(...))`` — for each
streamed VS, set its destination to ``ip(...)`` of the current value.

PATH ACCESS

  .                       The current value (identity).
  .ltm.virtual            Field access — chained.
  .ltm.virtual.web_vs     TMSH partition shorthand: bare names resolve to
                          ``/Common/web_vs`` when unambiguous in the
                          target container.  Use the subscript form
                          ``.ltm.virtual["/Common/web_vs"]`` (see below)
                          for an explicit full-path lookup.
  .ltm.virtual["/Common/web_vs"]
                          Exact subscript by full-path.
  .ltm.virtual["~/vs_prod_"]
                          Regex subscript — matches every key whose
                          full-path (including the partition prefix)
                          contains the pattern.  Use the explicit
                          partition prefix in the pattern when you
                          want to anchor the match
                          (``"~^/Common/vs_prod_"``).
  .ltm.virtual[]          Stream every value in the container.
  .ltm.virtual[].pool     A path-ref to the default pool of each VS.
                          PathRefs act as strings AND as the referenced
                          object: ``.ltm.virtual[].pool.members[]`` walks
                          VS -> pool -> member transparently.

MODULES

  .ltm.<kind>             Local Traffic Manager kinds: ``virtual``,
                          ``pool``, ``node``, ``rule``, ``profile``,
                          ``monitor``, ``persistence``, ``snatpool``,
                          ``policy``, ``data-group``.  Each
                          ``ltm policy`` exposes ``.rules[]`` with
                          nested ``.conditions[]`` and
                          ``.actions[]`` sub-objects — chained
                          access like ``.ltm.policy[].rules[]
                          .actions[].pool`` walks into the target
                          pool via a PathRef.
  .net.<kind>             Network module: ``route``, ``vlan``,
                          ``self``, ``route-domain``, ``port-list``,
                          ``interface``, ``dns-resolver``,
                          ``tunnels-tunnel``, ``stp``.
                          PathRefs from ``net self.vlan`` and
                          ``net route-domain.vlans[]`` auto-deref
                          into the target ``net vlan`` so chained
                          access ``.net.self[].vlan.tag`` Just Works.

  .sys.<kind>             System module: ``dns``, ``ntp``, ``snmp``,
                          ``global-settings`` (singletons — one entry
                          each, streamed via ``.sys.dns[]``);
                          ``provision``, ``folder``, ``file-ssl-cert``,
                          ``file-ssl-key``, ``management-route``.
  .security.<kind>        Security module:
                          ``firewall-port-list``,
                          ``firewall-rule-list``,
                          ``firewall-config-entity-id``,
                          ``ip-intelligence-policy``,
                          ``protocol-inspection-compliance-map``,
                          ``protocol-inspection-compliance-objects``,
                          ``device-id-attribute``.
  .apm.<kind>             Access Policy Manager: ``access-policy``,
                          ``policy-item``, ``policy-agent``,
                          ``customization-source``,
                          ``oauth-db-instance``,
                          ``ssh-security-config``,
                          ``default-report`` (singleton).
                          PathRefs from ``access-policy.items[]``
                          and ``access-policy.start-item`` auto-deref
                          into ``policy-item`` so ``.apm.access-policy
                          [].start-item.caption`` Just Works.
  .cm.<kind>              Cluster Manager: ``cert``, ``key``,
                          ``device``, ``device-group``,
                          ``traffic-group``, ``trust-domain``.
                          PathRefs from ``device.cert`` /
                          ``device.key`` and ``trust-domain.ca-cert``
                          / ``ca-key`` / ``ca-devices[]`` /
                          ``trust-group`` auto-deref so
                          ``.cm.trust-domain[].trust-group.devices``
                          walks ``trust-domain → device-group →
                          devices`` in one chain.
  .gtm.<kind>             Global Traffic Manager (DNS):
                          ``datacenter``, ``server``, ``pool``,
                          ``wideip``, ``prober-pool``, ``region``,
                          ``rule``.  ``pool`` and ``wideip`` merge
                          all DNS record types (``a / aaaa / cname /
                          mx / srv / naptr``) into one container; the
                          DNS record type is exposed as
                          ``.record-type``.  PathRefs from
                          ``server.datacenter``,
                          ``wideip.pools[]`` / ``last-resort-pool``,
                          and ``prober-pool.members[]`` auto-deref
                          so chained queries like
                          ``.gtm.wideip[].pools[].ttl`` walk
                          ``wideip → pool → ttl`` in one step.
  .pem.<kind>             Policy Enforcement Manager: ``policy``,
                          ``irule``, ``listener``,
                          ``forwarding-endpoint``,
                          ``interception-endpoint``,
                          ``service-chain-endpoint``, ``profile``,
                          ``rating-group``, plus ``global-settings-*``,
                          ``protocol-*``, ``reporting-format-script``,
                          ``subscriber``, ``subscriber-attribute``.
  .auth.<kind>            Authentication: ``partition``, ``user``,
                          ``ldap``, ``radius``, ``radius-server``,
                          ``tacacs``, ``apm-auth``, ``cert-ldap``,
                          plus singletons (``password``,
                          ``password-policy``, ``source``,
                          ``remote-role``, ``remote-user``,
                          ``login-failures``).
  .vcmp.<kind>            vCMP: ``guest``, ``traffic-profile``,
                          ``virtual-disk``, ``virtual-disk-template``.
  .cli.<kind>             CLI: ``admin-partitions``,
                          ``alias-private``, ``alias-shared``,
                          ``global-settings``, ``preference``,
                          ``script``, ``transaction``, ``version``.
  .api-protection.<kind>  API Protection: ``profile-apiprotection``,
                          ``response``, ``server``.
  .asm.<kind>             Application Security Manager: ``policy``.
  .ilx.<kind>             iRulesLX: ``global-settings`` (singleton).
  .wom.<kind>             WAN Optimization Manager (legacy):
                          ``endpoint-discovery`` (singleton).
  .analytics.<kind>       Analytics: ``global-settings`` (singleton).

  Any TMSH stanza the parser sees but no typed projection covers
  still lands in ``cfg.generic_objects`` with full byte ranges
  and is reachable via ``rename_partition`` / ``--scf`` source-
  level operations, but it is not navigable from the DSL.

ASSIGNMENT

  path = expr             Set the target field to ``expr`` (evaluated
                          against the outer input).
  path |= expr            "Update": set the target to ``path | expr``;
                          ``.`` inside expr is the current value.
  path += expr            Numeric add, string concat, or list append.
  path -= expr            Numeric sub, or remove items from a list.

Assigning to an object's identity field (``.name`` / ``."full-path"``)
auto-routes through the same engine ``f5 rename`` uses, rewriting
every reference to the object as well as its header.  A line like
``renamed X -> Y (N occurrences)`` is printed to stderr so the
multi-stanza rewrite is visible.

Writing into an iRule body in v1 is restricted to reference slots
(``.refs.pools[]`` etc.).  General command-argument rewriting is
deferred to v2.

OPERATORS AND PRECEDENCE

  Highest -> lowest:
    1. unary  '-', 'not'
    2. '*' '/'
    3. '+' '-'
    4. '==' '!=' '<' '<=' '>' '>='
    5. 'and'
    6. 'or'
    7. '|' (pipe)
    8. '=' '|=' '+=' '-=' (assignment)
    9. ';' (statement separator)

JQ COMPATIBILITY

  Core idioms match jq exactly:
    * ``.X[]`` is a stream-generator; ``|`` iterates it.
    * ``[ ... ]`` collects a stream into an array.
    * Bare builtin names (``length``, ``sort``, ``unique``) operate
      on ``.`` — equivalent to ``length(.)`` etc.
    * Plain lists pass through ``|`` whole — to iterate a list, use
      ``.[]`` (or pass it to a list-aware builtin like ``map``).

  Differences:
    * Function arguments are comma-separated, not semicolon-separated.
      ``sub(.name, "foo", "bar")`` rather than ``sub("foo"; "bar")``.
    * Stream-comma ``,`` and statement-semicolon ``;`` both
      concatenate their LHS and RHS values into one output stream.
      ``,`` joins within a pipeline (``.a, .b | length``); ``;``
      joins separate top-level statements that share the same root
      and observe each other's mutations (``rename(o, n); .x = y``).
    * Identifiers may contain ``-`` so TMSH-spelt keys like
      ``data-group`` and ``source-address-translation`` lex as a
      single bareword token — ``.source-address-translation`` parses
      as one field access, no quotes needed.  Quoting is only useful
      when the key would otherwise tokenise into something else
      (e.g. ``."full-path"`` so the ``.`` after ``full`` is not read
      as a field-access separator).
    * Regex matching has a dedicated subscript form ``["~pattern"]``
      rather than the ``test`` builtin.
    * Object-literal ``{ ... }`` constructors are supported (jq style:
      ``{ name, destination: .dest }`` builds a dict per input,
      ``{name}`` shorthand promotes ``.name``); string-interpolation
      ``"\(.x)"`` is not in v1 — use ``--json`` to render whole
      objects as structured output.

See also:
  --help-builtins      every function this DSL exposes
  --help-examples      a cookbook of common one-liners

F5 QUERY DSL — BUILTIN FUNCTIONS (267 total)

Each entry is name (arity). Arity is shown as N, MIN..MAX, or MIN+ for
variadic. For full signatures, prose, and examples see
docs/references/f5_query/ or run `f5 query --help-builtins NAME`.

[bigip]
  profile_default            (2..3)
  profile_defaults           (1..2)

[forensic]
  file                       (1)
  files                      (0)
  glob                       (1)
  grep                       (1..2)

[graph]
  check_partition_visibility (0)
  referenced_by              (1)
  references_to              (1)
  refs                       (1)

[math]
  abs                        (1)
  acos                       (1)
  acosh                      (1)
  asin                       (1)
  asinh                      (1)
  atan                       (1)
  atan2                      (2)
  atanh                      (1)
  cbrt                       (1)
  ceil                       (1)
  copysign                   (2)
  cos                        (1)
  cosh                       (1)
  drem                       (2)
  exp                        (1)
  exp10                      (1)
  exp2                       (1)
  expm1                      (1)
  fabs                       (1)
  fdim                       (2)
  floor                      (1)
  fma                        (3)
  fmax                       (2)
  fmin                       (2)
  fmod                       (2)
  frexp                      (1)
  gamma                      (1)
  hypot                      (2)
  infinite                   (0)
  isinfinite                 (1)
  isnan                      (1)
  isnormal                   (1)
  j0                         (1)
  j1                         (1)
  jn                         (2)
  ldexp                      (2)
  lgamma                     (1)
  lgamma_r                   (1)
  log                        (1)
  log10                      (1)
  log1p                      (1)
  log2                       (1)
  logb                       (1)
  modf                       (1)
  nan                        (0)
  nearbyint                  (1)
  pow                        (2)
  pow10                      (1)
  remainder                  (2)
  rint                       (1)
  round                      (1)
  significand                (1)
  sin                        (1)
  sinh                       (1)
  sqrt                       (1)
  tan                        (1)
  tanh                       (1)
  tgamma                     (1)
  trunc                      (1)
  y0                         (1)
  y1                         (1)
  yn                         (2)

[net]
  broadcast_address          (1)
  can_see                    (2)
  collapse_cidrs             (1)
  dns                        (1)
  first_host                 (1)
  folder                     (1)
  host                       (1)
  host_count                 (1)
  http_body                  (1)
  http_body_json             (1)
  http_client_error          (1)
  http_header                (2)
  http_headers               (1)
  http_ok                    (1)
  http_redirect              (1)
  http_server_error          (1)
  http_status                (1)
  in_cidr                    (2)
  in_folder                  (2)
  in_partition               (2)
  ip                         (1..2)
  ip_range_contains          (2)
  ip_range_count             (1)
  ip_range_supernet          (1)
  ip_range_to_cidrs          (1)
  ip_translate               (3)
  is_documentation           (1)
  is_fqdn                    (1)
  is_ipv4                    (1)
  is_ipv6                    (1)
  is_link_local              (1)
  is_loopback                (1)
  is_multicast               (1)
  is_private                 (1)
  is_public                  (1)
  is_reserved                (1)
  is_unspecified             (1)
  is_wildcard_port           (1)
  last_host                  (1)
  net                        (1)
  network_address            (1)
  overlaps                   (2)
  ping                       (1)
  port                       (1)
  port_set_contains          (2)
  port_set_count             (1)
  port_set_overlaps          (2)
  portping                   (2..3)
  prefix_length              (1)
  rev_dns                    (1)
  route_domain               (1)
  socket_get                 (2..3)
  subnet_of                  (2)
  supernet_of                (1)
  tls_handshake              (2..3)
  traceroute                 (1)
  ucs_cert                   (1)
  url_get                    (1..2)
  url_head                   (1..2)
  url_options                (1..2)
  url_post                   (1..3)
  with_folder                (2)
  with_host                  (2)
  with_name                  (2)
  with_port                  (2)
  with_route_domain          (2)
  x509_eq                    (2)
  x509_from_config           (1)
  x509_parse                 (1)

[path]
  basename                   (1)
  partition                  (1)
  with_partition             (2)

[rename]
  rename                     (2)
  rename_folder              (2)
  rename_partition           (2)
  rename_prefix              (2)

[stream]
  IN                         (1+)
  INDEX                      (1..2)
  add                        (1)
  all                        (1)
  any                        (1)
  combinations               (0..1)
  count                      (1)
  debug                      (0..1)
  dupes                      (1)
  empty                      (0)
  error                      (0..1)
  first                      (1)
  flatten                    (0..1)
  group_by                   (1)
  halt                       (0)
  halt_error                 (0..1)
  inside                     (2)
  keys                       (1)
  keys_unsorted              (1)
  last                       (1)
  limit                      (2)
  map                        (1)
  map_values                 (1)
  max                        (1)
  max_by                     (1)
  max_min                    (0..1)
  min                        (1)
  min_by                     (1)
  min_max                    (0..1)
  not                        (0)
  nth                        (2)
  range                      (1..3)
  reverse                    (1)
  select                     (1)
  sort                       (1)
  sort_by                    (1)
  stderr                     (0)
  unique                     (1)
  unique_by                  (1)
  values                     (1)

[string]
  ascii                      (1)
  ascii_downcase             (1)
  ascii_upcase               (1)
  base64                     (1)
  base64d                    (1)
  capture                    (2..3)
  contains                   (2)
  csv                        (1+)
  downcase                   (1)
  endswith                   (2)
  explode                    (1)
  fromjson                   (1)
  gsub                       (3..4)
  html                       (1)
  implode                    (1)
  index                      (2)
  join                       (2)
  ltrimstr                   (2)
  match                      (2)
  rtrimstr                   (2)
  scan                       (2..3)
  sh                         (1)
  split                      (2)
  splits                     (2..3)
  startswith                 (2)
  sub                        (3..4)
  test                       (2..3)
  tojson                     (1)
  tonumber                   (1)
  tostring                   (1)
  tsv                        (1+)
  upcase                     (1)
  uri                        (1)
  utf8bytelength             (1)

[time]
  date                       (1)
  dateadd                    (2)
  datesub                    (2)
  fromdate                   (1)
  fromdateiso8601            (1)
  gmtime                     (1)
  localtime                  (1)
  mktime                     (1)
  now                        (0)
  strftime                   (2)
  strptime                   (2)
  todate                     (1)
  todateiso8601              (1)

[value]
  cert_load                  (1..2)
  csv_load                   (1..2)
  defined                    (1)
  del                        (1)
  delpaths                   (1)
  env                        (0)
  f5log_load                 (1)
  from_entries               (1)
  getpath                    (1)
  has                        (2)
  in                         (2)
  json_load                  (1)
  json_parse                 (1)
  jsonl_load                 (1)
  kind                       (1)
  leaf_paths                 (0)
  length                     (1)
  path                       (1)
  paths                      (0..1)
  pick                       (1+)
  profile_order              (1)
  recurse                    (0..2)
  recurse_down               (0)
  repeat                     (1)
  setpath                    (2)
  source_file                (1)
  str                        (1)
  to_entries                 (1)
  type                       (1)
  until                      (2)
  walk                       (1)
  with_entries               (1)

F5 QUERY DSL — COOKBOOK

  1. List every virtual server's default pool
     $ f5 query '.ltm.virtual[] | .pool' bigip.conf
     -- Streams every VS, projects its `pool` field as a path-ref.

  2. Names of VSes whose name starts with ``vs_prod_``
     $ f5 query '.ltm.virtual["~/vs_prod_"] | .name' bigip.conf
     -- Regex subscript filters keys; the dot-chain projects the name.

  3. VSes attached to a specific iRule
     $ f5 query '.ltm.virtual[] | select(contains(.rules, "/Common/log_rule")) | .name' bigip.conf
     -- `contains` works on both strings and lists.

  4. VSes whose pool member is in 10.0.0.0/8
     $ f5 query '.ltm.virtual[] | select(any(.pool.members[].address | in_cidr(., "10.0.0.0/8"))) | .name' bigip.conf
     -- PathRefs dereference transparently: `.pool.members[]` walks VS -> pool -> members in one chain.  The pipe iterates the stream of addresses, `in_cidr` runs per item producing booleans, `any` collapses.

  5. Readdress every VS into 192.168.9.0/24, keeping host bits
     $ f5 query '.ltm.virtual[] | .destination |= ip("192.168.9.0/24", .)' bigip.conf
     -- `|=` re-binds `.` to the current destination so the rebase helper sees the value it must transform.  `f5 query` shows a unified diff by default; pass --write to apply.

  6. Rename a pool everywhere it appears
     $ f5 query '.ltm.pool["/Common/old_pool"].name = "/Common/new_pool"' bigip.conf
     -- Identity-field writes auto-route through the same engine `f5 rename` uses, so every reference (VS, iRule, data-group) moves with the pool.

  7. Add ``/Common/log_rule`` to every VS that does not already have it
     $ f5 query '.ltm.virtual[] | select(not contains(.rules, "/Common/log_rule")) | .rules += "/Common/log_rule"' bigip.conf
     -- `not` is a prefix operator on the predicate; `+=` appends a scalar (or another list) to a list field.

  8. Find every iRule that mentions a removed pool
     $ f5 query '.ltm.rule[] | select(contains(.refs.pools, "/Common/old_pool")) | .name' bigip.conf
     -- The iRule sub-tree exposes parsed ref slots without sub-parsing every command.

  9. Strip the ``/Common/`` partition from every default pool
     $ f5 query '.ltm.virtual[].pool |= basename(.)' bigip.conf
     -- One-line projection-then-rewrite using `|=` plus the path helper.

  10. Rename a single object everywhere (the engine `f5 rename` uses)
     $ f5 query 'rename("/Common/old_pool", "/Common/new_pool")' bigip.conf
     -- Same token-bounded rewrite the `f5 rename` verb runs; tolerant of zero-match (returns 0) so the CLI can surface it as a warning rather than an error.

  11. Migrate every object from /Tenant_A/ into /Tenant_B/
     $ f5 query 'rename_partition("Tenant_A", "Tenant_B")' bigip.conf
     -- Token-bounded prefix rewrite — every object header and every reference (including destination addresses, pool members, and iRule body literals) moves together.  Renames the `auth partition Tenant_A` stanza too.  The visibility model refuses renames involving `/Common` (every tenant sees `/Common` one-way) so examples stay tenant→tenant.

  12. Move every pool out of /Common/ but leave other kinds alone
     $ f5 query '.ltm.pool["~^/Common/"] | .name |= with_partition(., "Tenant_A")' bigip.conf
     -- Identity-field `|=` routes through the rename engine; only the pools (and references *to* them) move, virtuals and iRules keep their partition.

  13. Set the route domain on every destination
     $ f5 query '.ltm.virtual[] | .destination |= with_route_domain(., 7)' bigip.conf
     -- Route domain is part of the routable identity; `with_route_domain` sets, replaces, or strips it while preserving partition prefix and port.

  14. Readdress with a route domain preserved through the rebase
     $ f5 query '.ltm.virtual[] | .destination |= ip("192.168.9.0/24", .)' bigip.conf
     -- `ip(net, src)` keeps the route domain and port from `src` and only rebases the address bits — `%5` survives the subnet move.

  15. Count VSes grouped by partition
     $ f5 query '[.ltm.virtual[]] | group_by(partition(."full-path")) | map({partition: (.[0]."full-path" | partition(.)), count: length})' bigip.conf
     -- `group_by(partition(."full-path"))` partitions the stream of VSes by their partition string; `map` then projects each group to `{partition, count}` using `length` to count and `.[0]."full-path" | partition(.)` to recover the partition label.  For the flat-list variant, ``[.ltm.virtual[]."full-path" | partition(.)] | unique`` yields the distinct partition names sorted.

  16. Park every dev VS on port 0 (a common maintenance trick)
     $ f5 query '.ltm.virtual[] | select(contains(.name, "_dev_")) | .destination |= sub(., ":[0-9]+$", ":0")' bigip.conf
     -- Arbitrary string rewriting via `sub` / `gsub` lands as a normal field edit.  Pair with `--in-place` to persist.

  17. Cross-reference GTM and LTM via named sources
     $ f5 query '$ltm.ltm.virtual[].name' bigip.conf
     -- Load several configs together (`f5 query ... gtm.conf ltm.conf`).  Every input is auto-bound under its filename stem so `$ltm` and `$gtm` work without ceremony; override with `--name N=PATH` when the stem would collide or read poorly.

  18. Edit one source via $name from a multi-config invocation
     $ f5 query '$ltm.ltm.virtual["/Common/vs_app"].destination = "/Common/192.168.1.1:443"' bigip.conf
     -- The assignment routes back to the source the named root came from, so only `ltm.conf` is modified even though `gtm.conf` was loaded alongside it.  Pair with `--in-place` to persist edits to each originating file.

  19. Walk references across files with --merge
     $ f5 query '.ltm.pool[] | referenced_by(.)' bigip.conf
     -- `--merge` treats every loaded source as one namespace, so `refs` / `referenced_by` cross files (a GTM pool pointing into an LTM virtual resolves transparently).  Refuses to merge when two sources define the same (kind, full-path) — namespace or redact the inputs first.

  20. Pool names attached to more than one VS
     $ f5 query '[.ltm.virtual[].pool] | dupes' bigip.conf
     -- ``dupes`` is the inverse of ``unique`` — returns the values that occur **more than once** in the list, sorted.  Useful for surfacing intentional sharing (or copy-paste bugs).

  21. VSes sorted ascending by attached pool member count
     $ f5 query '[.ltm.virtual[]] | sort_by(.pool.members | length) | map(.name)' bigip.conf
     -- ``sort_by(body)`` orders a list by the value of *body* evaluated against each item.  Pair with ``map`` to project the field you care about.

  22. Largest pool by member count, in one pass
     $ f5 query '[.ltm.pool[]] | max_by(.members | length)' bigip.conf
     -- ``max_by(body)`` picks the item whose *body* value is largest under jq's cross-type ordering.  Use ``min_by`` for the opposite extreme and ``min_max(body)`` to get both in one array.

  23. Lowercase every string field anywhere in a VS, recursively
     $ f5 query '.ltm.virtual.web_vs | walk(if type == "string" then ascii_downcase else . end)' bigip.conf
     -- ``walk(body)`` is jq's recursive transform — for every value in the tree (bottom-up), it rebinds ``.`` to that value and evaluates *body*.  Pair with ``type`` and ``ascii_downcase`` / ``ascii_upcase`` for case normalisation across an entire object.

  24. Index VSes by name for O(1) lookup in downstream pipelines
     $ f5 query '[.ltm.virtual[]] | INDEX(.name)' bigip.conf
     -- ``INDEX`` builds an object keyed by the result of *body* evaluated against each item — here the VS name.  jq's two-arg form ``INDEX(source; key)`` uses ``;`` as the argument separator; in this DSL function arguments are comma-separated, so collect the stream first and pipe.

More: see docs/kcs/features/kcs-feature-bigip-query.md
      and docs/references/f5_query/dsl.md