sniffing: full websocket frame recording

This commit is contained in:
ginuerzh
2024-10-19 20:40:07 +08:00
parent 6b932e35bf
commit 41f527aa46
4 changed files with 76 additions and 34 deletions
+19 -8
View File
@@ -673,12 +673,9 @@ func (h *httpHandler) sniffingWebsocketFrame(ctx context.Context, rw, cc io.Read
errc := make(chan error, 1) errc := make(chan error, 1)
sampleRate := h.md.sniffingWebsocketSampleRate sampleRate := h.md.sniffingWebsocketSampleRate
if sampleRate <= 0 { if sampleRate == 0 {
sampleRate = sniffing.DefaultSampleRate sampleRate = sniffing.DefaultSampleRate
} }
if sampleRate > sniffing.MaxSampleRate {
sampleRate = sniffing.MaxSampleRate
}
d := time.Duration(1 / sampleRate * 1e9) d := time.Duration(1 / sampleRate * 1e9)
go func() { go func() {
@@ -686,8 +683,15 @@ func (h *httpHandler) sniffingWebsocketFrame(ctx context.Context, rw, cc io.Read
*ro2 = *ro *ro2 = *ro
ro = ro2 ro = ro2
ticker := time.NewTicker(d) ticker := &time.Ticker{}
defer ticker.Stop() if d > 0 {
ticker = time.NewTicker(d)
defer ticker.Stop()
} else {
tc := make(chan time.Time)
close(tc)
ticker.C = tc
}
buf := &bytes.Buffer{} buf := &bytes.Buffer{}
for { for {
@@ -719,8 +723,15 @@ func (h *httpHandler) sniffingWebsocketFrame(ctx context.Context, rw, cc io.Read
*ro2 = *ro *ro2 = *ro
ro = ro2 ro = ro2
ticker := time.NewTicker(d) ticker := &time.Ticker{}
defer ticker.Stop() if d > 0 {
ticker = time.NewTicker(d)
defer ticker.Stop()
} else {
tc := make(chan time.Time)
close(tc)
ticker.C = tc
}
buf := &bytes.Buffer{} buf := &bytes.Buffer{}
for { for {
+19 -8
View File
@@ -413,12 +413,9 @@ func (ep *entrypoint) sniffingWebsocketFrame(ctx context.Context, rw, cc io.Read
errc := make(chan error, 1) errc := make(chan error, 1)
sampleRate := ep.websocketSampleRate sampleRate := ep.websocketSampleRate
if sampleRate <= 0 { if sampleRate == 0 {
sampleRate = sniffing.DefaultSampleRate sampleRate = sniffing.DefaultSampleRate
} }
if sampleRate > sniffing.MaxSampleRate {
sampleRate = sniffing.MaxSampleRate
}
d := time.Duration(1 / sampleRate * 1e9) d := time.Duration(1 / sampleRate * 1e9)
go func() { go func() {
@@ -426,8 +423,15 @@ func (ep *entrypoint) sniffingWebsocketFrame(ctx context.Context, rw, cc io.Read
*ro2 = *ro *ro2 = *ro
ro = ro2 ro = ro2
ticker := time.NewTicker(d) ticker := &time.Ticker{}
defer ticker.Stop() if d > 0 {
ticker = time.NewTicker(d)
defer ticker.Stop()
} else {
tc := make(chan time.Time)
close(tc)
ticker.C = tc
}
buf := &bytes.Buffer{} buf := &bytes.Buffer{}
for { for {
@@ -459,8 +463,15 @@ func (ep *entrypoint) sniffingWebsocketFrame(ctx context.Context, rw, cc io.Read
*ro2 = *ro *ro2 = *ro
ro = ro2 ro = ro2
ticker := time.NewTicker(d) ticker := &time.Ticker{}
defer ticker.Stop() if d > 0 {
ticker = time.NewTicker(d)
defer ticker.Stop()
} else {
tc := make(chan time.Time)
close(tc)
ticker.C = tc
}
buf := &bytes.Buffer{} buf := &bytes.Buffer{}
for { for {
+19 -8
View File
@@ -557,12 +557,9 @@ func (h *Sniffer) sniffingWebsocketFrame(ctx context.Context, rw, cc io.ReadWrit
errc := make(chan error, 1) errc := make(chan error, 1)
sampleRate := h.WebsocketSampleRate sampleRate := h.WebsocketSampleRate
if sampleRate <= 0 { if sampleRate == 0 {
sampleRate = sniffing.DefaultSampleRate sampleRate = sniffing.DefaultSampleRate
} }
if sampleRate > sniffing.MaxSampleRate {
sampleRate = sniffing.MaxSampleRate
}
d := time.Duration(1 / sampleRate * 1e9) d := time.Duration(1 / sampleRate * 1e9)
go func() { go func() {
@@ -570,8 +567,15 @@ func (h *Sniffer) sniffingWebsocketFrame(ctx context.Context, rw, cc io.ReadWrit
*ro2 = *ro *ro2 = *ro
ro = ro2 ro = ro2
ticker := time.NewTicker(d) ticker := &time.Ticker{}
defer ticker.Stop() if d > 0 {
ticker = time.NewTicker(d)
defer ticker.Stop()
} else {
tc := make(chan time.Time)
close(tc)
ticker.C = tc
}
buf := &bytes.Buffer{} buf := &bytes.Buffer{}
for { for {
@@ -603,8 +607,15 @@ func (h *Sniffer) sniffingWebsocketFrame(ctx context.Context, rw, cc io.ReadWrit
*ro2 = *ro *ro2 = *ro
ro = ro2 ro = ro2
ticker := time.NewTicker(d) ticker := &time.Ticker{}
defer ticker.Stop() if d > 0 {
ticker = time.NewTicker(d)
defer ticker.Stop()
} else {
tc := make(chan time.Time)
close(tc)
ticker.C = tc
}
buf := &bytes.Buffer{} buf := &bytes.Buffer{}
for { for {
+19 -10
View File
@@ -42,8 +42,6 @@ const (
MaxBodySize = 1024 * 1024 // 1MB MaxBodySize = 1024 * 1024 // 1MB
// DeafultSampleRate is the default websocket sample rate (samples per second). // DeafultSampleRate is the default websocket sample rate (samples per second).
DefaultSampleRate = 10.0 DefaultSampleRate = 10.0
// MaxSampleRate is the maximum websocket sample rate (samples per second).
MaxSampleRate = 100.0
) )
var ( var (
@@ -422,12 +420,9 @@ func (h *Sniffer) sniffingWebsocketFrame(ctx context.Context, rw, cc io.ReadWrit
errc := make(chan error, 1) errc := make(chan error, 1)
sampleRate := h.WebsocketSampleRate sampleRate := h.WebsocketSampleRate
if sampleRate <= 0 { if sampleRate == 0 {
sampleRate = DefaultSampleRate sampleRate = DefaultSampleRate
} }
if sampleRate > MaxSampleRate {
sampleRate = MaxSampleRate
}
d := time.Duration(1 / sampleRate * 1e9) d := time.Duration(1 / sampleRate * 1e9)
go func() { go func() {
@@ -435,8 +430,15 @@ func (h *Sniffer) sniffingWebsocketFrame(ctx context.Context, rw, cc io.ReadWrit
*ro2 = *ro *ro2 = *ro
ro = ro2 ro = ro2
ticker := time.NewTicker(d) ticker := &time.Ticker{}
defer ticker.Stop() if d > 0 {
ticker = time.NewTicker(d)
defer ticker.Stop()
} else {
tc := make(chan time.Time)
close(tc)
ticker.C = tc
}
buf := &bytes.Buffer{} buf := &bytes.Buffer{}
for { for {
@@ -468,8 +470,15 @@ func (h *Sniffer) sniffingWebsocketFrame(ctx context.Context, rw, cc io.ReadWrit
*ro2 = *ro *ro2 = *ro
ro = ro2 ro = ro2
ticker := time.NewTicker(d) ticker := &time.Ticker{}
defer ticker.Stop() if d > 0 {
ticker = time.NewTicker(d)
defer ticker.Stop()
} else {
tc := make(chan time.Time)
close(tc)
ticker.C = tc
}
buf := &bytes.Buffer{} buf := &bytes.Buffer{}
for { for {