在不知道数据包长度的情况下,我可以使用 haproxy 捕获完整的 TCP 数据包内容吗?

在不知道数据包长度的情况下,我可以使用 haproxy 捕获完整的 TCP 数据包内容吗?

我知道我可以使用此配置捕获 6 字节长度的数据包:

global
        log /dev/log    local0 debug
        log /dev/log    local1 notice
        chroot /var/lib/haproxy
        stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners
        stats timeout 30s
        user haproxy
        group haproxy
        daemon

defaults
        log     global
        mode    tcp
        timeout client 10m
        timeout connect 10s
        timeout server 10m

backend talk_0
        server stupid_0 example.com:80
frontend listen_0
        mode tcp
        option tcplog
        bind :12345
        default_backend talk_0
        tcp-request inspect-delay 5s
        tcp-request content capture req.payload(0,6) len 6
        log-format %[capture.req.hdr(0)]

但是,我不知道如何在不知道数据包长度的情况下捕获完整数据包。可以使用 haproxy 吗?如果可以,该怎么做?

答案1

我知道这已经是老生常谈了,但对于任何后来者来说:

req.payload(0,0)将捕获整个数据包。参数是payload偏移量和长度;将长度设置为零意味着捕获所有内容。您仍然必须为日志消息设置最大长度,但可以是任何长度(但请注意,这仅适用于调试 - 实际上,它将对性能产生影响)。

相关内容