我知道我可以使用此配置捕获 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
偏移量和长度;将长度设置为零意味着捕获所有内容。您仍然必须为日志消息设置最大长度,但可以是任何长度(但请注意,这仅适用于调试 - 实际上,它将对性能产生影响)。